Skip to main content
Glama
Swih

Mistral MCP — Document Extraction

by Swih

mistral-mcp

MCP-Server, der Mistral AI-Funktionen für jeden MCP-Client bereitstellt - Claude Code, Cursor, Zed, Windsurf, Claude Desktop.

Version française : README.fr.md

version license node typescript mcp-spec tools resources prompts tests

Warum

Mistral verfügt über leistungsstarke Modelle für Französisch, Code, OCR, Moderation, Audio und Agenten-Workflows, aber die meisten MCP-fähigen IDEs verwenden standardmäßig Anthropic oder OpenAI. mistral-mcp bietet diesen Mistral-Funktionen eine saubere MCP-Oberfläche, sodass Sie die richtige Teilaufgabe an das richtige Modell weiterleiten können, ohne Ihre Agentenschleife neu aufbauen zu müssen.

Das Ziel dieses Repositories ist nicht "noch ein dünner Wrapper". Es zielt darauf ab, ein robuster, wartbarer MCP-Server mit expliziten Schemata, vorhersehbaren Ausgaben, Transportflexibilität und einer guten Testabdeckung zu sein.

Related MCP server: MCP Server TypeScript

Aktuelle Oberfläche (v0.4.0)

Tools (22)

Kern-Generierung:

  • mistral_chat

  • mistral_chat_stream

  • mistral_embed

  • mistral_tool_call

  • codestral_fim

Vision und Audio:

  • mistral_vision

  • mistral_ocr

  • voxtral_transcribe

  • voxtral_speak

Agenten und Klassifikatoren:

  • mistral_agent

  • mistral_moderate

  • mistral_classify

Dateien und Batch:

  • files_upload

  • files_list

  • files_get

  • files_delete

  • files_signed_url

  • batch_create

  • batch_list

  • batch_get

  • batch_cancel

MCP-natives Dienstprogramm:

  • mcp_sample - delegiert die Generierung an das Client-Modell via MCP-Sampling

Ressourcen (2)

  • mistral://models - akzeptierte Aliase und Live-Modellkatalog

  • mistral://voices - Live-Stimmenkatalog für Voxtral TTS

Prompts (6)

Kuratierte französische Prompts:

  • french_invoice_reminder

  • french_meeting_minutes

  • french_email_reply

  • french_commit_message

  • french_legal_summary

Kuratierter englischer Prompt:

  • codestral_review

Prompt-Enum-Argumente sind mit completable() umschlossen, sodass MCP-Clients die Prompt-Argumentvervollständigung via completion/complete aufrufen können.

Highlights

  • High-Level McpServer API mit inputSchema, outputSchema und Annotationen für jedes Tool

  • Unterstützung für dualen Transport: stdio standardmäßig, Streamable HTTP für Remote-Deployments

  • Strukturierte Ausgaben überall: structuredContent plus Text-Fallback

  • MCP-Sampling-Unterstützung durch mcp_sample

  • Unterstützung für Prompt-Vervollständigung bei Enum-artigen Prompt-Argumenten

  • Ressourcen und Prompts werden zusammen mit den Tools registriert, nicht nachträglich hinzugefügt

  • Retry/Backoff und Request-Timeout im Mistral SDK-Client

Transport

Stdio

Standardmodus. Dies ist das, was Claude Code und die meisten lokalen MCP-Clients verwenden.

node dist/index.js

Streamable HTTP

Aktivierung mit --http oder MCP_TRANSPORT=http.

MCP_TRANSPORT=http node dist/index.js

Relevante Umgebungsvariablen:

  • MCP_HTTP_HOST - Standard 127.0.0.1

  • MCP_HTTP_PORT - Standard 3333

  • MCP_HTTP_PATH - Standard /mcp

  • MCP_HTTP_TOKEN - optionales Bearer-Token

  • MCP_HTTP_ALLOWED_ORIGINS - optionale kommagetrennte Allow-List

  • MCP_HTTP_STATELESS=1 - zustandsloser Sitzungsmodus

/healthz ist absichtlich öffentlich und greift nicht auf den MCP-Server zu.

Installation

git clone https://github.com/Swih/mistral-mcp.git
cd mistral-mcp
npm install
npm run build

API-Schlüssel festlegen:

export MISTRAL_API_KEY=your_key_here

Oder verwenden Sie .env im Root-Verzeichnis des Repositories. Niemals committen.

Verwendung in Claude Code

claude mcp add mistral -- node /absolute/path/to/mistral-mcp/dist/index.js

Beispiel-Prompt:

Verwende mistral_ocr auf diesem PDF und führe dann french_meeting_minutes auf dem extrahierten Text aus.

Entwicklung

npm run dev
npm run build
npm run lint
npm test
npm run inspector

Teststrategie

Die Suite enthält derzeit 148 Tests in 4 Ebenen:

  1. Unit-Tests für Tools, Ressourcen, Prompts, Transport, Audio, Agenten, Dateien, Batch und Sampling

  2. Vertragstests für Tool-Metadaten und MCP-Garantien

  3. Live-API-Tests gegen die echte Mistral-API, wenn MISTRAL_API_KEY gesetzt ist

  4. Stdio-End-to-End-Tests gegen den gebauten Server

Ohne MISTRAL_API_KEY liegt der lokale Standard bei 139 passing plus 9 gated Live/Stdio-Tests.

Projektstruktur

mistral-mcp/
|-- src/
|   |-- index.ts
|   |-- transport.ts
|   |-- tools.ts
|   |-- tools-fn.ts
|   |-- tools-vision.ts
|   |-- tools-audio.ts
|   |-- tools-agents.ts
|   |-- tools-files.ts
|   |-- tools-batch.ts
|   |-- tools-sampling.ts
|   |-- resources.ts
|   `-- prompts.ts
|-- test/
|-- examples/
|-- .github/workflows/ci.yml
|-- package.json
`-- tsconfig.test.json

Status

v0.4.0 — veröffentlicht. Siehe CHANGELOG.md für das vollständige Diff gegenüber v0.3.0:

  • geteilte Helfer, Live-Modell- + Stimmenkataloge, Vertragstests

  • Vision + OCR

  • Audio-Transkription + Sprache

  • Agenten + Moderation + Klassifizierung

  • Dateien + Batch-APIs

  • Streamable HTTP-Transport + MCP-Sampling

  • 5 kuratierte französische Prompts + 1 englischer Prompt + Prompt-Argumentvervollständigung

Beispiele

Ausführbare Skripte befinden sich in examples/. Siehe examples/README.md.

Lizenz

MIT Copyright Dayan Decamp

Available Tools

6 tools
codestral_fimCodestral fill-in-the-middle completionA
Read-only

