MCP server for the full Mistral AI API: chat, OCR, Voxtral audio, Codestral FIM, vision, agents, batch, durable workflows, document extraction. Mistral Cloud or your own OpenAI-compatible endpoint (vLLM, TGI, LiteLLM).
This is a comprehensive Mistral AI API wrapper with 19 tools spanning chat, agents, audio, batch processing, connectors, and conversations. Strengths: clear verb-noun naming conventions (mistral_agent, batch_create, conversation_start), detailed descriptions with context and prerequisites, explicit input schemas with Zod validation, proper output schema documentation, and tool annotations (readOnlyHint/destructiveHint). Weaknesses: some parameter descriptions lack format/constraint details (e.g., audio source structure in voxtral_transcribe), enum constraints missing for model selection (model params accept free-form strings), and error recovery guidance sparse in several tools. The tool interface is well-composed with good chaining potential (e.g., batch_create returns fileId for downstream files_signed_url), and security is properly handled (API key injected via environment, no secrets in parameters). Overall execution is solid and production-ready, but falls short of A-grade (80+) due to incomplete parameter documentation and missing constraint specificity.
Request cancellation of a running batch job. Completed requests still count for billing.
Create an asynchronous batch inference job from one or more .jsonl input files. Prerequisites: upload your JSONL via `files_upload` with `purpose: 'batch'`. Each JSONL line is `{ custom_id, body: { ... same shape as the endpoint } }`. Batch processing is ~50% cheaper than live inference, at the cost of latency (minutes to 24h, depending on queue and `timeout_hours`). Poll with `batch_get`; once `status` is SUCCESS, download the result file via `files_signed_url({ fileId: output_file })`.
Fetch a batch job's current status and counters. When `status: 'SUCCESS'`, the `output_file` is ready for download.
List batch jobs with optional filters.
Invoke one of a connector's MCP tools and return the result. This is a direct pass-through to the connector's tool — the result is returned as-is in the `content` array (not reinterpreted).
Parameter descriptions lack format/constraint details. Model parameters (mistral_moderate, mistral_classify, voxtral_transcribe, etc.) accept free-form strings with no enum constraints or validation guidance. LLMs cannot determine valid values without trial-and-error.
Complex parameter structures (e.g., audio object in voxtral_transcribe with discriminated union {type: 'file_url', fileUrl} or {type: 'file', fileId}) documented in prose description but lacking explicit JSON Schema discriminator support. LLMs may struggle to construct valid payloads.
Minimal tool descriptions for discovery/list tools (batch_list, batch_get, conversation_get, conversation_list, conversation_history, batch_cancel, conversation_delete). Descriptions are under 100 characters, lacking context on when to use each tool or how results drive downstream decisions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2025-06-18+ | v2 |
Fetch public metadata for one connector by ID or name. Never returns connection credentials or customer secrets — only the connector's public profile (name, description, protocol, visibility, activation/authentication status).
List connectors (MCP/HTTP integrations) visible to the caller. Use `active=true` to only see connectors currently activated for this org/workspace/user. Paginate with `cursor` (from a previous response's `next_cursor`) and `pageSize`. This is discovery only — activating a new connector or managing its credentials is not exposed here; use the Mistral console for that.
List the MCP tools exposed by one connector, with their JSON Schema input shape. Use this before connectors_call_tool to discover valid tool names and arguments. Set `refresh=true` to bypass any server-side cache of the tool catalog.
Send a user message to an ongoing conversation. The conversation automatically runs inference and may produce agent actions (web_search, code_interpreter, etc.) before returning. Use `conversation_history` to inspect the full conversation transcript.
Delete a conversation.
Fetch metadata for one conversation.
Fetch the full entry history (messages, tool calls, results, etc.) for a conversation.
List conversations with optional filters and pagination.
Start a new stateful, multi-turn conversation. Returns a conversation_id to continue with conversation_append. Pass exactly one of `agentId` (a pre-configured Mistral Agent) or `model` (a base chat model — defaults to the standard chat model if neither is set). `tools` enables Mistral's built-in tools for this conversation: web_search, web_search_premium, code_interpreter, image_generation. Pass `documentLibraryIds` to additionally enable document_library search over specific Mistral Libraries.
Run a completion against a pre-configured Mistral agent. Unlike `mistral_chat`, this tool requires an `agentId` pointing to an agent you've created in the Mistral dashboard. The agent carries its own system prompt, model, tools, and connectors (web_search, code_interpreter, document_library, image_generation) server-side — you just send messages. Use `mistral_chat` for direct model calls without stateful agent config.
Run a classifier on one or more texts and return per-target scores. Use this with a fine-tuned classifier model id (e.g. `ft:classifier:...`) trained via the Classifier Factory, or a preset classifier model. Each result is a dict of target_name → { scores: { label: score } }.
Classify one or more texts for harmful content. Returns per-input `categories` (boolean flags) and `category_scores` (0..1 floats). Categories include: sexual, hate_and_discrimination, violence_and_threats, dangerous_and_criminal_content, selfharm, health, financial, law, pii. Use `mistral_chat_moderate` style pre-filtering by calling this before passing user input to a downstream LLM.
Synthesize speech from text. Returns base64-encoded audio. Inputs: - `input`: the text to speak. - `voiceId`: preset or custom voice id (see resource `mistral://voices`). - `responseFormat`: mp3 (default), wav, flac, opus, or pcm. - `model`: optional model id. Leave empty to let the API pick the default. - `refAudio`: base64 reference audio for voice cloning (when supported). Returns `audio_base64` plus `mime_type` and echoed `format`/`voice_id`.
Transcribe an audio file to text using Mistral Voxtral. Accepted models: - mistral-voxtral-v1 Audio source is one of: - { type: "file_url", fileUrl: "https://..." } (public URL) - { type: "file", fileId: "<id-from-files-api>" } Options: - `language`: ISO-639-1 hint (e.g. 'fr', 'en'). Boosts accuracy when known. - `temperature`: sampling temperature. - `diarize`: return per-speaker segments (default false). - `timestampGranularities`: ['segment'] to return per-segment timestamps. - `contextBias`: list of phrases/terms that should bias the decoder. Returns plain `text`, detected `language`, optional `segments[]`, and token usage.
No explicit error recovery guidance in tool descriptions. Agents have no guidance on how to handle common failures (e.g., agent_id not found, model parameter invalid, batch job timeout). Error messages are API-pass-through without LLM-friendly recovery hints.
No confirmation/dry-run pattern for destructive tools (batch_cancel, conversation_delete). Agents can delete conversations or cancel batch jobs without a safety gate, increasing accidental data loss risk.