Поделиться через


Использование средств MCP с агентами

Microsoft Agent Framework поддерживает интеграцию с серверами ПРОТОКОЛА MCP модели, позволяя агентам получать доступ к внешним средствам и службам. В этом руководстве показано, как подключиться к серверу MCP и использовать его средства в агенте.

Версию Agent Framework .NET можно использовать вместе с официальным пакетом SDK MCP C# , чтобы разрешить агенту вызывать инструменты MCP.

В следующем примере показано, как:

  1. Настройка и сервер MCP
  2. Получение списка доступных средств с сервера MCP
  3. Преобразование средств AIFunctionMCP в "так, чтобы их можно было добавить в агент"
  4. Вызов средств из агента с помощью вызова функции

Настройка клиента MCP

Сначала создайте клиент MCP, который подключается к нужному серверу 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"],
}));

В этом примере:

  • Имя: понятное имя для подключения сервера MCP
  • Команда: исполняемый файл для запуска сервера MCP (здесь используется npx для запуска пакета Node.js)
  • Аргументы: аргументы командной строки, передаваемые серверу MCP

Получение доступных средств

После подключения получите список инструментов, доступных на сервере MCP:

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

Метод ListToolsAsync() возвращает коллекцию инструментов, предоставляемых сервером MCP. Эти средства автоматически преобразуются в объекты AITool, которые можно использовать агентом.

Создание агента с помощью средств MCP

Создайте агент и предоставьте средства 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>()]);

Основные моменты:

  • Инструкции. Укажите четкие инструкции, которые соответствуют возможностям средств MCP
  • Средства. Приведение средств MCP к AITool объектам и их распространение в массив инструментов
  • Агент автоматически получит доступ ко всем средствам, предоставляемым сервером MCP

Использование агента

После настройки агент может автоматически использовать средства MCP для выполнения запросов пользователей:

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

Агент:

  1. Анализ запроса пользователя
  2. Определение необходимых средств MCP
  3. Вызов соответствующих средств с помощью сервера MCP
  4. Синтезирование результатов в последовательный ответ

Конфигурация среды

Обязательно настройте необходимые переменные среды:

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

Управление ресурсами

Всегда правильно удалять клиентские ресурсы MCP:

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

Использование await using обеспечивает правильное закрытие подключения клиента MCP при выходе из области.

Общие серверы MCP

Популярные серверы MCP включают:

  • @modelcontextprotocol/server-github: доступ к репозиториям и данным GitHub
  • @modelcontextprotocol/server-filesystem: операции файловой системы
  • @modelcontextprotocol/server-sqlite: доступ к базе данных SQLite

Каждый сервер предоставляет различные средства и возможности, расширяющие функциональные возможности агента. Эта интеграция позволяет агентам легко получать доступ к внешним данным и службам, сохраняя преимущества безопасности и стандартизации протокола контекста модели.

Полный исходный код и инструкции по выполнению этого примера доступны здесь.

Платформа агента Python обеспечивает комплексную поддержку интеграции с серверами протокола MCP модели с помощью нескольких типов подключений. Это позволяет агентам легко получать доступ к внешним средствам и службам.

Типы инструментов MCP

Платформа агента поддерживает три типа подключений MCP:

MCPStdioTool — локальные серверы MCP

Используйте MCPStdioTool для подключения к серверам MCP, которые выполняются в качестве локальных процессов с помощью стандартных входных и выходных данных:

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

Используется MCPStreamableHTTPTool для подключения к серверам MCP по протоколу HTTP с помощью событий 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 — серверы WebSocket MCP

Используйте MCPWebsocketTool для подключения к серверам MCP через подключения 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())

Общие серверы MCP, которые можно использовать с платформой агента Python:

  • Калькулятор: uvx mcp-server-calculator — математические вычисления
  • Файловая система: uvx mcp-server-filesystem — операции файловой системы
  • GitHub: npx @modelcontextprotocol/server-github — доступ к репозиторию GitHub
  • SQLite: uvx mcp-server-sqlite — операции базы данных

Каждый сервер предоставляет различные средства и возможности, расширяющие функциональные возможности агента, сохраняя преимущества безопасности и стандартизации протокола контекста модели.

Дальнейшие шаги