Mistral Agents API mit MCP: Wie gut ist es?

Künstliche Intelligenz (KI) handelt bald. Mistral AI bietet mit der Agents API Werkzeuge für Entwickler, um komplexe KI-Agenten zu erstellen.

Leo Schulz

Leo Schulz

5 June 2025

Mistral Agents API mit MCP: Wie gut ist es?

Künstliche Intelligenz (KI) geht rasant über das bloße Generieren von Text oder das Erkennen von Bildern hinaus. Die nächste Grenze ist KI, die handeln, Probleme lösen und auf sinnvolle Weise mit der Welt interagieren kann. Mistral AI, ein bekannter Name in diesem Bereich, hat mit seiner Mistral Agents API einen bedeutenden Schritt in diese Richtung unternommen. Dieses leistungsstarke Toolkit ermöglicht es Entwicklern, anspruchsvolle KI-Agenten zu erstellen, die weit mehr können als herkömmliche Sprachmodelle.

Im Kern ist die Agents API darauf ausgelegt, die Einschränkungen von Standard-KI-Modellen zu überwinden, die oft hervorragend darin sind, Sprache zu verstehen und zu generieren, aber Schwierigkeiten haben, Aktionen auszuführen, vergangene Interaktionen konsequent zu speichern oder externe Tools effektiv zu nutzen. Die Mistral Agents API begegnet diesen Herausforderungen, indem sie ihre leistungsstarken Sprachmodelle mit Funktionen wie integrierten Konnektoren zu verschiedenen Tools, persistentem Speicher über Konversationen hinweg und der Fähigkeit, komplexe Aufgaben zu koordinieren, ausstattet.

Stellen Sie sich das wie ein Upgrade von einem sehr sachkundigen Bibliothekar vor, der nur über Bücher sprechen kann, zu einem Team von erfahrenen Forschern, die nicht nur auf Informationen zugreifen, sondern auch Experimente durchführen, Berichte schreiben und miteinander zusammenarbeiten können. Diese neue API dient als Grundlage für die Erstellung von KI-Anwendungen auf Unternehmensebene, die Arbeitsabläufe automatisieren, bei komplexen Entscheidungen helfen und wirklich interaktive Erlebnisse bieten können.

💡
Benötigen Sie ein großartiges API-Testtool, das wunderschöne API-Dokumentation generiert?

Benötigen Sie eine integrierte All-in-One-Plattform für Ihr Entwicklerteam, um mit maximaler Produktivität zusammenzuarbeiten?

Apidog liefert alle Ihre Anforderungen und ersetzt Postman zu einem viel günstigeren Preis!
button

Was macht Mistral Agents so leistungsfähig?

Herkömmliche Sprachmodelle, die zwar in der Texterstellung versiert sind, versagen oft, wenn es darum geht, Aktionen auszuführen oder Informationen über längere Interaktionen hinweg zu speichern. Die Mistral Agents API geht diese Einschränkungen direkt an, indem sie die hochmodernen Sprachmodelle von Mistral mit einer Reihe leistungsstarker Funktionen kombiniert, die für agentenbasierte Workflows konzipiert sind.

Kernfunktionen:

Im Kern bietet die Agents API:

Diese API ist nicht nur eine Erweiterung ihrer Chat Completion API; sie ist ein dediziertes Framework, das speziell entwickelt wurde, um die Implementierung von agentenbasierten Anwendungsfällen zu vereinfachen. Sie soll das Rückgrat von agentenbasierten Plattformen auf Unternehmensebene bilden und es Unternehmen ermöglichen, KI auf praktischere, wirkungsvollere und handlungsorientiertere Weise einzusetzen.

Mistral Agents in Aktion: Anwendungen in der realen Welt

Die Vielseitigkeit der Agents API wird durch verschiedene innovative Anwendungen demonstriert:

Speicher, Kontext und zustandsbehaftete Konversationen