Fill-in-the-middle code completion with Codestral.

Given prompt (code preceding the cursor) and suffix (code after the cursor), Codestral writes the middle. Use for editor autocomplete scenarios, code-patching agents, or structured refactors where you know the target boundaries.

Default stop tokens: [] — let the model decide. Override with stop if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoRandom seed for deterministic sampling. Maps to Mistral's `random_seed`.
stopNoStop generation when any of these text sequences is encountered.
modelNoFIM (fill-in-the-middle) model identifier. Any identifier your endpoint serves is accepted — read mistral://models for the live catalog. Known Mistral aliases: codestral-latest.
top_pNoNucleus sampling probability mass: 0.1 considers tokens in the top 10% of probability mass. Prefer adjusting this or temperature, not both.
promptYesCode preceding the cursor.
suffixYesCode after the cursor. Can be empty string.
max_tokensNoMaximum number of tokens to generate. Input tokens plus this limit must fit within the model's context length.
temperatureNoSampling temperature: higher values make output more random; lower values make it more focused. Prefer adjusting this or top_p, not both.

Output Schema

ParametersJSON Schema
NameRequiredDescription
textYes
modelYes
usageNo
finish_reasonNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=false, and destructiveHint=false. The description adds useful generation behavior by noting the default stop tokens are empty and that the model decides when to stop unless `stop` is overridden.

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

Conciseness5/5

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

Front-loaded with a one-line purpose, followed by cursor semantics, use cases, and stop-token behavior. Every sentence earns its place and no filler is present.

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

Completeness5/5

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

Given rich annotations, 100% schema coverage, and an output schema, the description supplies the missing conceptual model: prompt before cursor, suffix after cursor, and Codestral writes the middle. It is complete enough for correct invocation without redundant return-value explanation.

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

Parameters4/5

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

Schema description coverage is 100%, so prompt/suffix meanings are already documented. The description adds extra semantics for `stop`: default is [] and the model decides, with explicit override guidance, going beyond the schema's brief stop description.

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

Purpose5/5

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

States a specific verb and resource: fill-in-the-middle code completion with Codestral, plus the prompt/suffix cursor model. The FIM and editor-autocomplete framing distinguishes it from sibling chat, vision, OCR, transcription, and document tools without needing schema inspection.

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

Usage Guidelines4/5

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

Provides clear usage contexts: editor autocomplete, code-patching agents, and structured refactors where target boundaries are known. It does not explicitly name when to avoid this tool or route to a sibling like mistral_chat for general generation.

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

mistral_chatMistral chat completionA
Read-only

Generate a chat completion using a Mistral model.

When to use:

  • Drafting French (or any European-language) content where Mistral shines.

  • Codestral for code-specific generation/review.

  • Ministral for cheap / low-latency classification.

Returns structured content with the assistant text and token usage. Does NOT stream — use mistral_chat_stream for long outputs with progress updates.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoRandom seed for deterministic sampling. Maps to Mistral's `random_seed`.
modelNoChat model. Default: mistral-medium-latest (override with MISTRAL_DEFAULT_MODEL).
top_pNoNucleus sampling probability mass: 0.1 considers tokens in the top 10% of probability mass. Prefer adjusting this or temperature, not both.
messagesYesChat messages in role/content form.
max_tokensNoMaximum number of tokens to generate. Input tokens plus this limit must fit within the model's context length.
temperatureNoSampling temperature: higher values make output more random; lower values make it more focused. Prefer adjusting this or top_p, not both.
response_formatNoForce a structured output: `{type:"json_object"}` for JSON mode, `{type:"json_schema", json_schema:{...}}` for strict schema mode.
reasoning_effortNoReasoning effort; supported values depend on the selected model.

Output Schema

ParametersJSON Schema
NameRequiredDescription
textYes
modelYes
usageNo
finish_reasonNo
reasoning_contentNoReasoning trace returned by Magistral models. Absent for non-reasoning models.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations cover safety (readOnlyHint=true, destructiveHint=false, openWorldHint=true), so the bar is lower. The description still adds useful non-safety behavior: it does not stream, and it returns structured content with assistant text and token usage. It does not mention rate limits, latency, or error behavior, 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.

Conciseness5/5

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

Front-loads the core action, organizes guidance as scannable bullets, and closes with the return shape and the streaming exclusion. No filler sentences.

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

Completeness4/5

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

With an output schema present, the description needn't detail return values, and annotations cover safety. It still supplies the streaming caveat and model-family guidance. Minor gap: it never states default model behavior or auth expectations, but that is largely handled by the schema's model description.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents seed, model, top_p, temperature, response_format, and reasoning_effort thoroughly. The description adds only indirect model-selection guidance ('Codestral', 'Ministral') rather than explaining parameters, so baseline 3 applies.

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

Purpose5/5

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

The opening line states a specific verb and resource: 'Generate a chat completion using a Mistral model.' The bullets further differentiate sub-cases (French/European drafting, Codestral for code, Ministral for cheap classification), letting an agent distinguish this from codestral_fim and other siblings.

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

Usage Guidelines5/5

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

Explicit 'When to use' bullets plus a named exclusion: 'Does NOT stream — use mistral_chat_stream for long outputs with progress updates.' This gives both positive triggers and a concrete alternative with the condition that selects it.

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

mistral_ocrMistral OCR (document to markdown)A
Read-onlyIdempotent

Run Mistral OCR on a PDF or image, returning structured markdown per page.

Input document is one of:

  • { type: "document_url", documentUrl: "https://...pdf" }

  • { type: "image_url", imageUrl: "https://..." | "data:image/..." }

  • { type: "file", fileId: "" }

Options:

  • pages: array of 0-indexed page numbers or string like "0-5,7".

  • tableFormat: 'markdown' (default) or 'html'.

  • extractHeader / extractFooter: include page header/footer when present.

  • includeImageBase64: embed extracted image bytes as base64 in the response.

  • document_annotation_format: JSON schema for whole-document structured extraction.

  • bbox_annotation_format: JSON schema for extracted image / bbox annotations.

  • confidence_scores_granularity: 'page', 'word', or 'block'. 'block' adds per-block content/type confidence under pages[].blocks[].confidence_scores and requires OCR 4.1 or newer.

  • includeBlocks: return paragraph-level blocks (bounding box + type) in reading order — titles, lists, tables, images, equations, captions, code, references, aside text, header, footer, signature. Requires OCR 4 (mistral-ocr-4-0) or newer; older models accept the flag but return an empty blocks array.

