教程

A2A vs MCP 2026:AI Agent 协议大战进入下一阶段,JSON、Tools 与 Agents 怎么分工?

2026 年最常见的架构误判,是把 MCP 与 A2A 当成「协议大战」的敌对阵营。MCP 是 Agent 向下连 Tools 的垂直协议;A2A 是 Agent 横向委托给其他 Agent 的水平协议。JSON 贯穿三层:发现(Agent Card / tools/list)、调用(message/send 与 tools/call)、契约(JSON Schema)。

2026 年的 Agent 集成几乎离不开两套开放协议:Anthropic 发起的 Model Context Protocol(MCP)与 Google 发起的 Agent2Agent(A2A)。二者在 2025 年 12 月一同进入 Linux Foundation 的 Agentic AI Foundation(AAIF),IBM 的 Agent Communication Protocol 也在 2025 年 8 月并入 A2A。媒体常把它们写成「协议大战」,但 Google 与 Anthropic 的设计意图是分层互补——MCP 解决「这个 Agent 怎么调用数据库、邮件、GitHub」;A2A 解决「这个编排 Agent 怎么把子任务交给定价 Agent、合规 Agent、物流 Agent」。与此同时,OpenAI、Anthropic、Gemini 各自的 Tool Calling 仍管模型层 arguments 形状。这篇按 JSON 数据流拆开三层分工,并接上站内 Stateless MCP、MCP+JSON Schema 与 Structured Output 文。

协议大战的误解:互补,不是替代

把 MCP 与 A2A 当成「选一个赢家」,是 2026 年 Agent 架构里最常见的误判。MCP 的标准化对象是被动能力:MCP Server 暴露 tools、resources、prompts,Agent 客户端发现后调用——对面是 API、数据库、文件系统,没有自己的模型与推理循环。A2A 的标准化对象是自主对等体:远端 Agent 有自己的模型、工具、记忆与任务状态,编排者只通过 Agent Card 知道「它能做什么」,不窥探内部实现。

一个实用的记忆法:MCP 是 Agent 的「手」(向下拿工具);A2A 是 Agent 的「同事对话」(横向委托)。把整颗远程 Agent 包装成单个 MCP Tool 往往意味着把多轮推理压成一次函数调用——任务变长、需要澄清或异步回调时,A2A 的 Task 生命周期更合适。反过来,用 A2A 去调一个纯 REST 只读 API,则多了一层不必要的 Agent 协商开销。

2026 年 7 月 MCP 发布 2026-07-28 无状态版,Remote Server 可跑在普通 HTTP 负载均衡后面;A2A 则在 2026 年初达到 v1.0,Agent Card 支持加密签名,150+ 组织在生产环境使用。两者都在 AAIF 治理下演进,不是零和竞争。需要工具接入先上 MCP;需要跨团队、跨厂商的多 Agent 编排再上 A2A——大多数生产系统最终是「Orchestrator Agent:向下 MCP、 sideways A2A」。

MCP:Agent 向下连 Tools 与数据

