Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A2A travel-agent reference implementations

This repository contains two independent A2A reference implementations for protocol interoperability, tool-calling, streaming, trace propagation, sideband metadata, and Workbench integration demos.

They are not production travel assistants. The model may generate plausible destinations, schedules, budgets, prices, or availability, but those values are simulated text. There is no booking system, payment flow, airline inventory, hotel inventory, live flight search, weather API, city database, or external travel-data connector in this v2 copy.

Projects

Project Framework Default port A2A transport Main capability
adk-travel-agent Google ADK + native to_a2a() 4201 A2A JSON-RPC v1 ADK-native agent, LiteLLM/NVIDIA model, MCP tools, ADK executor interception
langgraph-travel-agent LangGraph + official A2A Python SDK 4202 A2A JSON-RPC v1 and HTTP+JSON v1 ReAct graph, streamed updates, conditional trip-plan artifacts, MCP tools

Each directory is a standalone Python project. Use separate virtual environments when developing both at the same time; both intentionally keep the source package name agent_lab because they are independent distributions.

Protocol surface

Both projects expose:

GET  /.well-known/agent-card.json
POST /                         A2A JSON-RPC 1.0 interface

The LangGraph project additionally exposes:

POST /rest                     A2A HTTP+JSON 1.0 interface

The cards advertise:

  • streaming support;
  • no push-notification support;
  • no extended-card capability;
  • JSON-RPC protocol version 1.0;
  • HTTP+JSON protocol version 1.0 for LangGraph;
  • default text/plain, text/markdown, and application/json modes;
  • a non-required, provisional sideband extension: urn:agent-observability:sideband-events:v1.

Sideband data is only included when the client negotiates the advertised extension. It is fixture-authored observability metadata, not A2A core vocabulary and not a replacement for standard A2A task/status/artifact events.

Shared architecture

flowchart LR
    C[Workbench or A2A client] -->|Agent Card and JSON-RPC v1| A[ADK fixture]
    C -->|Agent Card, JSON-RPC v1, or HTTP+JSON v1| L[LangGraph fixture]
    A --> M[LiteLLM]
    L --> M
    M --> N[NVIDIA NIM endpoint]
    A --> T[Official MCP Time server]
    A --> F[Official MCP Filesystem server]
    L --> T
    L --> F
    A --> O[OTLP HTTP traces]
    L --> O
Loading

Tool-calling capabilities

The only tools enabled in these fixtures are intentionally narrow:

MCP server Allowed tools Scope
Time get_current_time, convert_time Current time and timezone conversion
Filesystem list_allowed_directories, list_directory, read_text_file, get_file_info Read-only access to fixtures/mcp-workspace

The filesystem server is the official MCP reference server launched locally through Node.js. The Python time server is launched over stdio. The agents filter the exposed tool names and do not expose write, delete, shell, booking, or network tools.

The model is instructed to use at most one MCP tool per request. A greeting should remain a greeting; an explicit travel-planning request can produce a simulated itinerary; time and filesystem prompts are routed to the relevant MCP capability.

Model and credentials

The copied environment template defaults to:

NVIDIA_MODEL=nvidia_nim/nvidia/llama-3.3-nemotron-super-49b-v1.5
NVIDIA_NIM_API_BASE=https://integrate.api.nvidia.com/v1/

Set NVIDIA_NIM_API_KEY in a local ignored .env file. Never commit the key, paste it into source, or copy the original lab's populated .env. The model is configurable through NVIDIA_MODEL, provided it uses LiteLLM's nvidia_nim/ prefix.

OpenTelemetry

Both projects use the standard OpenTelemetry Python SDK and OTLP/HTTP exporter. Set OTEL_EXPORTER_OTLP_TRACES_ENDPOINT to the collector endpoint, with the local default:

http://127.0.0.1:6006/v1/traces

The ASGI middleware accepts incoming W3C trace context. The fixtures also create explicit agent/tool/graph spans and attach service metadata. LangGraph enables the standard OpenInference LangChain instrumentation so model/tool spans can be correlated with the graph. If no collector is running, the agents can still run, but trace exports will fail or be dropped according to exporter behavior; OTEL is not required for the card endpoint.

Run the ADK project

Run these commands from the repository root (a2a-travel-agent-reference). If your shell is elsewhere, first change directory to your cloned repository.

cd adk-travel-agent
python3 -m venv .venv
.venv/bin/python -m pip install -e '.[dev]'
(cd mcp-runtime && npm ci)
cp .env.example .env
# Edit .env and set NVIDIA_NIM_API_KEY
.venv/bin/adk-a2a-agent

Card: http://127.0.0.1:4201/.well-known/agent-card.json

Probe it with the official A2A client:

.venv/bin/adk-a2a-probe --agent http://127.0.0.1:4201

Run the LangGraph project

Run these commands from the repository root (a2a-travel-agent-reference). If your shell is elsewhere, first change directory to your cloned repository.

cd langgraph-travel-agent
python3 -m venv .venv
.venv/bin/python -m pip install -e '.[dev]'
(cd mcp-runtime && npm ci)
cp .env.example .env
# Edit .env and set NVIDIA_NIM_API_KEY
.venv/bin/langgraph-a2a-agent

Cards and interfaces:

  • JSON representation
  • JSON-RPC v1 at http://127.0.0.1:4202/
  • HTTP+JSON v1 at http://127.0.0.1:4202/rest

Probe it:

.venv/bin/langgraph-a2a-probe --agent http://127.0.0.1:4202

Example prompts

Hi
Plan four days in Kyoto for two travelers. Include a realistic local budget.
What time is it now in Tokyo? Use the Time MCP tool.
Read welcome.txt from the isolated test workspace using the Filesystem MCP tool.

Verification and safety boundary

The tests are offline surface tests: intent classification, card fields, route creation, parser behavior, sideband opt-in behavior, and fixture paths. They do not prove NVIDIA availability, model quality, live travel-data accuracy, production concurrency, authentication, authorization, persistence, or booking correctness.

Treat every itinerary, price, flight, hotel, weather, and availability statement as untrusted test output. Do not use these agents to make reservations or financial decisions. Add real provider APIs, secrets management, authentication, rate limiting, validation, and a booking backend before considering a production design.

Generated environments (.venv, mcp-runtime/node_modules, caches, and .env) are ignored and intentionally not included in the copied projects.

About

Reference implementations of Google ADK and LangGraph travel agents using A2A v1, LiteLLM/NVIDIA NIM, MCP tool calling, streaming, sideband events, and OpenTelemetry.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Packages

Contributors

Languages