Returns pages[].markdown plus optional pages[].hyperlinks, header, footer, images bounding boxes, blocks, annotations, confidence scores, and dimensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoOCR model. Default: mistral-ocr-latest.
pagesNoZero-based page numbers to process, as an array or comma-separated numbers and ranges such as "0-5,7".
documentYesDocument to process, supplied as a document URL, an image URL or data URI, or an uploaded file ID.
imageLimitNoMaximum number of images to extract from the document.
tableFormatNoFormat for extracted tables: Markdown or HTML.
imageMinSizeNoMinimum height and width of an image to extract.
extractFooterNoExtract each page footer into its footer field and remove it from the page markdown.
extractHeaderNoExtract each page header into its header field and remove it from the page markdown.
includeBlocksNoReturn paragraph-level blocks (bounding box + type) per page. Requires OCR 4 (mistral-ocr-4-0) or newer.
includeImageBase64NoInclude base64-encoded data for extracted images in the response.
bbox_annotation_formatNoJSON Schema for structured annotations of each extracted bounding box or image.
document_annotation_formatNoJSON Schema for a structured annotation extracted from the entire document.
document_annotation_promptNoInstructions for whole-document structured extraction. Requires document_annotation_format.
confidence_scores_granularityNoConfidence granularity. 'block' also fills pages[].blocks[].confidence_scores and requires OCR 4.1 (mistral-ocr-4-1) or newer.

Output Schema

ParametersJSON Schema
NameRequiredDescription
modelYes
pagesYes
usageNo
annotationsNo
pages_countYes
document_annotationNo

TDQS

A4.2/5.0
Behavior5/5

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

Beyond the annotations (which only declare read-only, idempotent, non-destructive, open-world), the description discloses real behavioral preconditions: includeBlocks requires OCR 4+, confidence_scores_granularity='block' requires OCR 4.1+, and older models silently accept includeBlocks but return an empty blocks array. That silent-failure warning is exactly the kind of context an agent cannot get from the schema or annotations.

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

Conciseness5/5

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

Front-loaded with a one-line purpose, then cleanly sectioned into input shapes, options, and returns for a 14-parameter tool. The length is proportionate to the surface area and each bullet maps to a decision the caller must make.

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

Completeness5/5

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

For a read-only OCR tool with a full output schema and 100% schema coverage, the description supplies everything else needed: the three mutually exclusive document input forms, option semantics, model-version gates, and the shape of the response. Nothing an agent needs to invoke it correctly is absent.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds genuine value on several parameters the schema documents only tersely: the annotated string form of `pages` ('0-5,7'), the default of tableFormat, the distinction between document_annotation_format and bbox_annotation_format, and the version requirements tied to includeBlocks and confidence granularity. Some parameters (imageLimit, imageMinSize, model) are untouched, which keeps it from a 5.

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

Purpose4/5

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

The description names a specific verb and resource ('Run Mistral OCR on a PDF or image') and states the core output ('returning structured markdown per page'). It is clear, but it never distinguishes itself from siblings like mistral_vision or process_document, so an agent cannot tell from the description alone which of those overlapping tools to pick.

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

Usage Guidelines3/5

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

Usage is implied by the enumerated input shapes and option list, but there is no explicit when-to-use or when-not-to-use guidance, and no routing to alternative siblings such as mistral_vision for image-only OCR. The reader must infer the fit from the parameter list.

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

mistral_visionMistral multimodal chat (vision)A
Read-only

Chat completion with multimodal input: text + image_url parts.

Requires a vision-capable model. Accepted:

  • pixtral-large-latest

  • pixtral-12b-latest

  • mistral-large-latest

  • mistral-medium-latest

  • mistral-small-latest

Each message's content is either a plain string (pure text) or an array of parts { type: 'text', text } / { type: 'image_url', imageUrl }. The image URL can be an https URL or a data: URI base64 payload.

Returns the assistant text + token usage. For non-visual requests, prefer mistral_chat.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoRandom seed for deterministic sampling. Maps to Mistral's `random_seed`.
modelNoVision-capable Mistral model. Default: pixtral-large-latest.
top_pNoNucleus sampling probability mass: 0.1 considers tokens in the top 10% of probability mass. Prefer adjusting this or temperature, not both.
messagesYesChat messages. Pure-text requests are accepted, but this tool is intended primarily for multimodal prompts containing image parts.
max_tokensNoMaximum number of tokens to generate. Input tokens plus this limit must fit within the model's context length.
temperatureNoSampling temperature: higher values make output more random; lower values make it more focused. Prefer adjusting this or top_p, not both.

Output Schema

ParametersJSON Schema
NameRequiredDescription
textYes
modelYes
usageNo
finish_reasonNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds useful non-structural context: the vision-model requirement, accepted model IDs, and that it returns assistant text plus token usage. It does not cover cost/latency or image size limits, so not a full 5.

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

Conciseness4/5

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

Front-loaded with the core purpose, then model list, then payload format, then routing guidance. The model enumeration is slightly verbose but each line is actionable and the structure is scannable.

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

Completeness5/5

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

Output schema exists so return values needn't be explained, and the description still notes the assistant-text + token-usage return. Model constraints, payload shapes, and sibling routing are all present; nothing needed to call this correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description goes beyond by enumerating the accepted vision model IDs (the schema only says 'Vision-capable Mistral model') and clarifying the content part shapes and image URL formats.

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

Purpose5/5

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

States a specific verb+resource ('Chat completion with multimodal input: text + image_url parts') and explicitly differentiates from the sibling mistral_chat for non-visual requests. An agent can distinguish this from mistral_ocr and mistral_chat 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.

Usage Guidelines5/5

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

Explicitly routes usage: 'Requires a vision-capable model' with an enumerated accepted-model list, and states 'For non-visual requests, prefer mistral_chat.' This names both the condition to use it and the alternative to use otherwise.

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

process_documentProcess a business document end-to-endA
Read-onlyIdempotent

Single-call pipeline: provided text/Markdown or Mistral OCR → classify (if kind=auto) → typed extraction → validation. source.type=text skips OCR and Files uploads. Text with kind=generic makes no API calls; classification and typed extraction use Mistral chat. Results expose extraction_source. Provided text has null ocr_confidence and page_count; ocr_text contains the supplied text unchanged. Replaces the manual chain of mistral_ocr + mistral_chat + JSON parsing.

Kinds: contract | invoice | id_document | generic. Use kind=auto to let the server classify. Returns a discriminated union — switch on kind to access typed fields. Validation checks schema and, for OCR sources, OCR confidence; not factual or accounting accuracy. Typed extraction rejects text longer than 60000 characters rather than truncating it.

Cache keys include source, kind, page limit, endpoint, models and pipeline version. Override location with MISTRAL_MCP_CACHE_DIR. Override mode with options.cache. Default cache mode is 'read_write' EXCEPT for kind=id_document (auto-bypass to avoid persisting PII). Set options.cache='read_write' explicitly to opt in for id documents.

