教程
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 面:
- tools/list:Server 返回 Tool 數組,每個 Tool 含 name、description、inputSchema(JSON Schema 子集)。
- tools/call:客戶端發 params.name + params.arguments 對象,Server 執行業務並返回 result.content。
- resources/* 與 prompts/*:只讀上下文與模板,同樣走 JSON-RPC。
- 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 實操
推薦的最小生產拓撲:
- Orchestrator Agent(LLM + 策略):模型 Tool Calling 決定「調 MCP 還是委託 A2A」。
- MCP 層:GitHub、Postgres、Slack 等 Tool Server;canonical Schema 生成 inputSchema 與 OpenAI tools[]。
- A2A 層:Invoice、Compliance、Pricing 等遠端 Agent;啓動時拉 Agent Card 緩存,Task 完成後 parse artifact JSON。
- 校驗鏈:每 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 更易調試。