为什么要写这篇
这半年 AI 圈两个缩写刷屏——MCP(Model Context Protocol)和 A2A(Agent2Agent Protocol)。都带"协议"二字、都跟 Agent 有关、连发布节奏都挨着,所以经常被人混着讲:

图源:a2aproject/A2A。Google 把 MCP 和 A2A 放在同一张"agent 技术栈"图里——这本身就说明两者是互补,不是替代。
“MCP 不就是 A2A 吗?”
“A2A 不就是 MCP 的升级版吗?”
我翻了手头几个项目想找真实案例,很遗憾都不沾边——AIKit 是 Next.js 壁纸工具,InkFrame 是 Flutter 桌面应用,博客是 Hugo。所以这次换个写法:啃官方 repo,对着源码讲清楚两个协议各自在解决什么问题、什么时候用哪个、以及——它们怎么组合。
一句话定位
先上结论,后面再展开:
| 协议 | 定位 | 类比 |
|---|---|---|
| MCP | 给单个 Agent 外挂工具和数据源 | 给 AI 插 USB |
| A2A | 让多个 Agent 互相协作 | 让 AI 组团队 |
它们根本不在一个抽象层级。MCP 管的是 Agent ↔ 工具(纵向),A2A 管的是 Agent ↔ Agent(横向)。混淆的本质是把"我 Agent 能干什么"和"我们 Agent 怎么一起干"混为一谈。
MCP:给 Agent 插 USB
权威 repo
- 规范:https://github.com/modelcontextprotocol/modelcontextprotocol
- 官方 server 合集:https://github.com/modelcontextprotocol/servers
- Python SDK:https://github.com/modelcontextprotocol/python-sdk
- TypeScript SDK:https://github.com/modelcontextprotocol/typescript-sdk
- 官网文档:https://modelcontextprotocol.io
底层逻辑
MCP 把"AI 调工具"这件事标准化成三角关系:
Host (Claude Desktop / Cursor / 你自己的应用)
└─ Client (每个 MCP 连接一个)
└─ Server (filesystem / github / postgres / ...)
- Host:跑模型的那一侧,决定什么时候连哪个 server
- Client:Host 里的连接器,一对一
- Server:真正干活的进程,暴露三类能力:
tools——可调用的函数(读文件、查 DB、发消息)resources——可读取的数据(日志、Schema、文档)prompts——可复用的提示词模板
传输层是 JSON-RPC 2.0,通道可以是 stdio 或 SSE/HTTP。
最短可读参考:filesystem server
想真正看懂 MCP,别去读规范,去读这个:
https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem
百来行 TypeScript,把 read_file / write_file / list_directory 这些工具注册给 Client。读完你就明白:MCP server 的本质就是一个实现了 JSON-RPC 的小进程,没别的魔法。
用户侧视角
我写这篇文章的时候,Claude Code 会话里就挂着几个 MCP server:
mcp__claude_ai_Gmail__*
mcp__claude_ai_Google_Calendar__*
mcp__claude_ai_Google_Drive__*
对 Claude 来说,这些就是"多出来的工具"。我不需要教它怎么调 Gmail API——MCP 把鉴权、调用、schema 全封好了,Claude 只看到 send_email(to, subject, body) 这种人话接口。
A2A:让 Agent 组队
权威 repo
- 主仓库:https://github.com/a2aproject/A2A
- Python SDK:https://github.com/a2aproject/a2a-python
- 官方 samples:https://github.com/a2aproject/a2a-samples
- 规范站:https://a2a-protocol.org
A2A 是 Google 2025 年开源的协议,同年捐给了 Linux Foundation(所以仓库从 google-a2a 迁到了 a2aproject)。定位非常直接:跨厂商、跨框架的 Agent 互操作标准。你的 LangGraph agent 想调我的 CrewAI agent?用 A2A。

