Files
2026-07-13 13:31:35 +08:00

14 KiB

Model Context Protocol (MCP) Integration mit Microsoft Foundry

Dieser Leitfaden zeigt, wie Model Context Protocol (MCP)-Server mit Microsoft Foundry-Agenten integriert werden, um leistungsstarke Tool-Orchestrierung und Unternehmens-KI-Funktionen zu ermöglichen.

Einführung

Model Context Protocol (MCP) ist ein offener Standard, der es KI-Anwendungen ermöglicht, sicher eine Verbindung zu externen Datenquellen und Tools herzustellen. Wenn MCP in Microsoft Foundry integriert wird, können Agenten auf verschiedene externe Dienste, APIs und Datenquellen auf standardisierte Weise zugreifen und mit ihnen interagieren.

Diese Integration verbindet die Flexibilität des MCP-Tool-Ökosystems mit dem robusten Agentenframework von Microsoft Foundry und bietet unternehmensgerechte KI-Lösungen mit umfangreichen Anpassungsmöglichkeiten.

Hinweis: Wenn Sie MCP im Microsoft Foundry Agent Service verwenden möchten, werden derzeit nur die folgenden Regionen unterstützt: westus, westus2, uaenorth, southindia und switzerlandnorth

Lernziele

Am Ende dieses Leitfadens werden Sie in der Lage sein:

  • Das Model Context Protocol und dessen Vorteile zu verstehen
  • MCP-Server für die Verwendung mit Microsoft Foundry-Agenten einzurichten
  • Agenten mit MCP-Tool-Integration zu erstellen und zu konfigurieren
  • Praktische Beispiele mit realen MCP-Servern umzusetzen
  • Tool-Antworten und Zitationen in Agentengesprächen zu behandeln

Voraussetzungen

Bevor Sie starten, stellen Sie sicher, dass Sie über Folgendes verfügen:

  • Ein Azure-Abonnement mit Zugriff auf Microsoft Foundry
  • Python 3.10+ oder .NET 8.0+
  • Azure CLI installiert und konfiguriert
  • Entsprechende Berechtigungen zum Erstellen von KI-Ressourcen

Was ist Model Context Protocol (MCP)?

Model Context Protocol ist eine standardisierte Methode, durch die KI-Anwendungen eine Verbindung zu externen Datenquellen und Tools herstellen können. Wichtige Vorteile sind:

  • Standardisierte Integration: Einheitliche Schnittstelle über verschiedene Tools und Dienste hinweg
  • Sicherheit: Sichere Authentifizierungs- und Autorisierungsmechanismen
  • Flexibilität: Unterstützung verschiedener Datenquellen, APIs und benutzerdefinierter Tools
  • Erweiterbarkeit: Einfache Erweiterung um neue Funktionen und Integrationen

Einrichtung von MCP mit Microsoft Foundry

Umgebungs-Konfiguration

Wählen Sie Ihre bevorzugte Entwicklungsumgebung:


Python-Implementierung

Hinweis Sie können dieses Notebook ausführen

1. Benötigte Pakete installieren

pip install azure-ai-projects -U
pip install azure-ai-agents==1.1.0b4 -U
pip install azure-identity -U
pip install mcp==1.11.0 -U

2. Abhängigkeiten importieren

import os, time
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
from azure.ai.agents.models import McpTool, RequiredMcpToolCall, SubmitToolApprovalAction, ToolApproval

3. MCP-Einstellungen konfigurieren

mcp_server_url = os.environ.get("MCP_SERVER_URL", "https://learn.microsoft.com/api/mcp")
mcp_server_label = os.environ.get("MCP_SERVER_LABEL", "mslearn")

4. Projekt-Client initialisieren

project_client = AIProjectClient(
    endpoint="https://your-project-endpoint.services.ai.azure.com/api/projects/your-project",
    credential=DefaultAzureCredential(),
)

5. MCP-Tool erstellen

mcp_tool = McpTool(
    server_label=mcp_server_label,
    server_url=mcp_server_url,
    allowed_tools=[],  # Optional: erlaubte Werkzeuge angeben
)

6. Vollständiges Python-Beispiel

