Skip to content

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 之间怎么对话"。这就是 MCPA2A 的由来。


1. Agent 协议的层次

在深入了解具体协议之前,让我们先看看 Agent 生态中的通信层次:

层级协议解决的问题类比
1Function CallAI 如何调用本地函数大脑发出指令
2MCPAI 如何连接外部工具和数据源USB-C 接口
3A2AAgent 之间如何协作通信企业微信

逐行解读这张表

第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
GitHubgithub.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 是什么?

MCP 是什么?
MCP(Model Context Protocol)是 Anthropic 于 2024 年 11 月推出的AI 与外部工具连接的统一标准。它让 AI 应用可以调用外部工具、读取资源数据、使用预定义提示,就像给 AI 装上了"手"和"眼睛"。
三大核心能力
能力
英文
作用
示例
工具
Tools
AI 可以调用的功能
查询天气、发送邮件、调用 API
资源
Resources
AI 可以读取的数据
文件内容、数据库记录、配置信息
提示
Prompts
预定义的提示模板
代码审查模板、写作模板
什么时候用 MCP?
当 AI 需要执行实际操作时
AI 不仅要回答问题,还要真正做事:发送邮件、操作文件、调用第三方 API
当 AI 需要访问私有数据时
读取本地文件、查询数据库、访问企业内部系统
当需要标准化工具接入时
一次开发,多个 AI 应用可用(Claude、Cursor、Windsurf 等)
如何使用 MCP?
1
开发 MCP Server
按 MCP 规范实现 Server,提供 tools/resources/prompts
2
配置 AI 应用连接
在 AI 应用中添加 MCP Server 配置(本地或远程)
3
AI 自动调用
AI 根据任务需求,自动发现并调用合适的工具或读取资源

三大核心能力

能力英文作用示例
工具ToolsAI 可以调用的功能查询天气、发送邮件
资源ResourcesAI 可以读取的数据文件内容、数据库记录
提示Prompts预定义的提示模板代码审查模板、写作模板

2.4 MCP 的内部实现

MCP 内部实现客户端-服务器架构的通信细节
为什么 MCP 这么火?

MCP 之前,AI 只能"看"和"说",有了 MCP,AI 终于可以"动手"了。它让 AI 可以操纵各种程序,真正帮你干活。

如何使用 MCP?

使用 MCP 非常简单,只需要配置一个 mcp.json 文件,就可以在你的 IDE 里使用各种 MCP 工具。

1
找到 MCP Server
从 MCP 资源站或 GitHub 找到你需要的 MCP Server
MCP.so(中文)mcp.so
Pulse MCP(英文)pulsemcp.com
Smithery(英文)smithery.ai
2
配置 mcp.json
在你的 AI 编辑器(Cursor / Claude Desktop 等)中找到 MCP 配置文件位置,添加 Server 配置
{
  "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"
      }
    }
  }
}
3
重启 IDE 即可使用
重启后,AI 会自动发现并加载 MCP 工具,你就可以直接让 AI 使用这些工具了
Skills 正在替代 MCP?
随着 Skills 的普及,越来越多的场景开始使用 Skills 替代 MCP 协议。Skills 更轻量、更易编写,适合大多数常见任务。MCP 更适合需要复杂工具集成、多客户端复用的场景。如果你只是想让 AI 做一些简单操作,建议优先考虑 Skills。
常见 IDE 的 mcp.json 位置
Cursor~/.cursor/mcp.json
Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
Windsurf~/.windsurf/mcp.json
如何实现一个 MCP Server?

假设你有一个天气 API,想把它封装成 MCP Server 让 AI 可以调用。下面以 Node.js 为例演示:

weather-mcp-server.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)
stdio vs HTTP+SSE 传输方式
stdio(本地进程)

MCP Server 作为子进程运行,通过标准输入输出通信

优点:简单、安全、适合本地工具

缺点:只能本地使用,不支持远程

HTTP + SSE(远程服务)

MCP Server 作为 HTTP 服务运行,支持 SSE 推送

优点:支持远程访问、多客户端共享

缺点:需要部署服务器、配置认证

