Freigeben über


Verwenden von MCP-Tools mit Agents

Das Microsoft Agent Framework unterstützt die Integration mit MCP-Servern (Model Context Protocol), sodass Ihre Agents auf externe Tools und Dienste zugreifen können. In diesem Handbuch wird gezeigt, wie Sie eine Verbindung mit einem MCP-Server herstellen und dessen Tools innerhalb Ihres Agents verwenden.

Die .Net-Version von Agent Framework kann zusammen mit dem offiziellen MCP C#-SDK verwendet werden, damit Ihr Agent MCP-Tools aufrufen kann.

Das folgende Beispiel zeigt, wie Sie:

  1. Einrichten und MCP-Server
  2. Abrufen der Liste der verfügbaren Tools vom MCP-Server
  3. Konvertieren der MCP-Tools in AIFunction's, damit sie einem Agent hinzugefügt werden können
  4. Aufrufen der Tools von einem Agent mithilfe von Funktionsaufrufen

Einrichten eines MCP-Clients

Erstellen Sie zunächst einen MCP-Client, der eine Verbindung mit Ihrem gewünschten MCP-Server herstellt:

// Create an MCPClient for the GitHub server
await using var mcpClient = await McpClientFactory.CreateAsync(new StdioClientTransport(new()
{
    Name = "MCPServer",
    Command = "npx",
    Arguments = ["-y", "--verbose", "@modelcontextprotocol/server-github"],
}));

In diesem Beispiel:

  • Name: Ein Anzeigename für Ihre MCP-Serververbindung
  • Befehl: Die ausführbare Datei zum Ausführen des MCP-Servers (hier mithilfe von npx zum Ausführen eines Node.js-Pakets)
  • Argumente: Befehlszeilenargumente, die an den MCP-Server übergeben werden

Abrufen verfügbarer Tools

Rufen Sie nach der Verbindung die Liste der tools ab, die vom MCP-Server verfügbar sind:

// Retrieve the list of tools available on the GitHub server
var mcpTools = await mcpClient.ListToolsAsync().ConfigureAwait(false);

Die ListToolsAsync() Methode gibt eine Sammlung von Tools zurück, die der MCP-Server verfügbar macht. Diese Tools werden automatisch in AITool-Objekte konvertiert, die von Ihrem Agent verwendet werden können.

Erstellen eines Agents mit MCP-Tools

Erstellen Sie Ihren Agent, und stellen Sie während der Initialisierung die MCP-Tools bereit:

AIAgent agent = new AzureOpenAIClient(
    new Uri(endpoint),
    new AzureCliCredential())
     .GetChatClient(deploymentName)
     .CreateAIAgent(
         instructions: "You answer questions related to GitHub repositories only.", 
         tools: [.. mcpTools.Cast<AITool>()]);

Die wichtigsten Punkte:

  • Anweisungen: Stellen Sie klare Anweisungen bereit, die den Funktionen Ihrer MCP-Tools entsprechen
  • Tools: Umwandeln der MCP-Tools in AITool Objekte und Verteilen in das Toolsarray
  • Der Agent hat automatisch Zugriff auf alle Tools, die vom MCP-Server bereitgestellt werden.

Verwenden des Agents

Nach der Konfiguration kann Ihr Agent die MCP-Tools automatisch verwenden, um Benutzeranforderungen zu erfüllen:

// Invoke the agent and output the text result
Console.WriteLine(await agent.RunAsync("Summarize the last four commits to the microsoft/semantic-kernel repository?"));

Der Agent führt folgende Aktionen aus:

  1. Analysieren der Anforderung des Benutzers
  2. Ermitteln, welche MCP-Tools erforderlich sind
  3. Aufrufen der entsprechenden Tools über den MCP-Server
  4. Synthetisieren der Ergebnisse in eine kohärente Antwort

Umgebungskonfiguration

Stellen Sie sicher, dass Sie die erforderlichen Umgebungsvariablen einrichten:

var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ?? 
    throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME") ?? "gpt-4o-mini";

Ressourcenverwaltung

Immer ordnungsgemäß verwerfen MCP-Clientressourcen:

await using var mcpClient = await McpClientFactory.CreateAsync(...);

Die Verwendung await using stellt sicher, dass die MCP-Clientverbindung ordnungsgemäß geschlossen wird, wenn sie nicht mehr gültig ist.

Allgemeine MCP-Server

Beliebte MCP-Server umfassen:

  • @modelcontextprotocol/server-github: Zugreifen auf GitHub-Repositorys und -Daten
  • @modelcontextprotocol/server-filesystem: Dateisystemvorgänge
  • @modelcontextprotocol/server-sqlite: SQLite-Datenbankzugriff

