Agentic MCP Itinerary
Agentic MCP Itinerary — PoC
Ein MCP-Server, der intern einen LLM-Agenten (Gemini Flash + LangGraph) ausführt und mehrere Downstream-MCP-Server orchestriert. Der Client (Claude Desktop, ChatGPT) sieht eine saubere Schnittstelle mit persistentem Zustand zwischen den Iterationen.
Konzept
Claude Desktop / ChatGPT
│
│ MCP (HTTP/SSE + OAuth 2.1)
▼
┌─────────────────────────────────────┐
│ travel-agent (este repo) │
│ FastMCP server + LangGraph agent │
│ │
│ ┌──────┐ ┌────────┐ ┌──────────┐│
│ │Vuelos│ │Hoteles │ │Actividad.││ ← MCP mocks STDIO
│ └──────┘ └────────┘ └──────────┘│
└─────────────────────────────────────┘Warum ist das anders? Kein Unternehmen bietet bisher einen "vertikalen Agenten, der als MCP-Server verpackt ist" an. Dieser PoC demonstriert das Muster: Der Client sieht nur 4-5 saubere Tools, aber dahinter arbeitet ein Agent mit Gedächtnis, parallelem Fan-out und persistentem Zustand.
Related MCP server: ts-travel-mcp-server
Stack
Komponente | Technologie |
Exponierter MCP-Server | FastMCP 3.1.1 ( |
Interner Agent | LangGraph ( |
LLM-Modell | Gemini Flash ( |
Auth | OAuth 2.1 Authorization Code Flow + JWT HS256 |
Checkpointing |
|
Downstream MCP | Offizielles MCP SDK ( |
Mocks | 3 FastMCP-Server STDIO (Flüge, Hotels, Aktivitäten) |
Deploy | Railway (RAILPACK + pyproject.toml) |
Exponierte Tools (Öffentliche API)
Tool | Parameter | Beschreibung |
|
| Erstellt einen vollständigen Entwurf (Flüge + Hotel + Aktivitäten parallel) |
|
| Verfeinert einen bestehenden Entwurf |
|
| Ruft den aktuellen Zustand ab |
| — | Listet alle aktiven Reisepläne auf |
|
| Bestätigt und generiert einen |
Deploy auf Railway
URLs
Health: https://travel-agent-production-c1c4.up.railway.app/health
MCP-Endpunkt: https://travel-agent-production-c1c4.up.railway.app/mcp
OAuth-Metadaten: https://travel-agent-production-c1c4.up.railway.app/.well-known/oauth-authorization-server
Login-Formular: https://travel-agent-production-c1c4.up.railway.app/oauth/authorize
Railway-IDs
Projekt:
e50da57f-ee0b-47a3-81a3-55556fe6de0dService:
09065312-ac84-4876-b9c9-dd5d6439f1d4Umgebung:
09b3f0c9-e5ad-4f61-b351-275bbcffd5ad
Erforderliche Umgebungsvariablen
Variable | Beschreibung |
| API-Key von Google Gemini |
| Benutzername für den OAuth-Login |
| Passwort für den OAuth-Login |
| Geheimnis zum Signieren von JWTs (generiert mit |
| Öffentliche URL des Servers (zum Erstellen von Redirect-URIs) |
Auth: OAuth 2.1 Authorization Code Flow
Vollständiger Ablauf
1. Claude Desktop detecta el MCP server
2. Descubre /.well-known/oauth-authorization-server
3. Redirige al usuario a /authorize
4. El servidor redirige a /oauth/authorize (form de login HTML)
5. Usuario introduce user/pass → POST /oauth/authorize
6. Servidor valida credenciales (MCP_USERNAME / MCP_PASSWORD)
7. Emite auth code → redirect a Claude Desktop
8. Claude Desktop intercambia code → JWT en /token
9. JWT usado como Bearer en todas las llamadas MCPImplementierung
server/auth.py:SimpleOAuthProvider(erweitertOAuthProvidervon FastMCP)JWT HS256, 1h Gültigkeit
Auth-Codes: 5 Min. Gültigkeit
PKCE (S256) unterstützt
/healthbleibt öffentlich ohne Auth
Claude Desktop konfigurieren
Bearbeite ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"travel-agent": {
"type": "http",
"url": "https://travel-agent-production-c1c4.up.railway.app/mcp"
}
}
}Ohne
headers— Claude Desktop verwaltet den OAuth-Flow automatisch. Beim ersten Mal wird der Browser für den Login geöffnet.
Lokale Entwicklung
Voraussetzungen
pip install -e ".[dev]"Server starten
PYTHONPATH=server MCP_USERNAME=alexguerra MCP_PASSWORD=tu_pass \
MCP_JWT_SECRET=dev_secret python3 server/main.pySmoke-Test
PYTHONPATH=server python3 tests/smoke_test.pySyntax prüfen
PYTHONPATH=server python3 -m py_compile server/main.py server/auth.py server/agent.pyProjektstruktur
agentic-mcp-itinerary/
├── server/
│ ├── main.py # FastMCP server (4 tools + OAuth + /health)
│ ├── auth.py # SimpleOAuthProvider (OAuth 2.1 + JWT)
│ ├── agent.py # LangGraph graph con fan-out paralelo
│ ├── state.py # ItineraryState TypedDict + checkpointer
│ └── tools/
│ ├── flights.py # Cliente MCP → mock vuelos
│ ├── hotels.py # Cliente MCP → mock hoteles
│ └── activities.py # Cliente MCP → mock actividades
├── mocks/
│ ├── flights_mcp.py # Mock server vuelos (FastMCP STDIO)
│ ├── hotels_mcp.py # Mock server hoteles (FastMCP STDIO)
│ └── activities_mcp.py # Mock server actividades (FastMCP STDIO)
├── tests/
│ └── smoke_test.py # Test end-to-end básico
├── docs/
│ └── OAUTH_PLAN.md # Spec del OAuth (referencia de diseño)
├── pyproject.toml # Deps para RAILPACK
├── railway.toml # Builder=RAILPACK, startCommand
└── claude_desktop_config.json # Config para Claude Desktop (sin Bearer manual)Historie der wichtigsten Entscheidungen
Entscheidung | Verworfenes Alternativkonzept | Grund |
RAILPACK + pyproject.toml | nixpacks | nixpacks schlägt bei pip innerhalb einer unveränderlichen Umgebung fehl |
OAuth 2.1 Authorization Code | Statischer Bearer-Token | Claude Desktop verwaltet OAuth nativ; produktionsnäher |
JWT HS256 im Speicher | Token-Datenbank | PoC — kein persistenter Zustand zwischen Neustarts |
FastMCP 3.1.1 | Manuelle Auth mit Starlette | FastMCP integriert den Flow mit dem MCP-Transport |
| SQLite/Redis | Ausreichend für lokalen PoC; einfache Migration zu SqliteSaver |
Gemini Flash | Claude Haiku | Codex hatte einen Konflikt bei den Anmeldedaten mit Anthropic |
Nächste Schritte (nach dem PoC)
[ ] Test in Claude Desktop — vollständigen OAuth-Flow verifizieren
[ ] Echte Persistenz —
SqliteSaveroder Postgres für den Zustand zwischen Neustarts[ ] Echte Downstream-MCPs — Mocks durch echte APIs ersetzen (Amadeus, Booking, etc.)
[ ] Multi-User — Benutzerdatenbank anstelle von Umgebungsvariablen
[ ] Rate Limiting — pro JWT-Token
[ ] Telemetrie — LangSmith oder Ähnliches zur Nachverfolgung des internen Agenten
This server cannot be deployed
Maintenance
Related MCP Connectors
Flight search MCP server providing search, pagination, and itinerary details for AI assistants.
Search and compare flight offers through a cache-aware Streamable HTTP MCP server for AI agents.
Skiplagged MCP Server for flight search, hotel booking, and travel planning
Corporate travel booking and expense management for TripGain, exposed as an MCP server.
Related MCP Servers
- FlicenseAqualityDmaintenanceAn AI-powered travel planner MCP server enabling flight and hotel search, weather forecasts, point-of-interest discovery, itinerary generation, and budget management.8-
- AlicenseAqualityDmaintenanceA full-stack travel booking MCP server that enables AI clients to search flights, make reservations, cancel bookings, and manage persistent state across sessions.98 npm5MIT
- AlicenseNot gradedqualityCmaintenanceCoordinates flights, hotels, events, weather, currency, and traffic data through a single MCP server, enabling comprehensive trip planning via natural language prompts.MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for multi-agent travel planning, orchestrating parallel expert calls to generate structured itineraries and persist them to SQLite.MIT