通信流程(4 步)
1握手(initialize)
MCP Server 启动时向 Client 发送握手请求,声明自己的协议版本和能力
Server → Client
// 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"
    }
  }
}
2列工具(tools/list)
3调工具(tools/call)
4返回结果
技术深究: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"
  }
}
JSON-RPC 2.0 是无状态协议,每个请求都需要包含 id 用于匹配响应
技术深究:两种传输方式
stdio(本地进程)
适用于本地工具,通过标准输入输出通信
// 启动 MCP Server 作为子进程
npx @modelcontextprotocol/server-filesystem ./project

// 通过 stdio 通信
// stdin: 接收请求
// stdout: 发送响应
HTTP + SSE(远程)
适用于远程服务,支持长连接推送
// 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
initialize初始化
Server 向 Client 声明协议版本和能力
tools/list工具列表
获取 Server 提供所有可用工具
tools/call调用工具
实际调用某个工具并获取结果
resources/list资源列表
获取可访问的资源(如文件、数据库)
resources/read读取资源
读取某个资源的内容
prompts/list提示模板
获取预定义的提示模板

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
发起方Google
发布时间2025 年 4 月 9 日
官方文档google.github.io/A2A
开源协议Apache 2.0
GitHubgithub.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 是什么?

A2A 是什么?
A2A(Agent-to-Agent Protocol)是 Google 于 2025 年 4 月推出的Agent 之间相互协作的通信标准。它让不同厂商、不同框架的 Agent 能够相互发现、分配任务、交换信息,就像给 AI 世界装上了"对讲机"。
核心概念
Agent Card(Agent 名片)
每个 Agent 公开的元数据,包括能力描述、版本号、端点地址等,相当于人的"名片"
Task(任务)
Agent 之间传递的工作单元,可以包含多轮对话、文件附件等
Message(消息)
Agent 之间的通信内容,支持文本、文件、语音等多模态
SSE(Server-Sent Events)
服务器推送技术,用于实时任务进度更新
什么时候用 A2A?
当需要多个 Agent 协作完成复杂任务时
一个 Agent 负责需求分析,一个负责写代码,一个负责测试,各自发挥专长
当需要集成不同厂商的 Agent 时
Google 的 Agent、Anthropic 的 Agent、OpenAI 的 Agent 需要相互协作
当需要任务委托和进度追踪时
主 Agent 分配任务给专家 Agent,并实时接收进度更新
如何使用 A2A?
1
发布 Agent Card
在 /.well-known/agent.json 路径暴露 Agent 的能力描述
2
发现 Agent
通过 agents/get API 获取其他 Agent 的名片,了解其能力
3
发送任务
通过 tasks/send API 发送任务,支持 SSE 接收进度更新
4
获取结果
任务完成后,通过 tasks/get API 获取最终结果

三大核心概念

概念英文作用类比
Agent CardAgent 名片描述 Agent 的能力员工工牌
Task任务要执行的工作单元工单
Message消息Agent 之间的通信内容聊天记录

3.4 A2A 的内部实现

A2A 内部实现对等网络架构的通信细节
A2A 可以做什么?

A2A 让多个 AI Agent 可以相互协作,不再是单打独斗。一个复杂任务可以分配给多个专业 Agent,每个 Agent 做自己擅长的事。

如何使用 A2A?

A2A 目前还在早期阶段,主要由 Google 推动。如果你想尝试 A2A,需要开发支持 A2A 协议的 Agent 服务。

