Compartilhar via


Expor um agente como uma ferramenta MCP

Este tutorial mostra como expor um agente como uma ferramenta pelo PROTOCOLO MCP (Model Context Protocol), para que ele possa ser usado por outros sistemas que dão suporte a ferramentas MCP.

Pré-requisitos

Para pré-requisitos, consulte a etapa Criar e executar um agente simples neste tutorial.

Instalar os pacotes NuGet

Para usar o Microsoft Agent Framework com o Azure OpenAI, você precisa instalar os seguintes pacotes NuGet:

dotnet add package Azure.AI.OpenAI --prerelease
dotnet add package Azure.Identity
dotnet add package Microsoft.Agents.AI.OpenAI --prerelease

Para também adicionar suporte para hospedar uma ferramenta por meio do PROTOCOLO MCP (Model Context Protocol), adicione os seguintes pacotes NuGet

dotnet add package Microsoft.Extensions.Hosting --prerelease
dotnet add package ModelContextProtocol --prerelease

Expor um agente como uma ferramenta MCP

Você pode expor um AIAgent como uma ferramenta MCP encapsulando-a em uma função e usando McpServerTool. Em seguida, você precisa registrá-lo em um servidor MCP. Isso permite que o agente seja invocado como uma ferramenta por qualquer cliente compatível com MCP.

Primeiro, crie um agente que você exporá como uma ferramenta MCP.

using System;
using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Agents.AI;
using OpenAI;

AIAgent agent = new AzureOpenAIClient(
    new Uri("https://<myresource>.openai.azure.com"),
    new AzureCliCredential())
        .GetChatClient("gpt-4o-mini")
        .CreateAIAgent(instructions: "You are good at telling jokes.", name: "Joker");

Transforme o agente em uma ferramenta de função e, em seguida, uma ferramenta MCP. O nome e a descrição do agente serão usados como o nome e a descrição da ferramenta mcp.

using ModelContextProtocol.Server;

McpServerTool tool = McpServerTool.Create(agent.AsAIFunction());

Configure o servidor MCP para escutar solicitações de entrada por entrada/saída padrão e expor a ferramenta MCP:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using ModelContextProtocol.Server;

HostApplicationBuilder builder = Host.CreateEmptyApplicationBuilder(settings: null);
builder.Services
    .AddMcpServer()
    .WithStdioServerTransport()
    .WithTools([tool]);

await builder.Build().RunAsync();

Isso iniciará um servidor MCP que expõe o agente como uma ferramenta pelo protocolo MCP.

Este tutorial mostra como expor um agente como uma ferramenta pelo PROTOCOLO MCP (Model Context Protocol), para que ele possa ser usado por outros sistemas que dão suporte a ferramentas MCP.

Pré-requisitos

Para pré-requisitos e instalação de pacotes do Python, consulte a etapa Criar e executar um agente simples neste tutorial.

Expor um agente como um servidor MCP

Você pode expor um agente como um servidor MCP usando o as_mcp_server() método. Isso permite que o agente seja invocado como uma ferramenta por qualquer cliente compatível com MCP.

Primeiro, crie um agente que você exporá como um servidor MCP. Você também pode adicionar ferramentas ao agente:

from typing import Annotated
from agent_framework.openai import OpenAIResponsesClient

def get_specials() -> Annotated[str, "Returns the specials from the menu."]:
    return """
        Special Soup: Clam Chowder
        Special Salad: Cobb Salad
        Special Drink: Chai Tea
        """

def get_item_price(
    menu_item: Annotated[str, "The name of the menu item."],
) -> Annotated[str, "Returns the price of the menu item."]:
    return "$9.99"

# Create an agent with tools
agent = OpenAIResponsesClient().create_agent(
    name="RestaurantAgent",
    description="Answer questions about the menu.",
    tools=[get_specials, get_item_price],
)

Transforme o agente em um servidor MCP. O nome e a descrição do agente serão usados como metadados do servidor MCP:

# Expose the agent as an MCP server
server = agent.as_mcp_server()

Configure o servidor MCP para escutar solicitações de entrada por entrada/saída padrão:

import anyio
from mcp.server.stdio import stdio_server

async def run():
    async def handle_stdin():
        async with stdio_server() as (read_stream, write_stream):
            await server.run(read_stream, write_stream, server.create_initialization_options())

    await handle_stdin()

if __name__ == "__main__":
    anyio.run(run)

Isso iniciará um servidor MCP que expõe o agente pelo protocolo MCP, permitindo que ele seja usado por clientes compatíveis com MCP, como agentes do GitHub Copilot do VS Code.

Próximas etapas