图源:a2aproject/A2A。A2A 的核心画面是右边那张"Remote Agent Mesh"——一堆互不属于同一系统的 agent,通过协议握手就能协作。
三个核心概念
啃 a2a-samples/samples/python/agents 里任何一个 demo,都绕不开这三样东西:
1. Agent Card
每个 A2A agent 在 /.well-known/agent.json 发布一张"名片":我是谁、我会干什么、怎么联系我、要不要鉴权。这是 发现机制。
2. Task
调用不是一次性请求,而是一个有状态的任务,状态机是:submitted → working → input-required → completed / failed / canceled。支持长任务、支持中途要补充信息。
3. Message / Artifact
Task 内部来回传的消息叫 Message,最终产出叫 Artifact。都支持多模态——文本、文件、结构化数据。
和 MCP 的关键差异
| 维度 | MCP | A2A |
|---|---|---|
| 参与方 | Host ↔ Server(主从) | Agent ↔ Agent(对等) |
| 调用形态 | 同步 RPC 为主 | 异步 Task,可长时间运行 |
| 发现机制 | Host 配置里写死 | Agent Card 自描述 |
| 内部可见性 | Server 暴露全部能力 | Agent 对外只露"能干什么",不露"怎么干" |
| 典型场景 | “Claude 帮我读本地文件” | “订机票 Agent 去喊 HR Agent 查假期” |
信任边界不同——这是最容易被忽略的点。MCP server 是你自己挂的,你信任它;A2A 的对端可能是另一个组织的 agent,所以协议里把鉴权、权限、错误语义讲得更重。
什么时候用哪个
一张决策表替代长篇大论:
| 你的需求 | 选哪个 |
|---|---|
| 给 AI 加一个私有数据源 / 内部工具 | MCP |
| 复用别人写好的工具(GitHub、Slack、DB) | MCP |
| 让多个专业 agent 协作完成一个流程 | A2A |
| 跨组织 / 跨厂商的 agent 互调 | A2A |
| 一个长时间跑的任务,中途要催进度 / 补信息 | A2A |
| 只是"让 Claude 多一个函数可调用" | MCP |
组合拳:A2A 在上,MCP 在下
真实系统里两个协议不冲突,反而是分层的。这张图是 A2A 官方仓库的"镇仓之图",把两者的关系画得很清楚:

图源:a2aproject/A2A。左边整块是一个 Agentic Application——内部有 Agent Framework、LLM、sub-agents,通过 MCP Server 连
/tools/resources;对外通过 A2A protocol 和两个黑盒 Agent 通信,先Get agent card发现再调用。
翻译成一句话:
- 横向用 A2A:agent 之间异步协作、互相发现、各自黑盒
- 纵向用 MCP:每个 agent 自己挂一堆工具/数据源
一个类比:A2A 是公司间的邮件合同,MCP 是每个员工桌上的电脑和工具。你不会用邮件合同去控制鼠标,也不会用 USB 去签合同。
想动手的话从哪开始
MCP 最快路径:
| |
A2A 最快路径:
| |
注意:A2A 已从
google-a2a组织迁到 Linux Foundation 下的a2aproject,老链接会自动跳转,但 clone 时最好直接用新地址。
收尾
MCP 和 A2A 不是替代关系,是同一套 Agent 架构里的两根柱子:
- 没有 MCP,Agent 是个只会聊天的空壳——进不了你的文件,摸不到你的数据库
- 没有 A2A,Agent 永远只能自己玩——没法跟别的系统里的 Agent 协作
2026 年再建 AI 系统,基本跑不掉"MCP 接工具 + A2A 接同行"这个组合。先把两个官方 repo 各读一遍 reference 实现,再决定自己要不要动手。
相关链接汇总:
- MCP 规范:https://github.com/modelcontextprotocol/modelcontextprotocol
- MCP servers:https://github.com/modelcontextprotocol/servers
- MCP Python SDK:https://github.com/modelcontextprotocol/python-sdk
- MCP TypeScript SDK:https://github.com/modelcontextprotocol/typescript-sdk
- A2A 规范:https://github.com/a2aproject/A2A
- A2A Python SDK:https://github.com/a2aproject/a2a-python
- A2A samples:https://github.com/a2aproject/a2a-samples
- A2A 协议站:https://a2a-protocol.org
- MCP 官网:https://modelcontextprotocol.io

说些什么吧!