Mistral AI MCP server for AI agents

Live

BEARER TOKEN

LLM API

AI

Mistral AI gives your agent Mistral models: run chat and agent completions, hold stored conversations, extract text from documents with OCR, create embeddings, moderate text, and run batch jobs.

  • Per-user credentials: each call uses the actual user's access token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Mistral AI
agent · Acme Q3
Run
Extract the line items from this invoice PDF.
S
mistral_ocr_document
138ms
Document agent
The invoice has 7 line items totaling $4,280. The table comes back as Markdown with each item's quantity and unit price.
Sources: 1 PDF, 2 pages
mistral
7 line items
18:29
Message Claude...

Tools your document agent reaches for on Mistral AI, scoped per user.

CALL ANY TOOL
32 tools for LLM API calls in Mistral AI: chat, agent, and code completions, stored conversations, document OCR, embeddings, moderation, fine-tuned classifiers, batch jobs, agents, and workspace files.
mistral_append_to_conversation
Append to conversation
Add new inputs to an existing Mistral conversation and run the next reply on the full history. Returns the conversation_id, the new output entries (assistant messages, tool executions or function calls) and token usage. Use this for the next turn, or to send a function.result after a function call. Use mistral_restart_conversation to branch from an earlier entry.
Parameters
Name
Type
Required
Description
conversation_id
string
Required
ID of the conversation to continue, from mistral_start_conversation or mistral_list_conversations. Example: conv_0195b2f2a6f97c3bb6b1c0f5e1a2d3c4.
inputs
string
Required
What to add to the conversation: a plain string is sent as one user message. For more control pass an array of entries, such as [{"type": "message.input", "role": "user", "content": "..."}], or, to answer a function call the model made, [{"type": "function.result", "tool_call_id": "<id from the function.call entry>", "result": "<your result as a string>"}]. Example: "Summarise the key points of our last discussion."
completion_args
object
Optional
Default generation settings for the agent or conversation: temperature, top_p, max_tokens, random_seed, stop, presence_penalty, frequency_penalty, tool_choice (auto, none, any or required), reasoning_effort and response_format (same shapes as in chat completions). Example: {"temperature": 0.3, "max_tokens": 1024}.
handoff_execution
string
Optional
With multi-agent handoffs: server lets Mistral run the handoff, client returns it to you to perform. One of: `server`, `client`.
store
boolean
Optional
Whether Mistral stores the new entries. Default true.
mistral_cancel_batch_job
Cancel batch job
mistral_classify_chat
Classify chat
mistral_classify_text
Classify text
mistral_create_agent
Create agent
mistral_create_agent_completion
Create agent completion
mistral_create_batch_job
Create batch job
mistral_create_chat_completion
Create chat completion
mistral_create_embeddings
Create embeddings
mistral_create_fim_completion
Create fim completion
mistral_delete_agent
Delete agent
mistral_delete_conversation
Delete conversation
mistral_delete_file
Delete file
mistral_get_agent
Get agent
mistral_get_batch_job
Get batch job
mistral_get_conversation
Get conversation
mistral_get_conversation_history
Get conversation history
mistral_get_file
Get file
mistral_get_file_signed_url
Get file signed url
mistral_list_agents
List agents
mistral_list_batch_jobs
List batch jobs
mistral_list_conversation_messages
List conversation messages
mistral_list_conversations
List conversations
mistral_list_files
List files
mistral_list_models
List models
mistral_moderate_chat
Moderate chat
mistral_moderate_text
Moderate text
mistral_ocr_document
Ocr document
mistral_start_conversation
Start conversation
mistral_update_agent
Update agent

For more tools, view docs.

Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// Mistral AI tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["mistral"], toolNames: [
    "mistral_ocr_document",
    "mistral_create_chat_completion",
    "mistral_create_embeddings"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Extract the line items from this invoice and summarize them" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["mistral"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Extract the line items from this invoice and summarize them" }],
  tools,
});

// Execute the tool call with the user's vaulted Mistral AI access token
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["mistral"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Extract the line items from this invoice and summarize them" }],
  tools,
});

// Tool call runs with the user's vaulted Mistral AI access token
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["mistral"] }, pageSize: 100,
});

const agent = new Agent({
  name: "document_agent",
  model: "gemini-2.5-pro",
  instruction: "Mistral AI tools scoped to this user",
  tools,
});

await agent.run("Extract the line items from this invoice and summarize them");
Try these prompts
Copy any prompt into your agent. Each maps directly to a Mistral AI tool. Click to copy, paste into your agent, done.
Chat and agents
Copy the prompt
Copied
Summarize this contract in plain language.
Copy the prompt
Copied
Run our support agent on this customer message.
Copy the prompt
Copied
Create an agent that answers HR policy questions with these instructions.
Documents and text
Copy the prompt
Copied
Extract text and tables from this scanned PDF.
Copy the prompt
Copied
Create embeddings for these 200 product descriptions.
Copy the prompt
Copied
Check these 10 user comments against the moderation categories.
Batches and files
Copy the prompt
Copied
Queue a batch job for these 5,000 classification requests.
Copy the prompt
Copied
Show the status of last night's batch job.
Copy the prompt
Copied
List the files in our Mistral workspace.
SEE HOW AUTH WORKS
Each user connects their own Mistral AI access token once, and Scalekit sends it with every call. Access tokens stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
Mistral AI
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Mistral AI
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Mistral AI
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Mistral AI
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other AI and document connectors.
Support and Ops Teams
Support ticket automation agent
Fetches new Zendesk tickets, drafts a reply from Notion knowledge base articles, digests what it cannot answer to Slack, and archives the rest, acting as the support agent rather than a shared API key.
GTM and RevOps Teams
Competitive intelligence briefing agent
Scans Gong calls for competitor mentions, matches each one to its Notion battlecard, and DMs every affected rep a single Slack digest per cycle. Every call runs as the PMM who owns the briefing, never a shared bot.
Test other agents
See the same per-user auth pattern across other AI and document connectors.
SUPPORT
Support ticket automation (Google ADK)
Fetch, annotate, and archive Zendesk tickets with Notion context, digesting anything it cannot answer to Slack.
GTM
Competitive intelligence briefing agent
Scan Gong calls for competitor mentions, match each one to its Notion battlecard, and DM every affected rep a single Slack digest.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Mistral AI access token looks fine in a demo. In production every completion and OCR request looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared key
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Mistral AI today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access Mistral AI as the user or through a shared access token?
As the user. Each user connects their own Mistral AI access token once, and Scalekit sends it with every call. Audit logs attribute every completion and agent change to that user, not a shared service account.
Where is the Mistral AI access token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. To rotate it, the user reconnects with a new access token. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in Mistral AI?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example chat, OCR, and embeddings without mistral_delete_agent or mistral_delete_conversation, which permanently delete an agent or a stored conversation. Scalekit also enforces scope checks before every API call.
What happens when a user revokes Mistral AI access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Can the agent continue a conversation later?
Yes. mistral_start_conversation stores the conversation on Mistral, mistral_append_to_conversation adds inputs and runs the next reply on the full history, and mistral_restart_conversation branches from an earlier entry.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""mistral"": {
""url"": ""https://mcp.scalekit.com/mistral"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.mistral]
url = ""https://mcp.scalekit.com/mistral""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""mistral"": {
""url"": ""https://mcp.scalekit.com/mistral"",
""type"": ""http""
}
}
}