syntx-ai-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@syntx-ai-mcpgenerate an image of a sunset over a mountain lake"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
syntx-ai-mcp
MCP-сервер и TypeScript SDK для AI-платформы syntx.ai
Превратите любой MCP-совместимый ассистент (Claude Desktop, Cursor, VS Code, Cline) в полнофункционального клиента syntx.ai: чаты, генерация изображений, каталог моделей, управление аккаунтом — всё через единый протокол Model Context Protocol.
Содержание
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 шаблон |
|
💡 4 промпт-шаблона | generate-landing, summarize-chat, translate, code-review |
🔌 2 транспорта | stdio (по умолчанию) и stateless HTTP/SSE |
🔐 Runtime-настройки | Задавайте токен, AI-провайдера и модель по умолчанию без перезапуска ( |
🧱 Типобезопасность | Полная типизация TypeScript, JSON Schema для каждого инструмента |
🌐 Dual-формат | Сборка CJS + ESM + |
Требования
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.jsonWindows:
%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" }
}
}Переменные окружения
Переменная | Тип | По умолчанию | Описание |
| string | — | Bearer-токен syntx.ai. Обязателен для большинства операций (можно задать через |
| string |
| Базовый URL API. |
| number |
| Таймаут HTTP-запроса, мс. |
| string |
| Локаль API (например, язык ответов тарифных планов). Не влияет на язык генерации моделей. |
| string |
| AI-сервис по умолчанию для |
| string | — | Модель по умолчанию. |
| number |
| Интервал polling ответа, мс. |
| number |
| Максимальное ожидание ответа, мс. |
|
|
| Стратегия стриминга для |
| string |
| Базовый URL WSS-эндпоинта. |
|
|
| Транспорт MCP-сервера. |
| number |
| Порт HTTP-транспорта. |
| string |
| Адрес привязки HTTP-транспорта (loopback по умолчанию). |
| string | — | Bearer-токен для самого MCP-сервера (HTTP-транспорт). Если задан — запросы без совпадающего заголовка |
Альтернативно — флаги 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без проверки токена; wildcardAccess-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 (без обрыва канала).
Идентификация и токен
Инструмент | Описание | Параметры |
| Идентификационная проверка: | — |
| Полный профиль пользователя; при отсутствии токена возвращает понятную MCP-ошибку. | — |
| Установить/заменить токен в рантайме (только в памяти — не переживает рестарт). |
|
| Проверить валидность текущего токена. | — |
| Стартует сессию авторизации через Telegram ( |
|
| Поллит |
|
| One-shot flow: создать сессию → вернуть ссылку → поллить до получения JWT → установить токен. Блокирует до |
|
| Запрашивает OTP на e-mail через |
|
| Проверяет OTP и устанавливает JWT ( |
|
whoamiиget-profileразличаются семантикой ошибок, а не составом полей (оба берут данные из одногоuser.me()). Используйтеwhoamiдля проверки статуса аутентификации без риска получить ошибку,get-profile— когда нужен полный профиль и готов обработать ошибку при отсутствии токена.
Настройки (runtime)
Инструмент | Описание | Параметры |
| Текущая эффективная конфигурация сервера | — |
| Установить модель по умолчанию (или очистить через |
|
| Переключить AI-провайдера по умолчанию |
|
*— обязательный параметр.
Каталог AI
Инструмент | Описание | Параметры |
| Доступные AI-сервисы (ChatGPT, Midjourney, Sora…) | — |
| Модели с ограничениями и поддерживаемыми форматами |
|
| Детальная информация о модели (параметры, лимиты) |
|
Параметры list-models (все опциональны, комбинируются через AND):
scope— категория возможностей:text|image|video|audio|upscale. Категория выводится изai_nameпровайдера; если провайдер неизвестен, модель попадает только в вызовы без фильтраscope.ai_name— точное имя провайдера syntx.ai, например"chatgpt","claude","midjourney".active_only—true(по умолчанию) скрывает неактивные модели. Передайтеfalse, чтобы получить весь каталог.search— регистронезависимая подстрока поvalue/label(например,"gpt-5").
Пример:
{
"name": "list-models",
"arguments": {
"scope": "text",
"ai_name": "chatgpt",
"search": "gpt-5"
}
}Чаты и сообщения
Инструмент | Описание | Параметры |
| Список чатов с фильтрами |
|
| Создать чат (обязателен |
|
| История сообщений чата |
|
| Отправить промпт с опциональными вложениями, вернуть ack (ответ — асинхронно) |
|
| Дождаться завершения генерации и вернуть текст + media-объекты |
|
| One-shot: создать чат → отправить → дождаться ответа |
|
| One-shot со стримингом ответа по WebSocket + |
|
| Авто-заголовок для чата |
|
⭐
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:
Подход | Инструменты | Когда использовать |
Быстрый вопрос (блокирующий) |
| Обычный пользовательский запрос; поддерживает |
Стриминг ответа |
| Длинные ответы, UX с прогрессом; режимы |
Полный контроль |
| Многошаговый диалог, кастомная логика |
Стратегией управляет 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": {} }Генерация изображений
Инструмент | Описание | Параметры |
| Генерация изображений через design-сервис |
|
{
"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 (состав полей зависит от сервиса; обычно содержит ссылки на сгенерированные изображения и метаданные запроса).
Транскрипция аудио
Инструмент | Описание | Параметры |
| Транскрипция аудио в текст ( |
|
Один файл передаётся либо как 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"
}
}Аккаунт пользователя
Инструмент | Описание |
| Профиль (имя, email, аватар, auth-сервисы) |
| Баланс токенов |
| Активная подписка и реферальная информация |
Файлы
Инструмент | Описание | Параметры |
| Список загруженных файлов |
|
| Загрузить до 10 файлов (≤ 100 МБ каждый) |
|
| Удалить файл |
|
Каждый элемент массива 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.
Проекты (папки)
Инструмент | Описание | Параметры |
| Создать проект (a.k.a. папку) на syntx.ai; опционально сразу добавить чаты. |
|
| Добавить один или несколько существующих чатов в проект ( |
|
| Удалить проект без возможности восстановления ( |
|
Серверная терминология —
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 | Имя | Описание |
| AI Models Catalog | Полный каталог моделей с ограничениями |
| AI Services | Доступные AI-сервисы |
| Subscription Plans | Тарифные планы |
| Application Settings | OAuth-провайдеры, страна, IP + локальная конфигурация MCP-сервера ( |
| Current User Profile | Профиль текущего пользователя |
| Token Balance | Баланс токенов |
Шаблон ресурса:
Шаблон URI | Описание |
| История сообщений конкретного чата по UUID |
Промпты (Prompts)
Готовые шаблоны диалога — ассистент доотправляет их через ask/send-message.
Промпт | Параметры | Назначение |
|
| Сгенерировать одностраничный HTML-лендинг |
|
| Краткое изложение истории чата |
|
| Перевод текста |
|
| Ревью кода с исправленным вариантом |
Безопасность
Токен 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, логи клиента |
| Не задан/истёк токен |
|
HTTP | Отсутствует/неверен | Задайте |
HTTP |
| Используйте |
Стриминг не приходит |
| Проверьте |
Запрос долго висит | Малый | Настройте таймауты под задачу |
Модель не найдена | Неверный | Вызовите |
| Используется HTTP-транспорт | Передайте аудио через |
| Пользователь не открыл deep-link или не нажал Start в боте | Откройте |
| UUID устарел / не существует | Создайте новую сессию через |
| Сервер не вернул поле | Загляните в |
| Невалидный 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
Группа | Методы |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| список папок по scope, |
Стриминг ответов
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:
Значение | Поведение |
| REST-поллинг через |
| То же, что |
| REST |
| Fire-and-forget: |
Готовый пример — в examples/stream-example.ts.
Полный справочник типов — в src/types.ts. Внутреннее устройство слоёв — в docs/ARCHITECTURE.md.
Примеры
В каталоге examples/ лежат готовые сценарии:
Файл | Описание |
| Прямая работа с чатами через SDK |
| Подключение к серверу как MCP-клиент и вызов |
| One-shot WSS-стриминг ответа в консоль |
| Готовый конфиг для 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-режимеДобавление нового инструмента:
Создайте файл в
src/mcp/tools/с объектомSyntxTool.Включите его в
src/mcp/tools/index.ts(allTools).Готово — сервер и
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).
Лицензия
Available Tools
28 toolsadd-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.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_uuids | Yes | Chat UUIDs to add. Must contain at least one entry. | |
| folder_uuid | Yes | Project UUID (required). |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Override 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). | |
| scope | No | text | |
| title | No | Chat title. Defaults to a truncated prompt. | |
| prompt | Yes | The prompt text to send. | |
| ai_name | No | ||
| timeout | No | ||
| model_type | No | ||
| poll_interval | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Initial model for the chat. | |
| scope | No | Chat scope. Defaults to "text". | text |
| title | Yes | Chat title (required). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | CSS hex color for the project chip. Defaults to "#9C9C9C". | #9C9C9C |
| scope | No | Project scope. Defaults to "text" (matches the web client). | text |
| title | Yes | Project title (required). | |
| chat_uuids | No | Optional list of existing chat UUIDs to add on creation. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | Chat UUID or numeric id (required). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Uploaded file URL. | |
| file_id | No | Uploaded file id. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| folder_uuid | Yes | Project UUID to delete (required). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | Text prompt describing the audio to produce. | |
| ai_name | No | Audio provider name (e.g. "elevenlabs", "suno-music"). Use `list-models` with scope=audio to discover valid values. | elevenlabs |
| duration | No | Target duration in seconds (music/clip models). | |
| voice_id | No | Voice identifier for TTS models (e.g. ElevenLabs voice_id). | |
| chat_uuid | Yes | Target chat UUID (create one with create-chat). | |
| file_urls | No | Optional input file URLs (e.g. source audio for voice-change). Mirrors the SPA `attachments` argument translated to `file_urls`. | |
| model_type | No | Model identifier within the provider. | |
| sample_rate | No | Sample rate override in Hz (e.g. 22050, 44100). | |
| style_prompt | No | Provider-specific style/mood hint (e.g. "pop, sad, rainy night"). | |
| model_settings | No | Provider-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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | Number of images to generate. | |
| prompt | Yes | Text prompt describing the image(s). | |
| ai_name | No | Design service name, e.g. "sora-images". | sora-images |
| quality | No | Quality level, e.g. "medium" or "high". | |
| chat_uuid | Yes | Target chat UUID (create one with create-chat). | |
| image_url | No | Optional reference image URLs. | |
| model_type | No | Model identifier, e.g. "gpt-image-2". | |
| resolution | No | Image resolution, e.g. "720x1280". | |
| model_settings | No | Provider-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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Frame rate override. | |
| seed | No | Seed for deterministic sampling, when supported. | |
| prompt | Yes | Text prompt describing the video to produce. | |
| ai_name | No | Video provider name (e.g. "wan_video", "runway", "kling"). Use `list-models` with scope=video to discover valid values. | wan_video |
| chat_id | Yes | Target chat UUID (create one with create-chat). | |
| quality | No | Quality preset (e.g. "low", "medium", "high"). | |
| duration | No | Target duration in seconds. | |
| audio_url | No | Optional audio track URL to mix into the generated video. Distinct from `file_urls` (SPA `audio_url` field). | |
| file_urls | No | Optional input file URLs (e.g. source image for image-to-video). `wan_video` reads `settings.file_urls` for the same purpose. | |
| model_type | No | Model identifier within the provider. | |
| resolution | No | Output resolution, e.g. "1280x720" or "720x1280". | |
| aspect_ratio | No | Aspect ratio, e.g. "16:9", "9:16", "1:1". | |
| model_settings | No | Provider-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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | Chat UUID or numeric id (required). | |
| direction | No | ||
| page_size | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | Chat UUID or numeric id (required). |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | Chat UUID or id. | |
| direction | No | ||
| page_size | No |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| ai_name | Yes | AI service name, e.g. "chatgpt". | |
| quality | No | ||
| batch_size | No | ||
| model_type | Yes | Model identifier, e.g. "gpt-5-mini". | |
| chars_count | No | ||
| video_duration | No |
TDQS
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.
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.
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.
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.
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.
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 }.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Chat scope: text, image, audio, or video. | |
| search | No | Substring to filter chat titles. | |
| direction | No | ||
| page_size | No |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Capability bucket inferred from the syntx.ai provider. Omit to receive models from every bucket (including providers that don't match any known bucket). | |
| search | No | Case-insensitive substring matched against the model `value` and `label`. | |
| ai_name | No | Exact syntx.ai provider name, e.g. "chatgpt", "claude", "midjourney". | |
| active_only | No | When true (default), drop inactive models. Set false to include them. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Project scope. Defaults to "text" (matches the web client). | text |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| scope | No | Filter by scope: all, text, image, audio, or video. | all |
| page_size | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | The prompt text to send. | |
| ai_name | No | AI service name. Defaults to the server default. | |
| chat_id | Yes | Chat UUID or id. | |
| model_type | No | Model identifier for this message. | |
| attachments | No | Files returned by `upload-files` to attach to this message. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | A syntx.ai bearer token. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Override the streaming strategy. Default "auto" (WSS with polling fallback). | |
| model | No | Initial model for the chat. | |
| scope | No | text | |
| prompt | Yes | The prompt text to send. | |
| ai_name | No | ||
| timeout | No | Max wait time in milliseconds. | |
| model_type | No |
TDQS
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.
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.
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.
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.
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.
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 }.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Path to an audio file on the MCP server filesystem. stdio transport only — rejected over HTTP. Use content_base64 over HTTP. | |
| filename | No | Filename. Required when using `content_base64` (used for MIME inference and the upload name). | |
| mime_type | No | Optional MIME type override (auto-detected from extension if omitted). | |
| content_base64 | No | Inline base64 audio payload (optionally with a `data:<mime>;base64,` prefix). Mutually exclusive with `path`. Preferred for the HTTP transport. |
TDQS
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.
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.
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.
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.
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.
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 }] }.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | Files to upload. | |
| model_type | No | Model 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_duplicates | No | Ask the server to detect duplicates and skip them. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | ||
| timeout | No | Override max wait time in milliseconds. | |
| poll_interval | No | Override poll interval in milliseconds. |
TDQS
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.
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.
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.
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.
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.
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".
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
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.
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.
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.
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
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
MCP server for AI dialogue using various LLM models via AceDataCloud
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that enables AI applications to access 20+ model providers (including OpenAI, Anthropic, Google) through a unified interface for text and image generation.230MIT

axiomatic-mcpofficial
AlicenseBqualityBmaintenanceMCP server enabling AI assistants to access the Axiomatic_AI Platform for scientific computing, document processing, and photonic circuit design.2322MIT- AlicenseNot gradedqualityDmaintenanceA full-featured MCP server providing seamless access to CustomGPT.ai APIs, enabling agent and conversation management through MCP-compatible clients.5MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for AI image generation supporting multiple providers (OpenRouter, Together AI, Replicate, fal.ai) and compatible with various MCP agents.441MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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