with project_client:
    agents_client = project_client.agents

    # Erstellen Sie einen neuen Agenten mit MCP-Werkzeugen
    agent = agents_client.create_agent(
        model="Your AOAI Model Deployment",
        name="my-mcp-agent",
        instructions="You are a helpful agent that can use MCP tools to assist users. Use the available MCP tools to answer questions and perform tasks.",
        tools=mcp_tool.definitions,
    )
    print(f"Created agent, ID: {agent.id}")
    print(f"MCP Server: {mcp_tool.server_label} at {mcp_tool.server_url}")

    # Erstellen Sie einen Thread für die Kommunikation
    thread = agents_client.threads.create()
    print(f"Created thread, ID: {thread.id}")

    # Erstellen Sie eine Nachricht an den Thread
    message = agents_client.messages.create(
        thread_id=thread.id,
        role="user",
        content="What's difference between Azure OpenAI and OpenAI?",
    )
    print(f"Created message, ID: {message.id}")

    # Verarbeiten Sie Werkzeuggenehmigungen und führen Sie den Agenten aus
    mcp_tool.update_headers("SuperSecret", "123456")
    run = agents_client.runs.create(thread_id=thread.id, agent_id=agent.id, tool_resources=mcp_tool.resources)
    print(f"Created run, ID: {run.id}")

    while run.status in ["queued", "in_progress", "requires_action"]:
        time.sleep(1)
        run = agents_client.runs.get(thread_id=thread.id, run_id=run.id)

        if run.status == "requires_action" and isinstance(run.required_action, SubmitToolApprovalAction):
            tool_calls = run.required_action.submit_tool_approval.tool_calls
            if not tool_calls:
                print("No tool calls provided - cancelling run")
                agents_client.runs.cancel(thread_id=thread.id, run_id=run.id)
                break

            tool_approvals = []
            for tool_call in tool_calls:
                if isinstance(tool_call, RequiredMcpToolCall):
                    try:
                        print(f"Approving tool call: {tool_call}")
                        tool_approvals.append(
                            ToolApproval(
                                tool_call_id=tool_call.id,
                                approve=True,
                                headers=mcp_tool.headers,
                            )
                        )
                    except Exception as e:
                        print(f"Error approving tool_call {tool_call.id}: {e}")

            if tool_approvals:
                agents_client.runs.submit_tool_outputs(
                    thread_id=thread.id, run_id=run.id, tool_approvals=tool_approvals
                )

        print(f"Current run status: {run.status}")

    print(f"Run completed with status: {run.status}")

    # Anzeige der Konversation
    messages = agents_client.messages.list(thread_id=thread.id)
    print("\nConversation:")
    print("-" * 50)
    for msg in messages:
        if msg.text_messages:
            last_text = msg.text_messages[-1]
            print(f"{msg.role.upper()}: {last_text.text.value}")
            print("-" * 50)

.NET-Implementierung

Hinweis Sie können dieses Notebook ausführen

1. Benötigte Pakete installieren

#r "nuget: Azure.AI.Agents.Persistent, 1.1.0-beta.4"
#r "nuget: Azure.Identity, 1.14.2"

2. Abhängigkeiten importieren

using Azure.AI.Agents.Persistent;
using Azure.Identity;

3. Einstellungen konfigurieren

var projectEndpoint = "https://your-project-endpoint.services.ai.azure.com/api/projects/your-project";
var modelDeploymentName = "Your AOAI Model Deployment";
var mcpServerUrl = "https://learn.microsoft.com/api/mcp";
var mcpServerLabel = "mslearn";
PersistentAgentsClient agentClient = new(projectEndpoint, new DefaultAzureCredential());

4. MCP-Tool-Definition erstellen

MCPToolDefinition mcpTool = new(mcpServerLabel, mcpServerUrl);

5. Agent mit MCP-Tools erstellen

PersistentAgent agent = await agentClient.Administration.CreateAgentAsync(
   model: modelDeploymentName,
   name: "my-learn-agent",
   instructions: "You are a helpful agent that can use MCP tools to assist users. Use the available MCP tools to answer questions and perform tasks.",
   tools: [mcpTool]
   );

6. Vollständiges .NET-Beispiel

// Create thread and message
PersistentAgentThread thread = await agentClient.Threads.CreateThreadAsync();

PersistentThreadMessage message = await agentClient.Messages.CreateMessageAsync(
    thread.Id,
    MessageRole.User,
    "What's difference between Azure OpenAI and OpenAI?");

// Configure tool resources with headers
MCPToolResource mcpToolResource = new(mcpServerLabel);
mcpToolResource.UpdateHeader("SuperSecret", "123456");
ToolResources toolResources = mcpToolResource.ToToolResources();

// Create and handle run
ThreadRun run = await agentClient.Runs.CreateRunAsync(thread, agent, toolResources);

