syntx-ai-mcp
This MCP server lets an assistant operate a syntx.ai account: check auth, manage chats, discover models, generate media, handle files, and organize projects.
Check authentication with
whoamiand set a bearer token at runtime over stdio withset-token.Read the user profile and token balance.
List AI services, filtered models, and detailed model pricing/limits.
List, create, and delete chats; read message history, in-progress generations, and favorite messages.
Send prompts, wait for replies, run one-shot Q&A with
ask, or stream replies withstream-message.Generate images, audio, and video through syntx.ai providers with provider-specific settings.
Transcribe audio files to text.
Upload, list, and delete account files; attach uploaded files to chat messages.
List/create/delete projects (folders) and add chats to projects.
Enables audio generation via ElevenLabs, including text-to-speech and voice change, through the syntx.ai platform. Use the generate-audio tool with ai_name: "elevenlabs" to create audio from text or transform voices.
Provides image generation capabilities using the Flux design service via syntx.ai. Use the generate-image tool with ai_name: "flux" (or similar) to create images from text prompts.
Enables music generation via Suno through the syntx.ai platform. Use the generate-audio tool with ai_name: "suno-music" to create music from prompts, with options for style, duration, and more.
Click on "Deploy 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) для прямого программного использования.
Возможности
Группа | Что входит |
🛠️ 49 инструментов | Идентификация, чаты, генерация медиа (изображения, аудио, видео), транскрипция, каталог, аккаунт, файлы, проекты, тарифы/цены, discovery (тренды/события), улучшение промптов |
🔌 2 транспорта | stdio (по умолчанию) и stateless HTTP/SSE |
🔐 Токен в рантайме | Задавайте токен без перезапуска ( |
🧱 Типобезопасность | Полная типизация TypeScript, JSON Schema для каждого инструмента |
🌐 Dual-формат | Сборка CJS + ESM + |
Требования
Node.js ≥ 18 (использует встроенный
fetch)Учётная запись и 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 для SSE-стрима, используемого text-flow |
| number |
| TTL in-memory кэша для |
|
|
| Транспорт 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)
Все 58 инструментов принимают JSON-аргументы и возвращают структурированный результат. Текстовые ответы — это JSON-снимки данных API; ошибки возвращаются с isError: true (без обрыва канала).
Аргументы проверяются по JSON-схеме инструмента до вызова хендлера (ajv, единая точка входа call-tool): enum, required и additionalProperties: false реально применяются, а нарушение возвращается как isError: true с указанием пути аргумента и требуемого значения. Типы не приводятся принудительно, значения по умолчанию из схемы не подставляются.
Идентификация и токен
Инструмент | Описание | Параметры |
| Идентификационная проверка: | — |
| Полный профиль пользователя; при отсутствии токена возвращает понятную MCP-ошибку. | — |
| Связанные внешние идентичности (Telegram, email, …) с | — |
| Состояние непрочитанных сообщений в support-канале: | — |
| Установить/заменить токен в рантайме (только в памяти — не переживает рестарт). |
|
whoamiиget-profileразличаются семантикой ошибок, а не составом полей (оба берут данные из одногоuser.me()). Используйтеwhoamiдля проверки статуса аутентификации без риска получить ошибку,get-profile— когда нужен полный профиль и готов обработать ошибку при отсутствии токена.
*— обязательный параметр.
Каталог AI
Инструмент | Описание | Параметры |
| Доступные AI-сервисы (ChatGPT, Midjourney, Sora…) | — |
| Модели с ограничениями и поддерживаемыми форматами |
|
Параметры list-models (все опциональны, комбинируются через AND):
scope— категория возможностей:text|image|video|audio|upscale. Категория выводится из живого каталога провайдеров (GET /api/v1/ai); если провайдер неизвестен, модель попадает только в вызовы без фильтраscope.ai_name— точное имя провайдера syntx.ai, например"chatgpt","claude","midjourney".active_only—true(по умолчанию) скрывает неактивные модели. Передайтеfalse, чтобы получить весь каталог.search— регистронезависимая подстрока по идентификатору модели иlabel(например,"gpt-5","claude-opus-5").source— какой каталог читать:"ai"(по умолчанию) — платформенный каталог:GET /api/v1/ai/models(все медиа-скоупы), объединённый сGET /api/v1/llm/models;"llm"— только текстовый каталог (тот вид, который видит пикер SPA);"both"— явная запись того же объединения, что и"ai". Каталоги upstream не синхронизированы:gpt-6.1-sol/gpt-6.1-terraесть только вllm, аdeepseek-r1,gemini-3.7-flash,grok-4.6включены для текста, но помечены неактивными вai. Поэтому платформенный каталог (и"ai", и"both") содержит обе половины: в общем каталогеgpt-6.1-solприсутствует, а из текстовых видны и те модели, что помечены неактивными вai.
Поле value — всегда идентификатор модели (в текстовом каталоге это id). Для строк из LLM-каталога дополнительно приходит объект llm с context_window, default_max_tokens, capabilities, supported_tools, min_subscription.
Пример:
{
"name": "list-models",
"arguments": {
"source": "ai",
"scope": "text",
"ai_name": "chatgpt",
"search": "gpt-5"
}
}Чаты и сообщения
Инструмент | Описание | Параметры |
| Список чатов с фильтрами |
|
| Создать чат (обязателен |
|
| Переименовать чат ( |
|
| Pre-flight проверка: существует ли чат ( |
|
| История сообщений чата |
|
| Активные генерации чата (пустой массив — ничего не генерируется) |
|
| Избранные (звёздные) сообщения чата — |
|
| Отправить промпт с опциональными вложениями, вернуть ack (ответ — асинхронно) |
|
| Дождаться завершения генерации и вернуть текст + media-объекты |
|
| One-shot: создать чат → отправить → дождаться ответа |
|
| One-shot со стримингом ответа по SSE ( |
|
| Отменить in-flight генерацию сообщения |
|
| Удалить отдельное сообщение ( |
|
| Удалить чат без возможности восстановления ( |
|
| Переключить флаг «избранное» чата: каждый вызов инвертирует состояние; проверить через |
|
| Переключить флаг «избранное» сообщения: каждый вызов инвертирует состояние; читать через |
|
| Текущие LLM-лимиты (окна 6h / 7d) + план подписки | — |
| Квота на сброс LLM-окон ( | — |
⭐
ask— главный инструмент для stateless Q&A. Возвращаетchat_uuidдля последующих уточнений черезsend-message+wait-for-response.🌊
stream-messageдля text-scope открывает SSE-соединение наsse.syntx.aiи доставляет токены по мере поступления; при сбое транспорта автоматически переключается на REST-поллинг. Прогресс отправляется через 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": "ask", "arguments": { "prompt": "Привет!", "ai_name": "chatgpt", "model_type": "gpt-5.5" } }Явный model_type переопределяет умолчания SYNTX_DEFAULT_AI / SYNTX_DEFAULT_MODEL; актуальные идентификаторы моделей получайте через list-models.
Генерация медиа
Инструмент | Описание | Параметры |
| Генерация изображений через 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 (состав полей зависит от сервиса; обычно содержит ссылки на сгенерированные изображения и метаданные запроса).
Аудио
Инструмент | Описание | Параметры |
| Транскрипция аудио в текст ( |
|
| TTS / voice-change / генерация музыки ( |
|
Один файл передаётся либо как 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-сервисы) |
| Баланс токенов |
| История трат токенов (cursor-пагинация) |
Файлы
Инструмент | Описание | Параметры |
| Список загруженных файлов |
|
| Список сгенерированных файлов (image/video/audio) |
|
| Загрузить до 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.
Проекты (папки)
Инструмент | Описание | Параметры |
| Список проектов для scope ( |
|
| Создать проект (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"]
}
}Агенты (AI agents)
Новая upstream-поверхность agents/* (prod-SPA bundle 1793202992). Список агентов
смешивает собственные агенты аккаунта и платформенные (editable: false).
Инструмент | Описание | Параметры |
| Список агентов + квота ( | — |
| Полная карточка агента ( |
|
| Создать агента ( |
|
| Изменить агента ( |
|
| Удалить агента без возможности восстановления |
|
| Файлы, прикреплённые к агенту |
|
| Прикрепить файлы к агенту ( |
|
| Открепить файлы от агента ( |
|
agent_id— это UUID (agent_idв ответеlist-agents), аupdate-agentждёт числовойidизget-agent. Уadd-agent-filesтот же LFI-риск, что и уupload-files:pathчитает файл на машине сервера и запрещён на HTTP-транспорте. Чат с агентом идёт по WebSocket (agents/chat/{agent_id}) — MCP-сервер его не реализует, используйте SSE-текст-флоу.
Тарифы и цены
Инструмент | Описание | Параметры |
| Тарифы (price list) для |
|
| Прайс per-model ( | — |
Discovery и события
Инструмент | Описание | Параметры |
| Категории домашней ленты ( | — |
| Теги домашней ленты (часто пусто) | — |
| Лента событий (промо, milestones) |
|
Улучшение промптов
Инструмент | Описание | Параметры |
| Стоимость улучшения промпта для данной модели |
|
| Запустить задачу улучшения (captcha-gated) |
|
| Прочитать результат задачи |
|
start-prompt-enhancement403-ит безSYNTX_CAPTCHA_TOKEN(или настроенногоcaptchaProvider): endpointprompt-enhancer/enhance/startпопадает под rule^prompt-enhancer\/(enhance|generate)(\/start)?$с actiongenerate.
Безопасность
Токен 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).Аргументы инструментов валидируются по объявленной JSON-схеме (ajv). Неверный
enum, отсутствующий обязательный параметр или лишний аргумент отклоняются до вызова хендлера — хендлер никогда не получает «мусор» и не может молча подменить значение по умолчанию.Не передавайте
MCP_HTTP_TOKENв query-параметрах URL — только в заголовкеAuthorization.
Troubleshooting
Симптом | Вероятная причина | Решение |
MCP-клиент не видит инструменты | Неверный путь к команде / Node.js < 18 | Проверьте путь, версию Node, логи клиента |
| Не задан/истёк токен |
|
HTTP | Отсутствует/неверен | Задайте |
HTTP |
| Используйте |
Стриминг не приходит |
| Проверьте |
Запрос долго висит | Малый | Настройте таймауты под задачу |
Модель не найдена | Неверный | Вызовите |
| Используется HTTP-транспорт | Передайте аудио через |
Получение токена
MCP-инструменты авторизации (Telegram / e-mail OTP) удалены при сокращении поверхности в v0.3.0. Токен устанавливается одним из способов:
Переменная окружения
SYNTX_TOKENпри запуске MCP-сервера.Инструмент
set-token— задать/заменить JWT в рантайме (хранится только в памяти, не переживает рестарт).Проверка статуса —
whoami(никогда не падает) илиget-profile.
Сам JWT выдаёт платформа: войдите на syntx.ai и скопируйте токен из настроек профиля.
Через SDK доступны полноценные программные флоу авторизации — они не зависят от MCP-инструментов:
import { SyntxClient } from 'syntx-ai-mcp';
const syntx = new SyntxClient();
// Telegram device flow
const { token } = await syntx.auth.loginWithTelegram({
onLink: (deepLink) => console.log('Откройте:', deepLink),
});
// Либо e-mail OTP
const { token: jwt } = await syntx.auth.loginWithEmail('user@example.com', {
otpProvider: async () => askUserForOtp(),
});Где живёт токен: JWT хранится только в памяти процесса. После рестарта MCP-сервера задайте его заново (
SYNTX_TOKENилиset-token). Не передавайте токены в query-параметрах — только вAuthorization: Bearer. Полный список методов SDK:syntx.auth.startAuth/pollAuthToken/sendEmailOtp/verifyEmailOtp/loginWithEmail/loginWithTelegram.
Программное использование (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();
// Создать чат и отправить сообщение через llm/* text-flow
const chat = await syntx.chats.create({ scope: 'text', title: 'Demo' });
await syntx.llm.generate({
prompt: 'Привет!',
aiName: 'chatgpt',
modelType: 'your-model-id',
chatUuid: chat.uuid,
});
// Дождаться ответа (SSE primary + REST polling fallback)
const completed = await syntx.llm.waitForResponse(chat.uuid, { timeout: 60_000 });
console.log(completed.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, |
Стриминг ответов
Текстовые ответы идут через llm/* text-flow (SSE primary + REST-поллинг как fallback). Все text-scope операции (ask, stream-message, send-message, wait-for-response) внутри используют одну и ту же связку:
// 1. Создать чат
const chat = await syntx.chats.create({ scope: 'text', title: 'Demo' });
// 2. Отправить промпт (POST /api/v1/llm/generate с chat_uuid)
await syntx.llm.generate({
prompt: 'Расскажи о Kepler-186f',
aiName: 'gemini',
modelType: 'gemini-3.5-flash',
chatUuid: chat.uuid,
});
// 3. Дождаться ответа (SSE primary, REST polling fallback)
const completed = await syntx.llm.waitForResponse(chat.uuid, {
timeout: 60_000,
});
console.log(`\n✓ ${completed.text.length} chars`);Как это работает: API syntx.ai генерирует ответ асинхронно. SSE-стрим
sse.syntx.aiотдаёт дельты текста (event: message,type: content); по[DONE](или чистому закрытию) ответ считается завершённым. На сбое SSE SDK переключается на REST-поллинг черезchats.pollForResponse— для пользователя разницы нет.
Внутри MCP-сервера инструмент stream-message оборачивает тот же поток, отправляя notifications/progress и notifications/message (если клиент передал progressToken в _meta).
Стратегия управляется через SYNTX_STREAM_MODE:
Значение | Поведение |
| SSE primary, REST-поллинг при сбое транспорта |
| Только SSE (сбои пробрасываются вызывающему) |
| Сразу REST-поллинг через |
| Fire-and-forget: |
Архитектура text-flow (llm/*)
MCP-клиент
│ ask / stream-message / send-message / wait-for-response
▼
mcp/tools/chats.ts
│ (text-scope → всегда llm/*)
▼
LlmResource
│ generate → POST /api/v1/llm/generate
│ getChatStream → GET /api/v1/llm/chats/{id}/stream
│ waitForResponse → openSse(...) ──► https://sse.syntx.ai/...
│ └ on error/timeout → chats.pollForResponse() (fallback)Legacy-путь POST /chats/{id}/messages с objects[] и model_type удалён в v0.4.0 — для text-scope остался только llm/*. Не-text скоупы (image/video/audio) обслуживаются отдельными инструментами generate-image / generate-audio / generate-video.
Полный справочник типов — в src/types.ts. Внутреннее устройство слоёв — в docs/ARCHITECTURE.md.
Примеры
В каталоге examples/ лежат готовые сценарии:
Файл | Описание |
| Прямая работа с чатами через SDK (text-flow |
| Подключение к серверу как MCP-клиент и вызов |
| Готовый конфиг для 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подхватят автоматически.
Детально — в 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
│ fetch
▼
syntx.ai API https://api.syntx.aiЗависимости направлены строго вниз: транспорт зависит от MCP-ядра, ядро — от SDK, SDK — только от платформы. Ошибки API маппятся в isError-ответы, поэтому JSON-RPC-канал никогда не обрывается.
Дорожная карта
Транскрипция аудио как инструмент (
transcribe)Загрузка файлов (
upload-files) с поддержкой бинарных данных в MCPСтриминг ответов через SSE (см.
stream-message,llm.waitForResponse,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
58 toolsadd-agent-filesA
Attach one or more files to an AI agent. Mirrors syntx.agents.addFiles. Posts multipart/form-data to POST /api/v1/agents/files/add/{agent_id}, repeating the field name files once per file. The same LFI caveat as upload-files applies — path is a server-side file read and is rejected over the HTTP transport.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | Files to attach. Each entry takes either `path` (server-side file read) or `content_base64` (inline base64) — exactly one per entry. | |
| agent_id | Yes | Agent UUID — the `agent_id` field returned by `list-agents`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it discloses the transport (multipart/form-data), the endpoint, the repeated `files` field encoding, and the security-relevant LFI restriction on `path`. It omits auth/permission requirements and whether attaching replaces or appends to existing agent files.
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 front-loaded sentences: purpose, wire format, then the caveat. The `syntx.agents.addFiles` mirror reference is the weakest sentence but still useful for cross-referencing SDK users; nothing else is 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?
For a 2-parameter tool with a fully documented schema and no annotations, the description covers invocation mechanics well. However, with no output schema, it says nothing about what is returned after attaching (file IDs, list of attached files) or what happens to already-attached files, leaving a gap an agent will hit after the call.
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, but the description adds meaning the schema does not: how `files` is serialized (field repeated once per file) and that `path` triggers a server-side read that fails over HTTP. That materially changes how an agent should populate the array.
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?
States a specific verb and resource ('Attach one or more files to an AI agent') and pins down the exact HTTP operation it wraps. It is clearly distinguishable from siblings like upload-files, list-agent-files, and delete-agent-files.
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?
Gives real operational guidance: the LFI caveat from upload-files carries over, and `path` is rejected over the HTTP transport, which steers callers toward `content_base64`. It stops short of explicitly stating when to prefer this over upload-files or delete-agent-files, so no full when/when-not matrix.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add-chats-to-projectA
Add one or more existing chats to an existing project. Mirrors syntx.folders.addChats. Sends a bare JSON array of chat UUIDs to POST /api/v1/folders/{folder_uuid}/add.
| 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 SSE only; "poll" uses REST polling; "auto" tries SSE 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 carries the burden and does well: it discloses the full lifecycle (create, send, wait, return), that the chat UUID is returned for follow-ups, and that streaming defaults are governed by the SYNTX_STREAM_MODE environment variable. It omits failure semantics (timeout behavior, partial failures), keeping it below 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?
Three front-loaded sentences with zero waste; the core behavior comes first, then the stateless-Q&A framing, then the optional streaming note.
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?
No output schema exists, and the description does explain the return value (the assistant reply plus the chat UUID). It is nearly complete for a one-shot tool, with only the undocumented optional parameters leaving a gap.
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% across 8 parameters. The description only touches `mode: "stream"`, and says nothing about scope, ai_name, timeout, model_type, or poll_interval, so it fails to compensate for the documented gaps.
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 compound verb sequence: create a chat, send a prompt, wait for the reply, and return it. This clearly distinguishes it from siblings like create-chat, send-message, and wait-for-response, which each do only one of those steps.
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?
It gives a clear use case: 'Ideal for stateless Q&A', and mentions follow-ups via the returned chat UUID. It stops short of explicitly stating when to prefer the lower-level siblings instead, so it is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel-messageA
Cancel an in-flight assistant message generation. Mirrors syntx.chats.cancelMessage. Issues POST /api/v1/chats/{chat_id}/messages/{message_id}/cancel. A 404 response is treated as success (the message already finished).
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | Chat UUID or numeric id (required). | |
| message_id | Yes | Message id to cancel (required). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description has to carry the full behavioral burden, and it does disclose the most important quirk: a 404 is treated as success because the message already finished, which affects how the agent should interpret the result. It says nothing about idempotency on repeat calls, what happens to a partially generated message, or any auth requirements, so significant ground is left uncovered.
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 short sentences: purpose first, then the SDK mirror and endpoint, then the 404 quirk. Every sentence earns its place and nothing is padded.
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 two-parameter mutation with full schema coverage and no output schema, the description covers the essentials, including the non-obvious 404-as-success rule that would otherwise mislead an agent. The only real gap is the absence of any comparison with delete-message.
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 both chat_id and message_id are already documented, including that chat_id can be a UUID or numeric id. The description adds no parameter meaning beyond what the schema provides, which is the expected baseline when the schema does the heavy lifting.
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?
States a specific verb and resource: cancel an in-flight assistant message generation, and pins it to a concrete endpoint. It's clear what the tool does, but it doesn't name the nearby sibling delete-message, so the boundary between canceling a generation and deleting a message is left for the agent to infer.
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 'in-flight assistant message generation' implies when to use it (while a generation is still running), but there is no explicit when-not guidance and no mention of the alternative, delete-message, which appears in the sibling list. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chat-existsA
Pre-flight check: returns whether a chat (by id or uuid) currently exists on the server. Use this before send-message if you may be holding a stale reference. Backed by GET /api/v1/chats/{chatId} — 404 maps to false, 200 maps to true.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | Chat numeric id or uuid. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it discloses the backing endpoint and the exact 404→false / 200→true mapping, which is the key behavioral contract an agent needs. It omits auth requirements and any rate-limit or latency notes, keeping it 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?
Two sentences with zero filler; the purpose and the pre-flight framing are front-loaded before the endpoint detail. Every clause earns its place.
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 trivial one-parameter boolean check with no output schema, the description supplies everything needed: purpose, when to call, and how responses map to true/false. Nothing required to invoke it correctly is missing.
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% and the single chat_id parameter is already documented as 'Chat numeric id or uuid.' The description's '(by id or uuid)' merely restates the schema, adding no new format or edge-case guidance, so 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?
States a specific verb (returns whether ... exists) and resource (a chat, by id or uuid), and frames it as a pre-flight check, which distinguishes it from list-chats and get-messages. An agent can tell what it does without opening the schema.
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 to call it before `send-message` when holding a stale reference, naming the sibling and the triggering condition. It stops short of stating when NOT to use it (e.g., after a fresh create-chat) 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.
create-agentB
Create an AI agent. Mirrors syntx.agents.create. Posts multipart/form-data to POST /api/v1/agents/create. name, system_prompt and model_name are required (the web client enforces the same). enabled_tools / default_models are objects and travel as JSON strings inside the multipart body.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Agent display name. | |
| model_name | Yes | Model the agent runs on, e.g. "gpt-4.1". | |
| description | No | Optional short description. | |
| style_prompt | No | Optional response-style instructions. | |
| enabled_tools | No | Tool toggles, e.g. `{"web_search": true, "sora_image": true, "suno_audio": true, "veo3_video": true, "code_interpreter": true}`. Unknown tool names are rejected server-side. | |
| system_prompt | Yes | System instructions that drive the agent. | |
| default_models | No | Default model per media scope, e.g. `{"image": "gpt-image-1"}`. | |
| use_chat_history | No | Whether the agent may read the conversation history. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral burden. It usefully discloses the HTTP method, multipart/form-data encoding, and that enabled_tools/default_models travel as JSON strings, but it does not cover authentication requirements, side effects, or post-creation behavior.
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 front-loaded with the core purpose, followed by implementation details in a logical order. It is mostly efficient, though 'Mirrors syntx.agents.create' and 'the web client enforces the same' are slightly less essential than the rest.
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 create tool with no annotations and no output schema, the description gives the agent enough to construct a correct call: endpoint, required fields, and multipart serialization details. It does not describe return values or auth, but the schema coverage is complete for parameters.
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 parameter meaning is already well documented. The description adds value by reiterating the three required fields and, more importantly, explaining that enabled_tools/default_models are objects serialized as JSON strings inside the multipart body.
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 and resource: 'Create an AI agent' and references the specific API endpoint. It is distinguishable from list/get/update/delete siblings by the verb, though it does not explicitly name an alternative sibling as a contrast.
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 no explicit guidance on when to use create-agent versus update-agent, list-agents, or other sibling tools. Usage is only implied by the verb 'Create', with no when-not or alternative conditions stated.
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-agentA
Permanently delete an AI agent. Mirrors syntx.agents.delete. Issues DELETE /api/v1/agents/{agent_id} with the agent UUID. This action is destructive and cannot be undone — confirm before invoking.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent UUID — the `agent_id` field returned by `list-agents`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden and does well: it flags destructive, irreversible behavior and the exact HTTP call, which is the critical safety information. It omits secondary effects (what happens to the agent's files, chats, or whether the call requires elevated permissions), leaving a modest gap.
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 short sentences: what it does, how it maps to the API, and the safety warning. The destructive-risk warning is placed last for emphasis with zero filler.
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 destructive tool with no annotations and no output schema, the description covers identity, endpoint, and irreversibility well. The only missing pieces are post-delete side effects and the response shape, which is minor since no output schema exists.
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% and the `agent_id` property already documents that it is an agent UUID from `list-agents`. The description only restates that the UUID is placed in the URL path, adding no new format or constraint detail, so 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?
States a specific verb and resource ("Permanently delete an AI agent") and pins the exact backend operation (`syntx.agents.delete`, `DELETE /api/v1/agents/{agent_id}`). This is clearly separable from siblings like `delete-agent-files`, `update-agent`, and `get-agent`.
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?
Gives an explicit operational precondition — "confirm before invoking" — which tells the agent this must not be fired off autonomously. It does not name alternatives (e.g. `update-agent` or `delete-agent-files` for narrower cleanup), so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-agent-filesB
Remove files from an AI agent. Mirrors syntx.agents.deleteFiles. Issues DELETE /api/v1/agents/files/delete/{agent_id} with {file_ids: [...]}. Destructive — confirm before invoking.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent UUID — the `agent_id` field returned by `list-agents`. | |
| file_ids | Yes | File ids to remove, as returned by `list-agent-files`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does carry useful weight: it explicitly flags the operation as destructive, requires confirmation, and names the underlying SDK method and HTTP verb. But critical behavior is undisclosed — whether this unlinks files from the agent or permanently deletes them from storage, whether it is reversible, and how partial failures across multiple `file_ids` are handled.
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 short sentences with the destructive warning placed last, which is a reasonable emphasis position. The "Mirrors `syntx.agents.deleteFiles`" sentence is marginal value for an agent that cannot call the SDK, but it is one clause and does not bloat the definition.
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 two-parameter destructive tool with no annotations and no output schema, the definition covers identity, endpoint, and the confirmation requirement. It stops short on the two things an agent most needs before a destructive bulk call: the blast radius (unlink vs. permanent delete) and what the response reports back.
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 both parameters are already fully documented in the schema, including where to obtain `agent_id` and `file_ids`. The description only restates the payload shape `{file_ids: [...]}` and the path segment, adding no new meaning about ordering, limits, or atomicity.
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?
"Remove files from an AI agent" gives a specific verb and a scoped resource, and the endpoint path `DELETE /api/v1/agents/files/delete/{agent_id}` pins down exactly which operation this is. It is clearly not `delete-agent` or `delete-file`, but the description never explicitly contrasts with those siblings, so differentiation is inferred rather than stated.
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?
"Destructive — confirm before invoking" is a real usage directive, and the schema's references to `list-agents` and `list-agent-files` imply the prerequisite lookup workflow. However, there is no guidance on when to choose this over `delete-file` (deleting a file outright) or when to use `add-agent-files` to correct a mistake, so the when/when-not is only implied.
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-messageA
Permanently delete a single message. Mirrors syntx.chats.deleteMessage. Issues DELETE /api/v1/chats/messages/{message_id} (no chat id in the path). This action is destructive and cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | Message id to delete (required). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, it carries the behavioral burden well by stating the action is destructive and irreversible, and it identifies the underlying endpoint. It omits permissions or error behavior, but covers the key risks for a delete operation.
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 sentences, front-loaded with the core action and immediately followed by the important destructive warning and endpoint detail. No wasted 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 simple one-parameter delete tool with no output schema, the description covers purpose, destructiveness, and the endpoint sufficiently 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 coverage is 100%, so the parameter is already documented. The description adds useful path context by clarifying there is no chat id in the URL, only message_id.
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?
States a specific verb and resource: permanently deleting a single message. It clearly distinguishes this from deleting a chat or file, and the scope is 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?
Makes clear this is for permanent deletion of one message and warns that the action cannot be undone. It does not explicitly compare with siblings like delete-chat or toggle-message-favorite, but the destructive context is 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-agentA
Fetch one agent's full record. Mirrors syntx.agents.get. Hits GET /api/v1/agents/info/{agent_id}. Returns the agent object (name, system_prompt, style_prompt, model_name, is_ready, use_chat_history, enabled_tools, default_models, files[]).
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent UUID — the `agent_id` field returned by `list-agents`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden; it discloses the HTTP method/path (GET /api/v1/agents/info/{agent_id}) and lists the returned fields, indicating a read operation. It omits error behavior, permissions, and whether missing IDs return null or error, so it is strong but not complete.
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?
Front-loaded with the core action, followed by concise implementation and return-shape details. It is efficient and contains no filler, though the SDK mirror mention is marginally useful.
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?
Since there is no output schema, listing the returned fields is valuable and sufficient for an agent to understand the response shape. No annotations exist, but the GET endpoint and return fields communicate the key read-only behavior; only error/permission details are missing.
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%, and the sole parameter is already documented as an agent UUID from list-agents. The description adds no parameter semantics beyond what the schema provides, so the 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?
States a specific verb and resource ('Fetch one agent's full record') and explicitly scopes it to a single agent, which distinguishes it from sibling list-agents. The endpoint and return fields reinforce exactly 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?
Clear that this is for retrieving one agent when the agent_id is known, and the parameter description ties it to list-agents. It does not explicitly state when to avoid it or compare against alternatives such as list-agents, but the single-record scope makes usage apparent.
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-chatwoot-unreadA
Read the support-channel unread state for the current user. Returns {contact_found, has_unread}. The endpoint is gated server-side on the internal chatwoot_hmac identifier; the SDK never holds or forwards the HMAC itself, and the response carries no credential-shaped fields. Use to surface "the user has an unread support reply" without pulling the full Chatwoot widget into the AI workflow.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses server-side gating on the internal `chatwoot_hmac` identifier, that the SDK never holds or forwards the HMAC, and that the response carries no credential-shaped fields. It stops short of stating failure behavior when the gate rejects the call or whether results are cached/per-user scoped.
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 sentences, zero padding, with the purpose and return shape front-loaded before the security model and usage guidance. Every sentence adds 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?
No output schema exists, yet the description supplies the exact return keys and the security/auth model, which is everything an agent needs to call a zero-argument read tool 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?
Zero parameters, so there is no schema semantics to explain; baseline 4 applies. Nothing in the description is needed or missing on the parameter side.
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?
States a specific verb and resource ("Read the support-channel unread state for the current user") and immediately names the exact return shape `{contact_found, has_unread}`, making it unmistakable versus siblings like get-balance or chat-exists.
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?
Gives a concrete use case ("Use to surface 'the user has an unread support reply' without pulling the full Chatwoot widget") and implicitly contrasts with heavier alternatives, but does not name a specific sibling or state when not to use it.
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-llm-limitsA
Return the current LLM usage limits (6h and 7d windows). Each window reports percent_left (0..100), started_at, expires_at. A window with expired or null expires_at is normalized to {percent_left: 100, started_at: null, expires_at: null}. Also returns the subscription plan the limits belong to.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose real behavior: the exact return fields, the 0..100 range of percent_left, and the non-obvious normalization rule that expired/null expires_at becomes percent_left=100 with null timestamps. It omits that the call is read-only and any auth requirements, but the edge-case contract is genuinely valuable.
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 short sentences, front-loaded with the purpose then the return contract, then the plan field. Every sentence adds information an agent would otherwise have to guess.
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?
There is no output schema and no annotations, so the description must explain the return shape — and it does, covering both window objects and the subscription plan. It is nearly complete for a zero-param getter; only the safety profile (read-only, no side effects) is left unstated.
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 takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies; no parameter guidance is needed.
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 ('Return the current LLM usage limits') and scopes it to 6h and 7d windows, which distinguishes it from generic siblings like get-balance and get-tokens-history. It doesn't explicitly name those siblings, so it stops short of a 5.
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?
There is no statement of when to call this versus get-balance, get-tokens-history, or get-llm-reset-price, all of which sound adjacent. The agent must infer from the resource name alone that this reports quota consumption rather than remaining balance or pricing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-llm-reset-priceA
Quote the cost of resetting the LLM usage windows. Mirrors syntx.llm.getResetPrice. Hits GET /api/v1/llm/limits/reset/price. Each window reports available (bool), price_tokens (null when not resettable), used_percent and reason. Read-only — it does not purchase the reset.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it declares read-only semantics, discloses that price_tokens is null when a window isn't resettable, and lists the per-window fields returned. It omits auth requirements, rate limits, and whether the quote is stable over time.
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 sentences, front-loaded with purpose, then implementation anchor, then return shape, then the read-only caveat. Every sentence carries distinct information with no 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?
No output schema exists, and the description compensates by enumerating the response fields (available, price_tokens, used_percent, reason) including their null semantics. Combined with the read-only caveat, an agent has everything needed to call and interpret 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 tool takes zero parameters, so the baseline is 4. The description correctly adds no parameter detail and instead spends its words on the return shape, which is the right allocation.
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?
States a specific verb and resource ('Quote the cost of resetting the LLM usage windows') and pins it to an exact backend route (GET /api/v1/llm/limits/reset/price), which cleanly separates it from get-llm-limits and other billing siblings like get-balance or list-token-pricing.
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 opening sentence establishes the use case (pricing a reset), and the closing 'Read-only — it does not purchase the reset' rules out confusion with an actual reset action. It never names a sibling alternative explicitly (e.g. get-llm-limits for window status), so it stops short of a full when/when-not routing statement.
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-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.
get-prompt-enhancement-taskA
Poll a prompt-enhancement task. Wraps syntx.promptEnhancer.getTask. Hits GET /api/v1/prompt-enhancer/tasks/{id}. status is one of pending | completed | failed. The completed_prompt field carries the enhanced text on completed.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task id from start-prompt-enhancement (required). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does useful work: it identifies a GET endpoint, describes polling, enumerates `status` values, and names `completed_prompt` as the output on success. It stops short of documenting auth, rate limits, or failed-task error details.
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 front-loaded and compact, covering polling, status values, and the success field in four sentences. The wrapper function and endpoint details are somewhat implementation-oriented but not disruptive.
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 polling tool with no output schema, the description covers the essential call behavior: poll the task, watch `status`, and read `completed_prompt` on completion. It leaves some response and error details unspecified, but the core operational context is sufficient.
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% and the only parameter is already documented as the task id from `start-prompt-enhancement`. The description adds no further meaning about the parameter beyond what the schema provides, so 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?
The description uses a specific verb and resource: 'Poll a prompt-enhancement task.' It also distinguishes the operation from the sibling `start-prompt-enhancement` by implying retrieval of an existing task rather than creation.
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 word 'Poll' clearly signals the intended repeated-call usage, and the schema links `task_id` to `start-prompt-enhancement`. It lacks explicit when-not guidance or mention of alternatives such as `wait-for-response`, but the usage context is still clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-prompt-enhancer-costA
Return the token cost of enhancing a prompt for a given model. Wraps syntx.promptEnhancer.getCost. Hits GET /api/v1/prompt-enhancer/cost?model_type=…. 422/model_not_enhanceable when the model is not enhanceable.
| Name | Required | Description | Default |
|---|---|---|---|
| model_type | Yes | Model identifier (required). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose that this is a GET read against `/api/v1/prompt-enhancer/cost` and that unenhanceable models yield 422/model_not_enhanceable. It omits auth requirements, rate limits, and whether the underlying getCost call has side effects, but the key failure mode is surfaced.
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 sentences, front-loaded with the purpose and then the mechanics and error case. The SDK/endpoint internals are borderline noise for an agent but they are compact and do not obscure the primary statement.
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 one-parameter tool with no output schema and no annotations, the description covers purpose and the main error, but leaves the return shape ambiguous — 'token cost' could be a scalar or an object with input/output token counts. That ambiguity matters precisely because there is no output schema to fall back on.
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% and the single model_type parameter is already documented as required. The description's endpoint example shows model_type as a query parameter but adds no constraints, valid values, or format details 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?
States a specific verb and resource: 'Return the token cost of enhancing a prompt for a given model', which is clearly distinct from start-prompt-enhancement and get-prompt-enhancement-task. It does not explicitly name those siblings, so differentiation is by implication rather than direct routing.
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?
Usage is implied — call this before enhancing to learn the cost — but the description never states when to use this versus start-prompt-enhancement or what the caller should do with the returned cost. The 422/model_not_enhanceable case is documented, which is a useful hint but not full usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-tokens-historyA
Cursor-paginated token-spend history. Wraps syntx.user.getTokensHistory. Hits GET /api/v1/user/tokens/history. Pass the previous page's next_cursor (if non-null) to walk forward; null means the last page.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Cursor from the previous page. Omit on the first call. | |
| page_size | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden. It does disclose real behavior — cursor pagination, terminal null cursor, and the underlying endpoint wrapping `syntx.user.getTokensHistory` — but says nothing about auth requirements, rate limits, ordering, or what a history record contains.
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 short sentences, front-loaded with the resource and followed by the pagination rule. The wrapper name and raw endpoint path are marginal value for an agent choosing a tool, but they are cheap and aid error diagnosis.
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?
No output schema exists, so the description should sketch the return shape, yet it only implies a `next_cursor` field and never says what each history entry contains (model, tokens, cost, timestamp) or the sort order. For a history/listing tool this leaves the agent guessing about results.
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?
At 50% schema coverage the description has to compensate, and it does for the key parameter: it reveals that the cursor value comes from the previous response's `next_cursor`, a link the input schema never states (it only says 'Cursor from the previous page'). `page_size` is left entirely to schema constraints, which are adequate.
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?
"Cursor-paginated token-spend history" names a specific resource and its retrieval mechanism, which an agent can distinguish from get-balance (current balance) and list-token-pricing (rates) without opening the schema. It stops short of explicitly contrasting with those siblings, but the resource is 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 explains how to page (pass `next_cursor` while non-null) but never states when to reach for this tool versus get-balance or list-token-pricing, nor any exclusions or prerequisites. Usage is implied by the resource name rather than specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-agent-filesA
List the files attached to an AI agent. Mirrors syntx.agents.listFiles. Hits GET /api/v1/agents/files/list/{agent_id} and returns the file array.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent UUID — the `agent_id` field returned by `list-agents`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the read-only nature via the GET endpoint, the SDK method it mirrors, and the return shape ('returns the file array'). It omits auth requirements, permission scope, pagination, and whether the array is bounded, which are the remaining behavioral gaps.
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 short sentences, front-loaded with the purpose, followed by a useful mirror reference and the endpoint/return. No filler, nothing redundant.
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 one-parameter read tool with no output schema, the description covers purpose, retrieval target, and return type, which is close to what an agent needs. Auth/permission context and result-size expectations are the only missing pieces.
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?
There is a single parameter at 100% schema description coverage, and the schema already explains that agent_id is the UUID returned by list-agents. The description adds nothing about the parameter, so the baseline of 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?
States a specific verb and resource: 'List the files attached to an AI agent', which is clearly distinct from mutation siblings like add-agent-files and delete-agent-files. It does not explicitly differentiate itself from the similarly named list-generated-files or list-uploaded-files, so an agent must infer the distinction.
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?
Usage is only implied by the name and the resource target; there is no explicit 'use this when' or exclusion of alternatives. The schema's reference to list-agents gives an implicit prerequisite chain (resolve agent_id first), which is the only real guidance present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-agentsA
List the AI agents visible to the authenticated account. Mirrors syntx.agents.list. Hits GET /api/v1/agents/list. Returns {agents: [{name, description, agent_id, editable, status}], agent_limit, agent_count, can_create_more} — the list mixes the caller's own agents with platform agents shared across accounts (editable: false).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and largely meets it: it discloses the exact return envelope (agents array, agent_limit, agent_count, can_create_more) and, crucially, that the list mixes the caller's own agents with shared platform agents marked `editable: false` — a non-obvious behavior an agent would otherwise get wrong. It stops short of stating whether the result is paginated or how visibility permissions are determined.
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?
Front-loaded with purpose and scope before moving to the endpoint and return shape, so an agent gets the essential facts in the first clause. The return-shape enumeration is dense but earns its place given the absence of an output schema; the `Mirrors syntx.agents.list` fragment is the only lower-value 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?
For a zero-parameter read tool with no annotations and no output schema, the description supplies everything an agent needs: what it enumerates, the exact response fields, and the semantic caveat about mixed ownership. Little is left to guess before invoking 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 tool takes zero parameters and the schema is a closed empty object, so there is nothing for the description to disambiguate. Baseline 4 applies; the description correctly does not invent parameter guidance.
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?
States a specific verb and resource ('List the AI agents') and pins the scope to 'visible to the authenticated account', which is the key discriminator against get-agent and the create/update/delete-agent siblings. The immediate identification of the backing endpoint (`GET /api/v1/agents/list`) removes any ambiguity about what is being enumerated.
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 scoping phrase 'visible to the authenticated account' implies the right context for use, but there is no explicit statement of when to prefer this over get-agent for a single record, or any dependency/prerequisite call. Usage is inferable from the name and scope rather than stated.
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-auth-identitiesA
List the external identities linked to the current syntx.ai account (Telegram, email, …). Returns a sanitised {provider, email, username, linked_at} projection — the per-provider breakdown that get-profile does not carry. Only the documented fields are forwarded; anything else the upstream adds (and any field whose name looks credential-shaped) is dropped at the SDK boundary, so a future server-side change can never leak through a tool surface without an explicit SDK update.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the exact return projection ({provider, email, username, linked_at}) and the sanitisation/filtering behavior at the SDK boundary, which is meaningful context an agent could not infer. It omits read-only confirmation and any auth/rate-limit notes, keeping it 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?
Front-loaded with purpose and return shape in the first two sentences; the third sentence adds useful behavioral context but drifts into meta-commentary about the SDK's future-proofing ('a future server-side change can never leak through a tool surface'), which is less relevant to tool selection.
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?
There is no output schema and no annotations, yet the description fully compensates: it names the returned fields, explains the sanitisation behavior, and contrasts with the sibling tool. An agent has everything needed to call this zero-arg tool and interpret its result.
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 takes zero parameters, so there is no parameter semantics to explain and the baseline of 4 applies. The description correctly does not invent parameters or imply optional filters.
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?
States a specific verb and resource ('List the external identities linked to the current syntx.ai account') and immediately names the sibling it differs from: the per-provider breakdown that 'get-profile' does not carry. An agent can distinguish it from get-profile and whoami without opening any schema.
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 'the per-provider breakdown that get-profile does not carry' effectively tells the agent when to pick this tool over get-profile. However, it never states an explicit when-not or what get-profile should be used for instead, so the routing is clear but not fully spelled out.
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-eventsB
Event feed (promotions, milestones, etc.). Wraps syntx.events.list. Hits GET /api/v1/events?page=N. Returns {items, total, page, page_size}.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| page_size | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the pagination mechanism and the exact return shape (`{items, total, page, page_size}`), which is genuinely useful. It omits auth requirements, ordering of results, and behavior at the end of the feed, so the safety/behavioral profile is only partly 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?
Three short sentences, front-loaded with what the feed is. The SDK wrapper reference (`syntx.events.list`) is marginally useful and the raw endpoint string partly duplicates it, but nothing is bloated.
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?
There is no output schema, so spelling out the return shape is a real contribution, and pagination is at least mentioned. However, with zero annotation coverage and zero schema description coverage, a reader still lacks ordering, filtering limits, and page_size semantics needed to page through results 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 0%, so the description must compensate for both parameters. It references `page=N` and shows `page_size` in the return payload, but never explains what page_size does, its default of 20, or the 100 cap — the agent gets no semantic guidance beyond the schema's bare types.
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?
"Event feed (promotions, milestones, etc.)" names the resource and gives concrete examples of what an event is, which is more than a restatement of the name. The list verb is implied by the tool name rather than stated, and no sibling is named, so it stops short of a 5.
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?
There is no statement of when to call this versus alternatives, no prerequisites, and no exclusions. An agent must infer from the name alone that this is the tool for browsing the event feed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-generated-filesA
List files this account has generated (image / video / audio) — distinct from list-uploaded-files which lists user uploads. Wraps syntx.chats.getGeneratedFiles. Hits GET /api/v1/files/generated.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| scopes | No | Scope filter. Defaults to ["image","video","audio"] to match the web client. | |
| page_size | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It usefully discloses the backing endpoint as `GET /api/v1/files/generated`, implying a read operation, but it does not describe permissions, pagination behavior, ordering, or 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?
The description is front-loaded, compact, and wastes no sentences. The core purpose appears first, followed by the sibling distinction and implementation details.
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 list tool this is minimally adequate, but there is no output schema and no annotations, so the description should do more to explain return behavior or pagination. Parameter documentation is also incomplete for `page` and `page_size`.
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 low at 33%, and the description only hints at the media-type filter by mentioning image/video/audio. It does not explain `page` or `page_size` semantics beyond what the schema's defaults and bounds show.
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 and resource: list files this account has generated, with supported media types. It explicitly distinguishes this from `list-uploaded-files`, so an agent can route correctly without opening either schema.
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?
It clearly positions the tool against `list-uploaded-files`, which is the key nearby alternative. However, it does not spell out when-not conditions or other usage boundaries, such as whether generation jobs must be complete before files appear.
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 the model id / value and label), source (which upstream catalog to read: "ai" | "llm" | "both"). The two catalogs are not in sync — use source: "both" to see every model. value is always the model identifier; text-catalog rows additionally carry an llm object with the context window, capabilities and subscription gate.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Capability bucket, resolved against the live provider catalog. Omit to receive models from every bucket (including providers whose scope the API does not report). | |
| search | No | Case-insensitive substring matched against the model id and `label`. | |
| source | No | Which catalog to read. "ai" (default) = the platform catalog: the general catalog merged with the text catalog, because upstream keeps the two in sync only partially — "gpt-6.1-sol" exists only in the text catalog. "llm" = the text catalog alone (the view the SPA text-flow picker uses). "both" = an explicit spelling of "ai". | |
| 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 provided, the description carries the full behavioral burden and does useful work: it discloses the default active_only=true, explains that the two catalogs are partially out of sync, and notes that text-catalog rows carry an additional llm object. It does not discuss permissions or rate limits, but those are not central for a listing 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 front-loaded with the core purpose and then moves directly into filter semantics. It is dense but largely earns its length; a few details, such as repeating the exact-match example, could be tightened, but there is no major waste.
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?
There is no output schema, but the description explains the important return distinction: value is always the model identifier, and text-catalog rows additionally carry an llm object with context window, capabilities, and subscription gate. For a zero-required-parameter listing tool, this is sufficiently 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 already 100%, so the baseline is 3. The description still adds meaning beyond the schema: it says filters are combined with AND, clarifies that ai_name is exact match, explains the practical difference between 'ai', 'llm', and 'both', and notes that value is always the model identifier.
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 and resource: 'List AI models with upload constraints, supported media types, and features.' It is clear what the tool returns, but it does not explicitly distinguish this tool from nearby siblings like list-ai-services or get-llm-limits.
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?
It explains that filters are optional and combined with AND, and gives a concrete rule for catalog selection: use source: 'both' to see every model because the catalogs are not in sync. However, it gives no explicit guidance on when to choose this tool over sibling tools that also expose model or service information.
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 a {folders: Folder[], pagination: Pagination} envelope — not a bare array.
| 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?
No annotations are supplied, so the description carries the full burden. It does add real context: the exact endpoint (GET implies a read-only lookup), the SDK method it mirrors, and the paginated {folders, pagination} envelope rather than a bare array. It stops short of stating pagination controls, result limits, or auth requirements.
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 sentences, each earning its place: identity, SDK equivalence, endpoint, and return shape. The most important fact (what it returns) is stated up front with no filler.
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 one-parameter, read-only listing tool with no output schema, the description supplies the critical missing piece — the response envelope shape and pagination presence — plus the underlying endpoint. Only the absence of any pagination/limit behavior detail keeps it from being 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 description coverage is 100% — the single 'scope' parameter is fully documented with its enum and default. The description adds nothing about scope semantics beyond what the schema already says, 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?
States a specific verb and resource ("List projects") and resolves the ambiguous naming by equating projects with folders, which is the main disambiguation an agent needs. It does not, however, distinguish this from the related create-project/update-project/reorder-project siblings beyond the implicit 'list' verb.
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?
Usage is implied by the name and the scope parameter — clearly the tool to enumerate projects before adding/removing chats. But there is no explicit when-to-use/when-not guidance and no pointer to an alternative (e.g., when to prefer list-generated-files or list-uploaded-files for other file views).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-tariffsA
List plan tariffs (the actual price list). Wraps syntx.plans.listTariffs. Hits GET /api/v1/plans/tariffs?period=monthly|annual. The server 422s on any other period value, so the enum is pinned in the schema.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Tariff period. Defaults to "monthly" (matches the web client). | monthly |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It usefully states that the call hits a GET endpoint, indicating a read operation, and that the server returns 422 for invalid period values, which is concrete error behavior. It does not cover auth, rate limits, or return shape, but for a simple list endpoint the disclosed behavior is solid.
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-loads the tool's purpose. The sentence about wrapping the SDK method is less useful to an agent than the endpoint and validation behavior, but overall there is little wasted 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 low-complexity tool with one optional enum parameter and no output schema, the description covers purpose, endpoint, default behavior, and validation failure. It does not describe the returned tariff structure or auth requirements, but the essential calling information is present.
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 already 100%, with the period enum and default fully documented. The description adds value by explaining why the enum is pinned and that invalid values cause a server 422, which goes beyond the schema's basic enumeration.
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 and resource: "List plan tariffs," and clarifies it is "the actual price list." This distinguishes it from pricing-related siblings such as list-token-pricing and get-llm-limits, which cover different pricing concepts.
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 name and description imply usage for listing plan tariffs, but there is no explicit when-to-use or when-not-to-use guidance. It does not route the agent between this tool and siblings like list-token-pricing or get-llm-limits, leaving alternatives to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-token-pricingA
Per-model token cost table. Wraps syntx.tokensPricing.list. Hits GET /api/v1/tokens/pricing. Returns {items: [{id, cost}]}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: the GET endpoint signals a safe read, and it discloses the exact return shape {items: [{id, cost}]}. It stops short of mentioning auth requirements or whether the table is cached/stale, so it earns a 4 rather than 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?
Three short sentences, front-loaded with the purpose, with no filler. The 'Wraps `syntx.tokensPricing.list`' clause is internal implementation detail that adds little for an agent, a minor deduction.
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 zero-param read tool with no output schema, the description supplies endpoint, return structure, and resource scope, which is nearly everything needed to call it correctly. Only the sibling-routing guidance is missing.
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 takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies; the return-shape hint adds a little value without needing parameter detail.
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 names a specific resource ('per-model token cost table') and the backing endpoint, so the agent knows exactly what data comes back. It doesn't explicitly contrast with siblings like list-models or get-tokens-history, but the resource is distinct enough to be told apart.
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?
Usage is only implied: an agent can infer this is the tool for pricing lookups, but there is no explicit when-to-use statement, no mention of alternatives such as get-tokens-history or list-tariffs, and no prerequisites noted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-trend-categoriesA
List top-level feed categories used by the home feed. Wraps syntx.trends.categories. Hits GET /api/v1/trends/categories. Returns {categories: [{id, slug, title}]} — the display label is title (name was the old key and is no longer sent).
| 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 the full burden and does reasonably well: it discloses the backing wrapper and the GET endpoint, which implies a read-only, side-effect-free operation, and it describes the returned structure. It omits auth/rate-limit considerations and error behavior, which keeps it from 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?
Front-loads the purpose in the first sentence, then layers backend and return details. The wrapper name and the GET path are near-duplicates of the same fact, a small redundancy that keeps it from a 5.
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 zero-parameter read tool with no output schema, the description supplies exactly what is otherwise missing: the return shape and a warning that the display label is `title`, not the deprecated `name`. An agent has everything needed to call it and read the result.
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?
Zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-param tool applies. The response-shape note is genuinely additive but belongs to return values rather than 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?
States a specific verb and resource ('List top-level feed categories used by the home feed'), which clearly separates it from list-trend-tags and other list-* siblings by naming the resource and scope. It stops short of explicitly pointing at the sibling alternative, so it is clear but not fully differentiated.
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?
Usage is only implied via the phrase 'used by the home feed', giving context but not a when-to-use rule, prerequisites, or exclusions. Nothing tells the agent when to prefer this over list-trend-tags.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-trend-tagsA
List free-form tags used by the home feed. Wraps syntx.trends.tags. Hits GET /api/v1/trends/tags. Returns {tags: [{name}]}. Note: the live response is often empty.
| 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 the disclosure burden and does so reasonably well: it names the wrapper, endpoint, return shape, and the important caveat that the live response is often empty. It does not mention authentication or rate limits, but for a simple read-only list this is largely sufficient.
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-loads the purpose before implementation details. The wrapper and endpoint references are somewhat implementation-level, but they do not crowd out the useful 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 zero-parameter read tool with no output schema, the description supplies both the return shape and the key real-world caveat that responses are often empty. Nothing essential for correct invocation is missing.
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 there is no parameter semantics burden. The schema is empty and fully covered, and the description introduces no misleading parameter references.
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 and resource ('List free-form tags') and scopes it to the home feed. It clearly distinguishes tags from broader trend concepts, though it does not explicitly name the sibling list-trend-categories as an alternative.
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?
There is no explicit guidance on when to use this tool versus list-trend-categories or other trend-related siblings. The note that the live response is often empty is useful behavioral context but does not help an agent choose between tools.
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.
remove-chats-from-projectA
Remove one or more chats from a project. Mirrors syntx.folders.removeChats. Inverse of add-chats-to-project: sends a bare JSON array of chat UUIDs to POST /api/v1/folders/{folder_uuid}/remove.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_uuids | Yes | Chat UUIDs to remove. 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?
No annotations are provided, so the description carries the load. It usefully discloses the underlying SDK method and the POST endpoint shape (bare JSON array), but omits key behavior: whether chats are merely unlinked vs. deleted, reversibility, and error/permission behavior.
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?
Two tight sentences, front-loaded with the action and scope, with the sibling reference and endpoint detail following. No wasted 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 simple two-param mutation with no output schema, the definition is nearly adequate, but with zero annotation coverage it should clarify the effect on chats (unlink vs. delete) and any permission requirements.
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% with clear per-parameter descriptions, so the schema does the heavy lifting. The description only notes the array is 'bare', adding minimal semantic 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?
States a specific verb+resource ('remove one or more chats from a project') and explicitly names its inverse sibling add-chats-to-project, so the agent can distinguish it from related tools without opening schemas.
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 inverse relationship with add-chats-to-project gives clear context for when this tool applies, but it doesn't state prerequisites (e.g. ownership/permissions) or explicitly when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename-chatB
Rename a chat. Mirrors syntx.chats.rename. Issues PUT /api/v1/chats/{chat_id} with body {title}.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | New chat title (required). | |
| 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 carries the full behavioral burden. It usefully discloses the HTTP method and endpoint/body shape, making clear this is a mutation. However, it does not mention permissions, validation behavior, error cases, or what happens to the chat beyond the title change.
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 short sentences, front-loaded with the action. Every sentence contributes a concrete fact, and there is no filler.
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 two-parameter rename operation with full schema coverage and no output schema, the description gives enough to invoke the tool correctly. It omits return behavior and permission requirements, but these are less critical for this straightforward mutation.
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 both parameters are already documented in the schema. The description restates the body shape `{title}` and path `{chat_id}` but adds no extra semantics beyond what the schema provides.
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 and resource: 'Rename a chat.' It is clear what the tool does and naturally distinguishes it from siblings like create-chat, delete-chat, and list-chats. It does not explicitly contrast those siblings, so it falls short of a 5.
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 no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. The operation is self-evident, but there is no explicit usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reorder-projectA
Reorder a project within its scope. Mirrors syntx.folders.move. Issues PATCH /api/v1/folders/{folder_uuid}/move with {after_uuid}. Pass the UUID of the project to place it after; omit after_uuid (or pass null) to move to the top.
| Name | Required | Description | Default |
|---|---|---|---|
| after_uuid | No | UUID of the project to place this one after. Omit or pass null to move to the top. | |
| folder_uuid | Yes | Project UUID (required). |
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 does disclose the exact mutation (PATCH /folders/{folder_uuid}/move with {after_uuid}), which tells the agent this is a write with a specific payload shape. It omits permission requirements, side effects on other projects' ordering, and whether the move is reversible.
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 short sentences, front-loaded with the action, then the endpoint, then the parameter rule. Every sentence carries information an agent needs, with no filler.
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 two-parameter mutation with no output schema and no annotations, the description covers the action, the endpoint, and both parameters adequately. Missing only the failure/edge conditions (invalid after_uuid, cross-scope targets) and any hint about what the call returns.
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, and the description adds a meaningful restatement of the null/omit case for after_uuid that reinforces the schema's semantics. It does not explain what 'scope' means for folder_uuid or whether after_uuid must belong to the same 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?
States a specific verb and resource ('Reorder a project within its scope') and names the underlying API operation, so the agent knows exactly what changes. It does not explicitly contrast itself with the sibling update-project, leaving the agent to infer that reorder is ordering-only while update handles fields.
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?
Gives concrete invocation guidance for after_uuid (omit or null to move to top), which is effectively a usage rule. But it never says when to choose this over update-project or when reordering is appropriate, so usage is implied rather than stated.
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.
start-prompt-enhancementA
Start a prompt-enhancement task. Wraps syntx.promptEnhancer.start. Hits POST /api/v1/prompt-enhancer/enhance/start (captcha-gated, action generate). Returns {task_id}; poll with get-prompt-enhancement-task.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | The prompt to enhance (required). | |
| model_type | Yes | Target model identifier (required). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and discloses the endpoint, the captcha gate, the action name, and the return shape (`{task_id}`). It stops short of explaining how the captcha should be satisfied, cost implications, or error behavior.
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 brief sentences, front-loads the purpose, then gives the endpoint and return/polling contract without filler. Every clause is useful for invocation or follow-up.
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 two-parameter tool with no output schema, the description explains the return value and the required follow-up call. The main missing piece is how the captcha gate is meant to be handled by the agent.
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 both `prompt` and `model_type` are already documented in the schema. The description adds no extra semantics about valid model types or prompt constraints, matching the baseline for fully documented 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 states a specific verb and resource ("Start a prompt-enhancement task") and explicitly distinguishes itself from its sibling by naming `get-prompt-enhancement-task` as the polling counterpart. An agent can identify the tool's role without opening the schema.
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?
It gives clear sequencing guidance: call this to start, then poll with `get-prompt-enhancement-task` using the returned `{task_id}`. It does not mention when not to use it or how it relates to `get-prompt-enhancer-cost`, so it falls short of fully explicit alternatives/exclusions.
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 for text scope: opens an SSE connection on sse.syntx.ai, sends the prompt, and streams the assistant reply. Falls back to REST polling on transport failure. Intermediate progress is reported via notifications/progress (when the client supplies a progressToken); the final tool result contains the complete text.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Override the streaming strategy. Default "auto" (SSE 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, the description carries the full burden and does well: it discloses the SSE connection, REST polling fallback on transport failure, progress notifications, and that the final result contains the complete text. It omits auth, rate-limit, error-surfacing, and retry details.
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 sentences, front-loaded with the main purpose, and each clause adds useful transport, progress, or result information. There is no filler.
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 annotations or output schema, the description covers transport, fallback, progress reporting, and final output adequately. It still lacks parameter-choice guidance and error-condition detail, so it is 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 57%, and the description adds meaning for streaming mode, fallback behavior, and progressToken handling. It leaves model, ai_name, timeout, model_type, and the scope default largely unexplained, so it only partly compensates for the coverage 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?
States a specific verb/resource ('streams the assistant reply') and scope ('text scope'), plus the transport mechanism. It does not explicitly name the sibling to use instead, such as send-message or ask, so differentiation is implied rather than spelled out.
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 'one-shot streaming chat' and the fallback behavior imply when this tool is useful, but the description never states when to choose it over send-message, ask, or wait-for-response, nor when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toggle-chat-favoriteA
Toggle the favorite (bookmark) flag of a chat. Mirrors syntx.chats.toggleFavorite. Issues POST /api/v1/chats/{chat_id}/favorite (no body). Each call flips the current state — favorited becomes unfavorited and vice versa; verify the result via list-chats.
| 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 carries the burden well: it discloses the HTTP method and path, that no body is sent, and — critically — that the operation is a non-idempotent flip, so repeated calls alternate state. Missing only auth/permission requirements and error behavior.
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 short sentences: purpose first, then the mechanics, then the state-flip caveat with a verification pointer. Nothing extraneous, and the most failure-prone detail (flip semantics) is surfaced rather than buried.
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 one-parameter mutation with no output schema, the description covers everything needed: the effect, the fact it is not idempotent, and how to check the resulting state via list-chats. Nothing an agent needs to call it correctly is absent.
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?
Single parameter at 100% schema coverage, so the schema already defines chat_id as UUID or numeric id. The description reinforces its role by embedding it in the endpoint path, but adds no new format or constraint detail.
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?
Names a specific verb and resource ('Toggle the favorite (bookmark) flag of a chat') and pins it to a concrete endpoint (POST /api/v1/chats/{chat_id}/favorite). The chat scope also implicitly separates it from the sibling toggle-message-favorite.
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?
Explains the operational semantics of use (each call flips state; verify via list-chats), which tells the agent when this is the right call and how to confirm it. It stops short of explicitly contrasting with toggle-message-favorite or list-chats as a preferred alternative for reading state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toggle-message-favoriteA
Toggle the favorite (bookmark) flag of a single message. Mirrors syntx.chats.toggleMessageFavorite. Issues POST /api/v1/chats/{chat_id}/messages/{message_id}/favorite (no body). Each call flips the current state; favorites are readable via get-favorite-messages.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | Chat UUID or numeric id (required). | |
| message_id | Yes | Message id (required). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well on the key non-obvious trait: 'Each call flips the current state' signals this is not idempotent and cannot be used to set a desired state directly. It also discloses the POST endpoint and that there is no body. It omits permission/auth requirements and error behavior for nonexistent messages.
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 short sentences, front-loaded with the action and semantics, with the endpoint and read-path as supporting detail. The `syntx.chats.toggleMessageFavorite` mirror reference is low-value for an agent choosing a tool but does not 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 2-parameter, no-output-schema tool, the description covers the essential semantics (flip behavior, no body, where to verify state). The remaining gap is the return value and failure modes, which matter somewhat since there is no output schema to fall back on.
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% and both parameters are documented in-schema, so the baseline applies. The description only implicitly maps chat_id/message_id into the URL path template; it adds no format or constraint detail 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?
States a specific verb+resource: toggling the favorite/bookmark flag on a single message, with the concrete endpoint shown. The phrase 'single message' implicitly separates it from the sibling toggle-chat-favorite, but that sibling is never named, so the differentiation is left to inference.
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?
It tells the agent how to read favorites afterward via `get-favorite-messages`, which is useful routing. However, it gives no explicit when-to-use/when-not guidance and does not address the most confusable alternative, toggle-chat-favorite, or say what to do if the message is already favorited (since the call flips unconditionally).
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.
update-agentA
Update an AI agent. Mirrors syntx.agents.update. Issues PUT /api/v1/agents/update/{id} with the provided fields. The path segment is the agent's numeric id (from get-agent), not its UUID. Only the provided fields are sent.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New display name. | |
| agent_id | Yes | Numeric agent id (the `id` field returned by `get-agent`). | |
| model_name | No | New model name. | |
| description | No | New description. | |
| style_prompt | No | New response-style instructions. | |
| enabled_tools | No | Replacement set of tool toggles. | |
| system_prompt | No | New system instructions. | |
| default_models | No | Replacement default model per media scope. | |
| use_chat_history | No | Whether the agent may read the conversation history. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does most of it well: it discloses the mutation type (PUT), the partial-update behavior ('Only the provided fields are sent'), and the numeric-id-vs-UUID trap that commonly causes failed updates. It omits permission requirements, whether omitted fields are preserved vs cleared for nested objects like enabled_tools/default_models, and what a successful update returns.
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 short sentences, front-loaded with the operation and followed by the implementation detail and the critical id-format caveat. No filler and nothing that could be cut without losing 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 9-parameter mutation tool with nested objects, no annotations, and no output schema, the description covers the essentials an agent needs to call it correctly: the endpoint, the id type, and the sparse-update contract. The remaining gap is that, absent an output schema, nothing is said about what the response contains or how to confirm the update took effect.
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 every parameter is already documented in the schema, and the description's numeric-id note largely duplicates the agent_id field description. The one genuine addition is the partial-update guarantee that unlisted fields are not sent, which clarifies optionality semantics 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?
States a specific verb and resource ('Update an AI agent') and names the underlying endpoint and SDK method, so the agent knows exactly which operation is performed. It is clearly distinguishable from list-agents/get-agent/create-agent/delete-agent by name and by the PUT semantics described.
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?
Usage is implied rather than stated: the agent must already have the numeric id, and the description points to get-agent as the source of that id, which is a useful routing hint. However, there is no explicit when-to-use/when-not guidance, no mention of create-agent as the alternative for new agents, and no statement about prerequisites such as ownership or permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-projectA
Update a project's title and/or color. Mirrors syntx.folders.update. Issues PATCH /api/v1/folders/{folder_uuid}/change; only the provided fields are sent. At least one of title / color is required.
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | New project color (e.g. a CSS hex value like "#9C9C9C"). | |
| title | No | New project title. | |
| 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 and does meaningful work: it discloses the underlying PATCH endpoint, confirms partial-update semantics ('only the provided fields are sent'), and cites the SDK method it mirrors. It stops short of stating permission requirements or what the response contains, which keeps it out of the top band.
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 short sentences, front-loaded with the action, followed by implementation detail and then the constraint. Nothing is padded and each sentence carries distinct 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 3-parameter mutation with no annotations and no output schema, the description covers action, scope, update semantics, and the key precondition. The remaining gap is the return value and any auth/permission expectations, which are not addressed.
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 would be 3, but the description adds a genuine cross-parameter constraint the schema cannot express: at least one of title/color must be supplied even though only folder_uuid is formally required. That is real added meaning beyond the structured 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?
States a specific verb and resource ('Update a project's title and/or color') and pins the exact fields affected. The sibling list contains create-project, delete-project, and reorder-project, and this description makes clear it handles none of those concerns, so an agent can route correctly without opening the schema.
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 'at least one of title/color is required' rule gives a usable precondition for invoking it, but there is no explicit statement of when to prefer this over reorder-project or how it relates to the other project tools. Usage is implied by the field list rather than spelled out.
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. Text-scope chats open an SSE connection on sse.syntx.ai and fall back to REST polling on transport failure. 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, the description carries the full burden and does well: it discloses that the call blocks, the exact resolution condition, SSE-then-REST-polling transport fallback, and that media-only replies still resolve. Gaps remain around timeout-expiry behavior (error vs. partial return) and permission/auth requirements.
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?
Front-loaded with the blocking purpose and return values, then the resolution rule, then transport detail — a sound ordering with no filler sentences. The hard-coded hostname 'sse.syntx.ai' is the one piece of detail that borders on noise.
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?
No output schema, but the description states what comes back (text plus media URLs) and how completion is determined, so an agent can consume the result. The main missing piece for a blocking call is what happens when the timeout elapses.
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% — timeout and poll_interval are already documented in the schema, and chat_id is self-evident. The description's only contribution is contextualizing polling via the SSE/REST fallback sentence; it adds no units, defaults, or guidance on choosing timeout/poll_interval values.
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?
States a precise blocking verb ('Block until the latest assistant message in a chat finishes generating') plus what it returns (text and media URLs). It names the exact completion predicate (message_object[i].completed === true) and explicitly covers media-only replies, which distinguishes it from get-messages / stream-message / get-inprogress at a glance.
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?
'Use after `send-message`' gives an explicit sequencing cue, and the blocking semantics imply when this is preferred over a plain fetch. It does not, however, contrast with close siblings like stream-message or get-inprogress, nor state when not to use it.
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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
35 tool updates
v0.4.0- Added
add-agent-files - Changed
ask1 field changed- changed
Input schema / properties / mode / descriptionPrevious value: -"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)."New value: +"Override the streaming strategy. \"stream\" uses SSE only; \"poll\" uses REST polling; \"auto\" tries SSE then falls back to polling; \"off\" disables waiting (the tool returns after sending)."
- Added
cancel-message - Added
chat-exists - Added
create-agent - Added
delete-agent - Added
delete-agent-files - Added
delete-message - Added
get-agent - Added
get-chatwoot-unread - Added
get-llm-limits - Added
get-llm-reset-price - Removed
get-model-info - Added
get-prompt-enhancement-task - Added
get-prompt-enhancer-cost - Added
get-tokens-history - Added
list-agent-files - Added
list-agents - Added
list-auth-identities - Added
list-events - Added
list-generated-files - Changed
list-models3 fields changed- changed
Input schema / properties / scope / descriptionPrevious value: -"Capability bucket inferred from the syntx.ai provider. Omit to receive models from every bucket (including providers that don't match any known bucket)."New value: +"Capability bucket, resolved against the live provider catalog. Omit to receive models from every bucket (including providers whose scope the API does not report)." - changed
Input schema / properties / search / descriptionPrevious value: -"Case-insensitive substring matched against the model `value` and `label`."New value: +"Case-insensitive substring matched against the model id and `label`." - added
Input schema / properties / sourceAdded value: +{ + "description": "Which catalog to read. \"ai\" (default) = the platform catalog: the general catalog merged with the text catalog, because upstream keeps the two in sync only partially — \"gpt-6.1-sol\" exists only in the text catalog. \"llm\" = the text catalog alone (the view the SPA text-flow picker uses). \"both\" = an explicit spelling of \"ai\".", + "enum": [ + "ai", + "llm", + "both" + ], + "type": "string" +}
- Added
list-tariffs - Added
list-token-pricing - Added
list-trend-categories - Added
list-trend-tags - Added
remove-chats-from-project - Added
rename-chat - Added
reorder-project - Added
start-prompt-enhancement - Changed
stream-message1 field changed- changed
Input schema / properties / mode / descriptionPrevious value: -"Override the streaming strategy. Default \"auto\" (WSS with polling fallback)."New value: +"Override the streaming strategy. Default \"auto\" (SSE with polling fallback)."
- Added
toggle-chat-favorite - Added
toggle-message-favorite - Added
update-agent - Added
update-project
28 tool updates
v0.3.0- First observed
add-chats-to-project - First observed
ask - First observed
create-chat - First observed
create-project - First observed
delete-chat - First observed
delete-file - First observed
delete-project - First observed
generate-audio - First observed
generate-image - First observed
generate-video - First observed
get-balance - First observed
get-favorite-messages - First observed
get-inprogress - First observed
get-messages - First observed
get-model-info - First observed
get-profile - First observed
list-ai-services - First observed
list-chats - First observed
list-models - First observed
list-projects - First observed
list-uploaded-files - First observed
send-message - First observed
set-token - First observed
stream-message - First observed
transcribe - First observed
upload-files - First observed
wait-for-response - First observed
whoami
TDQS
Scored across 58 tools
Most tools target distinct resources, but chat/message operations overlap heavily: ask, stream-message, send-message plus wait-for-response, and get-messages vs get-favorite-messages require careful reading. The detailed descriptions help, but the breadth of the surface makes misselection plausible.
Names are consistently kebab-case and mostly follow a verb_noun pattern with predictable resource suffixes. Minor deviations like whoami, ask, transcribe, chat-exists, and get-inprogress keep it from being perfectly uniform.
58 tools is far beyond a practical agent-facing surface, with many niche endpoints for trends, tariffs, token pricing, prompt enhancer, identities, and events. The broad platform scope explains some size, but the selection burden remains extreme.
The surface covers chats, messages, files, projects, agents, models, media generation, billing/limits, and auth extensively. Minor gaps remain, such as quoting LLM reset price without a corresponding reset/purchase action and limited direct chat metadata retrieval.
Maintenance
Related MCP Connectors
MCP server that lets your AI assistant build and deploy apps, hosting each one at a live URL.
Chat, image, video, and audio models from many vendors behind one remote MCP server and one key.
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.
Related MCP Servers
- AlicenseAqualityFmaintenanceAn 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.57242 PyPI24MIT- AlicenseNot gradedqualityDmaintenanceA full-featured MCP server providing seamless access to CustomGPT.ai APIs, enabling agent and conversation management through MCP-compatible clients.5MIT
- AlicenseAqualityDmaintenanceMCP server for AI image generation supporting multiple providers (OpenRouter, Together AI, Replicate, fal.ai) and compatible with various MCP agents.263 npm1MIT