Ein Eckpfeiler der Agents API ist ihr robustes Konversationsverwaltungssystem. Es stellt sicher, dass Interaktionen zustandsbehaftet sind, d. h. der Kontext wird über die Zeit beibehalten. Entwickler können Konversationen auf zwei Arten initiieren:

  1. Mit einem Agenten: Durch die Angabe einer agent_id nutzen Sie die vorkonfigurierten Fähigkeiten, Tools und Anweisungen eines bestimmten Agenten.
  2. Direkter Zugriff: Sie können eine Konversation starten, indem Sie das Modell und die Vervollständigungsparameter direkt angeben, wodurch Sie schnell auf integrierte Konnektoren zugreifen können, ohne einen vordefinierten Agenten.

Jede Konversation behält einen strukturierten Verlauf durch "Konversationseinträge" bei, wodurch sichergestellt wird, dass der Kontext sorgfältig erhalten bleibt. Diese Zustandsbehaftung ermöglicht es Entwicklern, vergangene Konversationen anzuzeigen, jede Interaktion nahtlos fortzusetzen oder sogar abzweigen, um neue Konversationspfade von jedem Punkt in der Historie aus zu initiieren. Darüber hinaus unterstützt die API Streaming-Ausgaben, wodurch Echtzeit-Updates und dynamische Interaktionen ermöglicht werden.

Agenten-Orchestrierung: Die Kraft der Zusammenarbeit

Die wahre differenzierende Kraft der Agents API zeigt sich in ihrer Fähigkeit, mehrere Agenten zu orchestrieren. Hier geht es nicht um eine einzelne monolithische KI; es geht um eine Symphonie spezialisierter Agenten, die im Konzert arbeiten. Durch dynamische Orchestrierung können Agenten nach Bedarf zu einer Konversation hinzugefügt oder daraus entfernt werden, wobei jeder seine einzigartigen Fähigkeiten einbringt, um verschiedene Facetten eines komplexen Problems anzugehen.

So erstellen Sie einen agentenbasierten Workflow mit Übergaben:

  1. Agenten erstellen: Definieren und erstellen Sie alle erforderlichen Agenten, die jeweils mit spezifischen Tools, Modellen und Anweisungen ausgestattet sind, die auf ihre Rolle zugeschnitten sind.
  2. Übergaben definieren: Geben Sie an, welche Agenten Aufgaben an andere delegieren können. Beispielsweise könnte ein primärer Kundendienstagent eine technische Anfrage an einen spezialisierten Troubleshooting-Agenten oder eine Rechnungsanfrage an einen Finanzagenten weiterleiten.

Diese Übergaben ermöglichen eine nahtlose Kette von Aktionen. Eine einzelne Benutzeranfrage kann eine Kaskade von Aufgaben über mehrere Agenten auslösen, die jeweils autonom ihren zugewiesenen Teil bearbeiten. Dieser kollaborative Ansatz eröffnet beispiellose Effizienz und Effektivität bei der Problemlösung für anspruchsvolle Anwendungen in der realen Welt.

Grundlegende Verwendung der Mistral Agents API

Nachdem wir die Fähigkeiten der Mistral Agents API verstanden haben, wollen wir untersuchen, wie man mit ihr interagiert. Die API führt drei neue primäre Objekte ein:

Beachten Sie, dass Sie viele Funktionen wie zustandsbehaftete Konversationen und integrierte Konnektoren nutzen können, ohne zuerst explizit ein formelles "Agent"-Objekt zu erstellen und zu referenzieren. Dies bietet Flexibilität für einfachere Anwendungsfälle.

Einen Agenten erstellen

Um einen spezialisierten Agenten zu definieren, stellen Sie eine Anfrage an die API, in der Sie mehrere Parameter angeben:

Hier ist ein Beispiel für eine cURL-Anfrage zum Erstellen eines einfachen Agenten:

curl --location "https://api.mistral.ai/v1/agents" \
     --header 'Content-Type: application/json' \
     --header 'Accept: application/json' \
     --header "Authorization: Bearer $MISTRAL_API_KEY" \
     --data '{
         "model": "mistral-medium-latest",
         "name": "Simple Agent",
         "description": "A simple Agent with persistent state."
     }'

Einen Agenten aktualisieren

Agenten können nach der Erstellung aktualisiert werden. Die Argumente sind die gleichen wie bei der Erstellung. Diese Operation führt zu einem neuen Agentenobjekt mit den aktualisierten Einstellungen, wodurch effektiv eine Versionierung Ihrer Agenten ermöglicht wird.

