MCP 协议和 A2A 协议如何协同工作?请设计一个同时使用两者的多 Agent 系统架构
- 标签:AI、大模型、Agent
🏛 业务架构师
设计一个 MCP+A2A 协同的多 Agent 架构,我以"智能采购 Agent"为例讲清楚分工:
架构分层:
- 工具层(MCP):企业内部系统统一封装为 MCP Server——ERP Server(库存/订单)、合同 Server、审批流 Server、知识库 Server,注册到 MCP 网关(统一鉴权、审计、限流)。所有 Agent 不直连业务系统,一律走 MCP——内部集成标准化。
- Agent 层(内部多 Agent):采购 Agent 内部按职能拆分——需求分析 Agent、供应商比价 Agent、合同审查 Agent,通过编排框架(LangGraph 类)协作,共享企业内信任域(同一身份体系、同一审计链)。
- 协作层(A2A):对外——供应商的报价 Agent、物流公司的调度 Agent 通过 A2A 协议互联:本方 Agent 发布 Agent Card 声明采购需求受理能力,也拉取对方 Card 发现"谁能报价";询价以 Task 下发,长任务异步等结果,报价以 Artifact(结构化报价单)回收。跨企业边界,各自保留内部系统的完全私有。
- 治理层贯穿:对外交互走 A2A 网关(身份互信、审计、敏感数据出域管控);对内工具调用走 MCP 网关。
关键设计原则:内部用 MCP 求深度集成与管控,外部用 A2A 求松耦合互信——协议边界即信任边界。这个架构的业务价值:新增一家供应商只需对方发布 Agent Card,集成成本从"月级项目"降到"天级配置",这就是协议标准化带来的生态杠杆。
🏗 系统架构师
设计 MCP + A2A 协同的多 Agent 系统,我给出一个客服中台的参考架构(四层):
第一层:统一接入与网关
- 渠道网关:Web/App/IM 消息接入,鉴权、限流、幂等;
- 协议网关双面:对外暴露 A2A 端点(供外部 Agent 委托任务),对内管理 MCP Server 注册(内部能力收口:鉴权、审计、限流)。
第二层:编排 Agent(A2A 的消费者与提供者)
- 主编排 Agent 接收用户意图,拆解任务;
- 判断"自己做"还是"委派":领域任务(退款审核、技术诊断)通过 A2A 委托给领域 Agent——读它的 Agent Card(
/.well-known/agent.json)确认能力,创建 A2A Task(长任务状态机:working → completed,SSE 收 Artifact); - 对外:本平台的"工单处理 Agent"也发布 Agent Card,供生态伙伴委托。
第三层:领域 Agent 集群(各自独立)
- 每个领域 Agent(财务/技术/物流)独立部署:自己的 LLM 选型、自己的 System Prompt 与记忆;
- 内部用 MCP 连接能力:MCP Server 封装 ERP、工单库、知识库、短信网关——工具调用、资源读取走 MCP 原语(tools/call、resources/read);
- 领域 Agent 之间也可 A2A 互调(技术诊断 Agent 发现需要财务数据 → A2A 委托财务 Agent)。
第四层:治理与观测(横切)
- 全链路 trace:用户请求 → A2A task_id → MCP tool 调用 ID 贯穿;
- 安全:A2A 走 OAuth2 服务间认证,MCP 工具分级权限 + 高危审批;
- 长任务管理:A2A 异步任务的超时、补偿、幂等由编排层统一。
设计要点总结:A2A 管 Agent 间委托(粗粒度、异步、状态机),MCP 管 Agent 内工具(细粒度、同步、能力原语)——两条协议各守一层,绝不混用。
💻 全栈开发专家
我设计过一个类似架构(客服中台),MCP 管垂直工具连接、A2A 管水平协作:
架构分层:
用户 → 统一入口 Gateway(路由/鉴权/幂等)
│
▼
编排 Agent(Planner,不直接干活)
├─A2A─→ 退款 Agent ──MCP──→ 订单库 / 支付系统 / 通知服务
├─A2A─→ 物流 Agent ──MCP──→ 物流API / 地图 / 短信
└─A2A─→ 知识 Agent ──MCP──→ 向量库 / ES / CMS运行流程(「帮我退款并告诉我什么时候到账」):
- Gateway 鉴权路由到编排 Agent;
- 编排 Agent 分解任务:退款执行(委托退款 Agent)+ 到账时效查询(可并行的委托);
- 通过 Agent Card 发现各领域 Agent 的能力(退款技能、
refund:writescope),OAuth 2.1 拿 token; - A2A
message/stream委托任务,退款 Agent 内部循环:MCP 查订单(只读工具直接执行)→ MCP 调支付退款(写工具,过自己的策略管道,人工确认阈值内自动执行)→ Task completed 返回 Artifact(退款单号、预计到账时间); - 编排 Agent 汇总两个结果生成最终回复;全程 trace_id 贯穿。
关键设计决策:
- 编排层无工具:Planner 只做分解和委派,避免上下文膨胀;
- 权限按层收窄:编排 Agent 只有委托权;执行 Agent 的 MCP 工具权限各自最小化(退款 Agent 碰不到物流写入);
- A2A 任务异步化:长任务(人工审核退款)走 input-required 状态挂起,webhook 回调续传;
- 失败域隔离:单个 Agent 故障,编排层降级(换 Agent 或转人工),不雪崩。