MCP vs A2A vs OpenAPI:2026 年 AI 协议选型决策指南

2024 年 11 月 Anthropic 把 Model Context Protocol 开源出来的时候,社区还把它当成"工具调用标准化"的一次尝试。一年后,OpenAPI Initiative 在 3.2 版本里把 HTTP-over-MCP 列进了兼容矩阵,Google 在 2026 年初把 A2A 推到了 Apache 顶级项目。三条协议在 GitHub 上的累计星数加到一起已经超过 5.8 万,issue 区里最常出现的提问却始终只有一句:这三条协议到底解决的是不是一个问题?

不是。它们解决的是同一个 Agent 系统里三个相邻、但不同的子问题。

核心问题:工具暴露 vs 代理通信 vs 服务契约

  • MCP(Model Context Protocol) 解决的是「模型怎么找到并调用一个外部工具」。它定义 Client / Server 的握手、tools/listtools/call、resources、prompts 四类原语,外加 stdio 与 streamable-HTTP 两种传输。
  • A2A(Agent-to-Agent) 解决的是「两个独立的 Agent 实例怎么互相对话」。它定义 Agent Card(能力清单)、tasks/sendmessage/send 等任务/消息原语,运行在 HTTP + JSON-RPC 之上,强调跨厂商、跨语言的状态保持。
  • OpenAPI 解决的是「人类和机器怎么用同一份契约描述一个 HTTP API」。它从 REST 描述语言演化而来,3.0 之后专注 OAS,3.2 把 webhook 与 streaming response 的描述补齐,跟 MCP 的工具语义没有直接绑定。

把它们的「最小工作单元」摆在一起就能看出分界:MCP 的最小单元是「一次 tools/call + JSON Schema 入参」,A2A 的最小单元是「一张 Agent Card + 一次 tasks/send 触发 + 流式事件」,OpenAPI 的最小单元是「一份 YAML / JSON 描述文件 + 一个 path / operation」。

mermaid diagram

技术解析:协议在握手、能力清单、状态保持上的差异

握手阶段三条协议走的是完全不同的路径。MCP 在 2025-06-18 规范里规定 Client 必须在 initialize 时声明协议版本与客户端能力(rootssamplingexperimental),Server 必须在 initialize result 返回 serverInfoprotocolVersion、服务端能力,再通过 notifications/initialized 完成三次握手;A2A 则是 HTTP GET / .well-known/agent.json 拉 Agent Card,再 POST /tasks(或 /message/send)触发;OpenAPI 没有运行时握手,规范文件由消费者在构建期拉取,运行时直接走 HTTP。

能力清单的颗粒度决定了协议能不能"按需调用"。MCP 的 tools/list 返回的是「JSON Schema 描述的工具签名 + 注解(readOnly / destructive / openWorld)」,调用方在决定 tools/call 时还能订阅 resources/listprompts/list,相当于把工具、数据源、提示模板三类资源在同一个通道上分发。A2A 的 Agent Card 描述的是「技能(skills)、能力(capabilities)、认证方式、输入输出模式」,颗粒度更粗,但覆盖了跨厂商 Agent 之间的发现、鉴权与长任务状态。OpenAPI 在 3.2 之前只描述 HTTP 操作,3.2 把 webhooks 与 streaming response 补齐之后,才能在不靠 MCP 包装的前提下做"工具感"调用,但仍然缺少会话状态。

鉴权与状态保持是 2026 年三条协议最不一致的地方。MCP 自身只规定 401 / 403 等 HTTP 语义,鉴权实现留给传输层(stdio 不需要鉴权,streamable-HTTP 通常带 Bearer / OAuth),并通过 notifications/cancellednotifications/progress 维持长任务状态;A2A 直接借用 OAuth 2.0 + JWT 的"agent identity"思路,Agent Card 里必须声明 securitySchemes,并提供基于 SSE 的事件流保持 task 状态;OpenAPI 把鉴权描述写在 components.securitySchemes,OAuth2、API Key、HTTP Basic、Mutual TLS 都支持,但状态保持完全由后端实现决定,规范本身不强制。

mermaid diagram

关键点

  • MCP 适合"工具暴露":本地工具(CLI、文件系统、IDE 操作)用 stdio 跑,云端工具用 streamable-HTTP,目标是让模型知道工具存在、能调用、能拿回结构化结果
  • A2A 适合"代理对话":多厂商 Agent 之间互派任务、协同长流程、带鉴权与状态,目标是让一个 Agent 能发现并调用另一个 Agent 的能力
  • OpenAPI 适合"已有服务契约":传统 HTTP API 改造为 Agent 可消费的工具时,OpenAPI 是最低成本的入口,3.2 起支持 streaming / webhook。
  • 三条协议不互斥:常见组合是 MCP 暴露工具 → A2A 让多 Agent 互相发现 → OpenAPI 描述后端服务契约 → 由 MCP 服务端内部把 OpenAPI 包装成 tools/list

行业影响

从 GitHub 上的活跃度看,MCP 协议主仓库 modelcontextprotocol/modelcontextprotocol 在 2026-08-12 仍有 8,956 颗星、协议主分支近 24 小时有 commit,Python SDK 同期 24,001 颗星、TypeScript SDK 13,169 颗星——三条官方仓库加到一起近 4.6 万颗星,说明 MCP 已经不是"实验性"协议;A2A 主仓库 google/A2A 在 2026-08-14 累计 25,346 颗星、Apache-2.0 协议,由于发布时间晚但起点高,社区把它定位成"Agent 时代的 HTTP";OpenAPI 走的是另一条路——3.2 版本由 Swagger 维护,已经被 Kubernetes、AWS、Azure 等基础设施默认消费。

实际工程团队在 2026 年的常见做法是:先把 OpenAPI 留给现有后端(不改),用 MCP 把工具暴露给模型等需要跨厂商协作时再上 A2A。三条协议按"成熟度 + 改动成本"分层落地,而不是一次性三选一。

结语

MCP、A2A、OpenAPI 看起来都在做"协议",但它们各自解决的是 Agent 栈里不同层的问题。MCP 解决工具暴露、A2A 解决代理通信、OpenAPI 解决服务契约——三者构成的不是替代关系,而是同一个 Agent 系统里从"工具调用"到"代理协作"再到"服务描述"的三层协议栈。2026 年的选型策略是按"现有后端不动 + MCP 包工具 + A2A 连代理"的顺序分层落地,而不是在三条里挑一条替换另外两条。


参考资料

官方文档

开源项目

行业报道

社区讨论

对比基准


本文由 AI 生成。内容基于公开资料整理,可能存在事实偏差,引用链接请以原始来源为准。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注