MCP 定义客户端与 Server 之间如何发现工具、交换 JSON-RPC、返回结果。核心 JSON 面:

  1. tools/list:Server 返回 Tool 数组,每个 Tool 含 name、description、inputSchema(JSON Schema 子集)。
  2. tools/call:客户端发 params.name + params.arguments 对象,Server 执行业务并返回 result.content。
  3. resources/* 与 prompts/*:只读上下文与模板,同样走 JSON-RPC。
  4. 2026-07-28 起每个请求可在 _meta 里带协议版本,Session 从协议层移除,适合水平扩展。

MCP 不替 Server 校验 arguments——inputSchema 是声明,执行层必须 JSON.parse + Schema 校验。这与模型 Tool Calling 是两条 hop:模型吐出的 arguments 字符串,要先 parse,再组装成 tools/call。详见MCP 与 JSON Schema 解析与Stateless MCP 解析。

无状态 MCP 下 tools/call 请求体示例:

{
  "jsonrpc": "2.0",
  "id": 42,
  "method": "tools/call",
  "params": {
    "name": "searchInvoices",
    "arguments": {
      "startDate": "2026-01-01",
      "endDate": "2026-01-31",
      "status": "paid"
    },
    "_meta": {
      "io.modelcontextprotocol/protocolVersion": "2026-07-28"
    }
  }
}

A2A:Agent 横向连 Agent

A2A 标准化 Agent 之间的发现、任务委托与结果回传。每个 A2A Agent 在 well-known URL 发布 Agent Card(常见路径 /.well-known/agent-card.json),JSON 描述名称、技能(skills)、端点 URL、认证方式与 streaming 能力。编排 Agent 拉取 Card 后,通过 JSON-RPC(HTTP + SSE)发送 message/send 或管理 Task 生命周期——子 Agent 可以提问澄清、流式返回、甚至运行数小时后再 push 通知。

与 MCP 的关键差异:A2A 对面是不透明 Agent,不是可调用的函数表。你不应假设能直接映射成 tools/list 里的单个 Tool——除非远端明确把某个 skill 暴露为确定性 RPC。Task 有 id、status(submitted / working / completed / failed 等)、artifacts 与 history;JSON 载荷描述消息 parts(text、file、data),而不是固定的 arguments Schema。

Agent Card 片段(发现层 JSON):

{
  "name": "Invoice Specialist Agent",
  "description": "Finds, validates, and summarizes invoices for finance workflows",
  "url": "https://agents.example.com/invoice",
  "version": "1.0.0",
  "capabilities": {
    "streaming": true,
    "pushNotifications": true
  },
  "skills": [
    {
      "id": "search-invoices",
      "name": "Search invoices",
      "description": "Query invoices by date range and status",
      "inputSchema": {
        "type": "object",
        "properties": {
          "startDate": { "type": "string", "format": "date" },
          "endDate": { "type": "string", "format": "date" },
          "status": { "type": "string", "enum": ["draft", "sent", "paid"] }
        },
        "required": ["startDate", "endDate"]
      }
    }
  ],
  "authentication": {
    "schemes": ["bearer"]
  }
}

编排 Agent 向 Invoice Specialist 委托任务时,message/send 请求体大致如下:

{
  "jsonrpc": "2.0",
  "id": "req-001",
  "method": "message/send",
  "params": {
    "message": {
      "role": "user",
      "parts": [
        {
          "type": "text",
          "text": "Summarize all paid invoices between 2026-01-01 and 2026-01-31"
        }
      ]
    },
    "metadata": {
      "correlationId": "orch-42"
    }
  }
}

Google ADK 的 RemoteA2aAgent 每轮路由到一个远端 Agent;跨多个 Specialist 并行询价时,可直接用 a2a-sdk。Salesforce、SAP、Atlassian 等 50+ _launch 伙伴在 2025–2026 年接入 A2A 作为跨组织 Agent 互操作层。

JSON 在三层协议里的分工

把 JSON 在 Agent 栈里的角色按 hop 拆开,避免「一个 Schema 走天下」:

层 / 协议 JSON 载体 约束什么
模型 Tool Calling function.parameters / input_schema 模型选工具时 arguments 的形状(OpenAI strict、Anthropic tool_use 等)
MCP Tool.inputSchema、tools/call arguments Server 侧工具入参契约;协议不自动校验
A2A Agent Card、message parts、Task artifacts 发现与任务信封;skill 可嵌 inputSchema,但 Task 内容更自由
Structured Output response json_schema 模型最终答复形状,与工具入参无关

工程上常见三类 JSON 文件:schemas/tools/*.schema.json(MCP + 模型 tools 共用)、schemas/agents/*.card.json(A2A 发现,或由 Card 生成器输出)、schemas/output/*.schema.json(Structured Output)。改 Tool 字段时只 bump tools Schema;改 Agent 能力描述时更新 Card 版本;三者不要混在一个文件里。

联调时把三份 JSON 并排:模型吐出的 tool arguments、MCP tools/call params.arguments、A2A Task 最终 artifact 里的 JSON。形状不一致时,问题几乎总在适配层——而不是「协议选错了」。站内AI 生成 JSON 错误指南的四层 taxonomy 同样适用于跨协议流水线。

2026 对照:MCP vs A2A vs 模型 Tool Calling

粗粒度对照表(细节以各规范为准):

维度 MCP A2A
起源 / 治理 Anthropic 2024 → AAIF Google 2025 → AAIF(含 IBM ACP 合并)
连接方向 垂直:Agent → Tools / Resources 水平:Agent → Agent
发现机制 tools/list、Server 配置 Agent Card @ /.well-known/agent-card.json
传输 JSON-RPC;2026-07-28 Streamable HTTP 无状态 JSON-RPC + SSE;Task 生命周期与 webhook
状态 无状态 per call(2026-07-28) 有状态 Task;可长时运行
典型 JSON inputSchema、arguments、result.content Agent Card、message parts、artifacts

选型建议:只有一个 Agent、只需连内部 API 和数据库 → MCP 足够,不必为了「架构先进」硬上多 Agent A2A。需要跨 BU、跨 SaaS、跨云厂商委托 specialist → 在 Orchestrator 上加 A2A 客户端,每个 specialist 内部仍可用 MCP 接自己的工具。模型 Tool Calling 是第三条线——不管走 MCP 还是 A2A,Orchestrator 内的 LLM 仍通过 function/tools 选动作;arguments 的 JSON Schema 应与 MCP inputSchema 同源,见MCP JSON Schema 文。

组合架构与 JSONVue 实操

推荐的最小生产拓扑:

  1. Orchestrator Agent(LLM + 策略):模型 Tool Calling 决定「调 MCP 还是委托 A2A」。
  2. MCP 层:GitHub、Postgres、Slack 等 Tool Server;canonical Schema 生成 inputSchema 与 OpenAI tools[]。
  3. A2A 层:Invoice、Compliance、Pricing 等远端 Agent;启动时拉 Agent Card 缓存,Task 完成后 parse artifact JSON。
  4. 校验链:每 hop parse → JSON Schema → 业务规则;A2A artifact 与 MCP result 同样不应 blind trust。

调试清单:① Agent Card JSON 是否 valid、skills 是否与文档一致;② tools/list 与模型 tools[] 是否同源 Schema;③ A2A Task history 与 MCP tools/call 日志用 correlationId 关联。浏览器里:JSON 格式化看 parse;JSON Schema 校验对 arguments 与 Card 内 inputSchema;JSON Diff对比模型 arguments 与 MCP params.arguments。

延伸阅读:MCP 与 JSON Schema、Stateless MCP、AI Structured Output、Apple AI Agent 与 JSON。

常见问题 FAQ

A2A 会取代 MCP 吗?

不会。二者解决不同层的问题,Google 与 AAIF 文档均明确写 complementary。MCP 连工具与数据;A2A 连 Agent。生产架构通常是 Orchestrator 同时使用两者。

能把远程 A2A Agent 包装成一个 MCP Tool 吗?

技术上可以做一个「转发 Tool」,内部发 A2A Task 并阻塞等待结果。但长时 Task、澄清对话、流式中间结果时,这种包装会丢失 A2A 的生命周期优势。短、确定性、可超时的子任务适合包装;长编排应直接用 A2A 客户端。

Agent Card 里的 inputSchema 和 MCP inputSchema 一样吗?

语法上都可以是 JSON Schema,但语义不同。A2A skill 的 inputSchema 描述「委托这个 skill 时建议提供的结构」;MCP inputSchema 是 tools/call 的硬契约。Orchestrator 委托 A2A 时 often 用自然语言 Task,不强制填 skill Schema。

只有 MCP 够吗?什么时候必须上 A2A?

单 Agent、工具都在你可控的 MCP Server 里——MCP 足够。当 specialist 由别的团队/厂商运维、需要 Task 状态机、异步回调、或 Agent 能力经常独立演进时,A2A 更合适。

总结与下一步

2026 年的「协议大战」其实是分层分工:MCP 向下(Tools/JSON-RPC/inputSchema),A2A 横向(Agent Card/Task/message),模型 Tool Calling 管 Orchestrator 内 LLM 的 arguments JSON。JSON Schema 是跨层契约 glue,但 Structured Output、Tool arguments、Agent artifact 应分文件维护。

下一步:画一张你的 Agent 拓扑——哪些 hop 走 MCP、哪些走 A2A;把 tools/list 与 Agent Card 的 JSON 贴进 JSONVue 校验。先 MCP 接通主工具,再按需加 A2A specialist,比一开始堆多 Agent 更易调试。