Skip to main content
Glama
ssm82

syntx-ai-mcp

by ssm82

syntx-ai-mcp

MCP-сервер и TypeScript SDK для AI-платформы syntx.ai

Превратите любой MCP-совместимый ассистент (Claude Desktop, Cursor, VS Code, Cline) в полнофункционального клиента syntx.ai: чаты, генерация изображений, каталог моделей, управление аккаунтом — всё через единый протокол Model Context Protocol.

MCP Node TypeScript License: MIT


Содержание


Related MCP server: axiomatic-mcp

Обзор

syntx-ai-mcp — это сервер Model Context Protocol, который открывает возможности платформы syntx.ai AI-ассистентам по единому стандарту. Вместо интеграции проприетарного API в каждый инструмент, вы один раз запускаете MCP-сервер — и любой MCP-клиент получает доступ к:

  • 💬 Чатам и моделям — создание сессий, отправка промптов, ожидание ответа (включая one-shot ask).

  • 🎨 Генерации изображений — Sora, Flux и другие design-сервисы.

  • 📚 Каталогу — AI-сервисы, модели с ограничениями, тарифные планы.

  • 👤 Аккаунту — профиль, баланс токенов, подписка.

  • 📁 Файлам — список и удаление загруженных файлов.

Пакет распространяется как два-в-одном: готовый MCP-сервер (syntx-mcp CLI) и полноценный типизированный SDK (SyntxClient) для прямого программного использования.

Возможности

Группа

Что входит

🛠️ 28 инструментов

Идентификация, runtime-настройки, чаты, генерация (изображения + транскрипция), каталог, аккаунт, файлы, проекты (папки)

📄 6 ресурсов + 1 шаблон

syntx://models, syntx://plans, syntx://user/me, …

💡 4 промпт-шаблона

generate-landing, summarize-chat, translate, code-review

🔌 2 транспорта

stdio (по умолчанию) и stateless HTTP/SSE

🔐 Runtime-настройки

Задавайте токен, AI-провайдера и модель по умолчанию без перезапуска (set-token, set-default-ai, set-default-model)

🧱 Типобезопасность

Полная типизация TypeScript, JSON Schema для каждого инструмента

🌐 Dual-формат

Сборка CJS + ESM + .d.ts

Требования

  • Node.js ≥ 18 (использует встроенный fetch и WebSocket)

  • Учётная запись и bearer-токен syntx.ai

  • MCP-совместимый клиент (Claude Desktop, Cursor, VS Code Insiders, Cline, …)


Быстрый старт

# 1. Установить пакет
npm install syntx-ai-mcp

# 2. Собрать (если клонировали репозиторий)
npm install && npm run build

# 3. Запустить MCP-сервер (stdio — стандарт для локальных клиентов)
SYNTX_TOKEN="ваш-токен" npx syntx-ai-mcp

Готово — теперь подключите сервер к вашему ассистенту (см. ниже).

Токен можно не задавать заранее. Запустите сервер без SYNTX_TOKEN и вызовите инструмент set-token прямо из чата — токен применится в рантайме.


Подключение к клиентам

Claude Desktop

Отредактируйте конфиг Claude Desktop:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "syntx-ai": {
      "command": "npx",
      "args": ["-y", "syntx-ai-mcp"],
      "env": {
        "SYNTX_TOKEN": "ВАШ_ТОКЕН"
      }
    }
  }
}

Если пакет собран локально — используйте прямой путь:

{
  "mcpServers": {
    "syntx-ai": {
      "command": "node",
      "args": ["/путь/к/syntx-ai-mcp/dist/bin/cli.js"],
      "env": { "SYNTX_TOKEN": "ВАШ_ТОКЕН" }
    }
  }
}

После сохранения перезапустите Claude Desktop. В чате появятся инструменты ask, list-models и др. — Claude будет вызывать их автоматически.

Cursor

Файл .cursor/mcp.json в корне проекта (или глобально):

{
  "mcpServers": {
    "syntx-ai": {
      "command": "npx",
      "args": ["-y", "syntx-ai-mcp"],
      "env": { "SYNTX_TOKEN": "ВАШ_ТОКЕН" }
    }
  }
}

В Cursor: Settings → Cursor Settings → Features → MCP → Add new MCP Server.

VS Code (Copilot / Insiders)

Файл .vscode/mcp.json в workspace:

{
  "servers": {
    "syntx-ai": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "syntx-ai-mcp"],
      "env": { "SYNTX_TOKEN": "ВАШ_ТОКЕН" }
    }
  }
}

Откройте Command Palette → MCP: List Servers, чтобы убедиться, что syntx-ai активен.

Cline

Файл cline_mcp_settings.json (через интерфейс Cline → MCP Servers):

{
  "mcpServers": {
    "syntx-ai": {
      "command": "npx",
      "args": ["-y", "syntx-ai-mcp"],
      "env": { "SYNTX_TOKEN": "ВАШ_ТОКЕН" },
      "disabled": false,
      "autoApprove": []
    }
  }
}

Continue / Windsurf

Используйте стандартный stdio-блок command/args/env (формат идентичен Claude Desktop). Для Windsurf: Settings → MCP Servers → Add Server.

HTTP / SSE (любой клиент)

Запустите сервер в HTTP-режиме и подключите клиента по URL:

SYNTX_TOKEN="ВАШ_ТОКЕН" npx syntx-ai-mcp --transport http --http-port 8080
# MCP endpoint: http://127.0.0.1:8080/mcp
# Health check:  http://127.0.0.1:8080/health
{
  "mcpServers": {
    "syntx-ai": { "url": "http://127.0.0.1:8080/mcp" }
  }
}

Переменные окружения

Переменная

Тип

По умолчанию

Описание

SYNTX_TOKEN

string

Bearer-токен syntx.ai. Обязателен для большинства операций (можно задать через set-token).

SYNTX_BASE_URL

string

https://api.syntx.ai

Базовый URL API.

SYNTX_TIMEOUT

number

30000

Таймаут HTTP-запроса, мс.

SYNTX_LANG

string

en

Локаль API (например, язык ответов тарифных планов). Не влияет на язык генерации моделей.

SYNTX_DEFAULT_AI

string

chatgpt

AI-сервис по умолчанию для send-message/ask.

SYNTX_DEFAULT_MODEL

string

Модель по умолчанию.

SYNTX_POLL_INTERVAL

number

5000

Интервал polling ответа, мс.

SYNTX_POLL_TIMEOUT

number

600000

Максимальное ожидание ответа, мс.

SYNTX_STREAM_MODE

auto | stream | poll | off

auto

Стратегия стриминга для ask / stream-message. Влияет только на ask (см. ниже).

SYNTX_WS_URL

string

wss://api.syntx.ai/api/v1

Базовый URL WSS-эндпоинта.

MCP_TRANSPORT

stdio | http

stdio

Транспорт MCP-сервера.

MCP_HTTP_PORT

number

3000

Порт HTTP-транспорта.

MCP_HTTP_HOSTNAME

string

127.0.0.1

Адрес привязки HTTP-транспорта (loopback по умолчанию).

MCP_HTTP_TOKEN

string

Bearer-токен для самого MCP-сервера (HTTP-транспорт). Если задан — запросы без совпадающего заголовка Authorization: Bearer отклоняются (401, timing-safe сравнение). Если не задан — loopback-only + предупреждение.

Альтернативно — флаги CLI: --token, --base-url, --transport, --http-port. Флаги приоритетнее env.


Транспорты

syntx-ai-mcp поддерживает два транспорта Model Context Protocol:

stdio (по умолчанию)

Клиент запускает сервер как дочерний процесс и общается через стандартные потоки. Рекомендуется для локальных ассистентов (Claude Desktop, Cursor, VS Code, Cline). Минимальные задержки, нулевая сетевая конфигурация.

npx syntx-ai-mcp                          # stdio
npx syntx-ai-mcp --transport stdio        # явно

HTTP + SSE

Stateless Streamable HTTP: на каждый запрос создаётся свежий transport + server (канонический паттерн MCP SDK). Подходит для удалённых, облачных и веб-клиентов. Поддерживает health-check /health.

npx syntx-ai-mcp --transport http --http-port 8080
# MCP endpoint:  http://127.0.0.1:8080/mcp
# Health check:  http://127.0.0.1:8080/health

Безопасность HTTP-транспорта:

  • Host/Origin allow-list включён всегда (защита от DNS-rebinding): запросы с Host/Origin, не входящим в {127.0.0.1, localhost, ::1, <bind-host>}, отклоняются (403).

  • Bearer-аутентификация (MCP_HTTP_TOKEN): если задан, каждый запрос /mcp должен нести заголовок Authorization: Bearer <MCP_HTTP_TOKEN> (timing-safe сравнение, схема регистронезависима). Иначе — 401.

  • OPTIONS (CORS preflight) отвечает 200 без проверки токена; wildcard Access-Control-Allow-Origin не выдаётся.

  • Если MCP_HTTP_TOKEN не задан — сервер работает только на loopback и печатает предупреждение. Не выставляйте HTTP-транспорт в публичные сети без MCP_HTTP_TOKEN и файрвола.

MCP_HTTP_TOKEN="your-mcp-secret" npx syntx-ai-mcp --transport http --http-port 8080
{
  "mcpServers": {
    "syntx-ai": {
      "url": "http://127.0.0.1:8080/mcp",
      "headers": { "Authorization": "Bearer your-mcp-secret" }
    }
  }
}

Инструменты (Tools)

Все 25 инструментов принимают JSON-аргументы и возвращают структурированный результат. Текстовые ответы — это JSON-снимки данных API; ошибки возвращаются с isError: true (без обрыва канала).

Идентификация и токен

Инструмент

Описание

Параметры

whoami

Идентификационная проверка: { authenticated, user }. Никогда не возвращает ошибку при отсутствии/невалидности (401/403) токена — сообщает authenticated: false. Реальные сбои (сеть, 5xx) всё же дают isError.

get-profile

Полный профиль пользователя; при отсутствии токена возвращает понятную MCP-ошибку.

set-token

