MCP+A2A+ANP,Agent通信协议的完整知识地图
写在前面
时间过得真快,从10月3号写下第一篇"为何需要通信协议"到今天,第十章智能体通信协议的内容已经全部写完了。18篇文章,从最基础的概念到三协议合一的实战案例,从MCP客户端到自己写MCP服务器再到发布上线,算是把Agent通信这个领域的核心知识都过了一遍。
写这篇总结的时候,我翻了翻之前的文章,发现自己对协议的理解也在不断变化。最开始觉得"协议不就是规定一下数据格式吗",后来越学越觉得,协议背后是对Agent协作模式的深度思考------怎么让工具即插即用、怎么让Agent彼此理解、怎么让大规模Agent网络有序运转。每个协议的设计细节里,都藏着设计者对这些问题的回答。
这篇文章我想做三件事:把整个章节的知识脉络理清楚、把三个协议的核心要点做一个速查手册、分享一些我在学习和实践中的心得体会。希望这篇文章能成为你以后做Agent项目时的"参考卡片",遇到问题翻一翻就能找到方向。
一、整个章节的知识脉络
先把第十章的内容串起来,看看我们是怎么一步步深入的:
10.1 基础篇:为什么需要协议,有哪些协议
这一节解决的是"认知问题"。从Agent发展遇到的瓶颈讲起------工具接入碎片化、Agent协作无标准、大规模网络无治理------引出通信协议的必要性。然后介绍了MCP、A2A、ANP三种协议的设计理念差异,以及HelloAgents的通信协议架构设计。最后给了一个快速体验,让大家先跑起来感受一下。
这一节的核心收获是:协议不是技术细节,而是Agent生态的基础设施。 没有标准协议,每个Agent都是孤岛;有了协议,Agent才能连接工具、连接彼此、连接整个网络。
10.2 MCP篇:Agent怎么用工具
这一节是整个章节内容最多的,从MCP的概念讲起,到客户端使用、传输方式(stdio/SSE)、在智能体中使用MCP工具,最后聊了MCP的社区生态。
MCP的核心思想是"工具即插即用"------把工具封装成标准接口,任何支持MCP的Agent都能直接调用,不需要为每个工具写定制化的适配代码。这跟USB接口的思路是一样的:有了标准接口,鼠标、键盘、U盘随便插。
10.3 A2A篇:Agent怎么跟Agent说话
这一节讲Agent之间的协作协议。从A2A的设计动机讲起------为什么MCP不够用、Agent之间协作需要什么------到A2A协议的实战、HelloAgents的A2A工具封装,最后讲了怎么在智能体中把A2A跟大模型的Function Calling结合起来。
A2A的核心思想是"任务委托"------Agent之间不是简单的函数调用,而是通过Task机制来委托任务、跟踪状态、获取结果。这种设计更符合Agent的自主性特点,每个Agent都是独立的个体,通过标准化的任务协议来协作。
10.4 ANP篇:Agent多了怎么管
这一节讲Agent网络的服务发现和治理。从ANP的协议目标讲起------当Agent数量从个位数涨到几十上百个,会遇到什么问题------到ANP服务发现的实战,最后用一个三协议合一的智能研究助手案例,把MCP、A2A、ANP串起来展示了完整的多Agent系统。
ANP的核心思想是"能力驱动的服务发现"------你不需要知道Agent叫什么、在哪,只需要说"我需要什么能力",ANP就帮你找到合适的Agent。这是Agent规模化的关键基础设施。
10.5 自定义MCP服务器篇:怎么把自己的工具接入Agent世界
这一节是动手篇,从创建第一个MCP服务器讲起,到MCP服务器的上传和发布。解决的是"我有自己的工具/API/数据库,怎么让Agent能用"的问题。
这一节的核心收获是:写MCP服务器门槛很低,但要写好需要注意很多细节------工具描述怎么写、参数怎么校验、异常怎么处理、发布怎么选方式。
10.6 本章总结
就是你现在看的这篇。
整个章节的逻辑线很清晰:为什么需要协议 → 三个协议分别是什么 → 怎么用 → 怎么自己造 → 总结回顾。从认知到实践,从使用到创造,层层递进。
二、三协议核心要点速查
为了方便以后查阅,我把三个协议的核心要点整理成了速查卡片。
MCP(Model Context Protocol)
| 维度 | 要点 |
|---|---|
| 解决什么问题 | Agent怎么标准化地接入和使用外部工具 |
| 核心思想 | 工具即插即用,类似USB接口 |
| 三种能力 | Tools(工具调用)、Resources(资源读取)、Prompts(提示模板) |
| 两种传输 | stdio(本地子进程,简单安全)、SSE(HTTP远程,支持多客户端) |
| 核心概念 | Server(提供工具)、Client(调用工具)、Tool(工具定义+实现) |
| 适用场景 | Agent需要调用外部API、数据库、文件、第三方服务 |
| 成熟度 | 最高,Anthropic主导,生态最丰富 |
| 一句话记住 | MCP = Agent的USB接口 |
A2A(Agent-to-Agent Protocol)
| 维度 | 要点 |
|---|---|
| 解决什么问题 | Agent之间怎么标准化地协作和委托任务 |
| 核心思想 | 任务委托,Agent之间通过Task机制协作 |
| 核心概念 | Agent Card(Agent名片)、Task(任务)、Artifact(产物)、Status(状态) |
| 任务生命周期 | submitted → working → completed/failed |
| 通信模式 | 同步(send_message_and_wait)、异步(create_task + 轮询) |
| 适用场景 | 多Agent协作、任务分解、专业化分工 |
| 成熟度 | 中等,Google主导,快速发展中 |
| 一句话记住 | A2A = Agent之间的"工作交接单" |
ANP(Agent Network Protocol)
| 维度 | 要点 |
|---|---|
| 解决什么问题 | 大规模Agent网络中,怎么发现和管理Agent |
| 核心思想 | 能力驱动的服务发现,按能力找Agent而不是按名字 |
| 核心概念 | Registry(注册中心)、Agent Profile(Agent档案)、Capability(能力)、Router(路由器) |
| 核心功能 | 服务注册、服务发现、健康检查、自动摘除、负载均衡 |
| 负载均衡策略 | 轮询、随机、最少连接、最快响应 |
| 适用场景 | Agent数量多、需要动态扩缩容、需要统一治理 |
| 成熟度 | 较早,HelloAgents生态内完善 |
| 一句话记住 | ANP = Agent世界的"黄页+负载均衡器" |
三、三个协议的关系和组合策略
三个协议不是竞争关系,而是分层互补的。我画了一个图来理解:
┌─────────────────────────────────────────┐
│ ANP(网络层) │
│ 服务发现 │ 健康检查 │ 负载均衡 │
│ "我需要一个能查机票的Agent,在哪?" │
├─────────────────────────────────────────┤
│ A2A(会话层) │
│ 任务委托 │ 状态跟踪 │ 结果返回 │
│ "帮我查一下到北京的机票" → 任务 → 结果 │
├─────────────────────────────────────────┤
│ MCP(应用层) │
│ 工具调用 │ 资源读取 │ 提示模板 │
│ "调用search_flights工具,参数..." │
└─────────────────────────────────────────┘
在实际项目中,三个协议经常组合使用:
场景1:单Agent + 外部工具
- 只需要MCP
- 例子:一个写作Agent,通过MCP调用搜索引擎和文件读写工具
场景2:少量Agent协作(3-5个)
- MCP + A2A
- 例子:研究助手系统,主控Agent通过A2A委托搜索Agent和写作Agent,搜索Agent通过MCP调用搜索引擎
- 地址可以硬编码,不需要ANP
场景3:大规模Agent网络(10个以上)
- MCP + A2A + ANP
- 例子:企业级Agent平台,几十个专业Agent,通过ANP自动发现和负载均衡,通过A2A协作,通过MCP接入内部系统
场景4:纯工具接入
- 只需要MCP
- 例子:把公司内部的数据库包装成MCP服务器,让各种Agent都能查
我的建议是:从简单开始,按需叠加。 不要一开始就把三个协议都用上,那样复杂度太高。先从MCP开始,需要多Agent协作了再加A2A,Agent数量多到管不过来了再加ANP。
四、实际项目中的选型建议
经常有人问我:"我要做一个Agent项目,该用什么协议?"我的回答永远是:"看你的场景。"这里给一个更具体的选型指南:
如果你是个人开发者,做小项目:
- 优先用MCP,生态最成熟,工具最多
- 多Agent协作可以先用简单的HTTP API,不一定非要A2A
- ANP基本用不上
如果你在做企业内部的Agent系统:
- MCP必须有,用来接入内部系统
- A2A推荐用,标准化Agent间协作,避免每个团队各搞一套
- ANP看规模,Agent超过10个再考虑
如果你在做Agent平台/产品:
- 三个协议都要考虑,平台需要标准化和可扩展
- MCP用来接入第三方工具
- A2A用来支持用户自定义Agent协作
- ANP用来做平台内的服务治理
如果你在做研究/原型:
- 怎么快怎么来,不用纠结协议标准
- 验证想法最重要,跑通了再考虑标准化
还有一个很重要的点:不要为了用协议而用协议。 协议是手段不是目的,如果你的项目用简单的HTTP API就能搞定,那就没必要强行上MCP/A2A。协议的价值在于标准化和生态,当你需要跟其他系统对接、需要规模化的时候,协议的价值才会体现出来。
五、我的学习心得和踩坑总结
写完这18篇文章,有几个感受特别深:
1. 协议的本质是"约定",不是"技术"
学协议最容易陷入的误区是纠结具体的字段和格式,但其实协议最核心的是"约定"------大家都同意这么做,才能互联互通。理解了为什么要这么约定,具体的字段和格式查文档就行。
比如MCP为什么用JSON-RPC?因为它简单、语言无关、工具链成熟。A2A为什么用Task而不是直接函数调用?因为Agent是自主的,需要异步和状态跟踪。理解了这些"为什么",协议就不再是死记硬背的条条框框。
2. 动手做一遍胜过看十遍文档
我学MCP的时候,先看了两天文档,感觉都懂了,但一动手写代码就发现各种细节不清楚------参数怎么传、错误怎么处理、stdout为什么不能用。后来直接写了一个MCP服务器,跑通了之后,很多概念一下子就清晰了。
学协议一定要动手。哪怕只是写一个Hello World级别的例子,也比纯看文档强。
3. 工具描述写得好不好,直接决定Agent能不能用好你的工具
这是我做MCP服务器最深的感受。同样的工具,描述写得笼统,Agent就经常调用错误;描述写得具体、参数schema写得完整,Agent的调用准确率能提升一大截。
以后写工具定义的时候,我会花跟写业务逻辑差不多的时间来打磨描述和schema。这不是文档工作,是产品设计。
4. 协议还在快速变化,要关注最新动态
MCP、A2A这些协议都还在早期,规范更新很快。我写文章的时候查的一些API,过了几周可能就变了。所以一定要关注官方仓库和社区动态,不要死守旧版本的用法。
5. 踩过的坑都是财富
这18篇文章里写了几十个踩坑记录,stdout污染协议、注册地址填localhost、心跳间隔跟过期时间不匹配、工具描述太笼统、返回结果太大撑爆上下文......每个坑都花了我不少时间排查,但现在回头看,正是这些坑让我对协议的理解更深入了。
所以如果你在学的过程中也踩了坑,别沮丧,那是你在进步的证明。
六、对Agent通信协议未来的思考
最后聊一点更远的。Agent通信协议这个领域,我觉得未来会有几个趋势:
1. 协议会逐步收敛,形成事实标准
现在MCP在工具接入领域已经有了事实标准的势头,A2A在Agent协作领域也在快速推进。未来可能会形成"MCP管工具、A2A管协作、ANP管治理"的三层标准架构,就像互联网的TCP/IP协议栈一样。
2. 协议会跟大模型深度融合
现在大模型调用工具还是靠Function Calling,未来可能会有更原生的协议支持------大模型内置MCP/A2A客户端,不需要额外的中间层。协议的使用门槛会进一步降低。
3. 安全和治理会越来越重要
当Agent网络规模变大,安全问题会越来越突出------身份认证、权限控制、数据隐私、恶意Agent防护。协议会在这些方面不断加强。
4. 跨平台、跨语言的互操作性会越来越好
现在MCP已经有Python、TypeScript、Go等多种语言的实现,A2A也在快速跟进。未来任何语言写的Agent都能无缝协作,真正实现"Agent的互联网"。
写在最后
第十章到这里就全部结束了。从"为什么需要通信协议"到"三协议合一实战",从"用别人的MCP工具"到"自己写MCP服务器并发布",我们走完了Agent通信协议的完整学习路径。
但学习 never ends。协议在演进,生态在发展,今天学到的知识可能过几个月就需要更新。保持好奇心,多动手实践,是跟上这个领域的最好方式。
下一章我们会进入一个全新的领域------Agentic-RL。如果说通信协议解决的是"Agent怎么跟外界交互"的问题,那Agentic-RL解决的就是"Agent怎么变得更聪明"的问题。我们会从强化学习的基础讲起,到SFT微调、GRPO训练,再到完整的训练流程实战。这是Agent技术中最硬核、也最有魅力的部分。
感谢你跟着我走完了这一章。如果你在学习过程中有什么疑问、想法或者踩过的坑,欢迎在评论区交流。我们下一章见。
下一章预告:Agentic-RL。从"从LLM训练到Agentic RL"开始,我们会深入Agent的训练技术,看看怎么让Agent通过强化学习变得更聪明、更擅长完成复杂任务。