다음을 통해 공유


에이전트와 함께 MCP 도구 사용

Microsoft Agent Framework는 MCP(모델 컨텍스트 프로토콜) 서버와의 통합을 지원하여 에이전트가 외부 도구 및 서비스에 액세스할 수 있도록 합니다. 이 가이드에서는 MCP 서버에 연결하고 에이전트 내에서 해당 도구를 사용하는 방법을 보여 줍니다.

에이전트 프레임워크의 .Net 버전은 공식 MCP C# SDK 와 함께 사용하여 에이전트가 MCP 도구를 호출할 수 있도록 할 수 있습니다.

다음 샘플에서는 다음 방법을 보여줍니다.

  1. 설정 및 MCP 서버
  2. MCP 서버에서 사용 가능한 도구 목록 검색
  3. 에이전트에 추가할 수 있도록 MCP 도구를 AIFunction's'로 변환
  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(...);

MCP 클라이언트 연결을 사용하면 await using 범위를 벗어날 때 MCP 클라이언트 연결이 제대로 닫힙니다.

일반 MCP 서버

인기 있는 MCP 서버는 다음과 같습니다.

  • @modelcontextprotocol/server-github: GitHub 리포지토리 및 데이터에 액세스
  • @modelcontextprotocol/server-filesystem: 파일 시스템 작업
  • @modelcontextprotocol/server-sqlite: SQLite 데이터베이스 액세스

각 서버는 에이전트의 기능을 확장하는 다양한 도구와 기능을 제공합니다. 이 통합을 통해 에이전트는 모델 컨텍스트 프로토콜의 보안 및 표준화 이점을 유지하면서 외부 데이터 및 서비스에 원활하게 액세스할 수 있습니다.

이 샘플을 실행하기 위한 전체 소스 코드 및 지침은 여기에서 확인할 수 있습니다.

Python 에이전트 프레임워크는 여러 연결 형식을 통해 MCP(모델 컨텍스트 프로토콜) 서버와 통합하기 위한 포괄적인 지원을 제공합니다. 이렇게 하면 에이전트가 외부 도구 및 서비스에 원활하게 액세스할 수 있습니다.

MCP 도구 형식

에이전트 프레임워크는 다음 세 가지 유형의 MCP 연결을 지원합니다.

MCPStdioTool - 로컬 MCP 서버

표준 입력/출력을 사용하여 로컬 프로세스로 실행되는 MCP 서버에 연결하는 데 사용합니다 MCPStdioTool .

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-Sent 이벤트를 사용하여 HTTP를 통해 MCP 서버에 연결하는 데 사용합니다 MCPStreamableHTTPTool .

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 서버

WebSocket 연결을 통해 MCP 서버에 연결하는 데 사용합니다 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())

Python 에이전트 프레임워크에서 사용할 수 있는 일반적인 MCP 서버:

  • 계산기: uvx mcp-server-calculator - 수학 계산
  • 파일 시스템: uvx mcp-server-filesystem - 파일 시스템 작업
  • GitHub: npx @modelcontextprotocol/server-github - GitHub 리포지토리 액세스
  • SQLite: uvx mcp-server-sqlite - 데이터베이스 작업

각 서버는 모델 컨텍스트 프로토콜의 보안 및 표준화 이점을 유지하면서 에이전트의 기능을 확장하는 다양한 도구와 기능을 제공합니다.

다음 단계