Установить/заменить токен в рантайме (только в памяти — не переживает рестарт).

token*

validate-token

Проверить валидность текущего токена.

start-telegram-auth

Стартует сессию авторизации через Telegram (POST /api/v1/auth/startauth) и возвращает UUID + t.me deep-link. Пользователь должен открыть ссылку и нажать Start в боте.

bot_username?

poll-telegram-auth

Поллит GET /api/v1/auth/token/{uuid}. Когда complete: true, устанавливает JWT как активный bearer-токен.

uuid*, install_token?

login-telegram

One-shot flow: создать сессию → вернуть ссылку → поллить до получения JWT → установить токен. Блокирует до timeout_ms.

bot_username?, poll_interval_ms?, timeout_ms?

send-email-otp

Запрашивает OTP на e-mail через POST /api/v1/auth/email/send-otp. Токен не устанавливает.

email*, ref_uuid?, utm?

verify-email-otp

Проверяет OTP и устанавливает JWT (POST /api/v1/auth/email/verify-otp). По умолчанию install_token: true.

email*, otp_code*, ref_uuid?, utm?, install_token?

whoami и get-profile различаются семантикой ошибок, а не составом полей (оба берут данные из одного user.me()). Используйте whoami для проверки статуса аутентификации без риска получить ошибку, get-profile — когда нужен полный профиль и готов обработать ошибку при отсутствии токена.

Настройки (runtime)

Инструмент

Описание

Параметры

get-settings

Текущая эффективная конфигурация сервера

set-default-model

Установить модель по умолчанию (или очистить через null); опционально меняет AI-провайдера

model*, ai_name?

set-default-ai

Переключить AI-провайдера по умолчанию

ai_name*

* — обязательный параметр.

Каталог AI

Инструмент

Описание

Параметры

list-ai-services

Доступные AI-сервисы (ChatGPT, Midjourney, Sora…)

list-models

Модели с ограничениями и поддерживаемыми форматами

scope?, ai_name?, active_only?, search?

get-model-info

Детальная информация о модели (параметры, лимиты)

ai_name, model_type, batch_size?, quality?, video_duration?, chars_count?, mode?

Параметры list-models (все опциональны, комбинируются через AND):

  • scope — категория возможностей: text | image | video | audio | upscale. Категория выводится из ai_name провайдера; если провайдер неизвестен, модель попадает только в вызовы без фильтра scope.

  • ai_name — точное имя провайдера syntx.ai, например "chatgpt", "claude", "midjourney".

  • active_onlytrue (по умолчанию) скрывает неактивные модели. Передайте false, чтобы получить весь каталог.

  • search — регистронезависимая подстрока по value/label (например, "gpt-5").

Пример:

{
  "name": "list-models",
  "arguments": {
    "scope": "text",
    "ai_name": "chatgpt",
    "search": "gpt-5"
  }
}

Чаты и сообщения

Инструмент

Описание

Параметры

list-chats

Список чатов с фильтрами

scope?, search?, direction?, page_size?

create-chat

Создать чат (обязателен title)

title*, scope?, model?

get-messages

История сообщений чата

chat_id*, page_size?, direction?

send-message

Отправить промпт с опциональными вложениями, вернуть ack (ответ — асинхронно)

chat_id, prompt, ai_name?, model_type?, attachments?

wait-for-response

Дождаться завершения генерации и вернуть текст + media-объекты

chat_id*, timeout?, poll_interval?

ask

One-shot: создать чат → отправить → дождаться ответа

prompt*, title?, ai_name?, model_type?, scope?, timeout?, poll_interval?, mode?

stream-message 🌊

One-shot со стримингом ответа по WebSocket + notifications/progress

prompt*, scope?, model?, ai_name?, model_type?, timeout?, mode?

generate-title

Авто-заголовок для чата

chat_uuid*

ask — главный инструмент для stateless Q&A. Возвращает chat_uuid для последующих уточнений через send-message + wait-for-response.

🌊 stream-message открывает WSS-сессию и доставляет токены по мере поступления. Прогресс отправляется через MCP-нотификации (notifications/progress + notifications/message); финальный результат содержит полный текст и метаданные (chat_uuid, elapsed_ms, chunks).

ask vs stream-message vs низкоуровневый flow:

Подход

Инструменты

Когда использовать

Быстрый вопрос (блокирующий)

ask

Обычный пользовательский запрос; поддерживает mode: auto|stream|poll|off

Стриминг ответа

stream-message

Длинные ответы, UX с прогрессом; режимы auto|stream|poll (off не поддерживается)

Полный контроль

create-chatsend-messagewait-for-responseget-messages

Многошаговый диалог, кастомная логика

Стратегией управляет SYNTX_STREAM_MODE. Важно: значение off влияет только на ask (fire-and-forget: создать чат, отправить промпт, сразу вернуть chat_uuid). У stream-message нет режима off.

Как wait-for-response определяет «готово»: инструмент резолвится, когда все объекты message_object[i].completed === true. Это включает ответы, состоящие только из image / video / audio / file — раньше такие генерации зависали до таймаута, потому что проверка требовала непустой object_text на объекте [0]. URL медиа-объектов возвращаются в блоке media (JSON) между текстом и метаданными; metadata с сервера пробрасывается как есть (без парсинга). Серверного cancel-эндпоинта нет — клиентский AbortSignal останавливает только локальный цикл опроса.

Пример вызова ask:

{
  "name": "ask",
  "arguments": {
    "prompt": "Объясни квантовую запутанность простыми словами",
    "ai_name": "chatgpt",
    "model_type": "gpt-5-mini-2025-08-07"
  }
}

Идентификаторы моделей зависят от провайдера и могут меняться. Получите актуальный список через инструмент list-models (например, list-models с scope: "text" и ai_name: "chatgpt").

Пример установки модели по умолчанию:

{ "name": "set-default-model", "arguments": { "model": "gpt-5-mini-2025-08-07", "ai_name": "chatgpt" } }

После этого любой вызов ask / send-message без явного model_type будет использовать установленную модель. Проверить состояние:

{ "name": "get-settings", "arguments": {} }

Генерация изображений

Инструмент

Описание

Параметры

generate-image

Генерация изображений через design-сервис

chat_uuid, prompt, ai_name?, n?, model_type?, resolution?, quality?, image_url?

{
  "name": "generate-image",
  "arguments": {
    "chat_uuid": "131c1065-644a-492f-a1ff-cdb6ba7d8560",
    "prompt": "Космический корабль в стиле киберпанк, неоновые огни",
    "resolution": "720x1280",
    "quality": "medium",
    "n": 1
  }
}

Сначала создайте чат через create-chat, чтобы получить chat_uuid. Результат — JSON-метаданные генерации, которые возвращает design-сервис syntx.ai (состав полей зависит от сервиса; обычно содержит ссылки на сгенерированные изображения и метаданные запроса).

Транскрипция аудио

Инструмент

Описание

Параметры

transcribe

Транскрипция аудио в текст (POST /api/v1/audio/transcribe). Возвращает { text }.

path или content_base64*, filename?, mime_type?

Один файл передаётся либо как path (путь на ФС сервера; только stdio-транспорт), либо как content_base64 с обязательным filename.

⚠️ Безопасность: при HTTP-транспорте path отклоняется (произвольное чтение файлов сервера удалённым клиентом) — используйте content_base64. Лимит 50 МБ (на декодированный файл), форматы: mp3, wav, mpeg.

{
  "name": "transcribe",
  "arguments": {
    "content_base64": "data:audio/mpeg;base64,//uQxAAAAA...",
    "filename": "meeting.mp3"
  }
}

Аккаунт пользователя

Инструмент

Описание

get-profile

Профиль (имя, email, аватар, auth-сервисы)

get-balance

Баланс токенов

get-subscription

Активная подписка и реферальная информация

Файлы

Инструмент

Описание

Параметры

list-uploaded-files

Список загруженных файлов

scope?, page?, page_size?

upload-files

Загрузить до 10 файлов (≤ 100 МБ каждый)

files*, check_duplicates?

delete-file

Удалить файл

file_id*

Каждый элемент массива files в upload-files принимает одно из двух:

  • { path } — путь к файлу на машине, где запущен MCP-сервер (stdio/HTTP-сервер должен иметь доступ к ФС).

  • { content_base64, filename } — base64-payload (можно с префиксом data:<mime>;base64,). filename обязателен, mime_type опционален и подбирается по расширению.

Пример (смешанные источники):

{
  "name": "upload-files",
  "arguments": {
    "files": [
      { "path": "C:\\Users\\me\\photo.jpg" },
      {
        "content_base64": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=",
        "filename": "pixel.png"
      }
    ],
    "check_duplicates": true
  }
}

Чтобы прикрепить загруженный файл к сообщению, передайте поля из ответа upload-files в attachments:

{
  "name": "send-message",
  "arguments": {
    "chat_id": "<chat-uuid>",
    "prompt": "Опиши изображение",
    "model_type": "<model-id>",
    "attachments": [
      {
        "url": "https://r2.syntx.ai/.../pixel.png",
        "filename": "pixel.png",
        "mime_type": "image/png"
      }
    ]
  }
}

send-message преобразует MIME-тип в категорию syntx.ai (image, video, audio или file). Категорию можно задать явно полем type.

Проекты (папки)

Инструмент

Описание

Параметры

create-project

Создать проект (a.k.a. папку) на syntx.ai; опционально сразу добавить чаты.

