Skip to main content
Glama
ssm82

syntx-ai-mcp

by ssm82

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
SYNTX_LANGNoLocale for API (e.g., language of plan responses). Does not affect model generation language.en
SYNTX_TOKENNoBearer token for syntx.ai. Required for most operations (can be set at runtime via set-token).
SYNTX_WS_URLNoBase URL for WSS endpoint.wss://api.syntx.ai/api/v1
MCP_HTTP_PORTNoHTTP transport port.3000
MCP_TRANSPORTNoMCP server transport. Values: stdio, http.stdio
SYNTX_TIMEOUTNoHTTP request timeout in milliseconds.30000
MCP_HTTP_TOKENNoBearer token for the MCP server itself (HTTP transport). If set, requests without matching Authorization: Bearer header are rejected (401, timing-safe comparison). If not set, loopback-only + warning.
SYNTX_BASE_URLNoBase URL of the API.https://api.syntx.ai
SYNTX_DEFAULT_AINoDefault AI service for send-message/ask.chatgpt
MCP_HTTP_HOSTNAMENoHTTP transport bind address (loopback by default).127.0.0.1
SYNTX_STREAM_MODENoStreaming strategy for ask / stream-message. Values: auto, stream, poll, off.auto
SYNTX_POLL_TIMEOUTNoMaximum waiting time for response in milliseconds.600000
SYNTX_DEFAULT_MODELNoDefault model.
SYNTX_POLL_INTERVALNoPolling interval for response in milliseconds.5000
SYNTX_LLM_SSE_BASE_URLNoBase URL for SSE stream used by text-flow llm/*.https://sse.syntx.ai
SYNTX_LLM_MODELS_CACHE_MSNoTTL of in-memory cache for syntx.llm.listModels() in milliseconds.60000
SYNTX_LEGACY_TEXT_TRANSPORTNoIf true, ask / stream-message / send-message / wait-for-response use legacy path chats/{id}/messages with REST polling instead of new llm/* (text-flow + SSE).false

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
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".

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.

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.

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.

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 }.

get-balanceA

Return the current token balance for the authenticated user.

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.

list-ai-servicesA

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

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.

list-chatsC

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

create-chatA

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

get-messagesB

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

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.

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.

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.

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).

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.

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.

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.

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.

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).

rename-chatB

Rename a chat. Mirrors syntx.chats.rename. Issues PUT /api/v1/chats/{chat_id} with body {title}.

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.

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.

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.

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.

list-uploaded-filesB

List files previously uploaded to the syntx.ai account.

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.

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 }] }.

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.

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 }.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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).

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[]).

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.

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.

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.

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.

add-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.

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.

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.

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).

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.

list-eventsB

Event feed (promotions, milestones, etc.). Wraps syntx.events.list. Hits GET /api/v1/events?page=N. Returns {items, total, page, page_size}.

list-token-pricingA

Per-model token cost table. Wraps syntx.tokensPricing.list. Hits GET /api/v1/tokens/pricing. Returns {items: [{id, cost}]}.

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.

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.

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.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.4/5.0

Scored across 58 tools

Disambiguation3/5

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.

Naming Consistency4/5

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.

Tool Count1/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues