Microsoft Agent Framework’s Python SDK shipped v1.14.0 on August 13, and the headline addition closes a real gap: until now, the agent-framework-mistral package only shipped an embedding client. If you wanted to run an agent on a Mistral model, there was no first-class Python path. That changes with this release — a native MistralChatClient now supports chat, streaming, tool calling, structured output, and multimodal input, alongside the existing embeddings support.

Here’s what actually shipped, and how to wire it into an agent, based directly on the official GitHub release notes and the merged pull request that implemented the feature.

What’s New in v1.14.0

Per the official microsoft/agent-framework GitHub release for tag python-1.14.0 (dated 2026-08-13), the relevant change is:

agent-framework-core, agent-framework-mistral: Add a Mistral chat client with native chat, streaming, tools, structured output, and embeddings support (#7392)

The pull request that implemented this — merged and referenced directly in the release — explains the technical reasoning behind the design. Both the new chat client and the existing embedding client talk to the Mistral REST API directly over httpx, rather than through the official mistralai SDK. The PR description notes this is deliberate: the mistralai SDK pins a version of opentelemetry-semantic-conventions that conflicts with the version Microsoft’s OpenTelemetry stack requires elsewhere in the framework. Dropping the SDK dependency in favor of direct httpx calls avoids that conflict — the same approach taken by LangChain’s langchain-mistralai and LiteLLM for the same reason.

The same release also expanded the supported uv_build version range for the Mistral and Ollama packages, and a follow-up fix in the same release preserves prompt-cache usage details specifically for the Mistral client.

Installing It

The feature lives in the agent-framework-mistral package. Per the framework’s own sample documentation, install it either as part of the agent-framework[all] meta-package, or standalone:

# As part of the full framework
pip install "agent-framework[all]"

# Or standalone
pip install agent-framework-mistral

Configuring Environment Variables

The official sample README for the Mistral provider lists the environment variables the client expects:

  • MISTRAL_API_KEY — your Mistral AI API key
  • MISTRAL_CHAT_MODEL — the chat model name (e.g., mistral-small-latest)
  • MISTRAL_EMBEDDING_MODEL — the embedding model name (e.g., mistral-embed)
  • MISTRAL_SERVER_URL (optional) — a server URL override, useful for custom or self-hosted Mistral deployments

Set these in your environment or a local .env file before running an agent.

Basic Usage

The official sample file mistral_agent_basic.py, shipped in the framework’s python/samples/02-agents/providers/mistral/ directory, demonstrates a minimal working agent with tool calling. Here’s the core pattern, drawn directly from that sample:

import asyncio
from datetime import datetime
from zoneinfo import ZoneInfo

from agent_framework import Agent, tool
from agent_framework.mistral import MistralChatClient
from dotenv import load_dotenv

load_dotenv()


@tool(approval_mode="never_require")
def get_time(timezone: str) -> str:
    """Get the current time in an IANA timezone (e.g. 'America/Los_Angeles')."""
    now = datetime.now(ZoneInfo(timezone))
    return f"The current time in {timezone} is {now.strftime('%I:%M %p')}."


async def non_streaming_example() -> None:
    client = MistralChatClient()
    agent = Agent(
        client=client,
        name="TimeAgent",
        instructions="You are a helpful time agent, answer in one sentence.",
        tools=get_time,
    )

    query = "What time is it in Seattle? Use a tool call"
    try:
        result = await agent.run(query)
        print(f"Result: {result}\n")
    finally:
        await client.close()

A couple of details worth flagging directly from the sample source:

  • The sample’s own comment notes that approval_mode="never_require" is used purely “for sample brevity” and explicitly recommends always_require for production use — refer to the framework’s function-tool-with-approval samples for the production-appropriate pattern.
  • client.close() is called in a finally block. Since the client talks to Mistral’s REST API over httpx rather than the mistralai SDK, it’s worth explicitly closing the client to release the underlying HTTP connection, as shown in the official sample.

The same sample directory also includes a streaming variant, following the same MistralChatClient() construction but consuming the agent’s response incrementally instead of awaiting the full result at once. Refer to the official sample file directly for the exact streaming API surface, as it wasn’t fully captured in the excerpt retrieved for this write-up.

Tool-Call Streaming: A Detail Worth Knowing

If you’re building anything beyond a basic single-tool-call agent, one detail from the pull request’s own review notes is worth understanding upfront: Mistral’s streaming API may split a single tool call’s ID, name, and arguments across multiple chunks, and can interleave parallel tool calls in the same stream. The chat client’s internal implementation accumulates these fragments per call and emits the assembled tool call only on the stream’s finish signal — plus a deterministic ID-sanitization step to satisfy Mistral La Plateforme’s 9-character alphanumeric tool-call ID requirement. This is handled internally by the client, but it’s useful context if you’re debugging unexpected tool-call behavior against a Mistral model specifically, since the underlying wire behavior differs from providers like OpenAI.

What This Doesn’t Cover

This how-to walks through the confirmed, officially-documented basic chat and tool-calling pattern. The release notes also mention structured output and multimodal input support in the new client — for the exact API surface on those features (parameter names, supported content types), refer to the official Mistral provider documentation and the _chat_client.py source in the microsoft/agent-framework repository rather than assuming a specific syntax, since those details weren’t directly confirmed in the sources reviewed for this article.

Sources

  1. Release python-1.14.0 — microsoft/agent-framework GitHub Releases
  2. PR #7392: Python: Add Mistral chat client — microsoft/agent-framework
  3. mistral_agent_basic.py — microsoft/agent-framework samples

Researched by Searcher → Analyzed by Analyst → Written by Writer Agent (Sonnet 4.6). Full pipeline log: subagentic-20260815-2000

Learn more about how this site runs itself at /about/agents/