Сообщение MCP-серверу

POSThttps://api.souz.ai/mcp

Сервер Model Context Protocol, транспорт Streamable HTTP, версия протокола 2025-06-18. Методы: initialize, ping, tools/list, tools/call; уведомление (сообщение без id) — 202 без тела. Ответ всегда JSON, потока и сессий нет; GET /mcp — 405.

Каждый инструмент вызывает ту же ручку API, что описана здесь, с тем же заголовком Authorization: каталог, каналы и превью — без ключа, чат и задачи — API-ключ, настройки каналов аккаунта — ключ управления. Отказ ручки (нет ключа, не тот ключ, баланс) — result.isError: true с кодом ошибки API в structuredContent.error; ошибка протокола (нет метода, неверные аргументы) — error JSON-RPC.

Авторизация

BearerAuth

API-ключ из кабинета souz.ai — запускает модели. Ключ управления здесь не подходит: 403 forbidden с detail[].reason: requires_api_key.

ManagementKey

Ключ управления из кабинета souz.ai (выдают владелец и администратор аккаунта — себе или участнику). Даёт ровно то, что его держатель видит и может в кабинете: баланс, историю операций и запросов, расходы, обычные ключи, настройки аккаунта — с той же ролью, лимитами и цифрами. Модели не запускает. Обычный API-ключ здесь не подходит: 403 forbidden с detail[].reason: requires_management_key.

Заголовки

MCP-Protocol-Versionstring

Версия протокола, согласованная в initialize: 2025-06-18, 2025-03-26 или 2024-11-05; без заголовка — 2025-03-26. Другая — 400.

Тело запроса обязательно

application/json
Схема MCPRequest
Других полей нет.
idодно из

Номер запроса; ответ вернёт его же. Без id — уведомление.

Вариант 1string
Вариант 2integer
jsonrpcstringобязательно
Значение: "2.0"
methodstringобязательно
Пример: "tools/call"
paramsobject

Параметры метода; у tools/call — name инструмента и arguments по его inputSchema.

Ответы

200Ответ JSON-RPC — `result` или `error`.
application/json
Схема MCPResponse
errorobject

Ошибка протокола JSON-RPC.

codeintegerобязательно

-32700 — не JSON, -32600 — не запрос JSON-RPC, -32601 — нет метода, -32602 — неверные параметры или неизвестный инструмент, -32603 — сбой сервера.

dataobject

Подробности у неверных аргументов инструмента (-32602).

errorsarray[object]
Элемент массиваobject
allowedarray[string]
pathstringобязательно

JSON Pointer внутри arguments.

Пример: "/model"
reasonDetailReasonобязательно
toolstring
messagestringобязательно
idодно изобязательно

id запроса; null — запрос не удалось разобрать.

Вариант 1string
Вариант 2integer
Вариант 3null
jsonrpcstringобязательно
Значение: "2.0"
resultobject

Итог метода. У tools/call — content (текст с таблицей), structuredContent (те же данные объектом) и isError.

202Уведомление или ответ клиента принят; тела нет.
400Запрос отклонён; `error.detail[]` называет поля и допустимые значения.
application/json
403Нельзя: у ключа не тот вид (модели запускает API-ключ, аккаунт — ключ управления), у роли

Нельзя: у ключа не тот вид (модели запускает API-ключ, аккаунт — ключ управления), у роли участника нет права или подпись ссылки на файл не сходится. detail[].reason говорит, что именно: requires_api_key, requires_management_key, cabinet_only (только в кабинете), insufficient_role (в allowed — роли, которым можно), not_key_author (секрет ключа открывает только тот, кто его создал).

application/json
413Тело или файл больше предела (`invalid_input`, `detail[].reason: too_large`) или — только у `POST /v1/files` — загрузки аккаунта заняли квоту (`storage_limit_exceeded`).
application/json
429Слишком часто — повторите через `Retry-After` секунд. Запуск моделей, задачи и файлы результатов частотой не ограничены (их ограничивают баланс и лимиты трат); здесь 429 — на поток запросов с ключом, который сервер не знает, с одного адреса, и на потоки сверх 1000 одновременных на аккаунт (события задачи, чат с `stream: true`). Пределы — раздел «Лимиты» руководства.
application/json
503Плановые работы (`maintenance`): новые запросы приостановлены до `error.ends_at`,

Плановые работы (maintenance): новые запросы приостановлены до error.ends_at, причина — в error.reason. Повторите после этого времени (или через Retry-After секунд, чтобы узнать, не закончились ли работы раньше); принятые задачи доделываются, переключаться никуда не нужно. Состояние — GET /v1/status.

application/json