AI Agent 协议(MCP & A2A)
核心问题
AI Agent 如何与外部世界"对话"? 就像互联网需要 HTTP 协议,AI Agent 也需要标准化的通信协议。本章介绍两个最主流的 Agent 协议:MCP 和 A2A,它们分别解决了 AI 与工具、Agent 与 Agent 之间的通信问题。
0. 什么是协议?
在计算机领域,协议(Protocol) 是一套标准化的规则和约定,让不同的系统、程序能够相互"理解"和"通信"。
0.1 为什么需要协议?
想象一个场景:你给朋友寄快递,需要填写地址。如果每个人写的地址格式都不一样,快递员就没法投递。协议就是规定了"地址怎么写"的标准——省、市、区、街道、门牌号,按这个格式写,谁都能看懂。
计算机也是一样。两个程序要通信,必须约定好:
- 数据格式是什么?(JSON?二进制?)
- 怎么建立连接?(握手流程)
- 出错了怎么办?(错误处理)
0.2 计算机中常见的协议
| 协议 | 作用 | 你每天都在用 |
|---|---|---|
| HTTP | 网页传输协议 | 浏览器打开网页 |
| HTTPS | 加密的 HTTP | 网银、支付页面 |
| TCP/IP | 互联网基础协议 | 所有网络通信 |
| DNS | 域名解析协议 | 把 google.com 变成 IP 地址 |
| SMTP | 邮件发送协议 | 发送邮件 |
| WebSocket | 双向实时通信 | 聊天软件、在线游戏 |
| SSH | 安全远程登录 | 连接服务器 |
| FTP | 文件传输协议 | 上传/下载文件 |
这些协议构成了互联网的基石。没有它们,你无法浏览网页、发送邮件、观看视频。
0.3 协议的价值
协议的核心价值是标准化和互操作性:
- 标准化:大家都按同一套规则办事,减少沟通成本
- 互操作性:不同厂商、不同技术栈的系统可以无缝对接
比如 HTTP 协议,让 Chrome 浏览器可以访问 Nginx 服务器,让 Python 爬虫可以抓取 Java 网站的数据。不需要 Chrome 和 Nginx 互相"认识",只要都遵守 HTTP 协议就行。
0.4 AI Agent 也需要协议
AI Agent 要真正"干活",需要:
- 调用外部工具(查天气、发邮件、操作数据库)
- 与其他 Agent 协作(分工合作完成复杂任务)
这就需要标准化的协议来规定"AI 怎么调用工具"、"Agent 之间怎么对话"。这就是 MCP 和 A2A 的由来。
1. Agent 协议的层次
在深入了解具体协议之前,让我们先看看 Agent 生态中的通信层次:
| 层级 | 协议 | 解决的问题 | 类比 |
|---|---|---|---|
| 1 | Function Call | AI 如何调用本地函数 | 大脑发出指令 |
| 2 | MCP | AI 如何连接外部工具和数据源 | USB-C 接口 |
| 3 | A2A | Agent 之间如何协作通信 | 企业微信 |
逐行解读这张表
第1层(Function Call):这是大模型最基础的能力——通过输出结构化数据(JSON)来触发函数执行。它是"协议"的基础,但本身更像是一种能力而非标准协议。
第2层(MCP):Model Context Protocol,由 Anthropic 于 2024 年 11 月发布。它标准化了 AI 与外部工具、数据源的连接方式,就像 USB-C 统一了各种设备的充电接口。
第3层(A2A):Agent-to-Agent Protocol,由 Google 于 2025 年 4 月发布。它让不同的 Agent 能够相互发现、通信和协作,就像企业微信让同事之间可以发任务、聊天。
本章重点介绍第 2、3 层的两个正式协议:MCP 和 A2A。
2. MCP (Model Context Protocol)
2.1 协议基本信息
| 项目 | 内容 |
|---|---|
| 全称 | Model Context Protocol |
| 发起方 | Anthropic |
| 发布时间 | 2024 年 11 月 25 日 |
| 官方文档 | modelcontextprotocol.io |
| 开源协议 | MIT License |
| GitHub | github.com/modelcontextprotocol |
为什么叫"Context Protocol"?
Context(上下文) 是大模型理解任务的关键。MCP 的核心思想是:让 AI 能够动态获取所需的上下文信息,而不是把所有信息都塞进 Prompt。
比如,AI 需要读取一个文件时,不需要你把文件内容复制粘贴给它,而是通过 MCP 直接访问文件系统。
2.2 发布的背景
2024 年,随着 Claude 3.5 Sonnet 的发布,Anthropic 发现一个问题:每个工具都要单独集成。
想象一下:
- 你想让 AI 读取 GitHub 仓库 → 要写 GitHub 集成代码
- 你想让 AI 查询数据库 → 要写数据库集成代码
- 你想让 AI 操作文件系统 → 要写文件系统集成代码
每个集成都要重复写类似的代码:认证、错误处理、数据转换……
Anthropic 在官方博客中写道:
"We're introducing the Model Context Protocol (MCP), an open protocol that standardizes how applications provide context to LLMs."
核心目标:让工具开发者写一次代码,所有支持 MCP 的 AI 应用都能使用。
2.3 MCP 是什么?
三大核心能力:
| 能力 | 英文 | 作用 | 示例 |
|---|---|---|---|
| 工具 | Tools | AI 可以调用的功能 | 查询天气、发送邮件 |
| 资源 | Resources | AI 可以读取的数据 | 文件内容、数据库记录 |
| 提示 | Prompts | 预定义的提示模板 | 代码审查模板、写作模板 |
2.4 MCP 的内部实现
MCP 之前,AI 只能"看"和"说",有了 MCP,AI 终于可以"动手"了。它让 AI 可以操纵各种程序,真正帮你干活。
使用 MCP 非常简单,只需要配置一个 mcp.json 文件,就可以在你的 IDE 里使用各种 MCP 工具。
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/home/user/projects"
]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "your-token-here"
}
},
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres"],
"env": {
"DATABASE_URL": "postgresql://user:pass@localhost/db"
}
}
}
}假设你有一个天气 API,想把它封装成 MCP Server 让 AI 可以调用。下面以 Node.js 为例演示:
import { Server } from '@modelcontextprotocol/sdk/server/index.js'
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
// 1. 创建 MCP Server
const server = new Server({
name: 'weather-server',
version: '1.0.0'
}, {
capabilities: { tools: {} }
})
// 2. 定义工具列表
server.setRequestHandler('tools/list', async () => ({
tools: [{
name: 'get_weather',
description: '获取指定城市的天气信息',
inputSchema: {
type: 'object',
properties: {
city: { type: 'string', description: '城市名称' }
},
required: ['city']
}
}]
}))
// 3. 实现工具调用逻辑
server.setRequestHandler('tools/call', async (request) => {
const { name, arguments: args } = request.params
if (name === 'get_weather') {
// 调用你的天气 API
const response = await fetch(
`https://api.weather.com/v1/current?city=${args.city}`
)
const data = await response.json()
return {
content: [{
type: 'text',
text: JSON.stringify(data)
}]
}
}
})
// 4. 启动服务(stdio 方式)
const transport = new StdioServerTransport()
await server.connect(transport)MCP Server 作为子进程运行,通过标准输入输出通信
优点:简单、安全、适合本地工具
缺点:只能本地使用,不支持远程
MCP Server 作为 HTTP 服务运行,支持 SSE 推送
优点:支持远程访问、多客户端共享
缺点:需要部署服务器、配置认证
// Server 发送 initialize 请求
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {
"tools": {},
"resources": {},
"prompts": {}
},
"serverInfo": {
"name": "filesystem",
"version": "1.0.0"
}
}
}技术深究:JSON-RPC 2.0 消息格式
{
"jsonrpc": "2.0", // 协议版本
"id": 1, // 请求 ID,用于匹配响应
"method": "tools/call", // 方法名
"params": { ... } // 参数对象
}// 成功响应
{
"jsonrpc": "2.0",
"id": 1,
"result": { ... }
}
// 错误响应
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32600,
"message": "Invalid Request"
}
}id 用于匹配响应技术深究:两种传输方式
// 启动 MCP Server 作为子进程
npx @modelcontextprotocol/server-filesystem ./project
// 通过 stdio 通信
// stdin: 接收请求
// stdout: 发送响应// HTTP 传输(Server-Sent Events)
POST /mcp HTTP/1.1
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": { ... }
}
// SSE 长连接用于推送
GET /mcp/sse HTTP/1.1
// 持续接收服务器推送的更新技术深究:MCP 核心 API
2.5 类比理解:USB-C 接口
MCP 就像 USB-C 接口:
- 以前:每个设备都有自己的充电口(圆口、扁口、磁吸……)
- 现在:USB-C 统一了所有设备的充电和数据传输
- MCP:统一了 AI 与所有工具的连接方式
工具开发者只需要实现一次 MCP Server,所有支持 MCP 的 AI 应用(Claude、Cursor、Windsurf 等)都能直接使用。
2.6 MCP 的典型应用场景
| 场景 | 说明 | 示例 |
|---|---|---|
| 本地文件操作 | 让 AI 读取/修改本地文件 | 读取代码库、分析日志文件 |
| 数据库查询 | 让 AI 直接查询数据库 | SQL 查询、数据分析 |
| API 调用 | 让 AI 调用第三方服务 | GitHub API、Slack、邮件 |
| 开发工具集成 | 让 AI 使用开发工具 | Git 操作、终端命令 |
实际案例:
- Cursor/Windsurf:通过 MCP 连接文件系统、Git、终端
- Claude Desktop:通过 MCP 连接笔记软件、邮件客户端
- 自动化脚本:让 AI 执行自动化任务(备份、部署、数据同步)
3. A2A (Agent-to-Agent Protocol)
3.1 协议基本信息
| 项目 | 内容 |
|---|---|
| 全称 | Agent-to-Agent Protocol |
| 发起方 | |
| 发布时间 | 2025 年 4 月 9 日 |
| 官方文档 | google.github.io/A2A |
| 开源协议 | Apache 2.0 |
| GitHub | github.com/google/A2A |
为什么是 Google 发起?
Google 在 Cloud Next 2025 大会上发布 A2A,与其企业级 AI 战略密切相关。
Google 认为:未来的企业 AI 不是单个超级 Agent,而是多个专业 Agent 协作——有的负责数据分析,有的负责代码生成,有的负责文档处理。
这些 Agent 需要一种标准化的方式相互通信,A2A 应运而生。
3.2 发布的背景
MCP 解决了"AI 如何连接工具"的问题,但还有一个问题:多个 Agent 如何协作?
想象一个场景:
- Agent A 是"需求分析专家"
- Agent B 是"代码生成专家"
- Agent C 是"测试专家"
用户说:"帮我开发一个登录功能"
Agent A 分析需求后,需要把任务分配给 Agent B;Agent B 写完代码后,需要让 Agent C 测试。它们之间如何通信?
Google 在官方博客中写道:
"A2A is an open protocol that enables AI agents to communicate with each other, facilitating collaboration across different frameworks and vendors."
核心目标:让不同厂商、不同框架开发的 Agent 能够无缝协作。
3.3 A2A 是什么?
三大核心概念:
| 概念 | 英文 | 作用 | 类比 |
|---|---|---|---|
| Agent Card | Agent 名片 | 描述 Agent 的能力 | 员工工牌 |
| Task | 任务 | 要执行的工作单元 | 工单 |
| Message | 消息 | Agent 之间的通信内容 | 聊天记录 |
3.4 A2A 的内部实现
A2A 让多个 AI Agent 可以相互协作,不再是单打独斗。一个复杂任务可以分配给多个专业 Agent,每个 Agent 做自己擅长的事。
A2A 目前还在早期阶段,主要由 Google 推动。如果你想尝试 A2A,需要开发支持 A2A 协议的 Agent 服务。
/.well-known/agent.json,声明 Agent 的能力和版本 agents/get、tasks/send、tasks/get 等核心 API // Agent A 获取 Agent B 的 Agent Card
GET /.well-known/agent.json HTTP/1.1
Host: agent-b.company.com
// 响应
{
"name": "Code Agent",
"description": "专业代码生成 Agent",
"url": "https://agent-b.company.com",
"version": "1.0.0",
"capabilities": {
"streaming": true,
"pushNotifications": true
},
"skills": [
{"id": "code-gen", "name": "代码生成"},
{"id": "code-review", "name": "代码审查"}
]
}技术深究:Agent Card 名片格式
/.well-known/agent.json 路径 {
"name": "代码生成 Agent",
"description": "专业的前后端代码生成 Agent",
"url": "https://code-agent.company.com",
"version": "1.0.0",
"capabilities": {
"streaming": true,
"pushNotifications": true
},
"skills": [
{
"id": "frontend",
"name": "前端开发",
"description": "React/Vue/Angular"
},
{
"id": "backend",
"name": "后端开发",
"description": "Node/Python/Go"
}
],
"authentication": {
"schemes": ["Bearer", "OAuth2"]
}
}技术深究:HTTP + SSE 通信
POST /tasks/send HTTP/1.1
Host: agent-b.company.com
Content-Type: application/json
Authorization: Bearer {token}
{
"id": "task-001",
"message": {
"role": "user",
"parts": [{ "type": "text", "text": "写一个登录接口" }]
}
}GET /tasks/task-001/sse HTTP/1.1
Authorization: Bearer {token}
event: progress
data: {"status": "processing", "progress": 50}
event: completed
data: {"status": "completed", "result": {...}}技术深究:A2A 核心 API
技术深究:认证机制
Authorization: Bearer sk-xxxxx
# 或
Authorization: ApiKey sk-xxxxxAuthorization: Bearer {access_token}
# 支持刷新令牌
POST /oauth/token
{
"grant_type": "refresh_token",
"refresh_token": "xxx"
}3.5 类比理解:企业微信
A2A 就像 企业微信:
- Agent Card:每个人的名片,显示姓名、部门、职责
- 发任务:@某人,分配一个任务
- 聊天沟通:任务执行过程中可以随时沟通
- 任务追踪:能看到任务的进度和状态
不同的 Agent 就像不同的同事,A2A 让它们能够协作完成复杂项目。
3.6 A2A 的典型应用场景
| 场景 | 说明 | 示例 |
|---|---|---|
| 软件开发 | 多 Agent 协作完成开发任务 | 需求分析→代码→测试→部署 |
| 企业工作流 | 不同部门 Agent 协作处理业务 | HR Agent + 财务 Agent + 法务 Agent |
| 智能客服 | 多个专业 Agent 分工处理 | 接待→解答→转接→记录 |
| 数据分析 | 多个 Agent 协作分析数据 | 收集→清洗→分析→可视化→报告 |
实际案例:
- Google Agent Space:企业内部多个 Agent 协作处理文档、邮件、日程
- 软件开发团队:需求 Agent → 代码 Agent → 测试 Agent → 部署 Agent
- 智能客服系统:接待 Agent → 专业解答 Agent → 人工转接 Agent
4. MCP vs A2A:对比与关系
4.1 核心差异
| 维度 | MCP | A2A |
|---|---|---|
| 发起方 | Anthropic (2024.11) | Google (2025.04) |
| 定位 | AI 与工具的连接 | Agent 与 Agent 的协作 |
| 通信范围 | Client-Server | Peer-to-Peer |
| 数据格式 | JSON-RPC 2.0 | HTTP + JSON |
| 类比 | USB-C 接口 | 企业微信 |
4.2 两者的关系
MCP 和 A2A 不是竞争关系,而是互补关系:
4.3 如何选择?
| 场景 | 选择 |
|---|---|
| 让 AI 调用本地函数或工具 | Function Call |
| 使用第三方工具(数据库、API、文件系统) | MCP |
| 构建多 Agent 协作系统 | A2A |
| 同时需要工具集成和多 Agent 协作 | MCP + A2A |
5. 协议的未来趋势
5.1 生态发展
MCP 生态(截至 2025 年初):
- 官方提供的 Server:文件系统、SQLite、Git、PostgreSQL 等
- 社区贡献的 Server:Slack、Notion、Figma、Stripe 等
- 支持 MCP 的应用:Claude Desktop、Cursor、Windsurf、Zed 等
A2A 生态(刚发布):
- Google 自家的 Agent 产品率先支持
- 开源社区正在开发各种语言的 SDK
- 企业级应用正在探索中
5.2 标准化进程
目前 Agent 协议还处于"战国时代":
- MCP 和 A2A 是最主流的两个
- 还有其他新兴协议如 ANP、AGP 等
- 未来可能会融合或统一
类比互联网的发展:
- 早期:各种局域网协议并存
- 后来:TCP/IP 成为标准
- 现在:Agent 协议可能也会走向统一
6. 小结
核心要点
| 协议 | 一句话理解 | 发布时间 | 发起方 | 适用场景 |
|---|---|---|---|---|
| MCP | AI 连接工具的"USB-C" | 2024.11 | Anthropic | 工具集成、数据源连接 |
| A2A | Agent 协作的"企业微信" | 2025.04 | 多 Agent 协作、任务委托 |
关键洞察:
- MCP 解决"AI 如何获取外部能力"的问题
- A2A 解决"多个 AI 如何协作"的问题
- 两者互补,未来可能会融合使用
- 选择协议要根据具体场景,没有银弹
参考资料
- MCP 官方文档: modelcontextprotocol.io
- MCP GitHub: github.com/modelcontextprotocol
- Anthropic 发布博客: "Introducing the Model Context Protocol" (2024-11-25)
- A2A 官方文档: google.github.io/A2A
- A2A GitHub: github.com/google/A2A
- Google Cloud Blog: "Announcing the Agent-to-Agent Protocol" (2025-04-09)
