Skip to content

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
维度MCPOpenAPI
定位AI 与外部系统的连接协议通用 API 描述规范
通信有状态、双向无状态、请求-响应
消息JSON-RPC 2.0HTTP REST
能力协商有(初始化时协商)无(静态定义)
生命周期初始化→通信→关闭无(每次请求独立)
授权内置 OAuth 2.1需外部实现
通知内置需 WebSocket/SSE
Server→Client支持(Sampling 等)不支持

核心区别:MCP 是有状态的双向协议,OpenAPI 是无状态的单向描述。

互补关系:MCP Server 内部可以调用 OpenAPI 定义的 REST API。两者不冲突。

维度MCPFunction Calling
类型完整协议API 参数格式
标准化开放标准(Linux Foundation)各 LLM 厂商私有
工具发现动态(tools/list静态(硬编码在请求中)
跨模型任何支持 MCP 的模型OpenAI/Claude/Gemini 各自格式不同
双向通信
授权内置 OAuth 2.1API Key

核心区别:Function Calling 解决「LLM 如何调用工具」,MCP 解决「工具如何被任何 LLM 发现和使用」。

演进关系:Function Calling 是单次调用的参数格式,MCP 是完整的工具集成协议。

维度MCPA2A
连接对象Agent ↔ 工具/数据Agent ↔ Agent
交互风格结构化输入/输出对话式、有状态、多轮协作
通信模式Client 调用 Server 的工具双方平等协商
类比函数调用对等协作

A2A 核心概念

概念说明
Agent CardAgent 的名片——描述身份、能力、端点(通过 /.well-known/agent-card.json 发现)
Task有状态的工作单元,生命周期:SUBMITTED → WORKING → COMPLETED/FAILED
MessageAgent 间的通信消息
SkillAgent 暴露的技能

MCP 和 A2A 互补

A2A —— Agent ↔ AgentGoogle A2A
MCP —— Agent ↔ 工具Linux Foundation
框架 —— 构建 AgentADK, LangGraph, CrewAI
模型 —— 基础推理Claude, GPT, Gemini

实际场景

  1. 客户通过 A2A 与「项目经理 Agent」通信
  2. 项目经理通过 A2A 与「开发 Agent」多轮协作
  3. 开发 Agent 通过 MCP 调用工具:read-filerun-testsgit-commit

选择指南

场景推荐原因
简单的 API 调用Function Calling足够用,无需完整协议
需要工具动态发现MCPtools/list + 变更通知
多模型兼容MCP一次实现,所有模型可用
Agent 间协作A2AAgent 对等通信
Agent 使用工具MCPAgent-工具的标准协议
两者兼有MCP + A2A内部 MCP 调工具,外部 A2A 协作
已有 OpenAPI 的 APIMCP 封装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 访问项目管理工具。


← 上一节:部署模式与版本演进 | 目录 | 下一节:设计模式与反模式 →