Skip to main content

Vibe SDK

High-level Python interface for running Vibe agents.

The SDK gives you:

  • Agent and stateful async/sync sessions
  • Pydantic-based tool authoring
  • Built-in filesystem tools
  • Client-handled tools for UI- or host-dependent actions, such as asking the user a question
  • Skills: reusable instruction sets advertised in the prompt and loaded on demand
  • MCP server integration — discover a server's tools and expose them to the agent

For architecture and design references, see ARCHITECTURE.md and documentation/INDEX.md.

Advanced raw task-protocol examples live in examples/advanced_task_protocol_examples. They are not the primary public SDK API, but they are useful end-to-end probes for local, HTTP, and workflow execution.

Quick Start

Use run_to_completion() when you just want the final task state for one turn:

from mistralai.vibe.sdk import Agent, AgentConfig
from mistralai.vibe.sdk.providers.completion import MistralCompletionConfig

agent = Agent(
    config=AgentConfig(
        completion=MistralCompletionConfig(model="mistral-large-latest"),
        system_prompt="You are a concise assistant.",
    )
)

async with agent.session() as session:
    state = await session.run_to_completion("Hello")
    print(state.output)

Use run() when the host needs streaming updates, callback requests, or direct access to task protocol events:

from mistralai.vibe.sdk import Agent, AgentConfig
from mistralai.vibe.sdk.execution_record.patching.json_patch import apply_patches
from mistralai.vibe.sdk.execution_record.state import TaskState
from mistralai.vibe.sdk.providers.completion import MistralCompletionConfig
from mistralai.vibe.sdk.transports.events import TaskResultEvent, TaskStateUpdateEvent

agent = Agent(
    config=AgentConfig(
        completion=MistralCompletionConfig(model="mistral-large-latest"),
        system_prompt="You are a concise assistant.",
    )
)

async with agent.session() as session:
    state = TaskState(input="Hello")
    async for event in session.run("Hello"):
        if isinstance(event, TaskStateUpdateEvent):
            state = apply_patches(state, event.payload.patches)
        elif isinstance(event, TaskResultEvent):
            state = event.payload.result

    print(state.output)

Tool annotations

Use ToolResult to return metadata to non-model consumers while keeping the model-visible result compact:

from pydantic import BaseModel

from mistralai.vibe.sdk.capabilities import ToolResult, tool


class EditFileArgs(BaseModel):
    path: str
    previous_content: str


class EditFileResult(BaseModel):
    lines_changed: int


@tool(name="edit_file", description="Edit a file", input_schema=EditFileArgs)
def edit_file(args: EditFileArgs) -> ToolResult[EditFileResult]:
    return ToolResult(
        value=EditFileResult(lines_changed=2),
        annotations={"example.file_before": args.previous_content},
    )

Annotations are stored on the corresponding task-result history entry and are not included in the tool result sent to the model.

Skills

Skills let an agent discover short task-specific summaries up front and load the full instructions only when needed through the builtin skill tool.

from mistralai.vibe.sdk import Agent, AgentConfig, SkillDefinition
from mistralai.vibe.sdk.providers.completion import MistralCompletionConfig

agent = Agent(
    config=AgentConfig(
        completion=MistralCompletionConfig(model="mistral-large-latest"),
        skills=[
            SkillDefinition(
                name="interview",
                description="Use when running a structured user interview.",
                content="Ask one question at a time and summarize decisions at the end.",
            )
        ],
    )
)

MCP Servers

Add MCP servers in the mcps field of AgentConfig as a dict mapping a short local name to each server's config.

See the agent README for details on MCP support implementation.

Local (stdio) servers

Use StdioMcpConfig to launch a local subprocess and talk to it over stdio:

from mistralai.vibe.sdk import Agent, AgentConfig
from mistralai.vibe.sdk.capabilities.mcp import StdioMcpConfig

agent = Agent(
    config=AgentConfig(
        model="mistral-large-latest",
        mcps={
            "demo": StdioMcpConfig(command="python", args=["demo_mcp_server.py"]),
        },
    )
)

Secrets are never stored in the config. To pass host environment variables into the subprocess, list their names with env_key_names; the values are read from the host at launch:

StdioMcpConfig(
    command="my-mcp-server",
    args=[],
    env_key_names=["MY_SERVER_TOKEN"],
    timeout_ms=30_000,
)