while (run.Status == RunStatus.Queued || run.Status == RunStatus.InProgress || run.Status == RunStatus.RequiresAction)
{
    await Task.Delay(TimeSpan.FromMilliseconds(1000));
    run = await agentClient.Runs.GetRunAsync(thread.Id, run.Id);

    if (run.Status == RunStatus.RequiresAction && run.RequiredAction is SubmitToolApprovalAction toolApprovalAction)
    {
        var toolApprovals = new List<ToolApproval>();
        foreach (var toolCall in toolApprovalAction.SubmitToolApproval.ToolCalls)
        {
            if (toolCall is RequiredMcpToolCall mcpToolCall)
            {
                Console.WriteLine($"Approving MCP tool call: {mcpToolCall.Name}");
                toolApprovals.Add(new ToolApproval(mcpToolCall.Id, approve: true)
                {
                    Headers = { ["SuperSecret"] = "123456" }
                });
            }
        }

        if (toolApprovals.Count > 0)
        {
            run = await agentClient.Runs.SubmitToolOutputsToRunAsync(thread.Id, run.Id, toolApprovals: toolApprovals);
        }
    }
}

// Display messages
using Azure;

AsyncPageable<PersistentThreadMessage> messages = agentClient.Messages.GetMessagesAsync(
    threadId: thread.Id,
    order: ListSortOrder.Ascending
);

await foreach (PersistentThreadMessage threadMessage in messages)
{
    Console.Write($"{threadMessage.CreatedAt:yyyy-MM-dd HH:mm:ss} - {threadMessage.Role,10}: ");
    foreach (MessageContent contentItem in threadMessage.ContentItems)
    {
        if (contentItem is MessageTextContent textItem)
        {
            Console.Write(textItem.Text);
        }
        else if (contentItem is MessageImageFileContent imageFileItem)
        {
            Console.Write($"<image from ID: {imageFileItem.FileId}>");
        }
        Console.WriteLine();
    }
}

MCP Tool Konfigurationsoptionen

Bei der Konfiguration von MCP-Tools für Ihren Agenten können Sie mehrere wichtige Parameter angeben:

Python-Konfiguration

mcp_tool = McpTool(
    server_label="unique_server_name",      # Bezeichner für den MCP-Server
    server_url="https://api.example.com/mcp", # Endpunkt des MCP-Servers
    allowed_tools=[],                       # Optional: erlaubte Werkzeuge angeben
)

.NET-Konfiguration

MCPToolDefinition mcpTool = new(
    "unique_server_name",                   // Server label
    "https://api.example.com/mcp"          // MCP server URL
);

Authentifizierung und Header

Beide Implementierungen unterstützen benutzerdefinierte Header für die Authentifizierung:

Python

mcp_tool.update_headers("SuperSecret", "123456")

.NET

MCPToolResource mcpToolResource = new(mcpServerLabel);
mcpToolResource.UpdateHeader("SuperSecret", "123456");

Behebung häufiger Probleme

1. Verbindungsprobleme

  • Überprüfen Sie, ob die MCP-Server-URL erreichbar ist
  • Prüfen Sie die Authentifizierungsdaten
  • Stellen Sie die Netzwerkverbindung sicher

2. Fehler bei Tool-Aufrufen

  • Überprüfen Sie die Tool-Argumente und deren Formatierung
  • Prüfen Sie serverseitige Anforderungen
  • Implementieren Sie eine korrekte Fehlerbehandlung

3. Leistungsprobleme

  • Optimieren Sie die Häufigkeit der Tool-Aufrufe
  • Implementieren Sie gegebenenfalls Caching
  • Überwachen Sie die Server-Antwortzeiten

Nächste Schritte

Um Ihre MCP-Integration weiter zu verbessern:

  1. Eigene MCP-Server entwickeln: Erstellen Sie eigene MCP-Server für firmeneigene Datenquellen
  2. Erweiterte Sicherheit implementieren: Fügen Sie OAuth2 oder benutzerdefinierte Authentifizierungsmechanismen hinzu
  3. Überwachung und Analyse: Implementieren Sie Protokollierung und Monitoring für Tool-Nutzung
  4. Lösung skalieren: Berücksichtigen Sie Lastverteilung und verteilte MCP-Server-Architekturen

Weitere Ressourcen

Support

Für zusätzlichen Support und Fragen:

Was kommt als Nächstes


Haftungsausschluss: Dieses Dokument wurde mit dem KI-Übersetzungsdienst Co-op Translator übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache gilt als maßgebliche Quelle. Bei kritischen Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Verwendung dieser Übersetzung entstehen.