
MCP vs A2A协议栈位置与选型决策树一篇说清何时用哪个本文是「Agent 应用开发工程师」系列第②篇 · 把两条 Agent 通信协议的选型判断力建起来⚡ TL;DR · 先看结论MCP 是垂直协议—— 连接 Agent ↔ 工具/数据决定这个 Agent 能做什么。A2A 是水平协议—— 连接 Agent ↔ Agent决定这个 Agent 能找谁做。它们不是二选一而是两层栈叠着用对外用 A2A 当门面对内用 MCP 当内脏。选型口诀先问是工具问题还是协作问题再决定上哪套。开场要给同事搭桥先分清两种通信你翻 MCP vs A2A看到最多的就是那句比喻——“MCP 给模型一只手A2A 给模型一个同事”。没毛病但选型不能靠比喻。面试官真要追问你总不能答一个是手、一个是同事——那只能证明你看过博客没证明你懂协议栈。这篇文章走工程师路线不写比喻。按先定位、再对比、后选择、落到代码的顺序我给你四样东西一张坐标定位图先看两条协议各站在哪一层一张对比矩阵选型时我真实会翻的对照表一张可照抄的决策树场景一到顺着往下走一套落进你技术栈的混用拓扑外加10 条面向客户的表达红线。一、先立坐标MCP 竖着接工具A2A 横着接 Agent多数人踩的坑是把两条协议放到同一根轴上比较。可它们本就不在同一层。MCP 是垂直协议管的是 Agent ↔ 工具/数据。解决让一个 Agent 调得动工具、读得到数据像单体内部的布线。A2A 是水平协议管的是 Agent ↔ Agent。解决多个 Agent 跨进程、跨团队、跨公司协作像系统之间的外交。用一张图把竖和横一次看明白┌──────────────────────────────────────────────┐ │ A2A水平 │ │ Agent A ──────▶ Agent B 跨 Agent 协作 │ │ │ │ │ MCP垂直│MCP垂直 │ │ ▼ │ │ 工具 / 数据源 │ └──────────────────────────────────────────────┘一句话记住分层MCP 决定这个 Agent 能做什么A2A 决定这个 Agent 能找谁做。这条划分其实早就写进了治理归属MCP由Anthropic于 2024-11 提出归Agentic AI FoundationLinux Foundation 旗下子基金会。A2A由Google于 2025-04 提出、2025-06 捐给Linux Foundation 作为独立项目。注意两者是不同归属——别照抄那些都在一个屋檐下的简写在细节里这是硬伤。二、上对比矩阵别再只比是手还是人这张表我在真实选型时会反复翻给你也存一份。数字都标了来源别把听说当实测。维度MCP工具层A2AAgent 层定位垂直Agent ↔ 工具水平Agent ↔ Agent提出方Anthropic2024-11Google2025-04治理归属Agentic AI FoundationLinux Foundation独立项目通信模型JSON-RPC 2.0HTTP JSON-RPC SSE / 流式同步性同步函数调用为主异步长任务 推送通知状态无状态调用→返回有状态Task 生命周期管理服务发现应用侧手动配置 ServerAgent Card/.well-known/agent-card.json可签名典型部署本地进程(STDIO) / 服务(Streamable HTTP)HTTP Endpoint可跨网络/跨公司信任模型Agent 信任工具提供方本地可控Agent 间默认互不信任需认证/授权落地成熟度工具层事实标准v1.0 GA(2026-03-12)、150 组织、6 语言 SDK比完表有三处最容易被讲错单独拎出来对一遍① 最容易 1:1 画等号的是状态。MCP 天生无状态、每次把上下文带过去A2A 却把任务当一等公民用tasks/send、tasks/get、tasks/cancel、tasks/list跟踪长任务生命周期。这正是多 Agent 协作为什么不能纯用 REST的答案REST 没有任务进行到哪、要不要回执的语义。② 发现机制完全不同。MCP 靠你手动把 Server 地址配进应用A2A 靠每个 Agent 在/.well-known/agent-card.json暴露一份可签名的 Agent Card身份、能力、端点让对方自动发现。要接一群陌生 Agent 时Agent Card 的分量远超手动配置。③ 信任模型恰相反。MCP 里你的模型信任工具方成败本地可控A2A 里 Agent 默认互不信任得在协议层做认证、鉴权、审计——这也正好呼应系列「安全篇」讲的 MCP 攻击面两者叠起来才是完整图景。 补充口径A2A v1.0 于 2026-03-12 GA官方 SDK 覆盖 Python/Go/Java/JS/TS/.NET/Rust 六种语言到 2026-04 前后已有 150 组织在生产使用。两协议叠用的结构就是上面坐标里 A2A 之下仍吊着 MCP 的那件事。三、选型决策树场景一到往下走就行不进矩阵的选型是空谈。下面这张是我给客户/面试用的判断路径按中序往下走Q1 你要解决的是「Agent 自己干活」还是「多个 Agent 分工」 └─ 自己干活调工具/读写数据→ 只要 MCP └─ 分工/接力 → 进 Q2 Q2 这些 Agent 会不会跨进程/跨服务甚至跨团队/跨公司 └─ 不会都在一个进程/服务内 → LangGraph 编排即可未必上 A2A └─ 会分散在不同服务/组织 → 进 Q3 Q3 你要的是不是「任务级长生命周期 异步回执」 └─ 是 → 用 A2AAgent Card 发现 Task 生命周期 └─ 只是同步要个结果 → 轻量 HTTP/RPC 也行A2A 略重 Q4 让 Agent 干活时还得调工具/读数据吗 └─ 要 → MCP A2A 叠用对外 A2A 接进来、对内 MCP 挂工具再挑几个高频场景直接落结论场景结论一个 Python Agent 要查库、调外部接口只用 MCP本地挂 Server两个 Agent 在一个服务里协作编排框架即可LangGraph不上 A2A公司 A 想调公司 B 的 Agent 能力A2A跨组织走部署端点 Agent Card一个 Agent 挂 5 个工具源、又被别的 Agent 调MCP A2A 叠用两套各干各的把自己的工具封装成别人也能用的标准接口可MCP Server起步若对方是 Agent 而非人再考虑补 A2A四、落到你的栈上内部挂 MCP对外露 A2A选型连到树还不够得看在真实系统里怎么摆。这是我最想强调的形态——别被二选一带偏真实系统是叠用的对外A2A ┌────────────▼────────────┐ │ A2A Endpoint │ │ /.well-known/agent-card │── ◀── 别的 Agent 发现/调用 │ FastAPI 托管 │ └────────────┬────────────┘ │ 触发任务 ┌────────────▼────────────┐ │ LangGraph 编排 │ │ Supervisor Workers │ └───┬────────┴───────┬────┘ │ A2A(水平) │ MCP(垂直) ┌───▼───┐ ┌───▼──────────────┐ │ 子Agent│ │ MCP Client → Server│ └───────┘ │ 查库 / 接口 / PDF │ └───────────────────┘一句话概括这层的分工⚖️A2A 管门面MCP 管内脏。LangGraph 内部由 Orchestrator 把活拆给子 Agent子 Agent 要动数据就通过挂上的 MCP Client 去调整个 LangGraph 对外的身份则用 A2A Agent Card 暴露出去让别家 Agent 按标准来调用我。骨架优先先防跑题# 1) A2A 侧FastAPI 托管 Agent Card 任务端点骨架以官方 SDK 为准fromfastapiimportFastAPI appFastAPI()app.get(/.well-known/agent-card.json)defagent_card():return{name:research-agent,description:多源深度调研 Agent接 LangGraph 编排,capabilities:{task:{supportsStreaming:True},push:{supportsPushNotifications:True},},# 端点按官方 A2A 约定补齐 tasks/send 等}# 2) MCP 侧把工具挂到 LangGraph 的 model示意fromlangchain_mcp_adapters.toolsimportload_mcp_tools toolsload_mcp_tools(mcp_client)# 拉取 MCP Server 的工具modelmodel.bind_tools(tools)# 编排里的节点就能调工具这段调用栈全落在我的技术栈里LangGraph 垫底、FastAPI 建模、MCP 接工具。你照这个结构起个 demo 即可——没跑通就把上面标成骨架别写成我已生产。五、面对客户这 10 句话你要会反驳选型最易翻车的是说出去的话。每条我都给两栏对方常说的错话vs你该纠正成什么。#别人别这么说你该纠正成什么1“A2A 会取代 MCP”错。不在一个抽象层是叠用关系并列对比就是错误前提。2“MCP 过时了”错。MCP 是工具层事实标准看官网口径A2A 长在它之上。3“哪个更好”改问你解决的是工具还是协作问题。4“多 Agent 就不需要 MCP 了”错。A2A 接进来的活落地照样用 MCP 够数据。5“不用 A2A用 XX 编排就行”限定跨服务编排。同服务内没错跨公司才走 A2A。6“A2A 就是给 Agent 用的 REST”会误导。差异在 Task 生命周期、状态回执、Agent Card。7“两个协议一个治理方”精确点MCP 归 Agentic AI FoundationA2A 归 Linux Foundation 独立项目。8“A2A 也支持 Java”对官方 SDK 有 Java但跑没跑通取决于你的 demo别说成官方保证无坑。9“150 组织都在用 A2A 了”说这句要对上发布日期与来源2026 前后口径别制造不上就落后。10“别家能调我们我们也能调别家”前提是对方真实现并暴露 Agent Card“能调≠已互通、鉴权可用”。六、收个尾一句话带走下期见这篇把两条通信协议放进同一坐标系——MCP 垂直Agent↔工具、A2A 水平Agent↔Agent给了对比矩阵、选型决策树和一套 LangGraph 内挂 MCP、对外 A2A 的叠用架构。一句话带走MCP 决定能做什么A2A 决定能找谁做它们不是二选一而是两层栈叠着用。⏭️ 下期预告#3 别再只会写 PromptContext Engineering——从怎么写 Prompt跳到往窗口里放哪些 tokenAgent 的下一个范式。关注不错过。参考A2A 官方协议规范 · Agentic AI Foundation 文档 · Linux Foundation 发布稿A2A 150 组织· AgentCard 规范 · Spring AI / LangChain MCP 适配器文档系列目录Java 落地(#①) → 协议选型(#②本文) → Context(#③) → … → 安全(#⑧) → 成本(#⑩)