Microsoft Agent Framework는 MCP(모델 컨텍스트 프로토콜) 서버와의 통합을 지원하여 에이전트가 외부 도구 및 서비스에 액세스할 수 있도록 합니다. 이 가이드에서는 MCP 서버에 연결하고 에이전트 내에서 해당 도구를 사용하는 방법을 보여 줍니다.
에이전트 프레임워크의 .Net 버전은 공식 MCP C# SDK 와 함께 사용하여 에이전트가 MCP 도구를 호출할 수 있도록 할 수 있습니다.
다음 샘플에서는 다음 방법을 보여줍니다.
- 설정 및 MCP 서버
- MCP 서버에서 사용 가능한 도구 목록 검색
- 에이전트에 추가할 수 있도록 MCP 도구를
AIFunction's'로 변환 - 함수 호출을 사용하여 에이전트에서 도구 호출
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?"));
에이전트는 다음을 수행합니다.
- 사용자의 요청 분석
- 필요한 MCP 도구 확인
- MCP 서버를 통해 적절한 도구 호출
- 결과를 일관된 응답으로 합성
환경 구성
필요한 환경 변수를 설정해야 합니다.
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())
인기 있는 MCP 서버
Python 에이전트 프레임워크에서 사용할 수 있는 일반적인 MCP 서버:
-
계산기:
uvx mcp-server-calculator- 수학 계산 -
파일 시스템:
uvx mcp-server-filesystem- 파일 시스템 작업 -
GitHub:
npx @modelcontextprotocol/server-github- GitHub 리포지토리 액세스 -
SQLite:
uvx mcp-server-sqlite- 데이터베이스 작업
각 서버는 모델 컨텍스트 프로토콜의 보안 및 표준화 이점을 유지하면서 에이전트의 기능을 확장하는 다양한 도구와 기능을 제공합니다.