options.maxPages and options.minOcrConfidence apply only to OCR sources. The confidence floor defaults to 0.3. Below the floor the tool returns isError. Missing or partial confidence scores also return isError; use mistral_ocr directly if you need raw OCR without a confidence guarantee. 0.3 is a conservative starting point, not a measured one: calibrate it for your corpus with npm run eval:docs.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoExtraction task. auto classifies the document; generic returns text without typed extraction. Text source with generic makes no API calls.auto
sourceYesAlready extracted text/Markdown, or an OCR source: remote URL, uploaded file ID, or inline image.
optionsNoPage selection, OCR confidence floor and local cache policy.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dobNo
kindYes
nameNo
totalNo
expiryNo
vendorNo
clausesNo
countryNo
partiesNo
summaryNo
currencyNo
due_dateNo
ocr_textYesText used for extraction: provided text unchanged, or Markdown returned by Mistral OCR.
anomaliesNo
cache_hitYes
key_datesNo
source_idYes
line_itemsNo
page_countYesPages processed by Mistral OCR. Null for provided text, whose pagination is unknown.
risk_scoreNo
document_typeNo
ocr_confidenceYesMean Mistral OCR page confidence. Null for provided text; never an extraction accuracy score.
structured_textNo
pipeline_versionYes
extraction_sourceYesHow the input text was obtained. provided_text is supplied by the caller, not verified by OCR.
total_duration_msYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, but the description goes well beyond them: cache key composition and the id_document PII auto-bypass, the isError conditions around OCR confidence, that validation is schema-only (not factual), and the 60000-character rejection behavior. This is unusually rich behavioral disclosure for a read-only processing tool.

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

Conciseness4/5

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

Front-loaded with the pipeline summary, then grouped by concerns (sources, kinds, returns, validation, cache, options). Length is defensible for a 3-param nested pipeline tool, but a few statements restate schema facts (the 60000 limit, the 0.3 floor, maxPages/minOcrConfidence scoping), which is mild redundancy given a fully described schema.

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

Completeness5/5

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

With an output schema present, the description still usefully explains the discriminated-union return (switch on kind, extraction_source, ocr_confidence semantics). Combined with the caveats about confidence floors and cache bypass, an agent has everything needed to call and interpret the tool.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds framing the schema does not: that maxPages/minOcrConfidence apply only to OCR sources (and how they interact with provided text), that text sources yield null ocr_confidence/page_count, and that the 0.3 floor is a placeholder to calibrate. It adds value beyond the field-level docs, though several details (60000 chars, 0.3 default) are duplicated from the schema.

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

Purpose5/5

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

The description names a concrete pipeline with specific stages (classify → typed extraction → validation) and the input modalities it accepts. It also explicitly positions itself against siblings: 'Replaces the manual chain of mistral_ocr + mistral_chat + JSON parsing.' An agent can distinguish it from mistral_ocr and mistral_chat 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.

Usage Guidelines5/5

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

It gives explicit routing guidance: kind=auto lets the server classify, source.type=text skips OCR and Files uploads, text+generic makes no API calls, and 'use mistral_ocr directly if you need raw OCR without a confidence guarantee.' It names the alternative and the condition that selects it.

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

voxtral_transcribeVoxtral speech-to-textA
Read-onlyIdempotent

Transcribe an audio file to text using Mistral Voxtral.

Accepted models:

  • voxtral-mini-latest

  • voxtral-small-latest

Audio source is one of:

  • { type: "file_url", fileUrl: "https://..." } (public URL)

  • { type: "file", fileId: "" }

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
audioYesAudio to transcribe, supplied as a public URL or an uploaded file ID.
modelNoSTT model. Default: voxtral-mini-latest.
diarizeNoIdentify speakers in the returned transcription segments. Defaults to false.
languageNoISO-639-1 language hint (e.g. 'fr', 'en').
contextBiasNoWords or phrases to favor when decoding the audio.
temperatureNoSampling temperature for transcription.
timestampGranularitiesNoOnly 'segment' is currently supported.

Output Schema

ParametersJSON Schema
NameRequiredDescription
textYes
modelYes
usageNo
languageYes
segmentsNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond that: accepted model IDs, default values for diarize and model, the only-supported granularity, and the shape of the response (text, language, segments, token usage). It does not mention auth or rate limits, but that is a minor gap.

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

Conciseness4/5

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

The description is front-loaded with the core action, then organizes models, source options, options, and return values into scannable bullet groups. It is efficient, though the option bullets partially duplicate what the schema already documents with 100% coverage.

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

Completeness5/5

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

With an output schema, full annotation coverage, and 100% schema description coverage, the description supplies everything an agent needs: models, input modes, option semantics, and defaults. No material gap remains for invoking this tool correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description nonetheless adds meaning beyond the schema by explaining intent ('language ... boosts accuracy when known', 'contextBias: phrases that should bias the decoder', 'diarize: return per-speaker segments'), which helps the agent use the parameters correctly.

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

Purpose5/5

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

The first sentence gives a specific verb and resource ('Transcribe an audio file to text'), which is unambiguous and clearly distinct from the sibling tools (chat, FIM, vision, OCR, document processing). An agent can immediately tell this is the audio speech-to-text tool 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.

Usage Guidelines4/5

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