Connector-backed servers

Use ConnectorMcpConfig to reach a Mistral connector instead of a local subprocess. By default it uses the SDK transport, reading the API key from MISTRAL_API_KEY. ConnectorMcpConfig accepts:

  • connector_id_or_name — the connector to reach, by id or name (required).
  • credentials_name — selects which named credential set the connector uses to resolve, list, and call tools. Leave unset to use the connector's default credential resolution.
  • transport — how to reach the connector. Two modes are available:
  1. ConnectorMcpSdkTransport reaches the connector through the public Mistral SDK. Accepts:

    • api_key_env_var — name of the host environment variable holding the Mistral API key. The value is read at runtime, so the secret is never stored in the serialized config. Defaults to MISTRAL_API_KEY.
    • server_url — override the Mistral API base URL. Optional; unset uses the SDK default.
    • timeout_ms — request timeout in milliseconds passed to the Mistral client. Optional; unset uses the SDK default.
  2. ConnectorMcpDirectTransport reaches the connector directly over JSON-RPC HTTP, bypassing the public SDK. Accepts:

    • base_url — base URL of the connectors service to call (required).
    • origin_service — name of the calling service, used to identify the caller (required).
    • scoped_headers — extra HTTP headers sent with each request. Defaults to an empty mapping.
    • timeout_ms — request timeout in milliseconds. Must be greater than 0. Defaults to 30000.
    • mcp_path_template — endpoint path, relative to base_url, of the direct MCP endpoint. May include a {{connector_id}} placeholder that is substituted at runtime. Optional; rarely overridden. Defaults to /connectors-gateway/{{connector_id}}/mcp.

Example of a connector config for direct transport:

from mistralai.vibe.sdk.capabilities.mcp import (
    ConnectorMcpConfig,
    ConnectorMcpDirectTransport,
)

ConnectorMcpConfig(
    connector_id_or_name="<your-connector-id-or-name>",
    transport=ConnectorMcpDirectTransport(
        base_url="<base-url>",
        origin_service="<my-service>",
        scoped_headers={"x-tenant-id": "acme"},
        timeout_ms=30_000,
    ),
)

See agent/ for how MCP tools are wired into the runtime, and examples/basic_repl for a runnable stdio demo.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mistralai_vibe_sdk-0.12.1.tar.gz (168.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mistralai_vibe_sdk-0.12.1-py3-none-any.whl (241.9 kB view details)

Uploaded Python 3

File details

Details for the file mistralai_vibe_sdk-0.12.1.tar.gz.

File metadata

  • Download URL: mistralai_vibe_sdk-0.12.1.tar.gz
  • Upload date:
  • Size: 168.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mistralai_vibe_sdk-0.12.1.tar.gz
Algorithm Hash digest
SHA256 93aa1a2cb448be0dfc2d49c9d9faa42c9685f5b9a6a2290802fdc86d2291b3e8
MD5 2b934e80a7c6cf7fd501a24b94fdf593
BLAKE2b-256 617bf4252b4e46e04d25d06415be2b245d6ed49ab9faf227b5e8f3c35c45a5a3

See more details on using hashes here.

Provenance

The following attestation bundles were made for mistralai_vibe_sdk-0.12.1.tar.gz:

Publisher: release.yml on mistralai/vibe-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mistralai_vibe_sdk-0.12.1-py3-none-any.whl.

File metadata

File hashes

Hashes for mistralai_vibe_sdk-0.12.1-py3-none-any.whl
Algorithm Hash digest
SHA256 224447ae37f4cdd3f4de852718bef41bf3e91079cb03b8e24591e6bf5df6e115
MD5 d242fae30b6512ceb636bcbadf99bb96
BLAKE2b-256 ce234dfeac1a63149a220bd2527480e50bafe2afbdf44e3c3b55e291cb3fc2a4

See more details on using hashes here.

Provenance

The following attestation bundles were made for mistralai_vibe_sdk-0.12.1-py3-none-any.whl:

Publisher: release.yml on mistralai/vibe-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.13.2

2 files

This release

0.12.1 This release

2 files

0.11.0

2 files

0.10.1

2 files

0.10.0

2 files

0.9.0

2 files

0.8.0

2 files

0.6.0

2 files

0.5.0

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

0.0.1

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page