5.1 协议大比拼——MCP vs OpenAPI vs Function Calling vs A2A
小周理解了 MCP 的内部工作原理。周一的技术评审会上,项目经理问了一个关键问题:「MCP 和 OpenAPI 有什么区别?和 Function Calling 呢?Google 的 A2A 又是什么?我们为什么不直接用现有的方案?」
小周需要给团队一个清晰的回答。
全景对比
MCP
AI 的 USB-C——完整的工具集成协议。有状态、双向、动态发现、内置授权。连接 AI 和外部系统。
OpenAPI
API 描述规范——定义 REST API 的文档标准。无状态、单向、静态定义。描述 API 而非连接 AI。
Function Calling
LLM 的工具调用格式——定义 LLM 如何调用工具的参数格式。无状态、单次、绑定特定 LLM。
A2A
Agent 间通信协议——Google 发布的 Agent-to-Agent 协议。连接 Agent 和 Agent,而非 Agent 和工具。
协议详细对比
MCP vs OpenAPI
MCP vs Function Calling
MCP vs A2A
| 维度 | MCP | OpenAPI |
|---|---|---|
| 定位 | AI 与外部系统的连接协议 | 通用 API 描述规范 |
| 通信 | 有状态、双向 | 无状态、请求-响应 |
| 消息 | JSON-RPC 2.0 | HTTP REST |
| 能力协商 | 有(初始化时协商) | 无(静态定义) |
| 生命周期 | 初始化→通信→关闭 | 无(每次请求独立) |
| 授权 | 内置 OAuth 2.1 | 需外部实现 |
| 通知 | 内置 | 需 WebSocket/SSE |
| Server→Client | 支持(Sampling 等) | 不支持 |
核心区别:MCP 是有状态的双向协议,OpenAPI 是无状态的单向描述。
互补关系:MCP Server 内部可以调用 OpenAPI 定义的 REST API。两者不冲突。
| 维度 | MCP | Function Calling |
|---|---|---|
| 类型 | 完整协议 | API 参数格式 |
| 标准化 | 开放标准(Linux Foundation) | 各 LLM 厂商私有 |
| 工具发现 | 动态(tools/list) | 静态(硬编码在请求中) |
| 跨模型 | 任何支持 MCP 的模型 | OpenAI/Claude/Gemini 各自格式不同 |
| 双向通信 | 有 | 无 |
| 授权 | 内置 OAuth 2.1 | API Key |
核心区别:Function Calling 解决「LLM 如何调用工具」,MCP 解决「工具如何被任何 LLM 发现和使用」。
演进关系:Function Calling 是单次调用的参数格式,MCP 是完整的工具集成协议。
| 维度 | MCP | A2A |
|---|---|---|
| 连接对象 | Agent ↔ 工具/数据 | Agent ↔ Agent |
| 交互风格 | 结构化输入/输出 | 对话式、有状态、多轮协作 |
| 通信模式 | Client 调用 Server 的工具 | 双方平等协商 |
| 类比 | 函数调用 | 对等协作 |
A2A 核心概念
| 概念 | 说明 |
|---|---|
| Agent Card | Agent 的名片——描述身份、能力、端点(通过 /.well-known/agent-card.json 发现) |
| Task | 有状态的工作单元,生命周期:SUBMITTED → WORKING → COMPLETED/FAILED |
| Message | Agent 间的通信消息 |
| Skill | Agent 暴露的技能 |
MCP 和 A2A 互补
A2A —— Agent ↔ AgentGoogle A2A
MCP —— Agent ↔ 工具Linux Foundation
框架 —— 构建 AgentADK, LangGraph, CrewAI
模型 —— 基础推理Claude, GPT, Gemini
实际场景:
- 客户通过 A2A 与「项目经理 Agent」通信
- 项目经理通过 A2A 与「开发 Agent」多轮协作
- 开发 Agent 通过 MCP 调用工具:
read-file、run-tests、git-commit
选择指南
| 场景 | 推荐 | 原因 |
|---|---|---|
| 简单的 API 调用 | Function Calling | 足够用,无需完整协议 |
| 需要工具动态发现 | MCP | tools/list + 变更通知 |
| 多模型兼容 | MCP | 一次实现,所有模型可用 |
| Agent 间协作 | A2A | Agent 对等通信 |
| Agent 使用工具 | MCP | Agent-工具的标准协议 |
| 两者兼有 | MCP + A2A | 内部 MCP 调工具,外部 A2A 协作 |
| 已有 OpenAPI 的 API | MCP 封装 | MCP Server 封装 OpenAPI API |
本节核心要点
- MCP 是完整的工具集成协议,OpenAPI 是 API 描述规范,Function Calling 是 LLM 的工具调用格式
- MCP 和 OpenAPI 互补——MCP Server 内部可以调用 OpenAPI API
- MCP 解决 Agent↔工具,A2A 解决 Agent↔Agent——两者互补而非竞争
- 选择依据:简单用 Function Calling,动态/跨模型用 MCP,Agent 协作用 A2A
思考题:如果你要设计一个「AI 助手团队」,包含客服 Agent、技术 Agent 和管理 Agent,你会如何组合使用 MCP 和 A2A?
参考思路
客服 Agent 和技术 Agent 之间用 A2A 协作(多轮对话、任务分配)。每个 Agent 内部用 MCP 调用工具:客服 Agent 通过 MCP 查询知识库,技术 Agent 通过 MCP 读写代码和运行测试,管理 Agent 通过 MCP 访问项目管理工具。