curl --location "https://api.mistral.ai/v1/agents/<agent_id>" \
     --header 'Content-Type: application/json' \
     --header 'Accept: application/json' \
     --header "Authorization: Bearer $MISTRAL_API_KEY" \
     --data '{
         "completion_args": {
           "temperature": 0.3,
           "top_p": 0.95
         },
         "description": "An edited simple agent."
     }'

Konversationen verwalten

Sobald ein Agent erstellt wurde (oder wenn Sie direkten Zugriff verwenden), können Sie Konversationen initiieren.

Eine Konversation starten:
Sie müssen Folgendes angeben:

Beispiel (einfache Zeichenfolge als Eingabe):

curl --location "https://api.mistral.ai/v1/conversations" \
     --header 'Content-Type: application/json' \
     --header 'Accept: application/json' \
     --header "Authorization: Bearer $MISTRAL_API_KEY" \
     --data '{
         "inputs": "Who is Albert Einstein?",
         "stream": false,
         "agent_id": "<agent_id>"
     }'

Eine Konversation fortsetzen:
So fügen Sie einer bestehenden Konversation hinzu:

Beispiel:

curl --location "https://api.mistral.ai/v1/conversations/<conv_id>" \
     --header 'Content-Type: application/json' \
     --header 'Accept: application/json' \
     --header "Authorization: Bearer $MISTRAL_API_KEY" \
     --data '{
         "inputs": "Translate to French.",
         "stream": false,
         "store": true,
         "handoff_execution": "server"
     }'

Streaming-Ausgabe

Für Echtzeit-Interaktionen können sowohl das Starten als auch das Fortsetzen von Konversationen gestreamt werden, indem stream: true festgelegt und sichergestellt wird, dass der Accept-Header text/event-stream ist.

curl --location "https://api.mistral.ai/v1/conversations" \
     --header 'Content-Type: application/json' \
     --header 'Accept: text/event-stream' \
     --header "Authorization: Bearer $MISTRAL_API_KEY" \
     --data '{
         "inputs": "Who is Albert Einstein?",
         "stream": true,
         "agent_id": "ag_06811008e6e07cb48000fd3f133e1771"
     }'

Beim Streaming erhalten Sie verschiedene Ereignistypen, die den Fortschritt und den Inhalt der Antwort anzeigen, z. B.:

Diese grundlegenden Operationen bilden die Grundlage für die Erstellung dynamischer und interaktiver Anwendungen mit Mistral-Agenten.

Integration der Mistral Agents API mit dem Model Context Protocol (MCP)

Während die integrierten Konnektoren erhebliche Leistung bieten, zeigt sich die wahre Erweiterbarkeit von Mistral Agents in Kombination mit dem Model Context Protocol (MCP).

Was ist MCP?

Das Model Context Protocol (MCP) ist ein offener Standard, der darauf ausgelegt ist, die Integration von KI-Modellen mit verschiedenen externen Datenquellen, Tools und APIs zu rationalisieren. Es bietet eine standardisierte, sichere Schnittstelle, die es KI-Systemen ermöglicht, effizient auf reale Kontextinformationen zuzugreifen und diese zu nutzen. Anstatt zahlreiche maßgeschneiderte Integrationen zu erstellen und zu verwalten, bietet MCP eine einheitliche Möglichkeit für KI-Modelle, sich mit Live-Daten und -Systemen zu verbinden, was zu relevanteren, genaueren und leistungsfähigeren Antworten führt. Ausführliche Informationen finden Sie in der offiziellen Model Context Protocol-Dokumentation.

Das Python SDK von Mistral bietet nahtlose Integrationsmechanismen für die Verbindung von Agenten mit MCP-Clients. Dies ermöglicht es Ihren Agenten, mit jedem Dienst oder jeder Datenquelle zu interagieren, die eine MCP-Schnittstelle bereitstellt, egal ob es sich um ein lokales Tool, eine API von Drittanbietern oder ein proprietäres Unternehmenssystem handelt.

Wir werden drei gängige Szenarien für die Verwendung von MCP mit Mistral Agents untersuchen: einen lokalen MCP-Server, einen Remote-MCP-Server ohne Authentifizierung und einen Remote-MCP-Server mit Authentifizierung. Alle Beispiele verwenden asynchronen Python-Code.

