此仓库演示了如何使用Microsoft Agent Framework (MAF)将代理暴露为MCP服务器,以及如何从以下方式连接到它:
mcp-ping.py),client-local-mcp.py)。它使用MCP的STDIO传输,这意味着客户端启动服务器作为子进程,并通过stdin/stdout交换JSON-RPC消息。
文件
agent-as-mcp-svr.py— MCP 服务器,通过agent.as_mcp_server()和stdio_server()暴露代理。mcp-ping.py— 最小化的客户端,使用stdio_client()启动服务器,列出工具,并调用代理工具。client-local-mcp.py— 使用MCPStdioTool连接到本地服务器的ChatAgent编排示例。
pip install --pre agent-framework mcp anyio azure-identity python-dotenv
如果你使用Azure OpenAI(推荐):
export AZURE_OPENAI_ENDPOINT="https://<your-endpoint>.cognitiveservices.azure.com/"
export AZURE_OPENAI_RESPONSES_DEPLOYMENT_NAME="gpt-4o" # 响应 / 代理使用
export AZURE_OPENAI_CHAT_DEPLOYMENT_NAME="gpt-4o" # 可选用于聊天客户端
export AZURE_OPENAI_API_VERSION="2025-03-01-preview" # 或 'preview'
# 其中之一:
export AZURE_OPENAI_API_KEY="<your-key>" # 最简单的方式
# 或基于AAD:
# (unset REQUESTS_CA_BUNDLE SSL_CERT_FILE; az login)
# export AZURE_USE_CLI=1
企业CA捆绑用户:确保
REQUESTS_CA_BUNDLE(可选SSL_CERT_FILE)指向一个有效的PEM路径。对于az login,你可能需要暂时取消设置这些变量。
这会启动服务器作为子进程并调用代理工具:
python mcp-ping.py
预期输出(简化):
TOOLS: ['RestaurantAgent']
== RestaurantAgent 输入模式 ==
{ ... JSON 模式 ... }
== 健康检查(JSON)==
{ "status": "ok", "endpoint": "...", ... }
这允许ChatAgent使用本地MCP服务器作为工具:
python client-local-mcp.py
它将运行一系列提示(健康检查、菜单列表、饮食过滤、定价、欢乐时光)。
mcp-ping.py(它们启动服务器并进行MCP通信)。AZURE_OPENAI_API_KEY或AZURE_USE_CLI=1与az login。对于AAD链,DefaultAzureCredential必须能够找到身份。task字符串。确保客户端发送{"task":"你的提示"}。stdio_server()公开异步的stdin/stdout流;server.run()处理JSON-RPC(初始化/列出工具/调用工具)。stdio_client()启动服务器进程并返回流;ClientSession驱动JSON-RPC调用。