The description clearly lays out the two mutually exclusive audio source modes (public URL vs. uploaded file ID) and when each applies, which is exactly the routing decision an agent must make. It does not name alternatives or exclusions for when *not* to transcribe, but the context is otherwise 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.

  1. 9 tool updatesv0.8.3
    • Changedcodestral_fim14 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / max_tokens / description
        Added value: +"Maximum number of tokens to generate. Input tokens plus this limit must fit within the model's context length."
      • addedInput schema / properties / max_tokens / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / model / description
        Added value: +"FIM (fill-in-the-middle) model identifier. Any identifier your endpoint serves is accepted — read mistral://models for the live catalog. Known Mistral aliases: codestral-latest."
      • removedInput schema / properties / model / enum
        Removed value: -[
        -  "codestral-latest"
        -]
      • addedInput schema / properties / model / maxLength
        Added value: +200
      • addedInput schema / properties / model / minLength
        Added value: +1
      • addedInput schema / properties / seed / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / seed / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / stop / description
        Added value: +"Stop generation when any of these text sequences is encountered."
      • addedInput schema / properties / temperature / description
        Added value: +"Sampling temperature: higher values make output more random; lower values make it more focused. Prefer adjusting this or top_p, not both."
      • addedInput schema / properties / top_p / description
        Added value: +"Nucleus sampling probability mass: 0.1 considers tokens in the top 10% of probability mass. Prefer adjusting this or temperature, not both."
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmistral_chat19 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / max_tokens / description
        Added value: +"Maximum number of tokens to generate. Input tokens plus this limit must fit within the model's context length."
      • addedInput schema / properties / max_tokens / maximum
        Added value: +9007199254740991
      • removedInput schema / properties / messages / items / additionalProperties
        Removed value: -false
      • addedInput schema / properties / messages / items / properties / content / description
        Added value: +"Text of the message."
      • addedInput schema / properties / messages / items / properties / role / description
        Added value: +"Message author: system for instructions, user for requests, or assistant for prior replies."
      • changedInput schema / properties / model / description
        Previous value: -"Mistral chat model alias. Allowed: mistral-large-latest, mistral-medium-latest, mistral-small-latest, ministral-3b-latest, ministral-8b-latest, ministral-14b-latest, magistral-medium-latest, magistral-small-latest, devstral-latest, devstral-small-latest, codestral-latest, voxtral-small-latest. Default: mistral-medium-latest."New value: +"Chat model. Default: mistral-medium-latest (override with MISTRAL_DEFAULT_MODEL)."
      • removedInput schema / properties / model / enum
        Removed value: -[
        -  "mistral-large-latest",
        -  "mistral-medium-latest",
        -  "mistral-small-latest",
        -  "ministral-3b-latest",
        -  "ministral-8b-latest",
        -  "ministral-14b-latest",
        -  "magistral-medium-latest",
        -  "magistral-small-latest",
        -  "devstral-latest",
        -  "devstral-small-latest",
        -  "codestral-latest",
        -  "voxtral-small-latest"
        -]
      • addedInput schema / properties / model / maxLength
        Added value: +200
      • addedInput schema / properties / model / minLength
        Added value: +1
      • changedInput schema / properties / reasoning_effort / description
        Previous value: -"Controls reasoning depth for Magistral models. 'high' enables full chain-of-thought; 'none' disables it. Ignored on non-reasoning models."New value: +"Reasoning effort; supported values depend on the selected model."
      • changedInput schema / properties / reasoning_effort / enum
        Previous value: -[
        -  "none",
        -  "high"
        -]New value: +[
        +  "none",
        +  "minimal",
        +  "low",
        +  "medium",
        +  "high",
        +  "xhigh"
        +]
      • changedInput schema / properties / response_format / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "type": {
        -        "const": "text",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "type": {
        -        "const": "json_object",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "json_schema": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "description": {
        -            "type": "string"
        -          },
        -          "name": {
        -            "description": "Identifier for the schema; surfaced in API errors.",
        -            "maxLength": 64,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "schema": {
        -            "additionalProperties": {},
        -            "description": "JSON Schema object the response must conform to.",
        -            "type": "object"
        -          },
        -          "strict": {
        -            "description": "If true, the API rejects responses that do not strictly match the schema.",
        -            "type": "boolean"
        -          }
        -        },
        -        "required": [
        -          "name",
        -          "schema"
        -        ],
        -        "type": "object"
        -      },
        -      "type": {
        -        "const": "json_schema",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "json_schema"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "type": {
        +        "const": "text",
        +        "description": "Generate plain text without a JSON format constraint.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "type": {
        +        "const": "json_object",
        +        "description": "Generate JSON. Also instruct the model to produce JSON in a system or user message.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "json_schema": {
        +        "description": "Named JSON Schema and optional strictness for the generated response.",
        +        "properties": {
        +          "description": {
        +            "description": "Description of the response the schema defines.",
        +            "type": "string"
        +          },
        +          "name": {
        +            "description": "Identifier for the schema; surfaced in API errors.",
        +            "maxLength": 64,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "schema": {
        +            "additionalProperties": {},
        +            "description": "JSON Schema object the response must conform to.",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "strict": {
        +            "description": "If true, the API rejects responses that do not strictly match the schema.",
        +            "type": "boolean"
        +          }
        +        },
        +        "required": [
        +          "name",
        +          "schema"
        +        ],
        +        "type": "object"
        +      },
        +      "type": {
        +        "const": "json_schema",
        +        "description": "Generate JSON conforming to the supplied json_schema.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "json_schema"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / seed / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / seed / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / temperature / description
        Added value: +"Sampling temperature: higher values make output more random; lower values make it more focused. Prefer adjusting this or top_p, not both."
      • addedInput schema / properties / top_p / description
        Added value: +"Nucleus sampling probability mass: 0.1 considers tokens in the top 10% of probability mass. Prefer adjusting this or temperature, not both."
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmistral_ocr49 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / bbox_annotation_format / additionalProperties
        Removed value: -false
      • addedInput schema / properties / bbox_annotation_format / description
        Added value: +"JSON Schema for structured annotations of each extracted bounding box or image."
      • removedInput schema / properties / bbox_annotation_format / properties / json_schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / bbox_annotation_format / properties / json_schema / description
        Added value: +"Named JSON Schema and optional strictness for the extracted annotation."
      • addedInput schema / properties / bbox_annotation_format / properties / json_schema / properties / description / description
        Added value: +"Description of the annotation to extract."
      • addedInput schema / properties / bbox_annotation_format / properties / json_schema / properties / name / description
        Added value: +"Name identifying the annotation schema."
      • addedInput schema / properties / bbox_annotation_format / properties / json_schema / properties / schema / description
        Added value: +"JSON Schema object defining the fields to extract into the annotation."
      • addedInput schema / properties / bbox_annotation_format / properties / json_schema / properties / schema / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / bbox_annotation_format / properties / json_schema / properties / strict / description
        Added value: +"Whether the annotation must strictly follow the supplied JSON Schema."
      • addedInput schema / properties / confidence_scores_granularity / description
        Added value: +"Confidence granularity. 'block' also fills pages[].blocks[].confidence_scores and requires OCR 4.1 (mistral-ocr-4-1) or newer."
      • changedInput schema / properties / confidence_scores_granularity / enum
        Previous value: -[
        -  "page",
        -  "word"
        -]New value: +[
        +  "page",
        +  "word",
        +  "block"
        +]
      • changedInput schema / properties / document / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "documentName": {
        -        "type": "string"
        -      },
        -      "documentUrl": {
        -        "description": "HTTPS URL to a PDF or image.",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "document_url",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "documentUrl"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "imageUrl": {
        -        "description": "HTTPS URL or data:image/...;base64,... payload.",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "image_url",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "imageUrl"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "fileId": {
        -        "description": "ID of a file previously uploaded via the Files API.",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "file",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "fileId"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "documentName": {
        +        "description": "Filename of the referenced document.",
        +        "type": "string"
        +      },
        +      "documentUrl": {
        +        "description": "HTTPS URL to a PDF or image.",
        +        "type": "string"
        +      },
        +      "type": {
        +        "const": "document_url",
        +        "description": "Read the document from documentUrl.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "documentUrl"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "imageUrl": {
        +        "description": "HTTPS URL or data:image/...;base64,... payload.",
        +        "type": "string"
        +      },
        +      "type": {
        +        "const": "image_url",
        +        "description": "Read the image from the URL or data URI in imageUrl.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "imageUrl"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "fileId": {
        +        "description": "ID of a file previously uploaded via the Files API.",
        +        "type": "string"
        +      },
        +      "type": {
        +        "const": "file",
        +        "description": "Read a previously uploaded file identified by fileId.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "fileId"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / document / description
        Added value: +"Document to process, supplied as a document URL, an image URL or data URI, or an uploaded file ID."
      • removedInput schema / properties / document_annotation_format / $ref
        Removed value: -"#/properties/bbox_annotation_format"
      • addedInput schema / properties / document_annotation_format / description
        Added value: +"JSON Schema for a structured annotation extracted from the entire document."
      • addedInput schema / properties / document_annotation_format / properties
        Added value: +{
        +  "json_schema": {
        +    "description": "Named JSON Schema and optional strictness for the extracted annotation.",
        +    "properties": {
        +      "description": {
        +        "description": "Description of the annotation to extract.",
        +        "type": "string"
        +      },
        +      "name": {
        +        "description": "Name identifying the annotation schema.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "schema": {
        +        "additionalProperties": {},
        +        "description": "JSON Schema object defining the fields to extract into the annotation.",
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "strict": {
        +        "description": "Whether the annotation must strictly follow the supplied JSON Schema.",
        +        "type": "boolean"
        +      }
        +    },
        +    "required": [
        +      "name",
        +      "schema"
        +    ],
        +    "type": "object"
        +  },
        +  "type": {
        +    "const": "json_schema",
        +    "description": "Only json_schema is accepted by OCR annotation formats.",
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / document_annotation_format / required
        Added value: +[
        +  "type",
        +  "json_schema"
        +]
      • addedInput schema / properties / document_annotation_format / type
        Added value: +"object"
      • addedInput schema / properties / document_annotation_prompt / description
        Added value: +"Instructions for whole-document structured extraction. Requires document_annotation_format."
      • addedInput schema / properties / extractFooter / description
        Added value: +"Extract each page footer into its footer field and remove it from the page markdown."
      • addedInput schema / properties / extractHeader / description
        Added value: +"Extract each page header into its header field and remove it from the page markdown."
      • addedInput schema / properties / imageLimit / description
        Added value: +"Maximum number of images to extract from the document."
      • addedInput schema / properties / imageLimit / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / imageMinSize / description
        Added value: +"Minimum height and width of an image to extract."
      • addedInput schema / properties / imageMinSize / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / includeBlocks
        Added value: +{
        +  "description": "Return paragraph-level blocks (bounding box + type) per page. Requires OCR 4 (mistral-ocr-4-0) or newer.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / includeImageBase64 / description
        Added value: +"Include base64-encoded data for extracted images in the response."
      • removedInput schema / properties / model / enum
        Removed value: -[
        -  "mistral-ocr-latest"
        -]
      • addedInput schema / properties / model / maxLength
        Added value: +200
      • addedInput schema / properties / model / minLength
        Added value: +1
      • changedInput schema / properties / pages / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "items": {
        -      "minimum": 0,
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "maximum": 9007199254740991,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "type": "array"
        +  }
        +]
      • addedInput schema / properties / pages / description
        Added value: +"Zero-based page numbers to process, as an array or comma-separated numbers and ranges such as \"0-5,7\"."
      • addedInput schema / properties / tableFormat / description
        Added value: +"Format for extracted tables: Markdown or HTML."
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / annotations / properties / image_annotations / items / properties / page_index / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / annotations / properties / image_annotations / items / properties / page_index / minimum
        Added value: +-9007199254740991
      • addedOutput schema / properties / pages / items / properties / blocks
        Added value: +{
        +  "description": "Paragraph-level blocks in reading order. Populated when `includeBlocks: true` and the model is OCR 4 or newer.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "bottom_right_x": {
        +        "type": "number"
        +      },
        +      "bottom_right_y": {
        +        "type": "number"
        +      },
        +      "confidence_scores": {
        +        "additionalProperties": false,
        +        "description": "Populated only when `confidence_scores_granularity: 'block'`. Fields are null when the signal is absent (an image-only block has no content to score).",
        +        "properties": {
        +          "average_content_confidence_score": {
        +            "anyOf": [
        +              {
        +                "type": "number"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "block_type_confidence_score": {
        +            "anyOf": [
        +              {
        +                "type": "number"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "minimum_content_confidence_score": {
        +            "anyOf": [
        +              {
        +                "type": "number"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "content": {
        +        "type": "string"
        +      },
        +      "image_id": {
        +        "description": "Set on type:image — references the matching entry in `images[]`.",
        +        "type": "string"
        +      },
        +      "table_id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Set on type:table — references the matching entry in `tables[]`."
        +      },
        +      "top_left_x": {
        +        "type": "number"
        +      },
        +      "top_left_y": {
        +        "type": "number"
        +      },
        +      "type": {
        +        "enum": [
        +          "text",
        +          "title",
        +          "list",
        +          "table",
        +          "image",
        +          "equation",
        +          "caption",
        +          "code",
        +          "references",
        +          "aside_text",
        +          "header",
        +          "footer",
        +          "signature"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "top_left_x",
        +      "top_left_y",
        +      "bottom_right_x",
        +      "bottom_right_y",
        +      "content"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / pages / items / properties / confidence_scores / properties / word_confidence_scores / items / properties / start_index / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / pages / items / properties / confidence_scores / properties / word_confidence_scores / items / properties / start_index / minimum
        Added value: +-9007199254740991
      • addedOutput schema / properties / pages / items / properties / footer / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / pages / items / properties / footer / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / pages / items / properties / header / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / pages / items / properties / header / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / pages / items / properties / index / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / pages / items / properties / index / minimum
        Added value: +-9007199254740991
      • addedOutput schema / properties / pages_count / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / pages_count / minimum
        Added value: +-9007199254740991
    • Changedmistral_vision16 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / max_tokens / description
        Added value: +"Maximum number of tokens to generate. Input tokens plus this limit must fit within the model's context length."
      • addedInput schema / properties / max_tokens / maximum
        Added value: +9007199254740991
      • removedInput schema / properties / messages / items / additionalProperties
        Removed value: -false
      • changedInput schema / properties / messages / items / properties / content / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "items": {
        -      "anyOf": [
        -        {
        -          "additionalProperties": false,
        -          "properties": {
        -            "text": {
        -              "type": "string"
        -            },
        -            "type": {
        -              "const": "text",
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "type",
        -            "text"
        -          ],
        -          "type": "object"
        -        },
        -        {
        -          "additionalProperties": false,
        -          "properties": {
        -            "imageUrl": {
        -              "anyOf": [
        -                {
        -                  "description": "https URL or data:image/...;base64,... payload",
        -                  "type": "string"
        -                },
        -                {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "detail": {
        -                      "enum": [
        -                        "auto",
        -                        "low",
        -                        "high"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    "url": {
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "url"
        -                  ],
        -                  "type": "object"
        -                }
        -              ]
        -            },
        -            "type": {
        -              "const": "image_url",
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "type",
        -            "imageUrl"
        -          ],
        -          "type": "object"
        -        },
        -        {
        -          "additionalProperties": false,
        -          "properties": {
        -            "documentName": {
        -              "type": "string"
        -            },
        -            "documentUrl": {
        -              "type": "string"
        -            },
        -            "type": {
        -              "const": "document_url",
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "type",
        -            "documentUrl"
        -          ],
        -          "type": "object"
        -        }
        -      ]
        -    },
        -    "minItems": 1,
        -    "type": "array"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "anyOf": [
        +        {
        +          "properties": {
        +            "text": {
        +              "description": "Text to include in the message.",
        +              "type": "string"
        +            },
        +            "type": {
        +              "const": "text",
        +              "description": "Identifies a text content part.",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "type",
        +            "text"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "properties": {
        +            "imageUrl": {
        +              "anyOf": [
        +                {
        +                  "description": "https URL or data:image/...;base64,... payload",
        +                  "type": "string"
        +                },
        +                {
        +                  "properties": {
        +                    "detail": {
        +                      "description": "Image detail hint: automatic, low, or high.",
        +                      "enum": [
        +                        "auto",
        +                        "low",
        +                        "high"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "url": {
        +                      "description": "HTTPS URL or data:image/...;base64,... payload.",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "url"
        +                  ],
        +                  "type": "object"
        +                }
        +              ],
        +              "description": "Image source as a URL or base64 data URI, optionally with a detail hint."
        +            },
        +            "type": {
        +              "const": "image_url",
        +              "description": "Identifies an image content part.",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "type",
        +            "imageUrl"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "properties": {
        +            "documentName": {
        +              "description": "Filename of the referenced document.",
        +              "type": "string"
        +            },
        +            "documentUrl": {
        +              "description": "URL of the PDF or document to include in the message.",
        +              "type": "string"
        +            },
        +            "type": {
        +              "const": "document_url",
        +              "description": "Identifies a document content part.",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "type",
        +            "documentUrl"
        +          ],
        +          "type": "object"
        +        }
        +      ]
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +]
      • addedInput schema / properties / messages / items / properties / content / description
        Added value: +"Message text or an ordered list of text, image, and document content parts."
      • addedInput schema / properties / messages / items / properties / role / description
        Added value: +"Message author: system for instructions, user for requests, or assistant for prior replies."
      • removedInput schema / properties / model / enum
        Removed value: -[
        -  "pixtral-large-latest",
        -  "pixtral-12b-latest",
        -  "mistral-large-latest",
        -  "mistral-medium-latest",
        -  "mistral-small-latest"
        -]
      • addedInput schema / properties / model / maxLength
        Added value: +200
      • addedInput schema / properties / model / minLength
        Added value: +1
      • addedInput schema / properties / seed / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / seed / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / temperature / description
        Added value: +"Sampling temperature: higher values make output more random; lower values make it more focused. Prefer adjusting this or top_p, not both."
      • addedInput schema / properties / top_p / description
        Added value: +"Nucleus sampling probability mass: 0.1 considers tokens in the top 10% of probability mass. Prefer adjusting this or temperature, not both."
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Addedprocess_document
    • Changedvoxtral_transcribe13 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / audio / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "fileUrl": {
        -        "description": "HTTPS URL to an audio file (mp3/wav/flac/ogg/webm/m4a).",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "file_url",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "fileUrl"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "fileId": {
        -        "description": "ID of an audio file previously uploaded via the Files API (purpose=audio).",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "file",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "fileId"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "fileUrl": {
        +        "description": "HTTPS URL to an audio file (mp3/wav/flac/ogg/webm/m4a).",
        +        "type": "string"
        +      },
        +      "type": {
        +        "const": "file_url",
        +        "description": "Transcribe audio from the URL in fileUrl.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "fileUrl"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "fileId": {
        +        "description": "ID of an audio file previously uploaded via the Files API (purpose=audio).",
        +        "type": "string"
        +      },
        +      "type": {
        +        "const": "file",
        +        "description": "Transcribe an uploaded audio file identified by fileId.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "fileId"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / audio / description
        Added value: +"Audio to transcribe, supplied as a public URL or an uploaded file ID."
      • addedInput schema / properties / contextBias / description
        Added value: +"Words or phrases to favor when decoding the audio."
      • addedInput schema / properties / diarize / description
        Added value: +"Identify speakers in the returned transcription segments. Defaults to false."
      • removedInput schema / properties / model / enum
        Removed value: -[
        -  "voxtral-mini-latest",
        -  "voxtral-small-latest"
        -]
      • addedInput schema / properties / model / maxLength
        Added value: +200
      • addedInput schema / properties / model / minLength
        Added value: +1
      • addedInput schema / properties / temperature / description
        Added value: +"Sampling temperature for transcription."
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / language / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / language / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
    • Removedworkflow_execute
    • Removedworkflow_interact
    • Removedworkflow_status
  2. 24 tool updatesv0.7.0
    • Removedbatch_cancel
    • Removedbatch_create
    • Removedbatch_get
    • Removedbatch_list
    • Changedcodestral_fim1 field changed
      • addedInput schema / properties / seed
        Added value: +{
        +  "description": "Random seed for deterministic sampling. Maps to Mistral's `random_seed`.",
        +  "type": "integer"
        +}
    • Removedfiles_delete
    • Removedfiles_get
    • Removedfiles_list
    • Removedfiles_signed_url
    • Removedfiles_upload
    • Removedmcp_sample
    • Removedmistral_agent
    • Changedmistral_chat4 fields changed
      • addedInput schema / properties / reasoning_effort
        Added value: +{
        +  "description": "Controls reasoning depth for Magistral models. 'high' enables full chain-of-thought; 'none' disables it. Ignored on non-reasoning models.",
        +  "enum": [
        +    "none",
        +    "high"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / response_format
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "type": {
        +          "const": "text",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "type": {
        +          "const": "json_object",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "json_schema": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "description": {
        +              "type": "string"
        +            },
        +            "name": {
        +              "description": "Identifier for the schema; surfaced in API errors.",
        +              "maxLength": 64,
        +              "minLength": 1,
        +              "type": "string"
        +            },
        +            "schema": {
        +              "additionalProperties": {},
        +              "description": "JSON Schema object the response must conform to.",
        +              "type": "object"
        +            },
        +            "strict": {
        +              "description": "If true, the API rejects responses that do not strictly match the schema.",
        +              "type": "boolean"
        +            }
        +          },
        +          "required": [
        +            "name",
        +            "schema"
        +          ],
        +          "type": "object"
        +        },
        +        "type": {
        +          "const": "json_schema",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type",
        +        "json_schema"
        +      ],
        +      "type": "object"
        +    }
        +  ],
        +  "description": "Force a structured output: `{type:\"json_object\"}` for JSON mode, `{type:\"json_schema\", json_schema:{...}}` for strict schema mode."
        +}
      • addedInput schema / properties / seed
        Added value: +{
        +  "description": "Random seed for deterministic sampling. Maps to Mistral's `random_seed`.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / reasoning_content
        Added value: +{
        +  "description": "Reasoning trace returned by Magistral models. Absent for non-reasoning models.",
        +  "type": "string"
        +}
    • Removedmistral_chat_stream
    • Removedmistral_classify
    • Removedmistral_embed
    • Removedmistral_moderate
    • Changedmistral_ocr7 fields changed
      • addedInput schema / properties / bbox_annotation_format
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "json_schema": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "description": {
        +          "type": "string"
        +        },
        +        "name": {
        +          "minLength": 1,
        +          "type": "string"
        +        },
        +        "schema": {
        +          "additionalProperties": {},
        +          "type": "object"
        +        },
        +        "strict": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "name",
        +        "schema"
        +      ],
        +      "type": "object"
        +    },
        +    "type": {
        +      "const": "json_schema",
        +      "description": "Only json_schema is accepted by OCR annotation formats.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "json_schema"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / confidence_scores_granularity
        Added value: +{
        +  "enum": [
        +    "page",
        +    "word"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / document_annotation_format
        Added value: +{
        +  "$ref": "#/properties/bbox_annotation_format"
        +}
      • addedInput schema / properties / document_annotation_prompt
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / annotations
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "document_annotation": {
        +      "type": "string"
        +    },
        +    "image_annotations": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "annotation": {
        +            "type": "string"
        +          },
        +          "bbox": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "bottom_right_x": {
        +                "type": "number"
        +              },
        +              "bottom_right_y": {
        +                "type": "number"
        +              },
        +              "top_left_x": {
        +                "type": "number"
        +              },
        +              "top_left_y": {
        +                "type": "number"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "image_id": {
        +            "type": "string"
        +          },
        +          "page_index": {
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "page_index",
        +          "annotation"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / pages / items / properties / confidence_scores
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "average_page_confidence_score": {
        +      "type": "number"
        +    },
        +    "minimum_page_confidence_score": {
        +      "type": "number"
        +    },
        +    "word_confidence_scores": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "confidence": {
        +            "type": "number"
        +          },
        +          "start_index": {
        +            "type": "integer"
        +          },
        +          "text": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "text",
        +          "confidence",
        +          "start_index"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "average_page_confidence_score",
        +    "minimum_page_confidence_score"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / pages / items / properties / images / items / properties / image_annotation
        Added value: +{
        +  "type": "string"
        +}
    • Removedmistral_tool_call
    • Changedmistral_vision1 field changed
      • addedInput schema / properties / seed
        Added value: +{
        +  "description": "Random seed for deterministic sampling. Maps to Mistral's `random_seed`.",
        +  "type": "integer"
        +}
    • Removedvoxtral_speak
    • Addedworkflow_execute
    • Addedworkflow_interact
    • Addedworkflow_status
  3. 22 tool updatesv0.4.0
    • First observedbatch_cancel
    • First observedbatch_create
    • First observedbatch_get
    • First observedbatch_list
    • First observedcodestral_fim
    • First observedfiles_delete
    • First observedfiles_get
    • First observedfiles_list
    • First observedfiles_signed_url
    • First observedfiles_upload
    • First observedmcp_sample
    • First observedmistral_agent
    • First observedmistral_chat
    • First observedmistral_chat_stream
    • First observedmistral_classify
    • First observedmistral_embed
    • First observedmistral_moderate
    • First observedmistral_ocr
    • First observedmistral_tool_call
    • First observedmistral_vision
    • First observedvoxtral_speak
    • First observedvoxtral_transcribe

TDQS

A4.1/5.0

Scored across 6 tools

Disambiguation4/5

Each tool targets a distinct modality/action: code FIM, text chat, OCR, vision chat, document pipeline, and audio transcription. There is minor overlap between mistral_chat and mistral_vision (both chat) and between process_document and mistral_ocr, but the descriptions explicitly steer selection, so confusion is limited.

Naming Consistency3/5

Names mix provider-prefixed conventions (codestral_fim, mistral_chat, mistral_ocr, mistral_vision, voxtral_transcribe) with a plain action name (process_document). The pattern is somewhat readable but not a predictable verb_noun scheme and the provider prefixes fragment consistency.

Tool Count4/5

Six tools is well-scoped for a multimodal Mistral wrapper, with each tool covering a distinct capability rather than redundancy. Slightly broad for a server named 'Document Extraction' since it also includes code completion and chat, but not excessive.

Completeness3/5

Covers OCR, vision, chat, transcription, and a combined pipeline, but several tools reference a Files API (fileId) that is not exposed as a tool, creating a dead-end for uploading files. No model-listing or file-management operations leave workflows partially blocked.

Maintenance

ActivityMaintained
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    D
    maintenance
    A TypeScript implementation of a Model Context Protocol server and client that enables interaction with language models (specifically Mistral running on Ollama).
    -
  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    A production-ready TypeScript MCP server providing basic tools (add, echo, timestamp), resources (server info, greetings, data access), and prompt templates (analyze, code-review, summarize). Serves as a foundation for building custom MCP servers with extensible architecture.
    398 npm
    -
  • A
    license
    B
    quality
    C
    maintenance
    A TypeScript-based MCP server that provides tools to interact with local Codex and Gemini CLIs via stdio transport. It enables users to execute prompts through the ask_codex and ask_gemini tools, supporting custom models and timeout configurations.
    1
    10 npm
    6
    MIT