Szenario 1: Verwenden eines lokalen MCP-Servers

Stellen Sie sich vor, Sie haben ein lokales Skript oder einen Dienst (z. B. einen benutzerdefinierten Wetterinformationsanbieter), mit dem Ihr Mistral-Agent interagieren soll.

Schritt 1: Initialisieren des Mistral-Clients und -Setups
Importieren Sie die erforderlichen Module von mistralai und mcp. Dazu gehören Mistral, RunContext, StdioServerParameters (für lokale prozessbasierte MCP-Server) und MCPClientSTDIO.

import asyncio
import os
from pathlib import Path
from mistralai import Mistral
from mistralai.extra.run.context import RunContext
from mcp import StdioServerParameters
from mistralai.extra.mcp.stdio import MCPClientSTDIO
from mistralai.types import BaseModel

cwd = Path(__file__).parent
MODEL = "mistral-medium-latest" # Or your preferred model

async def main_local_mcp():
    api_key = os.environ["MISTRAL_API_KEY"]
    client = Mistral(api_key=api_key)

    # Define parameters for the local MCP server (e.g., running a Python script)
    server_params = StdioServerParameters(
        command="python",
        args=[str((cwd / "mcp_servers/stdio_server.py").resolve())], # Path to your MCP server script
        env=None,
    )

    # Create an agent
    weather_agent = client.beta.agents.create(
        model=MODEL,
        name="Local Weather Teller",
        instructions="You can tell the weather using a local MCP tool.",
        description="Fetches weather from a local source.",
    )

    # Define expected output format (optional, but good for structured data)
    class WeatherResult(BaseModel):
        user: str
        location: str
        temperature: float

    # Create a Run Context
    async with RunContext(
        agent_id=weather_agent.id,
        output_format=WeatherResult, # Optional: For structured output
        continue_on_fn_error=True,
    ) as run_ctx:
        # Create and register MCP client
        mcp_client = MCPClientSTDIO(stdio_params=server_params)
        await run_ctx.register_mcp_client(mcp_client=mcp_client)

        # Example of registering a local Python function as a tool
        import random
        @run_ctx.register_func
        def get_location(name: str) -> str:
            """Function to get a random location for a user."""
            return random.choice(["New York", "London", "Paris"])

        # Run the agent
        run_result = await client.beta.conversations.run_async(
            run_ctx=run_ctx,
            inputs="Tell me the weather in John's location currently.",
        )

        print("Local MCP - All run entries:")
        for entry in run_result.output_entries:
            print(f"{entry}\n")
        if run_result.output_as_model:
            print(f"Local MCP - Final model output: {run_result.output_as_model}")
        else:
            print(f"Local MCP - Final text output: {run_result.output_as_text}")

# if __name__ == "__main__":
#     asyncio.run(main_local_mcp())

In diesem Setup wäre stdio_server.py Ihr Skript, das die MCP-Serverlogik implementiert und über stdin/stdout kommuniziert. Der RunContext verwaltet die Interaktion, und register_mcp_client macht den lokalen MCP-Server als Tool für den Agenten verfügbar. Sie können auch lokale Python-Funktionen direkt mit @run_ctx.register_func registrieren.

Streaming mit einem lokalen MCP-Server:
Um zu streamen, verwenden Sie client.beta.conversations.run_stream_async und verarbeiten Sie Ereignisse, sobald sie eintreffen:

    # Inside RunContext, after MCP client registration
    # events = await client.beta.conversations.run_stream_async(
    #     run_ctx=run_ctx,
    #     inputs="Tell me the weather in John's location currently, stream style.",
    # )
    # streamed_run_result = None
    # async for event in events:
    #     if isinstance(event, RunResult): # Assuming RunResult is defined or imported
    #         streamed_run_result = event
    #     else:
    #         print(f"Stream event: {event}")
    # if streamed_run_result:
    #     # Process streamed_run_result
    #     pass

Szenario 2: Verwenden eines Remote-MCP-Servers ohne Authentifizierung

Viele öffentliche oder interne Dienste könnten eine MCP-Schnittstelle über HTTP/SSE verfügbar machen, ohne dass eine Authentifizierung erforderlich ist.