Jeder Server bietet verschiedene Tools und Funktionen, die die Funktionalität Ihres Agents erweitern. Diese Integration ermöglicht Es Ihren Agents, nahtlos auf externe Daten und Dienste zuzugreifen und gleichzeitig die Sicherheits- und Standardisierungsvorteile des Modellkontextprotokolls aufrechtzuerhalten.

Der vollständige Quellcode und anweisungen zum Ausführen dieses Beispiels finden Sie hier.

Das Python Agent Framework bietet umfassende Unterstützung für die Integration mit MCP-Servern (Model Context Protocol) über mehrere Verbindungstypen. Auf diese Weise können Ihre Agents nahtlos auf externe Tools und Dienste zugreifen.

MCP-Tooltypen

Das Agent Framework unterstützt drei Arten von MCP-Verbindungen:

MCPStdioTool - Lokale MCP-Server

Wird MCPStdioTool verwendet, um eine Verbindung mit MCP-Servern herzustellen, die als lokale Prozesse mit Standardeingabe/Ausgabe ausgeführt werden:

import asyncio
from agent_framework import ChatAgent, MCPStdioTool
from agent_framework.openai import OpenAIChatClient

async def local_mcp_example():
    """Example using a local MCP server via stdio."""
    async with (
        MCPStdioTool(
            name="calculator", 
            command="uvx", 
            args=["mcp-server-calculator"]
        ) as mcp_server,
        ChatAgent(
            chat_client=OpenAIChatClient(),
            name="MathAgent",
            instructions="You are a helpful math assistant that can solve calculations.",
        ) as agent,
    ):
        result = await agent.run(
            "What is 15 * 23 + 45?", 
            tools=mcp_server
        )
        print(result)

if __name__ == "__main__":
    asyncio.run(local_mcp_example())

MCPStreamableHTTPTool - HTTP/SSE MCP-Server

Wird MCPStreamableHTTPTool verwendet, um eine Verbindung mit MCP-Servern über HTTP mit Server-Sent-Ereignissen herzustellen:

import asyncio
from agent_framework import ChatAgent, MCPStreamableHTTPTool
from agent_framework.azure import AzureAIAgentClient
from azure.identity.aio import AzureCliCredential

async def http_mcp_example():
    """Example using an HTTP-based MCP server."""
    async with (
        AzureCliCredential() as credential,
        MCPStreamableHTTPTool(
            name="Microsoft Learn MCP",
            url="https://learn.microsoft.com/api/mcp",
            headers={"Authorization": "Bearer your-token"},
        ) as mcp_server,
        ChatAgent(
            chat_client=AzureAIAgentClient(async_credential=credential),
            name="DocsAgent",
            instructions="You help with Microsoft documentation questions.",
        ) as agent,
    ):
        result = await agent.run(
            "How to create an Azure storage account using az cli?",
            tools=mcp_server
        )
        print(result)

if __name__ == "__main__":
    asyncio.run(http_mcp_example())

MCPWebsocketTool - WebSocket MCP-Server

Wird zum Herstellen einer Verbindung mit MCP-Servern über WebSocket-Verbindungen verwendet MCPWebsocketTool :

import asyncio
from agent_framework import ChatAgent, MCPWebsocketTool
from agent_framework.openai import OpenAIChatClient

async def websocket_mcp_example():
    """Example using a WebSocket-based MCP server."""
    async with (
        MCPWebsocketTool(
            name="realtime-data",
            url="wss://api.example.com/mcp",
        ) as mcp_server,
        ChatAgent(
            chat_client=OpenAIChatClient(),
            name="DataAgent",
            instructions="You provide real-time data insights.",
        ) as agent,
    ):
        result = await agent.run(
            "What is the current market status?",
            tools=mcp_server
        )
        print(result)

if __name__ == "__main__":
    asyncio.run(websocket_mcp_example())

Allgemeine MCP-Server, die Sie mit Python Agent Framework verwenden können:

  • Rechner: uvx mcp-server-calculator - Mathematische Berechnungen
  • Dateisystem: uvx mcp-server-filesystem - Dateisystemvorgänge
  • GitHub: npx @modelcontextprotocol/server-github - GitHub-Repositoryzugriff
  • SQLite: uvx mcp-server-sqlite - Datenbankvorgänge

Jeder Server bietet verschiedene Tools und Funktionen, die die Funktionalität Ihres Agents erweitern und gleichzeitig die Sicherheits- und Standardisierungsvorteile des Modellkontextprotokolls beibehalten.

Nächste Schritte