A2A 和 MCP 有什么区别?一个连接 Agent,一个连接工具

A2A 和 MCP 有什么区别?一个连接 Agent,一个连接工具

#MCP 火了以后,又有一个协议开始被频繁提到:A2A。

很多人第一反应是:怎么又来一个协议?MCP 不是已经解决 AI 连接外部系统了吗?A2A 是不是要替代 MCP?以后到底该学哪个?

这类问题很正常。AI 领域现在概念更新快,协议、框架、Agent、工具平台一堆。如果不先弄清每个东西解决什么问题,很容易被名词带着走。

先说结论:

MCP 主要解决 Agent 或 AI 应用怎么连接工具和上下文;A2A 主要解决 Agent 和 Agent 之间怎么沟通协作。

一个是 Agent-to-Tool,一个是 Agent-to-Agent。

它们不是替代关系,更像两条不同方向的连接线。

如果一定要用一个工程视角来判断,可以看“对面是否需要承担任务责任”。对面只是提供数据、执行函数、返回资源,那更像 MCP。对面需要理解任务目标、自己拆步骤、处理中间状态、最后交付一个带判断的结果,那更像 A2A。

这个区分很重要。很多团队刚开始做多 Agent 系统时,会把所有东西都包装成 Agent:数据库 Agent、文件 Agent、搜索 Agent、邮件 Agent。听起来统一,实际可能只是把工具套了一层人格化外壳。工具不需要假装成同事。能直接调用工具时,直接调用就好。

先复习一下 MCP 解决什么

MCP,全称 Model Context Protocol。它把外部工具、资源、提示词等能力,用统一协议暴露给 AI 客户端。

比如一个 AI IDE 想读文件、搜索代码、查 Git diff、运行测试。它可以连接一个 MCP Server,这个 Server 告诉客户端:我有哪些工具、参数是什么、有哪些资源可以读。

这样 AI 应用就不需要为每个工具写一套私有接入方式。

用一句话说:

MCP 让 AI 应用知道“我能用哪些工具和资源”。

它面向的关系通常是:

AI 客户端 / Agent -> MCP Server -> 工具或资源

比如:

  • Agent 连接文件系统 MCP;
  • Agent 连接数据库 MCP;
  • Agent 连接浏览器 MCP;
  • Agent 连接 Git MCP;
  • Agent 连接企业知识库 MCP。

这里的另一端通常不是另一个 Agent,而是工具、资源或系统能力。

A2A 解决什么

A2A,全称 Agent2Agent。Google 在 2025 年公开介绍它时,强调的是让不同厂商、不同框架构建的 Agent 能够互相通信、交换任务状态、协同完成工作。

它关注的问题不是“Agent 怎么调用一个数据库工具”,而是“一个 Agent 怎么把任务交给另一个 Agent,怎么知道对方能做什么,怎么跟踪任务进度”。

比如一个企业里有多个 Agent:

  • 销售 Agent 负责 CRM;
  • 法务 Agent 负责合同审查;
  • 财务 Agent 负责回款和开票;
  • 采购 Agent 负责供应商;
  • 研发 Agent 负责代码和发布。

现在用户让销售 Agent:“帮我推进这个客户的采购合同,看看能不能下周签。”

销售 Agent 自己不懂合同条款,也不能直接处理发票。它可能需要找法务 Agent 看合同风险,找财务 Agent 查账期,找采购 Agent 查供应商资质。

这时候需要的是 Agent 之间协作,而不是单个 Agent 调一个工具。

A2A 的价值就在这里:

它让一个 Agent 能发现另一个 Agent 的能力,并以任务形式沟通。

用公司协作来类比

MCP 像什么?

像你电脑上的工具箱。你可以打开浏览器、查数据库、读文件、跑命令。工具不会自己和你讨论目标,它只是提供能力。

A2A 像什么?

像你找另一个同事协作。你不会对同事说“执行函数 get_contract_risk(contractId)”。你会说:“这份合同帮我看一下风险,重点看付款和违约条款,今天下班前给我结论。”

同事可能会接任务、追问、处理中间步骤、返回结果,也可能拒绝,因为他没有权限或任务不在职责范围。

这就是工具调用和 Agent 协作的差异。

MCP 更偏工具接口。
A2A 更偏任务协作。

关键区别一:通信对象不同

MCP 的通信对象通常是工具服务。

工具服务不一定有自己的目标,也不一定会规划。你让它查数据库,它返回数据。你让它读文件,它返回内容。它不关心你的最终任务是什么。

A2A 的通信对象是 Agent。

Agent 有自己的能力边界、状态、任务处理过程。它可能不只是返回一个值,而是接收一个任务、异步处理、持续更新进度,最后返回结果。

这就像调用 API 和委派任务的区别。

调用 API 时,你关心输入输出。
委派任务时,你还关心对方是谁、能不能做、做到哪了、结果可信不可信。

关键区别二:抽象层级不同

MCP 的抽象层级更接近“工具能力”。

比如:

  • read_file(path)
  • search_docs(query)
  • query_database(sql)
  • create_ticket(title, body)

这些能力通常粒度比较明确。

A2A 的抽象层级更接近“任务能力”。

比如:

  • 审查一份合同;
  • 调研一个客户;
  • 分析一次故障;
  • 生成一份报价建议;
  • 协调一次审批流程。

任务能力往往更长、更模糊、更需要上下文,也更可能异步。

这也是为什么 A2A 不能简单理解成“另一个 Function Calling”。它处理的不是一个函数,而是 Agent 间的任务交互。

