Sdílet prostřednictvím


Použití nástrojů MCP s agenty

Microsoft Agent Framework podporuje integraci se servery MCP (Model Context Protocol), což umožňuje vašim agentům přístup k externím nástrojům a službám. Tato příručka ukazuje, jak se připojit k serveru MCP a používat jeho nástroje v rámci vašeho agenta.

Společně s oficiální sadou MCP C# SDK je možné použít sadu .NET Agent Framework, která umožňuje vašemu agentu volat nástroje MCP.

Následující ukázka ukazuje, jak:

  1. Nastavení a server MCP
  2. Načtení seznamu dostupných nástrojů ze serveru MCP
  3. Převeďte nástroje MCP na AIFunction's, aby je bylo možné přidat do agenta.
  4. Vyvolání nástrojů z agenta pomocí volání funkce

Nastavení klienta MCP

Nejprve vytvořte klienta MCP, který se připojí k požadovanému serveru MCP:

// 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"],
}));

V tomto příkladu:

  • Název: Popisný název připojení k serveru MCP
  • Příkaz: Spustitelný soubor pro spuštění serveru MCP (tady pomocí npx ke spuštění balíčku Node.js)
  • Argumenty: Argumenty příkazového řádku předané serveru MCP

Načítání dostupných nástrojů

Po připojení načtěte seznam nástrojů dostupných ze serveru MCP:

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

Tato ListToolsAsync() metoda vrátí kolekci nástrojů, které server MCP zveřejňuje. Tyto nástroje se automaticky převedou na objekty AITool, které může používat váš agent.

Vytvoření agenta pomocí nástrojů MCP

Vytvořte agenta a během inicializace zadejte nástroje MCP:

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>()]);

Klíčové body:

  • Pokyny: Poskytněte jasné pokyny, které odpovídají možnostem nástrojů MCP.
  • Nástroje: Přetypování nástrojů MCP na AITool objekty a jejich rozložení do pole nástrojů
  • Agent bude mít automaticky přístup ke všem nástrojům poskytovaným serverem MCP.

Použití agenta

Po nakonfigurování může váš agent automaticky používat nástroje MCP ke splnění uživatelských požadavků:

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

Agent bude:

  1. Analýza žádosti uživatele
  2. Určení potřebných nástrojů MCP
  3. Volání příslušných nástrojů prostřednictvím serveru MCP
  4. Syntetizování výsledků do koherentní odpovědi

Konfigurace prostředí

Nezapomeňte nastavit požadované proměnné prostředí:

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";

Správa zdrojů

Vždy správně vyřaďte prostředky klienta MCP:

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

Použití await using zajišťuje, že je připojení klienta MCP správně uzavřeno, když přestane být vymezeno.

Běžné servery MCP

Mezi oblíbené servery MCP patří:

  • @modelcontextprotocol/server-github: Přístup k úložištím a datům GitHubu
  • @modelcontextprotocol/server-filesystem: Operace systému souborů
  • @modelcontextprotocol/server-sqlite: Přístup k databázi SQLite

Každý server poskytuje různé nástroje a možnosti, které rozšiřují funkce agenta. Tato integrace umožňuje vašim agentům bezproblémově přistupovat k externím datům a službám a současně udržovat výhody zabezpečení a standardizace protokolu Model Context Protocol.

Úplný zdrojový kód a pokyny ke spuštění této ukázky najdete tady.

Architektura agenta Pythonu poskytuje komplexní podporu pro integraci se servery MCP (Model Context Protocol) prostřednictvím několika typů připojení. To umožňuje vašim agentům bezproblémový přístup k externím nástrojům a službám.

Typy nástrojů MCP

Rozhraní Agent Framework podporuje tři typy připojení MCP:

MCPStdioTool – místní servery MCP

Slouží MCPStdioTool k připojení k serverům MCP, které běží jako místní procesy pomocí standardního vstupu a výstupu:

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 – Servery HTTP/SSE MCP

Slouží MCPStreamableHTTPTool k připojení k serverům MCP přes protokol HTTP pomocí událostí Server-Sent:

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 – Servery WEBSocket MCP

Slouží MCPWebsocketTool k připojení k serverům MCP přes připojení WebSocket:

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())

Běžné servery MCP, které můžete použít s architekturou agenta Pythonu:

  • Kalkulačka: uvx mcp-server-calculator – matematické výpočty
  • Systém souborů: uvx mcp-server-filesystem – Operace systému souborů
  • GitHub: npx @modelcontextprotocol/server-github – Přístup k úložišti GitHub
  • SQLite: uvx mcp-server-sqlite – Databázové operace

Každý server poskytuje různé nástroje a možnosti, které rozšiřují funkce agenta a současně udržují výhody zabezpečení a standardizace protokolu Model Context Protocol.

Další kroky