1
实现 Agent Card 端点
在你的 Agent 服务中暴露 /.well-known/agent.json,声明 Agent 的能力和版本
2
实现 A2A API
实现 agents/gettasks/sendtasks/get 等核心 API
3
部署并注册 Agent
将 Agent 部署到服务器,并在 Agent 注册表中登记,让其他 Agent 可以发现它
当前状态
A2A 协议于 2025 年 4 月发布,目前还在快速发展中。Google 提供了参考实现,但生态还在建设中。建议关注 官方文档 获取最新进展。
通信流程(5 步)
1发现(agents/get)
Agent 之间通过 HTTP 请求获取对方的 Agent Card,了解对方的能力和版本
HTTP 请求
// 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": "代码审查"}
  ]
}
2发任务(tasks/send)
3执行(Task Processing)
4推送(SSE)
5返回结果(tasks/get)
技术深究:Agent Card 名片格式
Agent Card 是一个 JSON 文件,通常放在 /.well-known/agent.json 路径
Agent Card 示例
{
  "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"]
  }
}
通过 Agent Card,Agent 之间可以相互发现,了解对方的能力和版本,实现互操作
技术深究:HTTP + SSE 通信
任务发送(HTTP POST)
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": "写一个登录接口" }]
  }
}
实时推送(SSE)
GET /tasks/task-001/sse HTTP/1.1
Authorization: Bearer {token}

event: progress
data: {"status": "processing", "progress": 50}

event: completed  
data: {"status": "completed", "result": {...}}
SSE(Server-Sent Events)允许服务器主动推送消息,适合长时任务的状态更新
技术深究:A2A 核心 API
GETagents/get
获取指定 Agent 的 Agent Card,了解其能力
POSTtasks/send
发送任务给目标 Agent,同步等待结果
POSTtasks/sendSubscribe
发送任务并订阅 SSE 推送,实时获取进度
GETtasks/get
根据任务 ID 获取任务状态和结果
GETtasks/cancel
取消正在执行的任务
技术深究:认证机制
API Key
简单的认证方式,适合内部 Agent 通信
Authorization: Bearer sk-xxxxx
# 或
Authorization: ApiKey sk-xxxxx
OAuth 2.0
企业级认证,支持令牌刷新和权限控制
Authorization: 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 核心差异

维度MCPA2A
发起方Anthropic (2024.11)Google (2025.04)
定位AI 与工具的连接Agent 与 Agent 的协作
通信范围Client-ServerPeer-to-Peer
数据格式JSON-RPC 2.0HTTP + JSON
类比USB-C 接口企业微信

4.2 两者的关系

MCP 和 A2A 不是竞争关系,而是互补关系

MCP vs A2AAI Agent 两大协议的定位差异
想象你在一个大型商场:MCP 就像商场的"统一插座标准",让各种电器(工具)都能插上使用;A2A 就像商场的"内部对讲系统",让不同店铺(Agent)之间可以协作。
MCP工具连接
Model Context Protocol
AI 与外部工具、数据源的连接协议,让工具开发者写一次代码,所有 AI 应用都能用
发起方Anthropic
发布时间2024.11
架构Client-Server
数据格式JSON-RPC 2.0
类比USB-C 接口 —— 统一各种设备的充电方式
A2AAgent协作
Agent-to-Agent Protocol
Agent 之间的通信协议,让不同厂商、不同框架的 Agent 能够无缝协作
发起方Google
发布时间2025.04
架构Peer-to-Peer
数据格式HTTP + JSON
类比企业微信 —— 让同事之间可以发任务、聊天
核心思想:MCP 和 A2A 不是竞争关系,而是互补关系。MCP 解决"AI 如何获取外部能力",A2A 解决"多个 AI 如何协作"。

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. 小结

核心要点

协议一句话理解发布时间发起方适用场景
MCPAI 连接工具的"USB-C"2024.11Anthropic工具集成、数据源连接
A2AAgent 协作的"企业微信"2025.04Google多 Agent 协作、任务委托

关键洞察

  1. MCP 解决"AI 如何获取外部能力"的问题
  2. A2A 解决"多个 AI 如何协作"的问题
  3. 两者互补,未来可能会融合使用
  4. 选择协议要根据具体场景,没有银弹

参考资料

  1. MCP 官方文档: modelcontextprotocol.io
  2. MCP GitHub: github.com/modelcontextprotocol
  3. Anthropic 发布博客: "Introducing the Model Context Protocol" (2024-11-25)
  4. A2A 官方文档: google.github.io/A2A
  5. A2A GitHub: github.com/google/A2A
  6. Google Cloud Blog: "Announcing the Agent-to-Agent Protocol" (2025-04-09)