title*, scope? (text по умолчанию), color? (#9C9C9C по умолчанию), chat_uuids?

add-chats-to-project

Добавить один или несколько существующих чатов в проект (POST /api/v1/folders/{folder_uuid}/add).

folder_uuid, chat_uuids (≥ 1, uniqueItems)

delete-project

Удалить проект без возможности восстановления (DELETE /api/v1/folders/{folder_uuid}/delete).

folder_uuid*

Серверная терминология — folders. В продукте это «проекты», в SDK — syntx.folders.create / syntx.folders.addChats.

Пример:

{
  "name": "create-project",
  "arguments": {
    "title": "Refactor plan",
    "scope": "text",
    "color": "#FFAA00",
    "chat_uuids": ["47c2c3c5-f987-451e-9459-1ed4aaf45395"]
  }
}
{
  "name": "add-chats-to-project",
  "arguments": {
    "folder_uuid": "475d21a2-221e-4f4e-83bf-16066ba33c4f",
    "chat_uuids": ["1cc76ce8-444b-4358-9ff5-dc77c01fb4fb"]
  }
}

Ресурсы (Resources)

Ресурсы — это данные, которые ассистент может читать напрямую по URI (возвращаются как JSON).

URI

Имя

Описание

syntx://models

AI Models Catalog

Полный каталог моделей с ограничениями

syntx://ai-services

AI Services

Доступные AI-сервисы

syntx://plans

Subscription Plans

Тарифные планы

syntx://settings

Application Settings

OAuth-провайдеры, страна, IP + локальная конфигурация MCP-сервера (defaultAI, defaultModel, transport)

syntx://user/me

Current User Profile

Профиль текущего пользователя

syntx://user/balance

Token Balance

Баланс токенов

Шаблон ресурса:

Шаблон URI

Описание

syntx://chat/{uuid}/messages

История сообщений конкретного чата по UUID


Промпты (Prompts)

Готовые шаблоны диалога — ассистент доотправляет их через ask/send-message.

Промпт

Параметры

Назначение

generate-landing

topic*, style?

Сгенерировать одностраничный HTML-лендинг

summarize-chat

chat_uuid*

Краткое изложение истории чата

translate

text, target_lang

Перевод текста

code-review

code*

Ревью кода с исправленным вариантом


Безопасность

  • Токен syntx.ai (SYNTX_TOKEN / set-token / Telegram-flow) хранится только в памяти — не пишется на диск, не переживает рестарт процесса, не логируется сервером. При set-token токен проходит через JSON-RPC-канал (по сети при HTTP-транспорте) — учитывайте логи вашего MCP-клиента.

  • HTTP-транспорт по умолчанию слушает только 127.0.0.1 и не имеет аутентификации, пока не задан MCP_HTTP_TOKEN. Защита от DNS-rebinding обеспечивается Host/Origin allow-list (всегда включён). Для запуска вне loopback обязательно задайте MCP_HTTP_TOKEN и оградите порт файрволом/реверс-прокси.

  • Stateless HTTP = single-user loopback. set-token меняет токен для всего процесса, поэтому HTTP-транспорт не предназначен для многопользовательского использования — один клиент установит токен, общий для всех.

  • transcribe с path разрешён только при stdio-транспорте; при HTTP отклоняется (защита от произвольного чтения файлов сервера — LFI).

  • Не передавайте MCP_HTTP_TOKEN в query-параметрах URL — только в заголовке Authorization.


Troubleshooting

Симптом

Вероятная причина

Решение

MCP-клиент не видит инструменты

Неверный путь к команде / Node.js < 18

Проверьте путь, версию Node, логи клиента

Authentication required or invalid

Не задан/истёк токен

set-token или SYNTX_TOKEN; проверьте через whoami/validate-token

HTTP /mcp возвращает 401

Отсутствует/неверен Authorization: Bearer

Задайте MCP_HTTP_TOKEN и передавайте заголовок клиентом

HTTP /mcp возвращает 403

Host/Origin не в allow-list

Используйте 127.0.0.1/localhost либо MCP_HTTP_HOSTNAME, совпадающий с Host

Стриминг не приходит

SYNTX_STREAM_MODE=off или клиент не поддерживает progress

Проверьте get-settings; off отключает ожидание только у ask

Запрос долго висит

Малый SYNTX_POLL_TIMEOUT / большой SYNTX_TIMEOUT

Настройте таймауты под задачу

Модель не найдена

Неверный model_type

Вызовите list-models, затем set-default-model

transcribe отклоняет path

Используется HTTP-транспорт

Передайте аудио через content_base64

login-telegram висит до таймаута

Пользователь не открыл deep-link или не нажал Start в боте

Откройте deep_link из результата start-telegram-auth в Telegram, нажмите Start, затем повторите poll-telegram-auth

poll-telegram-auth возвращает valid: false

UUID устарел / не существует

Создайте новую сессию через start-telegram-auth

verify-email-otp возвращает token_installed: false

Сервер не вернул поле token в ожидаемом месте

Загляните в result ответа и при необходимости вызовите set-token вручную

send-email-otp падает с 4xx

Невалидный e-mail, превышен rate-limit или e-mail уже использован

Проверьте адрес, подождите и повторите; для Telegram/Google используйте соответствующие flow


Авторизация через Telegram (device flow)

syntx.ai поддерживает вход через Telegram-бот @syntxaibot без ручного копирования токена. Flow построен на device authorization: сервер выдаёт UUID-сессию, пользователь подтверждает её в Telegram, а клиент поллит состояние.

1. start-telegram-auth            → { uuid, deep_link }
2. (пользователь открывает deep_link и нажимает Start в @syntxaibot)
3. poll-telegram-auth (или login-telegram) → JWT устанавливается в рантайме

Через MCP-инструменты

Одношаговый flow (для headless-драйверов, которые могут передать ссылку пользователю):

{
  "name": "login-telegram",
  "arguments": { "timeout_ms": 300000 }
}

Возвращает { ok: true, deep_link, uuid, token_installed: true }. Блокирует до 5 минут (настраивается через timeout_ms).

Двухшаговый flow (когда нужно отделить показ ссылки от ожидания):

// 1. Создать сессию и получить ссылку
{ "name": "start-telegram-auth", "arguments": { "bot_username": "syntxaibot" } }
// → { uuid: "a302de6c-…", deep_link: "https://telegram.me/syntxaibot?start=auth_a302de6c-…" }

// 2. (пользователь нажал Start в боте)

// 3. Забрать токен
{ "name": "poll-telegram-auth", "arguments": { "uuid": "a302de6c-…" } }
// → { valid: true, complete: true, token: "eyJhbGc…", token_installed: true }

Через SDK

import { SyntxClient } from 'syntx-ai-mcp';

const syntx = new SyntxClient();

// Одношаговый flow
const result = await syntx.auth.loginWithTelegram({
  botUsername: 'syntxaibot',
  pollIntervalMs: 3000,
  timeoutMs: 5 * 60_000,
  onLink: (deepLink, uuid) => console.log('Откройте:', deepLink),
});
console.log('JWT:', result.token); // уже установлен как Bearer

// Двухшаговый flow
const { uuid } = await syntx.auth.startAuth();
const link = syntx.auth.getTelegramAuthLink(uuid);
// …пользователь нажимает Start в боте…
const status = await syntx.auth.pollAuthToken(uuid);
if (status.complete && status.token) {
  syntx.auth.setToken(status.token);
}

Где живёт токен: как и set-token, Telegram-flow хранит JWT только в памяти процесса. После рестарта MCP-сервера нужно снова пройти авторизацию. Не передавайте токены в query-параметрах — только в Authorization: Bearer.


Авторизация через Email (OTP)

syntx.ai поддерживает вход по одноразовому коду, отправляемому на e-mail. Flow двухшаговый — сервер не хранит сессию, доступную для поллинга, поэтому в отличие от Telegram здесь нет «one-shot» MCP-инструмента: пользователь должен физически прочитать код из письма.

1. send-email-otp         → { ok: true, hint: "проверьте почту" }
2. (пользователь читает OTP из письма)
3. verify-email-otp       → { token_installed: true, … }

Через MCP-инструменты

// 1. Запросить код
{
  "name": "send-email-otp",
  "arguments": { "email": "user@example.com", "utm": "" }
}
// → { "ok": true, "email": "user@example.com", "hint": "Ask the user for the OTP …" }

// 2. (пользователь вводит код из письма)

// 3. Подтвердить код и установить токен
{
  "name": "verify-email-otp",
  "arguments": {
    "email": "user@example.com",
    "otp_code": "866735",
    "install_token": true
  }
}
// → { "ok": true, "token_installed": true, "result": { "token": "eyJ…" } }

ref_uuid / utm нужно передавать в оба вызова с одинаковыми значениями — они форвардятся в JSON-тело запроса как есть.

Через SDK

import { SyntxClient } from 'syntx-ai-mcp';

const syntx = new SyntxClient();

// Двухшаговый flow — если у вас есть способ спросить код у пользователя
await syntx.auth.sendEmailOtp('user@example.com', { utm: '' });
const code = await askUserForOtp();        // любой UI / prompt / RPC
const result = await syntx.auth.verifyEmailOtp('user@example.com', code, { utm: '' });
// result.token уже установлен как Bearer-токен

// One-shot flow — когда есть готовый колбэк
const { token } = await syntx.auth.loginWithEmail('user@example.com', {
  utm: '',
  otpProvider: async () => askUserForOtp(),
});

Где живёт токен: то же правило, что и для Telegram-flow — JWT хранится только в памяти процесса. После рестарта MCP-сервера нужно снова пройти авторизацию.


Программное использование (SDK)

Помимо MCP-сервера, пакет экспортирует типизированный SDK для прямого использования:

import { SyntxClient } from 'syntx-ai-mcp';

const syntx = new SyntxClient({ token: 'your-token' });

// Профиль и баланс
const me = await syntx.user.me();
const { balance } = await syntx.user.getBalance();

// Список моделей
const models = await syntx.ai.listModels();

// Создать чат и отправить сообщение
const chat = await syntx.chats.create({ scope: 'text', title: 'Demo' });
await syntx.chats.sendMessage(chat.uuid, 'chatgpt', [
  { object_type: 'text', object_url: null, object_text: 'Привет!', model_type: 'your-model-id' },
]);

// Дождаться ответа
const { text } = await syntx.chats.waitForResponse(chat.uuid);
console.log(text);

Программный запуск MCP-сервера

import { loadConfig, createMcpServer, runTransport } from 'syntx-ai-mcp';

const config = loadConfig();          // из env
const factory = () => createMcpServer(config).server;
await runTransport(factory, 'stdio', 3000);

Экспортируемые сущности SDK

Группа

Методы

syntx.auth

setToken, getToken, isAuthenticated, validateToken, logout, sendEmailOtp, verifyEmailOtp, loginWithEmail

syntx.ai

listServices, listModels, getModelInfo

syntx.user

me, getBalance, getSubscription, getSettings

syntx.chats

list, create, getMessages, sendMessage, waitForResponse, pollForResponse, streamResponse, generateTitle, delete, pin, moveToFolder, uploadFiles, getUploadedFiles, deleteFile, transcribe

syntx.design

generate

syntx.audio

listVoiceExamples

syntx.plans

list, getPromoBanners

syntx.folders / syntx.settings

список папок по scope, create({title, scope?, color?, chat_uuids?}), addChats(folderUuid, chatUuids), delete(folderUuid), настройки приложения

Стриминг ответов

ChatsResource.streamResponse(prompt, options) создаёт чат, отправляет промпт и опрашивает REST API до появления ответа. Возвращает { text, message, elapsedMs, chatUuid }. Колбэк onChunk(chunk, accumulated) вызывается с полным текстом ответа.

const result = await syntx.chats.streamResponse('Расскажи о Kepler-186f', {
  timeout: 60_000,
  aiName: 'gemini',
  model: 'gemini-3.5-flash',
  onSession: (uuid) => console.log('chat:', uuid),
  onChunk: (chunk, accumulated) => process.stdout.write(chunk),
});
console.log(`\n✓ ${result.text.length} chars in ${result.elapsedMs}ms (chat: ${result.chatUuid})`);

Как это работает: API syntx.ai генерирует ответ асинхронно и возвращает его целиком по готовности (инкрементального token-by-token стриминга нет). streamResponse предоставляет стриминг-совместимый интерфейс поверх REST-поллинга: onSession — при создании чата, onChunk — при получении ответа, chatUuid — для последующих сообщений.

Внутри MCP-сервера инструмент stream-message оборачивает тот же метод, отправляя notifications/progress и notifications/message (если клиент передал progressToken в _meta).

Стратегия управляется через SYNTX_STREAM_MODE:

Значение

Поведение

auto (по умолчанию)

REST-поллинг через streamResponse

stream

То же, что auto (WSS-эндпоинт в API отсутствует)

poll

REST create + sendMessage + waitForResponse

off

Fire-and-forget: ask создаёт чат, отправляет промпт и сразу возвращает chat_uuid

Готовый пример — в examples/stream-example.ts.

Полный справочник типов — в src/types.ts. Внутреннее устройство слоёв — в docs/ARCHITECTURE.md.


Примеры

В каталоге examples/ лежат готовые сценарии:

Файл

Описание

chat-example.ts

Прямая работа с чатами через SDK

mcp-client-example.ts

Подключение к серверу как MCP-клиент и вызов ask

stream-example.ts

One-shot WSS-стриминг ответа в консоль

claude-desktop-config.json

Готовый конфиг для Claude Desktop

Запуск примеров:

npm run build
npx tsx examples/mcp-client-example.ts
SYNTX_TOKEN=... npx tsx examples/stream-example.ts "Расскажи анекдот"

Разработка

git clone <repo>
cd syntx-ai-mcp
npm install
npm run build        # CJS + ESM + dts (tsup)
npm run typecheck    # tsc --noEmit
npm run dev          # сборка в watch-режиме

Добавление нового инструмента:

  1. Создайте файл в src/mcp/tools/ с объектом SyntxTool.

  2. Включите его в src/mcp/tools/index.ts (allTools).

  3. Готово — сервер и tools/list подхватят автоматически.

Аналогично для ресурсов (src/mcp/resources/) и промптов (src/mcp/prompts/). Детально — в docs/ARCHITECTURE.md.

Agent skills (каталог skills/). В корне репозитория также живут Anthropic-совместимые skills для AI-агентов, использующих MCP: каждый skill — это папка skills/<name>/SKILL.md (≤ 500 строк) с YAML-frontmatter (name, description, license, compatibility, metadata), необязательными references/ и assets/. Skill публикуется в git вместе с кодом; на машине пользователя Kilo подхватывает его после копирования в ~/.config/kilo/skills/. Версия metadata.version синхронизируется с package.json:version.


Как это работает

MCP-клиент (Claude/Cursor/…)
        │  stdio или HTTP+SSE
        ▼
TRANSPORT   src/transport/   ── stdio.ts · http.ts
        │  JSON-RPC
        ▼
MCP SERVER  src/mcp/         ── server.ts · registry.ts · tools/ · resources/ · prompts/
        │  вызовы SDK
        ▼
SDK         src/             ── SyntxClient · resources/ · auth · websocket
        │  fetch / WebSocket
        ▼
syntx.ai API   https://api.syntx.ai

Зависимости направлены строго вниз: транспорт зависит от MCP-ядра, ядро — от SDK, SDK — только от платформы. Ошибки API маппятся в isError-ответы, поэтому JSON-RPC-канал никогда не обрывается.


Дорожная карта

  • Транскрипция аудио как инструмент (transcribe)

  • Загрузка файлов (upload-files) с поддержкой бинарных данных в MCP

    • Стриминг ответов через WebSocket (см. stream-message, chats.streamResponse, SYNTX_STREAM_MODE)

    • CI: GitHub Actions (npm run typecheck && npm run build на Node 18/20/22)

    • Аутентифицированный HTTP-транспорт (MCP_HTTP_TOKEN + Host/Origin allow-list)

    • OAuth-flow для получения токена из CLI

    • Юнит-тесты (Vitest)


Сопутствующие документы

  • CHANGELOG.md — история релизов.

  • CONTRIBUTING.md — правила участия, стиль кода, советы по PR.

  • docs/ARCHITECTURE.md — послойное описание архитектуры.

  • skills/ — Anthropic-совместимые agent skills. В skills/syntx-ai-mcp-usage/SKILL.md — операционные знания для агентов, вызывающих syntx-ai-mcp_* инструменты (lifecycle чатов, выбор модели, recovery после timeout, security caveats).


Лицензия

MIT

Available Tools

28 tools
add-chats-to-projectA

Add one or more existing chats to an existing project. Mirrors syntx.folders.addChats. Sends a bare JSON array of chat UUIDs to POST /api/v1/folders/{folder_uuid}/add.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_uuidsYesChat UUIDs to add. Must contain at least one entry.
folder_uuidYesProject UUID (required).

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, but it only provides the request format (bare JSON array to POST) without detailing side effects, idempotency, permission requirements, or what happens to existing project-chat associations. The 'Mirrors` reference is opaque without SDK knowledge.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the primary purpose. The 'Mirrors` line adds an implementation reference that is not essential but does not significantly bloat the text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description should at least hint at return values, error behavior, or idempotency. It only provides the request detail, leaving the agent uncertain about the operation's effects and outcome.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already fully documents both parameters with descriptions and constraints (100% coverage), so the description adds no additional parameter-level meaning. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action (add) with the resource (chats to a project) and qualifies both as existing, distinguishing it from creation tools. The explicit HTTP endpoint reinforces the operation's scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool ('Add existing chats to an existing project'), and there are no competing sibling tools for this specific action. However, it does not explicitly mention when not to use it or name alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

askA

One-shot helper: create a chat, send a prompt, wait for the completed assistant reply, and return it. Ideal for stateless Q&A. The created chat UUID is included in the response for follow-ups. Set mode: "stream" to opt into real-time token delivery (default behaviour is controlled by SYNTX_STREAM_MODE).

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoOverride the streaming strategy. "stream" uses WSS; "poll" uses REST polling; "auto" tries WSS then falls back to polling; "off" disables waiting (the tool returns after sending).
scopeNotext
titleNoChat title. Defaults to a truncated prompt.
promptYesThe prompt text to send.
ai_nameNo
timeoutNo
model_typeNo
poll_intervalNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full responsibility for disclosing behavior. It explains the tool creates a chat (side effect), sends a prompt, waits for the response, and returns it including the chat UUID for follow-ups. It also explains streaming behavior and the influence of SYNTX_STREAM_MODE, adding context beyond a simple invocation. Missing details like authentication or rate limits, but the core flow is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences long, each contributing needed information: what the tool does, when to use it, what the response includes, and a key parameter note. It is front-loaded with the core function and avoids unnecessary detail, though slightly longer than strictly necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 8 parameters and no output schema or annotations. The description covers the overall workflow and one parameter's mode, but does not elaborate on the meanings of several parameters (e.g., `timeout`, `poll_interval`, `model_type`, `ai_name`). It also omits error handling or return structure beyond mentioning the chat UUID. This is adequate for a simple mental model but incomplete for full parameter-level understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 38%, so the description must compensate. It adds context for the `mode` parameter ('stream' opts into real-time delivery) and implies the `prompt` parameter, but leaves parameters like `timeout`, `poll_interval`, `ai_name`, `model_type`, and `scope` without any explanatory semantics. The description does not fill the gaps left by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'One-shot helper: create a chat, send a prompt, wait for the completed assistant reply, and return it.' This distinguishes it from sibling tools like create-chat, send-message, and wait-for-response by combining these steps into a single call. The 'one-shot helper' label reinforces its unified purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Ideal for stateless Q&A' provides clear contextual guidance on when to use the tool. It also mentions the ability to opt into streaming via `mode: "stream"`, offering a specific alternative within the same tool. However, it does not explicitly mention when not to use it or compare it to the step-by-step sibling tools, slightly limiting exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-chatA

Create a new syntx.ai chat session and return its UUID. A title is required by the API.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoInitial model for the chat.
scopeNoChat scope. Defaults to "text".text
titleYesChat title (required).

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden of behavioral transparency. It states the creation action and return value, but does not disclose authentication requirements, idempotency, or any side effects beyond creating a chat. This is a minimal disclosure for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that immediately states the core action and return value, with no redundant words. It is front-loaded and concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple creation tool with three parameters and no output schema, the description covers the essential action and return value. However, it lacks context about authentication prerequisites or how this chat session will be used, which could be important for an agent to correctly invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all parameters. The description adds one semantic detail: 'A title is required by the API', which reinforces the required flag but provides no additional meaning for model or scope.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'create' and the resource 'syntx.ai chat session', and specifies that it returns the UUID. This distinguishes it from sibling tools like delete-chat or list-chats, which have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a usage constraint ('A title is required') but does not explicitly state when to use this tool versus alternatives. There are no mentions of exclusions or related tools, so guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create-projectA

Create a syntx.ai project (a.k.a. folder) and optionally seed it with existing chats. Returns the created project as JSON (uuid, title, scope, color, chats). Mirrors syntx.folders.create.

ParametersJSON Schema
NameRequiredDescriptionDefault
colorNoCSS hex color for the project chip. Defaults to "#9C9C9C".#9C9C9C
scopeNoProject scope. Defaults to "text" (matches the web client).text
titleYesProject title (required).
chat_uuidsNoOptional list of existing chat UUIDs to add on creation.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses that the tool returns the created project as JSON (uuid, title, scope, color, chats), which informs the agent about the output. It also mentions the optional seeding behavior with existing chats, a key side effect. It lacks details on error cases or permissions but covers the core behavior well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the main purpose and then providing return format and a useful implementation hint. Every sentence adds value with no filler, and the structure is easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description provides the return format (JSON with specific fields), which substitutes for a missing output schema. The input schema fully documents all parameters. The tool's simplicity and clear sibling context (create vs. list/add/delete) make this sufficiently complete for an agent to correctly invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with all four parameters already described in the schema. The description adds the phrase 'optionally seed it with existing chats,' which reinforces the meaning of chat_uuids but does not significantly extend beyond schema details. Therefore, the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Create a syntx.ai project (a.k.a. folder) and optionally seed it with existing chats.' It identifies the resource (project) and the specific capability (seeding with chats), which distinguishes it from sibling tools like list-projects or add-chats-to-project.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: when a new project (folder) is needed, especially with optional initial chats. It also mentions the API mirror `syntx.folders.create`, providing context. However, it does not explicitly state exclusions or alternatives, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-chatA

Permanently delete a chat. Mirrors syntx.chats.delete. Issues DELETE /api/v1/chats/{chat_id}. This action is destructive and cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYesChat UUID or numeric id (required).

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses the key behavioral trait: the action is destructive and cannot be undone. It also states 'Permanently delete' and provides the HTTP method, giving the agent a complete understanding of the operation's impact.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences, each serving a distinct purpose: stating the action, referencing the API mirror, and warning about destructiveness. It is front-loaded with the main purpose and contains no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and no output schema, the description covers the essential behavioral context (permanent deletion, reversibility) and the HTTP endpoint. It does not mention permissions or the response format, but the tool's simplicity makes this acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides 100% coverage with a clear description of chat_id ('Chat UUID or numeric id (required)'). The description's mention of the endpoint path reinforces this parameter but does not add additional semantic value beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool permanently deletes a chat, with the verb 'delete' and resource 'chat'. It distinguishes itself from sibling tools like list-chats and create-chat by specifying the HTTP DELETE endpoint. This is a precise and unambiguous purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for use by emphasizing the destructive and irreversible nature of the action, which implies it should be used only when permanent deletion is intended. However, it does not explicitly mention alternatives or when not to use it, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-fileA

Permanently delete an uploaded file. Accepts either file_id (the historical behaviour) or url (the uploaded R2 URL, mirroring the SPA's file-storage.remove). Exactly one of the two must be provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoUploaded file URL.
file_idNoUploaded file id.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It explicitly states 'permanently delete', which conveys destructive and irreversible behavior. It also clarifies the dual-input mechanism and the exactly-one constraint. It doesn't cover error cases or permissions, but the core behavior is well disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the action and resource, and every clause adds information. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete tool with no output schema and full parameter coverage, the description is quite complete. It covers purpose, parameters, and the constraint. It could mention return values or error handling, but those are not essential for a delete operation and the tool's minimal complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides descriptions for both parameters (100% coverage), but the description adds value by explaining that file_id is the 'historical behaviour' and url is the 'uploaded R2 URL, mirroring the SPA's file-storage.remove'. It also reiterates the mutual exclusivity constraint, which is present in the schema as anyOf but made explicit in prose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'delete' with the resource 'uploaded file', and 'permanently' signals irreversibility. It clearly distinguishes from sibling delete tools like delete-chat and delete-project by specifying the resource type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states the two accepted input modes (file_id or url) and the constraint that exactly one must be provided. It also gives context about the URL mirroring the SPA's file-storage.remove, but it doesn't explicitly exclude alternatives or provide when-to-use versus other delete tools. Still, the resource-specific nature makes the intended use clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete-projectA

Permanently delete a syntx.ai project (a.k.a. folder). Mirrors syntx.folders.delete. Issues DELETE /api/v1/folders/{folder_uuid}/delete. This action is destructive and cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
folder_uuidYesProject UUID to delete (required).

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description takes on the full burden of behavioral disclosure. It explicitly warns 'This action is destructive and cannot be undone,' which is a critical behavioral trait for a deletion tool. It also states the HTTP method (DELETE) and 'Permanently delete' to reinforce irreversibility. However, it does not mention potential side effects, such as whether associated chats or files within the project are also deleted, which would be useful context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the action, followed by the API mapping and a clear irreversibility warning. Every sentence contributes substantive information without redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with no output schema, the description is largely complete: it explains what is deleted, the endpoint, the destructive nature, and the parameter's role. It could optionally mention the response format, but given the structured schema and low complexity, the omission is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% coverage with a description for the only parameter, folder_uuid, as 'Project UUID to delete (required).' The description adds minor semantic value by clarifying that a project is also called a folder and embedding the parameter in the API endpoint, but it doesn't extend meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Permanently delete') and the resource ('a syntx.ai project (a.k.a. folder)'), which distinguishes it from sibling tools like delete-chat and delete-file. It also provides the exact API endpoint, leaving no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by identifying the resource as a project/folder, but it does not explicitly state when to use this tool versus alternatives, nor does it offer exclusions or alternative tool guidance. The phrase 'Mirrors `syntx.folders.delete`' hints at an equivalent API but doesn't clarify when that API should be chosen instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate-audioA

Generate audio (TTS, voice change, music) via syntx.ai. Mirrors syntx.audio.generate and the SPA ai-audio.sendMessage flow. Posts to POST /api/v1/audio/generate?ai_name={ai_name}. Requires a target chat UUID (use create-chat first). The result includes generation metadata returned by the API; follow up with wait-for-response or get-messages to read the completed audio URL once the model finishes.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYesText prompt describing the audio to produce.
ai_nameNoAudio provider name (e.g. "elevenlabs", "suno-music"). Use `list-models` with scope=audio to discover valid values.elevenlabs
durationNoTarget duration in seconds (music/clip models).
voice_idNoVoice identifier for TTS models (e.g. ElevenLabs voice_id).
chat_uuidYesTarget chat UUID (create one with create-chat).
file_urlsNoOptional input file URLs (e.g. source audio for voice-change). Mirrors the SPA `attachments` argument translated to `file_urls`.
model_typeNoModel identifier within the provider.
sample_rateNoSample rate override in Hz (e.g. 22050, 44100).
style_promptNoProvider-specific style/mood hint (e.g. "pop, sad, rainy night").
model_settingsNoProvider-specific settings merged into `body.settings` after the top-level fields above. Use for keys the top-level surface does not expose (e.g. suno wants `mode`, `is_instrumental`, `styles`, `title`, `negative_tags`, `source_clip_id`, `source_task_id`, `continue_at`). Merged AFTER the top-level fields, so values here override them. Only plain JSON values are allowed; arrays and nested objects are passed through verbatim.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so well. It discloses the HTTP endpoint, the prerequisite of a chat UUID, and the asynchronous nature of the result (generation metadata returned; audio URL available later via polling). This goes beyond what the schema alone conveys.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficient and front-loaded with the core purpose, then adds contextual details about the endpoint, prerequisites, and follow-up. Every sentence contributes useful information, though the 'Mirrors...' sentence could be seen as minor redundancy for some users.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (10 parameters, nested objects) and lack of an output schema, the description covers the essential workflow: create chat, generate audio, then poll for the URL. It explains the result shape at a high level (metadata and URL) and clarifies dependencies (chat_uuid). This is appropriate, though it does not cover all edge cases or error handling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% parameter coverage with detailed descriptions, so per the baseline the description need not compensate. While the description mentions the endpoint uses ai_name and that chat_uuid is required, it adds little beyond the schema's existing field explanations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb and resource: 'Generate audio (TTS, voice change, music) via syntx.ai.' It also distinguishes from sibling tools like generate-image and generate-video by focusing on audio and listing audio-specific use cases.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides concrete usage context: it requires a chat UUID created with create-chat first, and notes that follow-up with wait-for-response or get-messages is needed to retrieve the completed audio URL. It does not explicitly exclude alternatives, but the audio-specific purpose and prerequisite make its role clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate-imageA

Generate one or more images on syntx.ai using a design service (e.g. sora-images, flux). Requires a target chat UUID; the result includes generation metadata returned by the API.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNoNumber of images to generate.
promptYesText prompt describing the image(s).
ai_nameNoDesign service name, e.g. "sora-images".sora-images
qualityNoQuality level, e.g. "medium" or "high".
chat_uuidYesTarget chat UUID (create one with create-chat).
image_urlNoOptional reference image URLs.
model_typeNoModel identifier, e.g. "gpt-image-2".
resolutionNoImage resolution, e.g. "720x1280".
model_settingsNoProvider-specific settings merged into `body.settings` after the top-level fields above. Use for keys the top-level surface does not expose (e.g. ideogram wants `mode`, `style_type`, `rendering_speed`; seedream wants `stream`, `aspect_ratio` coercion; midjourney wants `version`, `style`, `seed`). Merged AFTER the top-level fields, so values here override them. Only plain JSON values are allowed; arrays and nested objects are passed through verbatim.

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing behavior. It does mention the chat UUID requirement and the return of metadata, but it omits important traits such as side effects on the chat, cost implications, asynchronicity, or whether any preconditions like authentication are needed. This is a significant gap for a generation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences, front-loaded with the core action in the first sentence. Every word adds value, with no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite the tool's complexity (9 parameters, nested objects, no output schema), the description is minimal and lacks operational context. It does not explain prerequisites (e.g., authentication, balance), whether generation is synchronous, how the feature interacts with chat workflows, or what the returned metadata looks like. The schema covers parameter details, but the description is not complete enough for an agent to fully understand the tool's role.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each parameter (n, ai_name, quality, model_settings, etc.) is already well described in the schema. The description adds little beyond what the schema provides, so it meets the baseline expectation without needing to compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool generates one or more images on syntx.ai using a design service (e.g., sora-images, flux), which is a specific verb+resource. It distinguishes from sibling tools like generate-audio or generate-video, and mentions the key requirement of a chat UUID.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for image generation and provides context about requiring a chat UUID and returning generation metadata. It does not explicitly state when not to use this tool or name alternatives, but the context is clear enough for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate-videoA

Generate a video via syntx.ai. Mirrors syntx.video.generate and the SPA ai-video.sendMessage flow. Posts to POST /api/v1/video/generate?ai_name={ai_name}. Requires a target chat UUID (use create-chat first). Generation is long-running — poll the resulting chat with wait-for-response or get-messages to read the completed video URL once the model finishes.

ParametersJSON Schema
NameRequiredDescriptionDefault
fpsNoFrame rate override.
seedNoSeed for deterministic sampling, when supported.
promptYesText prompt describing the video to produce.
ai_nameNoVideo provider name (e.g. "wan_video", "runway", "kling"). Use `list-models` with scope=video to discover valid values.wan_video
chat_idYesTarget chat UUID (create one with create-chat).
qualityNoQuality preset (e.g. "low", "medium", "high").
durationNoTarget duration in seconds.
audio_urlNoOptional audio track URL to mix into the generated video. Distinct from `file_urls` (SPA `audio_url` field).
file_urlsNoOptional input file URLs (e.g. source image for image-to-video). `wan_video` reads `settings.file_urls` for the same purpose.
model_typeNoModel identifier within the provider.
resolutionNoOutput resolution, e.g. "1280x720" or "720x1280".
aspect_ratioNoAspect ratio, e.g. "16:9", "9:16", "1:1".
model_settingsNoProvider-specific settings merged into `body.settings` after the top-level fields above. Use for keys the top-level surface does not expose (e.g. grok_video wants `video_duration` not `duration`, and accepts resolution enum `480p`|`720p`; kling wants `version`, `mode`, `native_audio`). Merged AFTER the top-level fields, so values here override them. Only plain JSON values are allowed; arrays and nested objects are passed through verbatim.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that generation is long-running and that users must poll to retrieve the video URL. This is valuable behavioral context beyond what annotations would provide. However, it does not mention potential side effects (e.g., creating chat messages), costs, or failure modes, so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences and every sentence earns its place: it states the action, notes the required precondition, and explains the async polling pattern. It is information-dense without being bloated, and front-loads the primary purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (13 parameters, nested objects, no output schema), the description provides essential flow context: it explains the endpoint, the required chat_id, the long-running nature, and how to obtain the result. The schema covers parameter details, and the description fills the behavioral gaps, making it complete for an agent to use effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description itself does not add parameter-level meaning; the schema's parameter descriptions are thorough and self-sufficient. The description's mention of the polling flow relates to output behavior rather than parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Generate a video via syntx.ai.' It distinguishes itself from sibling tools by explicitly focusing on video generation and referencing the SPA flow. The purpose is unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states prerequisites ('Requires a target chat UUID (use `create-chat` first)'), and follow-up actions ('poll the resulting chat with `wait-for-response` or `get-messages`'). It also directs users to `list-models` for valid `ai_name` values, providing clear context for when and how to use the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-balanceA

Return the current token balance for the authenticated user.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It implies a read-only operation via 'Return' and specifies authentication scope, but it does not disclose potential rate limits, failure behavior, or return format. This is acceptable for a simple getter but lacks explicit safety disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that directly states the function, with no redundant words or filler. It is appropriately sized for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no parameters, no output schema, and no annotations. The description fully conveys the action and scope, but it does not specify the return type (e.g., number, object, unit). For a simple balance query, this is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema fully covers parameter semantics. The description adds no parameter details, but none are needed; a baseline of 4 applies for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Return' and identifies the exact resource ('current token balance') and scope ('authenticated user'), making the tool's purpose unmistakable and distinct from sibling tools like get-profile or whoami.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit alternatives or exclusions are provided, but the description implies the tool is used to check the authenticated user's balance. Given the simple nature and absence of sibling balance tools, usage context is implied rather than explicitly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-favorite-messagesA

Return the favorite (bookmarked) messages for a chat. Mirrors syntx.chats.getFavoriteMessages. Hits GET /api/v1/chats/favorite/{chat_id}/messages. This is the only way to read starred messages through MCP — get-messages does not include them.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYesChat UUID or numeric id (required).
directionNo
page_sizeNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses some behavioral context by listing the underlying API endpoint ('GET /api/v1/chats/favorite/{chat_id}/messages') and referencing a mirrored function, which implies a read-only GET operation. However, with no annotations, it does not fully describe response format, ordering, pagination behavior, or any permissions needed, so it leaves key behavioral traits undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each with a distinct purpose: primary function, API mapping, and usage guidance. It is front-loaded with the main verb/resource, contains no redundant wording, and uses special formatting for code/endpoints to enhance readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, endpoint, and usage distinction, but omits details about pagination behavior (despite page_size/direction parameters), output structure (no output schema provided), and potential ordering semantics. Given that the tool has three parameters and no output schema, the description provides a serviceable but incomplete picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% (only chat_id has a description), and the tool description adds no parameter-level meaning beyond that. The 'direction' and 'page_size' parameters have no explanation in either the description or schema (beyond enum values and numeric bounds), and the description does not compensate for this gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Return the favorite (bookmarked) messages for a chat.' It uses a specific verb ('return') and resource ('favorite messages'), and explicitly distinguishes from sibling tools by noting that 'get-messages does not include them' and that this is 'the only way to read starred messages through MCP.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance on when to use this tool versus the alternative: 'This is the only way to read starred messages through MCP — get-messages does not include them.' It names the sibling tool directly and clarifies the exact scope difference, providing clear when/to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-inprogressA

Return the in-progress generations for a chat. Mirrors syntx.chats.getInProgress. Hits GET /api/v1/chats/{chat_id}/inprogress. An empty array means nothing is currently generating; otherwise each entry describes an active assistant object (model, object_type, created_at, task_id). Used internally by wait-for-response to gate on prior requests.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYesChat UUID or numeric id (required).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It explains the return semantics (empty array meaning, entry fields), the endpoint hit, and the mirrored library method. It does not cover auth, errors, or rate limits, but for a simple GET this is strong disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is 3 sentences, front-loaded with the core action, and each sentence earns its place: purpose, endpoint/mirror, return semantics, and usage context. No fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter GET tool with no output schema, the description covers purpose, behavior, return format, and usage context. It also gives enough detail to distinguish it from related tools. The description is fully complete for an agent to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for chat_id with description 'Chat UUID or numeric id (required)'. The tool description mentions chat_id only in the endpoint URL and does not add additional semantic details beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Return the in-progress generations for a chat' with a specific verb and resource. It also distinguishes itself from siblings by focusing on in-progress generations and explicitly mentioning its role as a gate for wait-for-response.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context: used to check if anything is currently generating, with empty array meaning nothing in progress. It mentions it is used internally by wait-for-response, giving practical when-to-use guidance, though it does not explicitly state when not to use it or list alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-messagesB

Return the message history of a chat (by UUID or numeric id).

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYesChat UUID or id.
directionNo
page_sizeNo

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full responsibility for behavioral disclosure. It states the core read operation but omits key behaviors such as pagination semantics (direction, page_size), whether messages are returned in chronological order, or any side effects. This lack of detail is a significant gap for a tool with multiple retrieval options.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence of 11 words, front-loading the primary action and resource. No filler or redundant information, making it maximally concise and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has pagination parameters (direction, page_size) and no output schema, but the description explains none of this mechanics. The agent would not know how to use direction or page_size correctly, or what the response structure looks like, leaving the description insufficient for effective invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% (only chat_id has a description), and the description adds no value beyond restating that chat_id accepts UUID or numeric id. Direction and page_size remain semantically unexplained, and the description does not compensate for the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: returning message history for a specific chat, with the identification method (UUID or numeric id) explicitly mentioned. This distinguishes it from siblings like send-message or list-chats, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives. It does not mention sibling tools, exclusions, or prerequisites, leaving the agent to infer usage context from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-model-infoB

Return detailed information about a specific AI model (pricing/cost params, limits).

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo
ai_nameYesAI service name, e.g. "chatgpt".
qualityNo
batch_sizeNo
model_typeYesModel identifier, e.g. "gpt-5-mini".
chars_countNo
video_durationNo

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses that the return includes pricing/cost params and limits, but it does not cover side-effect-free behavior, error cases, auth requirements, or rate limits. Minimal transparency beyond the literal return content.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence, no filler, every word earns its place. The key information (what it returns and for what resource) is at the beginning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is too thin for a tool with 7 parameters and no output schema. It hints at return content but does not explain return structure, possible error states, or how the extra parameters (mode, quality, batch_size, chars_count, video_duration) affect the result. The high parameter count and low schema coverage make the description inadequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description provides zero parameter-level meaning. Schema description coverage is only 29% (2 of 7 params described), and the description does not compensate by explaining how to specify the model or what 'mode', 'quality', etc., affect the result. The required parameters are only implied by the phrase 'specific AI model'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific verb ('Return detailed information') and resource ('specific AI model'), and the parenthetical '(pricing/cost params, limits)' adds scope. This distinguishes it from siblings like list-models or list-ai-services.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'specific AI model' implies when to use (when you need details of one model rather than listing all), but no explicit alternatives or exclusions are mentioned. The usage context is implied rather than directly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get-profileA

Return the current user profile (sanitised public fields: id, user_id, name, username, email, avatar, auth_services). Internal identifiers such as chatwoot_hmac / ym_client_id are stripped before returning. Requires authentication — raises a clear error when no token is set. For a non-erroring identity check, use whoami which returns { authenticated, user }.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full behavioral transparency. It discloses that internal identifiers are stripped, that the tool requires authentication, and that it raises an error when no token is set. These are useful behavioral details beyond the raw purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the primary purpose, and each sentence adds value: purpose, sanitization behavior, and alternative. No fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema and no annotations, the description is complete for a simple zero-parameter tool. It lists the returned fields, explains sanitization, mentions authentication/error behavior, and gives a clear alternative for a different use case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema is empty, so there are no parameter semantics to explain. Per the rubric, a zero-parameter tool gets a baseline of 4. The description does not need to add parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Return the current user profile' with a specific verb and resource, and lists the sanitised public fields. It distinguishes itself from the sibling tool 'whoami' by contrasting error behavior and return shape.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'For a non-erroring identity check, use `whoami` which returns { authenticated, user }', providing clear guidance on when to use an alternative. It also notes the authentication requirement, helping the agent decide if this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-ai-servicesA

List all syntx.ai AI services (e.g. ChatGPT, Midjourney, Sora) with their scope and status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full transparency burden. It discloses that the tool returns 'scope and status' for each service, but it does not explicitly state whether the operation is read-only or has side effects. For a list operation, the verb implies non-destructive behavior, but additional context like authentication or rate limits is absent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that immediately states the action and object, followed by examples and return attributes. It contains no filler words and is well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description provides essential information: what is listed (AI services), examples, and the included attributes (scope and status). Since there is no output schema, this is adequate for a simple list operation, though it could mention the exact output format or whether pagination applies.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description adds no parameter semantics, which is appropriate since there are no parameters to document.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'List' and identifies a distinct resource ('all syntx.ai AI services') with concrete examples (ChatGPT, Midjourney, Sora). This clearly differentiates it from sibling tools like 'list-models' or 'list-chats', making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly scopes when to use the tool (when an inventory of AI services is needed) but does not explicitly contrast it with alternative list tools. The clear scope provides enough context for an agent to select it, but lacks explicit exclusions or alternative recommendations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-chatsC

List the user chats, optionally filtered by scope or a search query.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoChat scope: text, image, audio, or video.
searchNoSubstring to filter chat titles.
directionNo
page_sizeNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does not mention read-only behavior, pagination, default ordering, authentication, or any side effects. The optional filters are mentioned, but the direction and page_size parameters are not explained beyond the schema, leaving significant behavioral traits undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no redundant words. It quickly conveys the core purpose. However, it is so brief that it leaves out important context, but conciseness itself is well-handled.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 4 parameters, no output schema, and no annotations, the description is too minimal. It does not cover pagination behavior, default values, or when to use this tool among many sibling list tools. The description lacks the richness needed for an agent to fully understand the tool's behavior and constraints.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%, covering scope and search, but direction and page_size lack descriptions. The description merely repeats the existence of scope and search filtering without adding meaning for the other parameters or clarifying their semantics. It fails to compensate for the uncovered parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists user chats and mentions optional filtering by scope or search query. This is specific and distinct from siblings like get-messages or list-models, though it does not explicitly differentiate by naming alternatives. The verb 'list' and resource 'user chats' are clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as list-ai-services or get-messages. The description only states what the tool does, not the context in which it should be selected, nor any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-modelsA

List AI models with upload constraints, supported media types, and features. Filters (all optional, combined with AND): scope (text|image|video|audio|upscale), ai_name (exact match, e.g. "chatgpt"), active_only (default true), search (case-insensitive substring against value/label).

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoCapability bucket inferred from the syntx.ai provider. Omit to receive models from every bucket (including providers that don't match any known bucket).
searchNoCase-insensitive substring matched against the model `value` and `label`.
ai_nameNoExact syntx.ai provider name, e.g. "chatgpt", "claude", "midjourney".
active_onlyNoWhen true (default), drop inactive models. Set false to include them.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It does add useful context: filters are combined with AND, active_only defaults to true, and search is case-insensitive. However, it does not mention pagination, result limits, or the exact shape of the response, which are relevant for a list endpoint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, with the main purpose front-loaded in the first sentence and filter details structured in the second. The second sentence is dense but organized with backticks and examples. Overall, every sentence provides useful information without padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description should give some indication of return structure. It mentions returned fields ('upload constraints, supported media types, and features') but does not describe pagination, ordering, or how to handle empty results. For a list tool with multiple filter options, this is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so a baseline of 3 applies. The description adds value beyond the schema by explicitly stating that all filters are optional and combined with AND, and by summarizing the scope buckets and search semantics. This helps the agent assemble correct queries without reading deep into each schema property.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('AI models') and elaborates on the returned details ('upload constraints, supported media types, and features'). It is clear but does not explicitly distinguish from sibling tools like list-ai-services or get-model-info, leaving some ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied: to list AI models with optional filters. However, there is no explicit guidance on when to choose this tool over alternatives (e.g., list-ai-services for services, get-model-info for a single model). The context is clear but exclusions or alternative conditions are not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-projectsA

List projects (a.k.a. folders) for a given scope. Mirrors syntx.folders.listTextFolders / listImageFolders / listVideoFolders / listAudioFolders. Hits GET /api/v1/folders/{scope}/list. Returns an array of Folder items.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoProject scope. Defaults to "text" (matches the web client).text

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It explicitly discloses that the tool uses a GET request (Hits `GET /api/v1/folders/{scope}/list`) and returns an array of Folder items, which implies read-only behavior and gives a clear expectation of the response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, front-loaded with the purpose, followed by implementation details (SDK mirror, endpoint, return type). No filler or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with a single optional parameter and no output schema, the description is complete: it gives the endpoint, the return type, and the parameter default. It sufficiently covers all necessary context for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already explains the 'scope' parameter and its default. The description adds a synonym (folders) and mentions mirroring specific SDK functions, but these don't deepen understanding of the parameter itself.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb (List) and resource (projects/folders) with a scope qualifier, and even names the underlying SDK functions and API endpoint. This distinguishes it from sibling tools like list-chats or list-models, which target different resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates the context (listing folders by scope) and mentions the default scope via schema. It does not explicitly exclude when not to use it, but the name and clear resource targeting make the usage obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list-uploaded-filesB

List files previously uploaded to the syntx.ai account.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
scopeNoFilter by scope: all, text, image, audio, or video.all
page_sizeNo

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the full burden of behavioral disclosure. It only states that the tool lists files, without indicating whether it is read-only, how pagination behaves, what file metadata is returned, or any authentication requirements. This is notably sparse.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is front-loaded and free of unnecessary words. However, it could be slightly improved by adding a second sentence with usage context, but as-is it is acceptably concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema and no annotations, so the description is the primary source of context. It lacks critical details such as pagination (page/page_size), filtering by scope, and what the returned list contains. This incompleteness could lead to incorrect assumptions about the tool's behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% (scope has a description, but page and page_size do not). The tool description does not mention any parameters or compensate for the missing parameter information, leaving the agent without guidance on pagination behavior or default values beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'list' and clearly identifies the resource as 'files previously uploaded to the syntx.ai account'. This distinguishes it from sibling tools like upload-files and delete-file, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving previously uploaded files but provides no explicit when-to-use guidance or alternatives. It does not mention that this is the read-only counterpart to upload-files or that it should be used instead of list-chats or other list tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send-messageA

Send a message (prompt) with optional uploaded-file attachments to an existing chat and return immediately. The assistant response is generated asynchronously — poll with wait-for-response or use ask / stream-message for a single blocking call.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYesThe prompt text to send.
ai_nameNoAI service name. Defaults to the server default.
chat_idYesChat UUID or id.
model_typeNoModel identifier for this message.
attachmentsNoFiles returned by `upload-files` to attach to this message.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It transparently states that the tool returns immediately and the response is generated asynchronously, plus directs to how to retrieve the result. However, it does not disclose what the immediate return value contains (e.g., message ID), which is a minor gap given no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the purpose and immediately clarifies async behavior and alternatives. No filler or redundant information; every clause adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter tool with no output schema and no annotations, the description provides a clear usage flow: send async, then poll or use blocking alternatives. It mentions existing chat and optional attachments, covering key prerequisites. However, it omits specifics about the immediate return value and potential error conditions, leaving slight ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description reinforces that attachments are optional and that chat_id refers to an existing chat, but it does not add meaningful semantic detail beyond what the schema already provides (e.g., attachment structure, ai_name vs model_type).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool sends a message (prompt) with optional file attachments to an existing chat and returns immediately. It distinguishes itself from siblings by explicitly noting the asynchronous nature and naming alternatives (wait-for-response, ask, stream-message), making it easy to select.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool versus alternatives: use this for async non-blocking send, poll with wait-for-response, or use ask/stream-message for a single blocking call. This directly addresses selection criteria and excludes other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set-tokenA

Set or replace the syntx.ai bearer token used by the server at runtime. Call this before any authenticated operation if SYNTX_TOKEN was not configured. The token is held in memory only — it is not persisted to disk and is lost when the process restarts. stdio only: this tool is rejected over the HTTP transport to prevent a remote client from hijacking the process-shared bearer (H4). Configure the token via the SYNTX_TOKEN env variable when running with --transport http.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYesA syntx.ai bearer token.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, but the description fully compensates by disclosing key behavioral traits: the token is held in memory only, not persisted to disk, and lost on process restart. It also explains that the tool is rejected over HTTP transport for security reasons (preventing remote hijacking), which is significant behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each carrying distinct information: purpose, usage condition, in-memory persistence, and transport restriction. It is front-loaded with the main action and adds essential caveats without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Considering the tool's simplicity (one parameter, no output schema), the description is remarkably complete. It covers when to use it, how it behaves (in-memory, lost on restart), and a critical security constraint (stdio-only), leaving no obvious gaps for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single 'token' parameter, so the schema already documents its meaning. The tool description adds no further parameter-level semantics beyond what the schema states, but it also doesn't need to given the simple, self-explanatory parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: setting or replacing the syntx.ai bearer token used by the server at runtime. It names the specific resource (syntx.ai bearer token) and action (set or replace), and the scope (used by server at runtime) distinguishes it from any sibling tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: 'Call this before any authenticated operation if SYNTX_TOKEN was not configured.' It also provides a clear alternative for HTTP transport (configure via the SYNTX_TOKEN env variable) and states the tool is stdio-only, preventing misuse over HTTP.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stream-messageA

One-shot streaming chat: opens a WSS connection, sends the prompt, and streams the assistant reply in real time. Intermediate progress is reported via notifications/progress (when the client supplies a progressToken); the final tool result contains the complete text. Falls back to REST polling on transport failure unless mode: "stream" is passed explicitly.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoOverride the streaming strategy. Default "auto" (WSS with polling fallback).
modelNoInitial model for the chat.
scopeNotext
promptYesThe prompt text to send.
ai_nameNo
timeoutNoMax wait time in milliseconds.
model_typeNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations to rely on, the description fully carries the burden and provides substantial behavioral detail: it opens a WSS connection, streams replies, reports progress via notifications/progress when a progressToken is supplied, returns the complete text in the final result, and falls back to REST polling on transport failure unless mode is explicitly set to 'stream'. This level of disclosure exceeds typical tool descriptions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two well-structured sentences, immediately stating the core function and then layering important operational details. Every sentence carries meaningful information, with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a streaming tool with no output schema and no annotations, the description covers the core behavior, fallback mechanism, and progress reporting, which is commendable. However, it could be more explicit about the exact shape of the final tool result or potential error conditions, leaving moderate room for improvement.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 57%, with mode, model, prompt, and timeout already described. The description adds some nuance for mode's effect on fallback, but it does not clarify the purpose of scope, ai_name, or model_type, which lack schema descriptions. Since the description doesn't compensate for these unannotated parameters, it provides only marginal value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'One-shot streaming chat' and specifies WSS connection, prompt sending, and real-time streaming, which clearly differentiates it from sibling tools like send-message or wait-for-response. It also details the fallback to REST polling, further clarifying the tool's unique scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool (streaming chat) and explains the auto/stream/poll modes, including fallback behavior. However, it does not explicitly contrast with alternative chat tools or state when not to use it, leaving some inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transcribeA

Transcribe an audio file to text via syntx.ai (POST /api/v1/audio/transcribe). Provide a single file either as path (server filesystem; stdio transport only) or as content_base64 with filename. IMPORTANT: when the server runs over the HTTP transport, path is rejected (arbitrary server-side file reads by remote clients) — use content_base64 instead. Limit 50 MB; accepted formats: mp3, wav, mpeg. Returns { text }.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoPath to an audio file on the MCP server filesystem. stdio transport only — rejected over HTTP. Use content_base64 over HTTP.
filenameNoFilename. Required when using `content_base64` (used for MIME inference and the upload name).
mime_typeNoOptional MIME type override (auto-detected from extension if omitted).
content_base64NoInline base64 audio payload (optionally with a `data:<mime>;base64,` prefix). Mutually exclusive with `path`. Preferred for the HTTP transport.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses security-related behavior (path rejection over HTTP), constraints (50 MB limit, accepted formats), and the return shape ({ text }). It doesn't cover auth or rate limits, but the key behaviors are well explained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, dense paragraph. It front-loads the purpose, then covers transport, limits, and return. There is no fluff, though it could be more structured with bullets, but it's concise and informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters with no required fields, no output schema, and no annotations, the description is quite complete. It explains the main operation, parameter selection, constraints, and return format, leaving few unanswered questions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value by emphasizing the transport-specific behavior of `path` and `content_base64`, and clarifies `filename` is required with `content_base64`, complementing the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Transcribe an audio file to text via syntx.ai (POST /api/v1/audio/transcribe).' It uses a specific verb and resource, and clearly distinguishes from siblings like generate-audio.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: it directs using `path` for stdio and `content_base64` for HTTP, warns that `path` is rejected over HTTP, and specifies size and format limits. This effectively tells when and how to use the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload-filesA

Upload one or more files to the syntx.ai account. Each file entry accepts either path (server-side file path, e.g. "C:\photo.jpg") OR content_base64 (inline base64, with optional data:<mime>;base64, prefix). For base64 entries, filename is required; mime_type is auto-guessed from extension if omitted. Max 10 files per call, 100 MB each. Returns { files: [{ url, filename, size, mime_type }] }.

ParametersJSON Schema
NameRequiredDescriptionDefault
filesYesFiles to upload.
model_typeNoModel identifier to scope the upload to (mirrors the SPA's `settings.model_type` field). Defaults to the server default model, or empty string when none is configured.
check_duplicatesNoAsk the server to detect duplicates and skip them.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and discloses important behavioral constraints: max 10 files per call, 100 MB per file, required filename for base64, MIME auto-detection, and the exact return shape. It does not mention side effects like storage consumption or duplicate handling, but the core behavior is well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the first sentence states the purpose, and the following sentences efficiently cover constraints, parameter nuances, and return value. Every sentence carries useful information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite lacking an output schema, the description explicitly provides the return format, limits, and input modes, making the tool fully usable. The minor absence of duplicate-handling details is mitigated by the schema's default value description, so the overall context is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the schema already describes all parameters (100% coverage), the description adds practical meaning beyond the schema: it explains the optional data: prefix, clarifies mutual exclusivity of path and content_base64, and emphasizes that filename is required for base64 entries. This adds real value over the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear, specific verb and resource: 'Upload one or more files to the syntx.ai account.' It also distinguishes itself from siblings like list-uploaded-files and delete-file by focusing on the creation/upload action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly explains two mutually exclusive input modes (path vs content_base64) and their requirements, which guides correct usage. It does not explicitly compare to sibling tools, but the upload action is distinct and unambiguous, so no alternative guidance is necessary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wait-for-responseA

Block until the latest assistant message in a chat finishes generating, then return its text and media URLs. Resolves when every message_object[i].completed === true — including image / video / audio / file-only replies. Respects the server poll interval/timeout. Use after send-message.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
timeoutNoOverride max wait time in milliseconds.
poll_intervalNoOverride poll interval in milliseconds.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full behavioral disclosure and does so thoroughly: it blocks until completion, resolves when every message_object[i].completed === true, handles media-only replies, and respects the server poll interval/timeout. This is far beyond a minimal description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short, front-loaded sentences each earn their place: core behavior, exact resolution condition, media handling, and usage hint. No wasted words and no redundancy with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even without an output schema or annotations, the description explains the return (text and media URLs), the blocking condition, the media-only case, and the timeout behavior. It doesn't specify edge cases like what happens on timeout expired or if there is no in-progress message, but it is still sufficiently complete for the intended use case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, and the description adds little parameter-specific meaning. Timeout and poll_interval are already described in the schema as overrides, and chat_id is only implied via 'in a chat'. The description doesn't explicitly map these parameters beyond what the schema provides, so a mid-range score fits.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Block until') and clearly identifies the resource ('latest assistant message in a chat') and the action (waits for generation, then returns text/media URLs). This distinguishes it from siblings like get-messages or stream-message and explicitly ties it to send-message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit context with 'Use after `send-message`', clearly indicating when this tool is appropriate. It doesn't mention alternatives or when not to use it, so it falls short of a 5, but the usage context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whoamiA

Return an identity check for the current syntx.ai user: { authenticated, user } where user is a sanitised public profile (id, user_id, name, username, email, avatar, auth_services). Internal identifiers such as chatwoot_hmac / ym_client_id are intentionally stripped. This tool NEVER errors on missing/invalid tokens — it returns { authenticated: false } instead. Use it to verify authentication status. Real failures (network/API errors) still raise an MCP error so you can tell "not logged in" from "API unreachable".

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, but the description thoroughly discloses behavior: never errors on missing/invalid tokens, returns { authenticated: false }, strips internal identifiers, and distinguishes auth failures from network errors. This fully covers the safety and error profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured logically: output type, user object contents, stripped fields, error behavior, and usage. Each sentence provides essential information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there are no parameters and no output schema, the description fully compensates by detailing the return object, field composition, and error semantics. It leaves no ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so description cannot add parameter-level meaning. The baseline of 4 applies, and the description adds value by explaining the output shape and fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns an identity check for the current syntx.ai user, with a specific output structure. It distinguishes itself from sibling tools like get-profile by focusing on authentication status verification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use it to verify authentication status' and explains when real errors occur, helping the agent decide when to call it. Does not mention alternatives or exclusions, but the usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.7/5.0
Disambiguation4/5

Most tools target distinct resources and actions, but the chat interaction flow has some overlap: send-message + wait-for-response, ask, and stream-message all achieve a prompt-response cycle, which could confuse an agent. Descriptions are detailed and clarify the differences, but the boundaries are less crisp than ideal.

Naming Consistency5/5

All tool names follow a consistent lowercase-hyphenated verb_noun pattern (list-chats, create-chat, delete-file, generate-image). Exceptions like whoami and ask are still simple, recognizable verbs, and the overall convention is uniform and predictable.

Tool Count4/5

At 28 tools, the set is large, but the breadth of the syntx.ai platform (auth, models, chats, files, generation, projects) justifies the count. No tool feels redundant, and each maps to a distinct API operation, though the number slightly exceeds the ideal range for quick navigation.

Completeness4/5

The tool surface covers the major lifecycle operations for chats, files, projects, and media generation, with sensible helpers for authentication and model browsing. Minor gaps exist, such as no explicit update-chat (rename) or delete-message tool, but agents can work around these via existing list/get/create patterns.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ssm82/syntx-ai-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server