Документация

Справочник API

Эндпойнты, параметры, режимы работы и обработка ошибок MCP-сервера

Обзор

Что такое MCP

MCP (Model Context Protocol) — открытый протокол для подключения AI-ассистентов к внешним источникам данных и инструментам. Он стандартизирует способ, которым большие языковые модели взаимодействуют с внешними сервисами.

Этот сервер реализует MCP с транспортом Streamable HTTP для поиска туров на eto.travel. Клиент (AI-ассистент или приложение) отправляет JSON-RPC запросы, а сервер возвращает структурированные результаты поиска туров.

API

Эндпойнты

POST /mcp

Основной эндпойнт для JSON-RPC запросов. Поддерживает методы: initialize, tools/list, tools/call.

POST /mcp
Content-Type: application/json
Accept: application/json, text/event-stream

GET /mcp

SSE поток для получения серверных уведомлений. Требует заголовок 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"
}
Инструмент

Tool: search_tours

Инструмент для поиска туров. Принимает человекочитаемые параметры и возвращает структурированные результаты.

Параметр Тип Обязательный Описание
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)

Пример запроса

tools/call
{
  "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
    }
  }
}

Пример ответа

response
{
  "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-режимом для отладки.

Важно про hot: Горящие туры (hot): в текущем интерфейсе eto.travel нет отдельного переключателя "горящие". В MCP режим hot рассчитывается как эвристика: приоритет ближайших дат вылета (или выбранного месяца) с последующей сортировкой по цене.

Live

Результаты в реальном времени из веб-поиска eto.travel. Данные актуальны и отражают текущие цены и наличие.

meta.source = "live-eto-web"
meta.live_available = true

Demo

Принудительный режим через ETO_MODE=demo. Возвращает фиксированные демо-данные без обращения к upstream.

meta.source = "demo"

Fallback

Резервный режим при сетевых ошибках 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)