Mistral AI
Permission-checked, signed tool calls through Mistral with the official SDK or an OpenAI-compatible client, the EU endpoint, and Vorim answering the Agents API tool confirmations.
Mistral AI
Every function tool your agent calls through Mistral is checked against the agent's permissions (or your runtime rules) and recorded as a signed audit event before it runs. It works with the official Mistral SDK and with any OpenAI-compatible client pointed at Mistral, in TypeScript and Python.
import { Mistral } from "@mistralai/mistralai";
import createVorim from "@vorim/sdk";
import { createMistralRegistry, runMistralAgentLoop } from "@vorim/sdk/integrations/mistral";
const vorim = createVorim({ apiKey: "agid_sk_live_..." });
// server: "eu" keeps inference in EU and EFTA data centres (api.eu.mistral.ai)
const mistral = new Mistral({ apiKey: process.env.MISTRAL_API_KEY, server: "eu" });
const registry = createMistralRegistry({ vorim, agentId: "agid_acme_a1b2c3d4" });
registry.add({
name: "refund_order",
description: "Refund an order",
parameters: { type: "object", properties: { order: { type: "string" } }, required: ["order"] },
permission: "agent:transact",
execute: async ({ order }) => refund(order),
});
const answer = await runMistralAgentLoop({
vorim, agentId: "agid_acme_a1b2c3d4", mistral, registry,
userMessage: "Refund order 1042, the parcel arrived damaged",
// model defaults to mistral-medium-latest; override freely
});typescriptPython
from mistralai.client import Mistral # "from mistralai import Mistral" on mistralai 1.x
from vorim import Vorim
from vorim.integrations.mistral import create_mistral_registry, run_mistral_agent_loop
v = Vorim(api_key="agid_sk_live_...")
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"], server="eu")
registry = create_mistral_registry(vorim=v, agent_id="agid_acme_a1b2c3d4")
registry.add(name="refund_order", description="Refund an order",
parameters={"type": "object", "properties": {"order": {"type": "string"}}},
execute=lambda args: refund(args["order"]), permission="agent:transact")
answer = run_mistral_agent_loop(vorim=v, agent_id="agid_acme_a1b2c3d4", mistral_client=client,
registry=registry, user_message="Refund order 1042")pythonAgents API: your tools and Mistral's
On Mistral's Agents API, your own function tools come back as function.call entries that your code runs. Pass them to executeMistralFunctionCalls and append the function.result entries it returns. Tools Mistral runs itself (web search, the code interpreter, image generation, document libraries and MCP connectors) never reach your code, so list them in tool_configuration.requires_confirmation. Mistral then pauses each call, decideMistralConfirmations answers allow or deny from the agent's permissions or your rules, records the decision, and you send the answers back as tool_confirmations.
import { executeMistralFunctionCalls, decideMistralConfirmations } from "@vorim/sdk/integrations/mistral";
const results = await executeMistralFunctionCalls(registry, response.outputs);
const toolConfirmations = await decideMistralConfirmations(
{ vorim, agentId, scopes: { web_search: "agent:read", code_interpreter: "agent:execute" } },
response.outputs,
);
// Append results, and resume with toolConfirmations, through the Mistral SDK's conversations calls.typescript- Regional endpoints (EU and US) support function calling only. Mistral's Agents, Conversations and connectors run on the global endpoint.
- A tool Mistral runs that is not listed for confirmation does not pass through Vorim and is not in the signed record.
- If Vorim cannot be reached, calls and confirmations are denied, not allowed.
- Model ids are configuration.
mistral-medium-latest,mistral-small-latestandcodestral-latestwere current on 29 October 2026; Magistral and Devstral were retired on 31 July 2026.
Book a demo for a walkthrough, or contact us for support. For enterprise needs, reach out at sales@vorim.ai.