返回市场
代理作为MCP服务器-MAF

代理作为MCP服务器-MAF

作者:chanirban10 星标更新:2025-10-26

项目介绍

将代理作为MCP服务器(Microsoft Agent Framework)

此仓库演示了如何使用Microsoft Agent Framework (MAF)代理暴露为MCP服务器,以及如何从以下方式连接到它:

  • 一个测试ping客户端 (mcp-ping.py),
  • 一个使用本地MCP服务器作为工具的ChatAgent编排客户端 (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编排示例。

预备条件

  • Python 3.10+
  • 推荐:虚拟环境
  • 包:
    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,你可能需要暂时取消设置这些变量。

如何运行

1) 快速本地ping(STDIO客户端/服务器)

这会启动服务器作为子进程并调用代理工具:

python mcp-ping.py

预期输出(简化):

TOOLS: ['RestaurantAgent']
== RestaurantAgent 输入模式 ==
{ ... JSON 模式 ... }

== 健康检查(JSON)==
{ "status": "ok", "endpoint": "...", ... }

2) 使用MCP服务器的编排ChatAgent

这允许ChatAgent使用本地MCP服务器作为工具:

python client-local-mcp.py

它将运行一系列提示(健康检查、菜单列表、饮食过滤、定价、欢乐时光)。

故障排除

  • 无效JSON / EOF 当单独运行服务器时 — 你没有客户端就启动了服务器。使用mcp-ping.py(它们启动服务器并进行MCP通信)。
  • 令牌/凭证错误 — 提供AZURE_OPENAI_API_KEYAZURE_USE_CLI=1az login。对于AAD链,DefaultAzureCredential必须能够找到身份。
  • 工具参数不匹配 — 代理作为工具通常期望一个单一的task字符串。确保客户端发送{"task":"你的提示"}

它是如何工作的(STDIO)

  • 服务器stdio_server()公开异步的stdin/stdout流;server.run()处理JSON-RPC(初始化/列出工具/调用工具)。
  • 客户端stdio_client()启动服务器进程并返回流;ClientSession驱动JSON-RPC调用。