from mistralai.extra.mcp.sse import MCPClientSSE, SSEServerParams

async def main_remote_no_auth_mcp():
    api_key = os.environ["MISTRAL_API_KEY"]
    client = Mistral(api_key=api_key)

    # Define the URL for the remote MCP server (e.g., Semgrep's public MCP)
    server_url = "https://mcp.semgrep.ai/sse"
    mcp_client = MCPClientSSE(sse_params=SSEServerParams(url=server_url, timeout=100))

    async with RunContext(
        model=MODEL, # Can use agent_id too if an agent is pre-created
    ) as run_ctx:
        await run_ctx.register_mcp_client(mcp_client=mcp_client)

        run_result = await client.beta.conversations.run_async(
            run_ctx=run_ctx,
            inputs="Can you write a hello_world.py file and then check it for security vulnerabilities using available tools?",
        )

        print("Remote No-Auth MCP - All run entries:")
        for entry in run_result.output_entries:
            print(f"{entry}\n")
        print(f"Remote No-Auth MCP - Final Response: {run_result.output_as_text}")

# if __name__ == "__main__":
#     asyncio.run(main_remote_no_auth_mcp())

Hier wird MCPClientSSE mit SSEServerParams verwendet, das auf die Remote-URL verweist. Der Agent kann dann Tools nutzen, die von diesem Remote-MCP-Server bereitgestellt werden. Das Streaming folgt dem gleichen Muster wie im lokalen MCP-Beispiel, wobei run_stream_async verwendet wird.

Szenario 3: Verwenden eines Remote-MCP-Servers mit Authentifizierung (OAuth)

Für Dienste, die eine OAuth2-Authentifizierung erfordern (wie Linear, Jira usw.), umfasst der Prozess ein paar weitere Schritte zur Handhabung des Autorisierungsflusses.

from http.server import BaseHTTPRequestHandler, HTTPServer
import threading
import webbrowser
from mistralai.extra.mcp.auth import build_oauth_params

CALLBACK_PORT = 16010 # Ensure this port is free

# Callback server setup (simplified from source)
def run_callback_server_util(callback_func, auth_response_dict):
    class OAuthCallbackHandler(BaseHTTPRequestHandler):
        def do_GET(self):
            if "/callback" in self.path or "/oauth/callback" in self.path: # More robust check
                auth_response_dict["url"] = self.path
                self.send_response(200)
                self.send_header("Content-type", "text/html")
                self.end_headers()
                self.wfile.write(b"<html><body>Authentication successful. You may close this window.</body></html>")
                callback_func() # Signal completion
                threading.Thread(target=self.server.shutdown).start()
            else:
                self.send_response(404)
                self.end_headers()

    server_address = ("localhost", CALLBACK_PORT)
    httpd = HTTPServer(server_address, OAuthCallbackHandler)
    threading.Thread(target=httpd.serve_forever, daemon=True).start() # Use daemon thread
    redirect_url = f"http://localhost:{CALLBACK_PORT}/oauth/callback"
    return httpd, redirect_url

async def main_remote_auth_mcp():
    api_key = os.environ["MISTRAL_API_KEY"]
    client = Mistral(api_key=api_key)

    server_url = "https://mcp.linear.app/sse" # Example: Linear MCP
    mcp_client_auth = MCPClientSSE(sse_params=SSEServerParams(url=server_url))

    callback_event = asyncio.Event()
    event_loop = asyncio.get_event_loop()
    auth_response_holder = {"url": ""}

    if await mcp_client_auth.requires_auth():
        httpd, redirect_url = run_callback_server_util(
            lambda: event_loop.call_soon_threadsafe(callback_event.set),
            auth_response_holder
        )
        try:
            oauth_params = await build_oauth_params(mcp_client_auth.base_url, redirect_url=redirect_url)
            mcp_client_auth.set_oauth_params(oauth_params=oauth_params)
            login_url, state = await mcp_client_auth.get_auth_url_and_state(redirect_url)

            print(f"Please go to this URL and authorize: {login_url}")
            webbrowser.open(login_url, new=2)
            await callback_event.wait() # Wait for OAuth callback

            token = await mcp_client_auth.get_token_from_auth_response(
                auth_response_holder["url"], redirect_url=redirect_url, state=state
            )
            mcp_client_auth.set_auth_token(token)
            print("Authentication successful.")
        except Exception as e:
            print(f"Error during authentication: {e}")
            return # Exit if auth fails
        finally:
            if 'httpd' in locals() and httpd:
                httpd.shutdown()
                httpd.server_close()
    
    async with RunContext(model=MODEL) as run_ctx: # Or agent_id
        await run_ctx.register_mcp_client(mcp_client=mcp_client_auth)

        run_result = await client.beta.conversations.run_async(
            run_ctx=run_ctx,
            inputs="Tell me which projects do I have in my Linear workspace?",
        )
        print(f"Remote Auth MCP - Final Response: {run_result.output_as_text}")

