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
    • 启动参数与自动发现
      • 服务器会在启动时读取 .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 端点故障处理、工具执行超时、重试以及健康监控入口,提升鲁棒性

服务器信息