Эндпойнты, параметры, режимы работы и обработка ошибок MCP-сервера
MCP (Model Context Protocol) — открытый протокол для подключения AI-ассистентов к внешним источникам данных и инструментам. Он стандартизирует способ, которым большие языковые модели взаимодействуют с внешними сервисами.
Этот сервер реализует MCP с транспортом Streamable HTTP для поиска туров на eto.travel. Клиент (AI-ассистент или приложение) отправляет JSON-RPC запросы, а сервер возвращает структурированные результаты поиска туров.
POST /mcpОсновной эндпойнт для JSON-RPC запросов. Поддерживает методы: initialize, tools/list, tools/call.
POST /mcp
Content-Type: application/json
Accept: application/json, text/event-stream
GET /mcpSSE поток для получения серверных уведомлений. Требует заголовок Mcp-Session-Id, полученный после инициализации.
DELETE /mcpЗакрытие сессии. Передайте Mcp-Session-Id для завершения активной сессии и освобождения ресурсов.
GET /healthСтатус сервера. Возвращает информацию о текущем режиме работы, состоянии upstream, кэша и circuit breaker.
{
"status": "ok",
"mode": "live",
"upstream": "reachable",
"cache_size": 12,
"circuit_breaker": "closed"
}
Инструмент для поиска туров. Принимает человекочитаемые параметры и возвращает структурированные результаты.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| to_country | string | да | Название страны или 'all' |
| from_city | string | нет | Город вылета (Moscow) |
| month | string | нет | Месяц (YYYY-MM) |
| hot | boolean | нет | Горящие туры |
| date_from / date_to | string | нет | Даты (YYYY-MM-DD) |
| nights_min / nights_max | number | нет | Кол-во ночей |
| budget_min / budget_max | number | нет | Бюджет в RUB |
| stars_min | number | нет | Мин. звезд (1-5) |
| rating_min | number | нет | Мин. рейтинг (0-5) |
| meal | string | нет | Питание (BB, HB, FB, AI, UAI) |
| hotel_name | string | нет | Название отеля |
| regions | array | нет | Список регионов |
| operators | array | нет | Список операторов |
| charter_only | boolean | нет | Только чартеры |
| guarantee_only | boolean | нет | Гарантия мест |
| limit | number | нет | Макс. результатов (до 50) |
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "search_tours",
"arguments": {
"to_country": "Turkey",
"from_city": "Moscow",
"date_from": "2026-03-01",
"nights_min": 7,
"nights_max": 10,
"adults": 2,
"limit": 5
}
}
}
{
"jsonrpc": "2.0",
"id": 3,
"result": {
"content": [
{
"type": "text",
"text": "{\"meta\":{\"source\":\"live\",\"live_available\":true,\"cached\":false,\"total\":5,\"query\":{\"to_country\":\"Turkey\",\"from_city\":\"Moscow\",\"date_from\":\"2026-03-01\",\"nights_min\":7,\"nights_max\":10,\"adults\":2,\"limit\":5}},\"tours\":[{\"hotel\":\"Rixos Premium Belek\",\"stars\":5,\"country\":\"Turkey\",\"resort\":\"Belek\",\"meal\":\"UAI\",\"nights\":7,\"date\":\"2026-03-05\",\"price_rub\":185000,\"operator\":\"Anex Tour\",\"link\":\"https://eto.travel/search/?hotel=#tvtourid=\"}]}"
}
]
}
}
Сервер работает в live+fallback, с опциональным demo-режимом для отладки.
Результаты в реальном времени из веб-поиска eto.travel. Данные актуальны и отражают текущие цены и наличие.
meta.source = "live-eto-web"
meta.live_available = true
Принудительный режим через ETO_MODE=demo. Возвращает фиксированные демо-данные без обращения к upstream.
meta.source = "demo"
Резервный режим при сетевых ошибках upstream. В штатном прод-режиме ожидается live-ответ.
meta.source = "fallback-demo"
meta.live_available = false
meta.upstream_error = "ECONNREFUSED"
Типичные ошибки и способы их решения.
| Ошибка | Причина | Решение | |
|---|---|---|---|
| to_country | string | да | Название страны или 'all' |
| from_city | string | нет | Город вылета (Moscow) |
| month | string | нет | Месяц (YYYY-MM) |
| hot | boolean | нет | Горящие туры |
| date_from / date_to | string | нет | Даты (YYYY-MM-DD) |
| nights_min / nights_max | number | нет | Кол-во ночей |
| budget_min / budget_max | number | нет | Бюджет в RUB |
| stars_min | number | нет | Мин. звезд (1-5) |
| rating_min | number | нет | Мин. рейтинг (0-5) |
| meal | string | нет | Питание (BB, HB, FB, AI, UAI) |
| hotel_name | string | нет | Название отеля |
| regions | array | нет | Список регионов |
| operators | array | нет | Список операторов |
| charter_only | boolean | нет | Только чартеры |
| guarantee_only | boolean | нет | Гарантия мест |
| limit | number | нет | Макс. результатов (до 50) |