# if __name__ == "__main__":
#     asyncio.run(main_remote_auth_mcp())

Dies beinhaltet das Einrichten eines lokalen HTTP-Servers, um die OAuth-Umleitung abzufangen, den Benutzer durch die Autorisierungsseite des Anbieters zu führen, den empfangenen Code gegen ein Zugriffstoken auszutauschen und dann den MCPClientSSE mit diesem Token zu konfigurieren. Nach der Authentifizierung kann der Agent mit dem geschützten MCP-Dienst interagieren. Das Streaming folgt wiederum dem etablierten Muster.

Fazit: Die Zukunft ist agentenbasiert und vernetzt

Die Mistral Agents API, insbesondere wenn sie durch das Model Context Protocol erweitert wird, bietet eine robuste und flexible Plattform für die Erstellung von KI-Anwendungen der nächsten Generation. Indem Agenten in die Lage versetzt werden, nicht nur zu argumentieren und zu kommunizieren, sondern auch mit einem riesigen Ökosystem von Tools, Datenquellen und Diensten zu interagieren, können Entwickler wirklich intelligente Systeme erstellen, die in der Lage sind, komplexe Probleme in der realen Welt zu bewältigen. Unabhängig davon, ob Sie komplizierte Arbeitsabläufe automatisieren, tiefgreifend kontextualisierte Unterstützung leisten oder neue Formen der Mensch-KI-Zusammenarbeit vorantreiben, bietet die Kombination aus Mistral Agents und MCP das grundlegende Toolkit für diese aufregende Zukunft. Da der MCP-Standard eine breitere Akzeptanz findet, wird das Potenzial für die Erstellung vernetzter und hochleistungsfähiger KI-Agenten nur weiter wachsen.

💡
Benötigen Sie ein großartiges API-Testtool, das wunderschöne API-Dokumentation generiert?

Benötigen Sie eine integrierte All-in-One-Plattform für Ihr Entwicklerteam, um mit maximaler Produktivität zusammenzuarbeiten?

Apidog liefert alle Ihre Anforderungen und ersetzt Postman zu einem viel günstigeren Preis!

Explore more

Fathom-R1-14B: Fortschrittliches KI-Argumentationsmodell aus Indien

Fathom-R1-14B: Fortschrittliches KI-Argumentationsmodell aus Indien

Künstliche Intelligenz wächst rasant. FractalAIResearch/Fathom-R1-14B (14,8 Mrd. Parameter) glänzt in Mathe & Logik.

5 June 2025

Cursor 1.0 mit BugBot: KI-gestütztes Automatisierungstest-Tool ist da:

Cursor 1.0 mit BugBot: KI-gestütztes Automatisierungstest-Tool ist da:

Die Softwareentwicklung erlebt Innovationen durch KI. Cursor, ein KI-Editor, erreicht mit Version 1.0 einen Meilenstein.

5 June 2025

30+ öffentliche Web 3.0 APIs, die Sie jetzt nutzen können

30+ öffentliche Web 3.0 APIs, die Sie jetzt nutzen können

Der Aufstieg von Web 3.0: Dezentral, nutzerorientiert, transparent. APIs ermöglichen innovative dApps und Blockchain-Integration.

4 June 2025

Praktizieren Sie API Design-First in Apidog

Entdecken Sie eine einfachere Möglichkeit, APIs zu erstellen und zu nutzen