Agentic MCP Itinerary
Агентный MCP-маршрут — PoC
MCP-сервер, который внутренне запускает LLM-агента (Gemini Flash + LangGraph) и координирует работу нескольких подчиненных MCP-серверов. Клиент (Claude Desktop, ChatGPT) видит чистый интерфейс с сохранением состояния между итерациями.
Концепция
Claude Desktop / ChatGPT
│
│ MCP (HTTP/SSE + OAuth 2.1)
▼
┌─────────────────────────────────────┐
│ travel-agent (este repo) │
│ FastMCP server + LangGraph agent │
│ │
│ ┌──────┐ ┌────────┐ ┌──────────┐│
│ │Vuelos│ │Hoteles │ │Actividad.││ ← MCP mocks STDIO
│ └──────┘ └────────┘ └──────────┘│
└─────────────────────────────────────┘Почему это отличается? Ни одна компания еще не предлагает «вертикального агента, упакованного как MCP-сервер». Этот PoC демонстрирует паттерн: клиент видит только 4-5 чистых инструментов, но за ними стоит агент с памятью, параллельным fan-out и сохранением состояния.
Related MCP server: ts-travel-mcp-server
Стек
Компонент | Технология |
Публичный MCP-сервер | FastMCP 3.1.1 ( |
Внутренний агент | LangGraph ( |
LLM-модель | Gemini Flash ( |
Авторизация | OAuth 2.1 Authorization Code Flow + JWT HS256 |
Чекпоинты |
|
Подчиненные MCP | Официальный MCP SDK ( |
Заглушки (Mocks) | 3 FastMCP-сервера STDIO (авиабилеты, отели, мероприятия) |
Развертывание | Railway (RAILPACK + pyproject.toml) |
Доступные инструменты (Публичный API)
Инструмент | Параметры | Описание |
|
| Создает полный черновик (авиабилеты + отель + мероприятия параллельно) |
|
| Уточняет существующий черновик |
|
| Получает текущее состояние |
| — | Выводит список всех активных маршрутов |
|
| Подтверждает и генерирует |
Развертывание на Railway
URL-адреса
Health: https://travel-agent-production-c1c4.up.railway.app/health
MCP endpoint: https://travel-agent-production-c1c4.up.railway.app/mcp
OAuth metadata: https://travel-agent-production-c1c4.up.railway.app/.well-known/oauth-authorization-server
Login form: https://travel-agent-production-c1c4.up.railway.app/oauth/authorize
Идентификаторы Railway
Проект:
e50da57f-ee0b-47a3-81a3-55556fe6de0dСервис:
09065312-ac84-4876-b9c9-dd5d6439f1d4Окружение:
09b3f0c9-e5ad-4f61-b351-275bbcffd5ad
Необходимые переменные окружения
Переменная | Описание |
| API-ключ Google Gemini |
| Имя пользователя для OAuth-логина |
| Пароль для OAuth-логина |
| Секрет для подписи JWT (генерируется через |
| Публичный URL сервера (для формирования redirect URI) |
Авторизация: OAuth 2.1 Authorization Code Flow
Полный поток
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 MCPРеализация
server/auth.py:SimpleOAuthProvider(расширяетOAuthProviderиз FastMCP)JWT HS256, срок действия 1 час
Коды авторизации: срок действия 5 минут
Поддержка PKCE (S256)
/healthостается публичным без авторизации
Настройка Claude Desktop
Отредактируйте ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"travel-agent": {
"type": "http",
"url": "https://travel-agent-production-c1c4.up.railway.app/mcp"
}
}
}Без
headers— Claude Desktop автоматически управляет потоком OAuth. При первом запуске он откроет браузер для входа.
Локальная разработка
Требования
pip install -e ".[dev]"Запуск сервера
PYTHONPATH=server MCP_USERNAME=alexguerra MCP_PASSWORD=tu_pass \
MCP_JWT_SECRET=dev_secret python3 server/main.pySmoke-тест
PYTHONPATH=server python3 tests/smoke_test.pyПроверка синтаксиса
PYTHONPATH=server python3 -m py_compile server/main.py server/auth.py server/agent.pyСтруктура проекта
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)История ключевых решений
Решение | Отклоненная альтернатива | Причина |
RAILPACK + pyproject.toml | nixpacks | nixpacks вызывает ошибки при установке pip в неизменяемом окружении |
OAuth 2.1 Authorization Code | Статический Bearer-токен | Claude Desktop поддерживает нативный OAuth; более готово к продакшену |
JWT HS256 в памяти | БД токенов | PoC — нет необходимости в сохранении состояния после перезагрузки |
FastMCP 3.1.1 | Ручная авторизация через Starlette | FastMCP интегрирует поток с транспортом MCP |
| SQLite/Redis | Достаточно для локального PoC; легко мигрировать на SqliteSaver |
Gemini Flash | Claude Haiku | У Codex был конфликт учетных данных с Anthropic |
Следующие шаги (после PoC)
[ ] Тестирование в Claude Desktop — проверка полного потока OAuth
[ ] Реальная персистентность —
SqliteSaverили Postgres для сохранения состояния между перезапусками[ ] Реальные подчиненные MCP — замена заглушек на реальные API (Amadeus, Booking и т.д.)
[ ] Многопользовательский режим — БД пользователей вместо переменных окружения
[ ] Ограничение частоты запросов (Rate limiting) — по JWT-токену
[ ] Телеметрия — LangSmith или аналоги для отслеживания работы внутреннего агента
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