<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>协议栈 on Kalend's Blog</title><link>https://blog.kalend.top/tags/%E5%8D%8F%E8%AE%AE%E6%A0%88/</link><description>Recent content in 协议栈 on Kalend's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Thu, 02 Jul 2026 08:00:00 +0800</lastBuildDate><atom:link href="https://blog.kalend.top/tags/%E5%8D%8F%E8%AE%AE%E6%A0%88/index.xml" rel="self" type="application/rss+xml"/><item><title>MCP + A2A：给Agent装手还是装同事？2026协议栈三层架构拆透</title><link>https://blog.kalend.top/2026/07/02/2026-07-02-mcp-a2a-acp-protocol-stack.html/</link><pubDate>Thu, 02 Jul 2026 08:00:00 +0800</pubDate><guid>https://blog.kalend.top/2026/07/02/2026-07-02-mcp-a2a-acp-protocol-stack.html/</guid><description>
 &lt;blockquote&gt;
 &lt;p&gt;作者：varkm&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;Salesforce的技术架构师在2026年3月的Trailblazer大会上展示了一张架构图——他们的Agentforce平台同时跑着MCP和A2A两个协议。客服Agent通过A2A调用外部的技术支持Agent，技术支持Agent再通过MCP连接内部知识库。&lt;/p&gt;
&lt;p&gt;这张图揭示了一个正在发生的事实：&lt;strong&gt;单Agent时代结束了，协议栈时代开始了。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;先给结论：MCP、A2A、ACP不是竞争关系，而是解决不同维度问题的三层协议栈。垂直方向，MCP负责Agent到工具的连接；水平方向，A2A负责Agent到Agent的协作；基础设施层，ACP负责Agent的注册、发现和生命周期管理。三层叠加，构成企业级多Agent系统的完整通信骨架。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="为什么需要协议栈单agent时代的终结"&gt;为什么需要协议栈？单Agent时代的终结
&lt;/h2&gt;&lt;p&gt;过去一年，几乎所有AI框架都在做同一件事：给Agent接MCP。接了数据库、接了文件系统、接了GitHub、接了Slack。一个Agent能力越来越强，能调用的工具越来越多。&lt;/p&gt;
&lt;p&gt;但企业里遇到的真实问题不是&amp;quot;一个Agent能调多少工具&amp;quot;，而是&amp;quot;五个不同平台的Agent怎么协作&amp;quot;。&lt;/p&gt;
&lt;p&gt;举个例子：客服Agent跑在Salesforce上，技术支持Agent跑在ServiceNow上，工单系统在Jira。用户提了一个技术问题，客服Agent需要判断这个问题该转给谁，然后跟技术支持Agent交接上下文，技术支持Agent解决完还要回写工单。&lt;/p&gt;
&lt;p&gt;这个流程里，MCP完全帮不上忙。MCP解决的是&amp;quot;一个Agent怎么调用外部工具&amp;quot;，不解决&amp;quot;Agent之间怎么对话&amp;quot;。就像USB接口标准化了设备连接，但两台电脑之间传输文件还需要网络协议。&lt;/p&gt;
&lt;p&gt;这就是A2A和ACP诞生的原因。三个协议各管一层：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;协议&lt;/th&gt;
					&lt;th&gt;解决什么&lt;/th&gt;
					&lt;th&gt;方向&lt;/th&gt;
					&lt;th&gt;类比&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;MCP&lt;/td&gt;
					&lt;td&gt;Agent调用工具和数据&lt;/td&gt;
					&lt;td&gt;垂直（Agent→Tool）&lt;/td&gt;
					&lt;td&gt;USB接口&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;A2A&lt;/td&gt;
					&lt;td&gt;Agent之间通信协作&lt;/td&gt;
					&lt;td&gt;水平（Agent→Agent）&lt;/td&gt;
					&lt;td&gt;网络协议&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;ACP&lt;/td&gt;
					&lt;td&gt;Agent注册、发现、治理&lt;/td&gt;
					&lt;td&gt;基础设施&lt;/td&gt;
					&lt;td&gt;DNS+目录服务&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="mcp层垂直的手agenttool"&gt;MCP层：垂直的「手」（Agent→Tool）
