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

Model Context Protocol (MCP)

Доступно только на платных тарифах

JSON-RPC 2.0-эндпоинт, позволяющий подключить внешние ИИ-агенты к сервису через Model Context Protocol. Подходит для сторонних MCP-клиентов, плагинов редакторов кода, CLI и любых инструментов, поддерживающих tools/call.

POST
https://ai.wormsoft.ru/api/mcp

Интеграция агента

Для интеграции вашего агента скачайте и передайте ему эту документацию.

Эндпоинт

  • POST — JSON-RPC 2.0 диспетчер (единственный поддерживаемый метод).
  • GET и DELETE — вернут 405 Method Not Allowed.
  • Авторизация — тот же стек, что и у REST: API-ключ или Bearer-токен (JWT агента).

Привязка агента к аккаунту

  • Каждый MCP-запрос привязан к пользователю через Authorization. В зависимости от клиента это может быть:
  • API-ключ — Authorization: Bearer YOUR_API_KEY
  • JWT агента — Authorization: Bearer <agent-jwt>, если ваш агент аутентифицирован в нашей системе.
  • Токен определяет, под каким аккаунтом выполняются инструменты, и списываются с баланса. Не передавайте один и тот же ключ нескольким доверенным агентам.

Доступные инструменты

Список инструментов можно получить запросом tools/list. Ниже описаны три доступных инструмента.

web_search

Поиск в интернете по запросу.

{
  "query": "string (обязательно)",
  "max_results": "число 1-10 (необязательно)"
}

web_fetch

Загрузка содержимого веб-страницы по URL.

{
  "url": "string (обязательно)"
}

recognize_image_content

Распознавание текста на изображении и в PDF-документах (OCR). Модель возвращает данные строго по переданной JSON-Schema (tool-calling).

{
  "sources": [
    { "image": "data:image/png;base64,..." },
        { "pdfFile": "`base64 код PDF-файла` }
  ],
  "prompt": "string (необязательно)",
  "responseSchema": { "type": "object", ... },
  "model": "wormsoft/vision/medium"
}
  • sources — массив источников; в каждом элементе ровно один из image / pdfFile (base64).
  • prompt — уточняющая инструкция, добавляется в общий запрос к модели.
  • responseSchema — JSON Schema ответа (передается в tool-calling).
  • model — vision-модель провайдера с поддержкой tool-calling.
  • Ограничения: до 20 источников за запрос, размер одного источника до 25 МБ.

Пример подключения

Отправьте JSON-RPC-запрос методом tools/call:

curl -X POST https://ai.wormsoft.ru/api/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "web_search",
      "arguments": { "query": "NestJS", "max_results": 5 }
    }
  }'

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

Успешный вызов инструмента возвращает результат в result.content. Текст инструментов оформлен как JSON для удобства парсинга.

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      { "type": "text", "text": "{\n  \"model\": \"wormsoft/vision/medium\",\n   \"documents\": [...],\n   \"usage\": { \"credits\": 100 }\n}" }
    ]
  }
}

Протокол JSON-RPC 2.0

  • Одноточечный запрос → один объект ответа.
  • Пакет запросов (массив) → массив объектов ответов.
  • Уведомление (без id) → 202 с пустым телом.
  • Поддерживаемые методы: initialize, ping, tools/list, tools/call.

Тарификация

  • web_search — списание кредитов пропорционально количеству результатов.
  • web_fetch — фиксированные 2000 кредитов за запрос.
  • recognize_image_content — распознавание по токенам (как операция ocr): 1 кредит за 1K входных токенов и 4000 кредитов за 1K выходных.
  • Списание происходит только при успешном ответе инструмента.
  • Кредиты списываются с буста и лимита подписки; при нехватке остаток уходит в долг.

Ошибки

-32600
Invalid Request — повреждённый JSON-RPC-запрос.
-32601
Method not found — неизвестный метод.
-32602
Invalid params — неверные параметры инструмента.
-32000
Server error — unsupported метод (GET/DELETE → 405).
-32603
Internal error — ошибка на стороне сервера (например, превышен лимит).
Ошибки выполнения инструмента (например, неверный query или недоступный url, неверный sources или недостижимый image/pdfFile) возвращаются в result.isError: true с текстом сообщения.