Подключение
Реестр — это обычный MCP-сервер по HTTP. Отдельный клиент ставить не нужно, авторизации сейчас нет. Ниже — что он отдаёт, в каком виде и как ведёт себя, когда магазин недоступен.
Подключение
Транспорт — Streamable HTTP, режим без состояния: сессия не привязана к процессу, заголовок Mcp-Session-Id не используется. Достаточно указать адрес в конфигурации клиента.
{
"mcpServers": {
"e-suppy": { "url": "https://mcp.e-suppy.com/mcp" }
}
}Проверить доступность можно рукопожатием, ничего не устанавливая — ответ придёт либо чистым JSON, либо кадром SSE, в зависимости от заголовка Accept.
curl -sX POST https://mcp.e-suppy.com/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Инструменты
Наружу отдаются мета-инструменты, а не проброс ручек магазинов: у каждой площадки свои имена и форматы, и несколько источников по два десятка инструментов переполнят контекст модели. Аргумент server во всех вызовах необязателен — без него берётся магазин по умолчанию из list_servers.
Формат ответа
Успешный ответ всегда содержит ok: true. Цена — число в рублях, а не строка. У каждого товара есть as_of: цена — это состояние на момент наблюдения, и агент должен видеть её возраст. Текстовые поля магазина обрезаются до 300 символов: их пишет третья сторона, и в контекст модели они попадают как данные, а не как инструкция.
{
"ok": true,
"server": "vkusvill",
"query": "сметана 15%",
"count": 2,
"products": [
{
"product_id": "14526",
"title": "Сметана 15%, 250 г",
"price": 98.0,
"currency": "RUB",
"quantity": { "value": 0.25, "unit": "кг" },
"url": "https://vkusvill.ru/goods/smetana-15-14526/",
"as_of": "2026-08-31T09:15:41+00:00"
}
]
}Ошибки
Ошибка возвращается данными внутри обычного ответа, а не кодом HTTP и не исключением протокола. Так агент отличает «магазин недоступен» от «товара нет» и не подставляет вместо цены выдумку. Признак retryable появляется только там, где повтор осмыслен.
{
"ok": false,
"error": "источник недоступен: vkusvill: таймаут",
"server": "vkusvill",
"retryable": true
}Лимиты и поведение
Ограничения на число запросов сейчас нет. Значения ниже — то, как роутер ведёт себя при обращении к магазинам; они заданы в коде и меняются вместе с ним.