任务能力还有一个特点:它通常包含判断责任。比如“审查合同”不是返回某个字段,而是给出风险等级、依据和建议;“分析故障”不是返回一条日志,而是判断最可能的原因和下一步处置建议。这种输出很难用一个稳定函数签名完全表达。

因此 A2A 更像任务协议,而不是工具协议。它需要描述的不只是入参和出参,还包括任务状态、能力声明、输入材料、期望交付物、失败原因、是否需要补充信息。少了这些,所谓 Agent 协作最后还是会退化成一堆函数调用。

关键区别三:状态复杂度不同

MCP 工具调用多数是短周期的。请求进去,结果出来。即使有长任务,也通常可以封装成工具返回任务 ID。

A2A 天然更重状态。

一个 Agent 把任务交给另一个 Agent 后,可能需要:

  • 确认对方是否接受;
  • 传递上下文材料;
  • 获取中间进度;
  • 处理对方追问;
  • 接收结果;
  • 判断结果是否满足要求;
  • 必要时再委派给别的 Agent。

这更接近企业系统里的工作流协作,而不是单次接口调用。

一个完整例子:销售合同推进

假设用户对销售 Agent 说:

“帮我看一下 A 客户这份合同能不能本周签掉,风险和卡点列出来。”

销售 Agent 可能做几件事。

它通过 MCP 连接 CRM 工具,查客户信息。
它通过 MCP 连接文档系统,读取合同草稿。
它通过 MCP 连接邮件系统,查看最近沟通记录。

这些都是 Agent 调工具,适合 MCP。

但当它需要法务判断合同时,它可能通过 A2A 找法务 Agent:

“请审查这份合同,重点关注付款条款、违约责任、数据合规风险,返回风险等级和修改建议。”

法务 Agent 接任务,自己可能再通过 MCP 查法律条款库、历史合同、公司模板,最后返回审查结果。

销售 Agent 拿到结果后,再找财务 Agent:

“请根据客户历史回款和账期政策,判断这个付款条件能否接受。”

这里就很清楚了:

MCP 用于 Agent 连接工具。
A2A 用于 Agent 委派 Agent。

A2A 会不会替代 MCP?

不会,至少从问题定位上不应该。

如果一个 Agent 需要查数据库,它没必要找“数据库 Agent”绕一圈,直接通过 MCP 或内部工具查就行。

如果一个 Agent 需要另一个专业 Agent 的判断、处理和责任边界,那 A2A 才有意义。

强行用 A2A 替代 MCP,会把简单工具调用变成复杂协作。
强行用 MCP 替代 A2A,又会把专业 Agent 降级成一堆函数,丢掉任务状态和能力边界。

合适的架构应该是两者并存。

一个简单原则是:低层能力用 MCP,高层协作用 A2A。读文件、查数据库、搜知识库、创建工单,这些更适合做成工具。审查合同、制定销售推进方案、排查复杂故障、协调跨部门审批,这些更适合交给专业 Agent。

不要为了“全 Agent 化”把简单工具调用变成组织协作。一个销售 Agent 要查客户基本信息,直接查 CRM 就行;只有当它需要法务判断、财务判断、采购判断时,才值得找对应 Agent。否则每一步都像开会,系统会慢、贵、难调试。

什么时候你需要 MCP

如果你正在做的是:

  • 给 AI 应用接数据库;
  • 给 AI IDE 接文件系统;
  • 给 Agent 接浏览器;
  • 给助手接企业知识库;
  • 让多个客户端复用同一个工具服务;
  • 标准化工具发现和调用。

优先看 MCP。

它解决的是工具接入层。单个团队、单个应用也能用,但在工具复用、跨客户端接入时价值更明显。

什么时候你需要 A2A

如果你正在做的是:

  • 多个 Agent 分工协作;
  • 一个 Agent 需要把任务委派给另一个 Agent;
  • 不同团队或厂商的 Agent 要互操作;
  • 任务是长周期、异步、有状态的;
  • Agent 之间需要能力发现、任务状态、结果交付。

这时才考虑 A2A。

如果你只有一个 Agent,背后调几个工具,暂时不需要 A2A。别为了概念多接一层协议。

真正需要 A2A 的信号通常是组织边界出现了。比如不同团队维护自己的 Agent,能力和权限不一样;不同厂商的 Agent 需要互操作;一个任务会跨多个专业域,并且每个专业域都希望保留自己的处理逻辑和审计记录。这个时候,A2A 才有明显价值。

如果只是一个应用内部拆了几个模块,未必需要协议化。函数、队列、普通服务调用可能已经够了。先把任务边界跑清楚,再决定是否上 A2A。协议解决的是协作边界,不是架构焦虑。

最后总结一下

MCP 和 A2A 都在解决 AI 系统连接问题,但方向不同。

MCP 连接的是工具和资源。它回答:“这个 Agent 能用哪些外部能力?”
A2A 连接的是 Agent。它回答:“这个 Agent 能不能和另一个 Agent 协作完成任务?”

一个偏工具调用,一个偏任务委派。一个像插工具,一个像找同事。

如果你做的是单个 AI 应用接外部系统,先看 MCP。
如果你做的是多个 Agent 协同工作,再看 A2A。
如果你做的是企业级 Agent 平台,最后大概率两者都会用:Agent 之间用 A2A 协作,每个 Agent 再通过 MCP 使用自己的工具。

别急着站队。先看你的系统里到底缺的是工具连接,还是 Agent 协作。