
多智能体协作的通用语MCP A2A 协议栈实战解析2026 年大模型竞争的主战场正在从单模型能力转向多智能体协作。当中国日均词元调用量突破 140 万亿、AI Agent 从演示走向生产环境时一个关键问题浮出水面**来自不同厂商、运行在不同框架上的智能体如何像人类团队一样分工协作** 答案就是 MCP 与 A2A 组成的分层协议栈——MCP 给智能体动手能力A2A 给智能体社交网络。一、为什么需要协议栈回顾 2025 到 2026 年的演进脉络MCPModel Context Protocol模型上下文协议由 Anthropic 于 2024 年底开源迅速成为智能体连接工具与数据的事实标准2025 年 4 月Google 联合 50 企业发布 A2AAgent2Agent协议专攻智能体之间的互联互通。到了 2026 年两者已经形成稳定互补• **MCP**解决智能体 → 工具/数据的单向能力扩展问题• **A2A**解决智能体 ↔ 智能体的双向协作问题• **OpenAPI 认证**解决身份与授权问题凭证通过标准 HTTP Header 传递协议本身与认证机制解耦。打个比方MCP 是给每个智能体装上手A2A 是让这些智能体彼此开口说话。没有 MCP 的智能体是残疾人没有 A2A 的智能体是孤岛。二、MCP给智能体动手能力MCP 采用经典的Host / Client / Server三层架构。Host如 Claude Desktop、Cursor、自研应用中嵌入 MCP Client通过 JSON-RPC 2.0 与 MCP Server 通信。Server 暴露三类核心原语Tools可执行动作、Resources可读取数据、Prompts可复用提示词。下面是一个极简的 MCP Server 示例Python使用官方 SDKfrom mcp.server.fastmcp import FastMCP mcp FastMCP(order-service) mcp.tool() def query_order(order_id: str) - str: 查询订单状态模拟工具 status_map {A1001: 已发货, A1002: 待支付} return status_map.get(order_id, 订单不存在) mcp.tool() def calc_shipping(weight_kg: float, express: str standard) - float: 计算运费standard 8元/首重express 15元/首重 base 8.0 if express standard else 15.0 extra max(0.0, weight_kg - 1.0) * 2.0 return round(base extra, 2) if __name__ __main__: mcp.run(transportstdio) # 支持 stdio / sse / streamable-http客户端侧一个 Agent 可以同时挂载多个 MCP Server像拼积木一样获得查订单 算运费 查物流等能力from mcp import ClientSession, StdioServerParameters from mcp.client.stdio import stdio_client async def call_tool(server_cmd, tool_name, args): params StdioServerParameters(commandserver_cmd[0], argsserver_cmd[1:]) async with stdio_client(params) as (read, write): async with ClientSession(read, write) as session: await session.initialize() result await session.call_tool(tool_name, argumentsargs) return result.content[0].text # 同一个 Agent 同时使用多个工具 print(await call_tool([python, order_server.py], query_order, {order_id: A1001})) print(await call_tool([python, order_server.py], calc_shipping, {weight_kg: 3.2}))MCP 生态在 2026 年已经极其繁荣从 GitHub、Slack 到 Elasticsearch主流 SaaS 纷纷提供官方 MCP Server远程 MCPstreamable-http支持也让客户端连远程工具成为常态。这正是词元经济落地的基础设施——模型负责想MCP 负责做。三、A2A给智能体社交网络如果说 MCP 是人与工具的契约A2A 就是智能体之间的社交协议。它基于 HTTP/1.1 或 HTTP/2 JSON-RPC 2.0 SSEServer-Sent Events核心概念只有四个1.Agent Card智能体的名片JSON 格式声明自己是谁、能干什么、认证方式2.Task任务对象携带状态机submitted → working → input-required → completed / failed3.Message / Part / Artifact消息与产物支持文本、图片、表单等多模态4.Streaming / Push Notification面向长任务的实时进度推送。先看一张名片——Agent Card 长什么样{ name: reservation-agent, description: 处理餐厅订座、改签与取消, url: https://agents.example.com/reservation, version: 1.0.0, capabilities: { streaming: true, pushNotifications: true, stateTransitionHistory: true }, security: { schemes: [bearer] }, skills: [ { id: book_table, name: 在线订座, description: 按人数、时间与偏好预订餐厅桌位 } ], defaultInputModes: [text/plain], defaultOutputModes: [text/plain, application/json] }再写一个极简的 A2A ServerFastAPI 实现 tasks/send 端点from fastapi import FastAPI, Request from pydantic import BaseModel app FastAPI() BOOKINGS: dict[str, str] {} class TaskSendRequest(BaseModel): id: str message: dict metadata: dict {} app.get(/.well-known/agent.json) def agent_card(): return { name: reservation-agent, description: 处理订座请求, url: https://agents.example.com/reservation, version: 1.0.0, capabilities: {streaming: False}, } app.post(/tasks/send) async def tasks_send(req: TaskSendRequest): parts req.message.get(parts, []) text .join(p.get(text, ) for p in parts) # 解析意图book/cancel if 订 in text and 座 in text: task_id ftask-{req.id} BOOKINGS[task_id] 已预订 4 人桌今晚 19:00 return { id: task_id, status: {state: completed}, artifacts: [{parts: [{text: BOOKINGS[task_id]}]}], } return {id: req.id, status: {state: failed}, statusMessage: 无法识别的意图}客户端智能体只需把请求 POST 过去就能把订座这件事委托出去——不需要知道对方是用 LangChain、ADK 还是自研框架写的。四、实战MCP A2A 分层协同在真实系统里两者是分层配合而非二选一。以一个智能客服工单系统为例用户提问 │ ▼ ┌─────────────┐ A2A(JSON-RPCSSE) ┌─────────────────┐ │ 主控 Agent │ ──────────────────► │ 订单 Agent │ │ (orchestrator)│ ◄────────────────── │ (MCP: 查订单/退款) │ └──────┬──────┘ └─────────────────┘ │ MCP (工具调用) ▼ ┌─────────────────┐ │ CRM / 物流 / 知识库 │ └─────────────────┘主控 Agent 的伪代码清晰展示了这种脑手分离async def handle(user_msg: str): # 1) 本地判断是否需要求助其他智能体 if 订单 in user_msg: # 2) A2A委托给订单 Agent远程协作 resp await a2a_send(https://agents.example.com/order, user_msg) return resp.artifacts[0].parts[0].text # 3) MCP本地调用工具查询知识库 docs await mcp_call_tool(kb-server, search, {q: user_msg}) return f根据知识库{docs} # A2A 客户端最小实现 async def a2a_send(agent_url: str, text: str): payload { id: uuid4().hex, message: {role: user, parts: [{text: text}]}, metadata: {}, } async with httpx.AsyncClient() as client: r await client.post(f{agent_url}/tasks/send, jsonpayload) return TaskResponse.model_validate(r.json())Google ADKAgent Development Kit已经原生支持在 A2A Agent 里挂载 MCP 工具Elasticsearch 官方也给出了LLM Agent 新闻室的完整参考实现——一个记者 Agent 通过 A2A 把稿件交给编辑 Agent编辑再通过 MCP 调用 Anthropic 分析内容。协议栈的价值在于每个团队只维护自己的智能体全局却像一个团队在运转。五、挑战与展望协议有了工程化才刚刚开始2026 年最受关注的是三个问题1.安全与信任英国 AI 安全研究所 8 月发布的报告显示测试中 AI 智能体出现了 19 项超出设定范围的自主行为。多智能体放大了攻击面——A2A 必须与 OAuth2/JWT 结合且对每个请求做鉴权与审计2.可观测性跨智能体的链路追踪trace、任务状态机与成本归因需要一套类似 OpenTelemetry 的标准3.协议生态之争MCP、A2A、AGNTCY思科主导仍在争夺生态位短期内分层兼容是最务实的策略——MCP 管工具、A2A 管协作二者都基于 JSON-RPC/HTTP迁移成本极低。可以预见未来 12 个月我们会看到更多智能体团队进入生产科研场景里检索智能体数秒出结果、模拟智能体跑数天任务并实时推送进度企业场景里主控 专家的架构成为标配。就像 TCP/IP 定义了互联网设备如何互联MCP A2A 正在定义 AI 智能体如何协作——这是词元经济时代最重要的基础设施。总结| 维度 | MCP | A2A || --- | --- | --- || 定位 | 智能体 ↔ 工具/数据 | 智能体 ↔ 智能体 || 提出方 | Anthropic | Google 及 50 伙伴 || 通信 | JSON-RPC 2.0 | JSON-RPC 2.0 SSE || 核心概念 | Tools / Resources / Prompts | Agent Card / Task / Message || 典型场景 | 数据库、API、知识库接入 | 任务委托、跨厂商协作 |动手建议先用 FastMCP 十分钟写一个工具 Server再用 FastAPI 搭一个 A2A Agent Card最后让两个 Agent 互相委托任务——你会在一个下午感受到智能体从单兵到军团的质变。欢迎在评论区分享你的多智能体踩坑经历本文基于 2026 年 8 月公开技术资料撰写示例代码可在本地 Python 3.10 环境运行。