&lt;/h2&gt;&lt;p&gt;MCP（Model Context Protocol）是Anthropic在2024年底推出的开放协议，目标是标准化大模型与外部工具、数据源的连接方式。&lt;/p&gt;
&lt;p&gt;核心数据：截至2026年7月，MCP的TypeScript SDK在npm上月下载量达到1.55亿次，官方servers仓库在GitHub上获得了8.8万颗星。生态数据比半年前翻了一倍。&lt;/p&gt;
&lt;p&gt;MCP的核心设计很简单：一个MCP Server暴露一组工具（Tools）、资源（Resources）和提示（Prompts），MCP Client（通常是AI框架）通过标准化的JSON-RPC协议调用它们。任何支持MCP的框架都能直接接入任何MCP Server，不需要为每个工具写定制集成。&lt;/p&gt;
&lt;p&gt;主流框架已经全面支持：Claude、Cursor、Windsurf、Cline、Zed、以及各大云厂商的Agent平台。你写一个MCP Server，理论上所有这些平台的用户都能直接用。&lt;/p&gt;
&lt;p&gt;MCP的局限也很明确：&lt;strong&gt;它只解决&amp;quot;Agent能用什么&amp;quot;，不解决&amp;quot;Agent能找谁&amp;quot;。&lt;/strong&gt; 一个MCP Server就是一个工具箱，但工具箱之间不能互相调用。如果你的客服Agent需要跟另一个平台的技术支持Agent协作，MCP给不了方案。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="a2a层水平的同事agentagent"&gt;A2A层：水平的「同事」（Agent→Agent）
&lt;/h2&gt;&lt;p&gt;A2A（Agent2Agent Protocol）是Google在2025年4月发布的开放协议，目标是解决跨平台Agent之间的通信和协作问题。2026年3月12日发布v1.0正式版，5月28日发布了v1.0.1维护版本，项目已捐赠给Linux Foundation托管。&lt;/p&gt;
&lt;p&gt;核心数据：GitHub上获得24,574颗星，超过150家组织表态支持，包括Google、Microsoft、AWS、Salesforce、SAP、ServiceNow、Atlassian、Box、Cohere等。&lt;/p&gt;
&lt;p&gt;A2A的三个核心概念：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AgentCard&lt;/strong&gt;——每个Agent发布一个能力声明文件（类似OpenAPI Spec），描述自己能做什么、接收什么输入、返回什么输出。其他Agent通过读取AgentCard就知道该不该找你协作。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Task生命周期&lt;/strong&gt;——A2A不是简单的远程函数调用，而是定义了完整的任务状态机：submitted → working → input-required → completed/failed/canceled。长任务可以中途要求补充信息，可以流式返回进度。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;流式通信&lt;/strong&gt;——基于HTTP + SSE（Server-Sent Events），支持长连接和流式输出。适合需要长时间运行的任务，比如&amp;quot;分析这份100页的财报&amp;quot;。&lt;/p&gt;
&lt;p&gt;生产案例已经落地。Salesforce的Agentforce通过A2A实现了跨生态Agent协作：一个跑在Salesforce上的销售Agent可以直接调用跑在ServiceNow上的IT运维Agent，上下文和任务状态在两个平台之间无缝传递。ServiceNow在Zurich版本（2026年Patch 4）中也集成了A2A支持，Now Assist的Agent可以跨平台响应外部请求。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="acp层生命周期管理agent注册发现治理"&gt;ACP层：生命周期管理（Agent注册/发现/治理）
&lt;/h2&gt;&lt;p&gt;ACP（Agent Communication Protocol）由IBM发起，i-am-bee组织维护，目标是解决Agent生态的&amp;quot;基础设施&amp;quot;问题：Agent在哪里注册、怎么被发现、生命周期怎么管理。&lt;/p&gt;
&lt;p&gt;GitHub仓库i-am-bee/acp目前有1,014颗星，已经发布到v1.0.3版本。相比MCP和A2A的热度，ACP关注者少得多，但它解决的问题是绕不开的。&lt;/p&gt;
&lt;p&gt;想象一下：企业内部部署了50个Agent，分别跑在不同平台上。现在要找一个&amp;quot;能处理中文合同审查&amp;quot;的Agent——你怎么找？没有统一的注册中心，只能靠人去问、靠文档去翻。&lt;/p&gt;
&lt;p&gt;ACP的设计思路是建立一个Agent注册表（Registry），每个Agent在部署时向注册中心注册自己的元信息：名称、能力描述、端点地址、认证方式、SLA等级。其他Agent或应用通过查询注册表来发现和定位目标Agent。&lt;/p&gt;
&lt;p&gt;ACP还定义了Agent的生命周期管理：注册、上线、下线、版本更新。当Agent的能力发生变化时，注册表自动更新，确保调用方拿到的永远是最新信息。&lt;/p&gt;
&lt;p&gt;ACP和A2A的关系是互补而非竞争。A2A定义了Agent之间怎么说话，ACP定义了怎么找到对方、怎么管理对方的生命周期。就像HTTP协议和DNS的关系——HTTP负责传输，DNS负责寻址。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="三层协议栈如何协同工作"&gt;三层协议栈如何协同工作
&lt;/h2&gt;&lt;p&gt;把三层叠起来，一个完整的多Agent协作流程是这样的：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;用户请求: &amp;#34;帮我查一下客户A上个月的订单异常原因&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;┌─────────────────────────────────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ 客服Agent (Salesforce Agentforce) │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ 1. ACP查询: 找一个能做&amp;#34;订单分析&amp;#34;的Agent │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ 2. ACP返回: 技术支持Agent @ ServiceNow │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ 3. A2A调用: 发送Task到技术支持Agent │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└──────────────────┬──────────────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ A2A (Agent→Agent)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;┌─────────────────────────────────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ 技术支持Agent (ServiceNow Now Assist) │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ 1. 接收A2A Task, 状态=working │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ 2. MCP调用: 连接ERP数据库查询订单记录 │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ 3. MCP调用: 连接日志系统拉取异常日志 │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ 4. 分析完成, A2A返回结果 │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└─────────────────────────────────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;整个流程中，ACP负责&amp;quot;找到人&amp;quot;，A2A负责&amp;quot;交代任务&amp;quot;，MCP负责&amp;quot;使用工具&amp;quot;。三层各司其职，没有重叠。&lt;/p&gt;
&lt;p&gt;MCP和A2A正在走向融合。2026年以来，两个社区已经组建了联合工作组（Joint Working Groups），讨论如何在协议层面实现更好的互操作。一个可能的方向是：A2A的AgentCard中直接嵌入MCP工具声明，让Agent在发现彼此时就能看到对方提供了哪些MCP工具。两层架构（MCP + A2A）正在快速成为事实标准，ACP作为可选的治理层，在企业级场景中逐步渗透。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="开发者该怎么做"&gt;开发者该怎么做？
&lt;/h2&gt;&lt;p&gt;三层协议的成熟度差异很大，投入优先级也不同：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;协议&lt;/th&gt;
					&lt;th&gt;成熟度&lt;/th&gt;
					&lt;th&gt;生态规模&lt;/th&gt;
					&lt;th&gt;开发者优先级&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;MCP&lt;/td&gt;
					&lt;td&gt;生产就绪&lt;/td&gt;
					&lt;td&gt;1.55亿月下载 / 8.8万星&lt;/td&gt;
					&lt;td&gt;最高——现在就该用&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;A2A&lt;/td&gt;
					&lt;td&gt;快速成长&lt;/td&gt;
					&lt;td&gt;2.5万星 / v1.0.1 / 150+组织&lt;/td&gt;
					&lt;td&gt;关注——多Agent场景必上&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;ACP&lt;/td&gt;
					&lt;td&gt;早期阶段&lt;/td&gt;
					&lt;td&gt;1千星 / v1.0.3&lt;/td&gt;
					&lt;td&gt;观望——企业级治理场景再考虑&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;场景一：单Agent + 工具调用。&lt;/strong&gt; 只需要MCP。你有一个Agent，需要连接数据库、文件系统、外部API——写几个MCP Server，用任何支持MCP的框架直接接入。不需要A2A，更不需要ACP。这是目前90%的场景。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;场景二：多Agent跨平台协作。&lt;/strong&gt; MCP + A2A。你有多个Agent跑在不同平台上，需要互相调用——用MCP连接各自的工具，用A2A实现Agent间通信。这是企业级场景的主流方向，Salesforce和ServiceNow已经在这么做了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;场景三：大规模Agent治理。&lt;/strong&gt; MCP + A2A + ACP。你有几十上百个Agent需要统一管理——加上ACP做注册发现和生命周期管理。目前只有极少数大型企业在探索这个阶段。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;避坑提醒&lt;/strong&gt;：不要过度设计。如果你的场景是&amp;quot;一个Agent调用几个工具&amp;quot;，上A2A是杀鸡用牛刀。A2A的Task生命周期、流式通信、AgentCard机制都增加了复杂度，单Agent场景完全不需要。协议栈的每一层都有成本，只在你真正遇到对应问题时才引入。&lt;/p&gt;
&lt;p&gt;三层协议栈不是噱头，是企业级多Agent系统的必经之路。但路要一步一步走，从MCP开始，在真实需求驱动下逐层叠加。&lt;/p&gt;</description></item></channel></rss>