MCP-A2A 分布式服务器框架
使用说明
- 项目简介
- 该仓库实现了一个 MCP 服务器框架,核心目标是向 MCP 客户端提供分布式的上下文服务能力,涵盖资源管理、工具注册/执行以及基于模板的 Prompts 渲染等功能,并通过 JSON-RPC 与客户端通信。它支持多服务器实例协同工作、Agent-to-Agent (A2A) 协议接入,以及对传输协议的扩展能力(如 STDIO、SSE、WebSocket 等能力扩展点)。
- 主要功能点
- A2A 端点与自动发现:通过 /.well-known/agent-card.json、/a2a 端点实现 A2A 服务端的注册、发现和工具执行,支持多端点配置和工具白名单控制。
- JSON-RPC 风格通信:提供 a2a.discover、a2a.call 两个标准 JSON-RPC 方法,客户端通过这些请求进行工具能力的发现和实际调用。
- 多服务器工具注册与执行:从仓库的 servers/ 目录自动发现各类别工具服务器,按类别暴露给 MCP 客户端,支持白名单筛选。
- 跨服务器协作与编排:内部实现了对远程工具的聚合、负载均衡、直接调用、轮询等路由策略,支持多服务器间的协作执行。
- 安全与可扩展性:通过 A2A_EXPOSED_TOOLS 配置实现对暴露工具的类别级别控制,具备对异常、超时、重试等机制的处理能力。
- 与客户端的协同:在启动时自动实例化 MCPClient、创建并管理会话、并在关闭时清理资源,支持将工具集合通过会话路由给 LLM。
- 安装与运行步骤
- 依赖与环境
- Python 3.10+,建议在虚拟环境中运行
- 启动 MCP 服务器
- 启动 A2A 服务端(HTTP/JSON-RPC 接口):
- 运行 python a2a_server.py
- 启动各 MCP 子服务器(位于 servers/ 目录下的每个类别,例如 code_review、location、plex、rag、system_tools、text_tools、todo、knowledge_base):
- 运行 python servers/<server_category>/server.py
- 启动 A2A 服务端(HTTP/JSON-RPC 接口):
- 启动参数与自动发现
- 服务器会在启动时读取 .env 中的 A2A_ENDPOINTS(多个端点,以逗号分割)以及 A2A_EXPOSED_TOOLS 等配置,用以确定哪些工具对外暴露。
- 客户端对接要点
- MCP 客户端需要知道 MCP 服务器的启动命令与参数(command 与 args),以便将服务器注册到 MCP 客户端进行调用。这些信息在后续的“服务器配置”部分以 JSON 形式给出示例。
- 依赖与环境
- 服务器配置(MCP 客户端需要的配置信息,json 格式,含 server 名称、command、args 等)
说明:以下为示例配置,请根据实际部署环境替换路径。MCP 客户端只需要读取该配置以启动并连接对应的 MCP 服务器。
{
"mcpServers": {
"code_review": {
"command": "/path/to/mcp_a2a/.venv/bin/python",
"args": ["/path/to/mcp_a2a/servers/code_review/server.py"]
},
"location": {
"command": "/path/to/mcp_a2a/.venv/bin/python",
"args": ["/path/to/mcp_a2a/servers/location/server.py"]
},
"plex": {
"command": "/path/to/mcp_a2a/.venv/bin/python",
"args": ["/path/to/mcp_a2a/servers/plex/server.py"]
},
"rag": {
"command": "/path/to/mcp_a2a/.venv/bin/python",
"args": ["/path/to/mcp_a2a/servers/rag/server.py"]
},
"system_tools": {
"command": "/path/to/mcp_a2a/.venv/bin/python",
"args": ["/path/to/mcp_a2a/servers/system_tools/server.py"]
},
"text_tools": {
"command": "/path/to/mcp_a2a/.venv/bin/python",
"args": ["/path/to/mcp_a2a/servers/text_tools/server.py"]
},
"todo": {
"command": "/path/to/mcp_a2a/.venv/bin/python",
"args": ["/path/to/mcp_a2a/servers/todo/server.py"]
},
"knowledge_base": {
"command": "/path/to/mcp_a2a/.venv/bin/python",
"args": ["/path/to/mcp_a2a/servers/knowledge_base/server.py"]
}
}
}
备注:
- 上述路径需要替换为实际部署环境中的路径。
- 客户端配置信息仅用于服务器端的注册和调用,实际 MCP 客户端不需要在文本描述中运行服务器,只需使用这些信息来启动对接。
- 基本使用方法
- 启动与对接
- 在服务器端执行 a2a_server.py 启动 A2A HTTP 服务
- 启动 servers/ 目录下的各服务器入口 server.py
- 客户端(LLM 客户端 / Claude Desktop 等)通过配置文件发现并连接 MCP 服务器,并可调用暴露的工具
- 日常操作
- 通过 MCP 客户端的 UI/CLI 进行工具调用、资源读取、Prompts 获取等标准 MCP 操作
- A2A 模式开启后,客户端可跨服务器调度工具,形成分布式工作流
- 监控与容错
- 系统内置了 A2A 端点故障处理、工具执行超时、重试以及健康监控入口,提升鲁棒性
- 启动与对接