CC 咖啡猫的工作空间 Coding Space

AI 协议

原始素材:8-人工智能/8.13-ai-protocols.md

核心问题

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 生态中的通信层次:

层级 协议 解决的问题 类比
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 是什么?

MCP 是什么?

MCP(Model Context Protocol)是 Anthropic 于 2024 年 11 月推出的AI 与外部工具连接的统一标准 。它让 AI 应用可以调用外部工具、读取资源数据、使用预定义提示,就像给 AI 装上了"手"和"眼睛"。

能力 英文 作用 示例
工具 Tools AI 可以调用的功能 查询天气、发送邮件、调用 API
资源 Resources AI 可以读取的数据 文件内容、数据库记录、配置信息
提示 Prompts 预定义的提示模板 代码审查模板、写作模板
使用场景 说明
当 AI 需要执行实际操作时 AI 不仅要回答问题,还要真正做事:发送邮件、操作文件、调用第三方 API
当 AI 需要访问私有数据时 读取本地文件、查询数据库、访问企业内部系统
当需要标准化工具接入时 一次开发,多个 AI 应用可用(Claude、Cursor、Windsurf 等)
步骤 操作 说明
1 开发 MCP Server 按 MCP 规范实现 Server,提供 tools/resources/prompts
2 配置 AI 应用连接 在 AI 应用中添加 MCP Server 配置(本地或远程)
3 AI 自动调用 AI 根据任务需求,自动发现并调用合适的工具或读取资源

三大核心能力

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

2.4 MCP 的内部实现

MCP 内部实现客户端-服务器架构的通信细节

为什么 MCP 这么火?MCP 之前 AI 只能"看"和"说",有了 MCP,AI 终于可以"动手"了。

场景 说明
Cursor / Claude 等 AI 编辑器 直接读写文件、执行代码、操作 Git
浏览器自动化
数据库查询 直接查询/写入数据库,无需手动导出
AI 操作电脑 Windows-MCP 让 AI 直接操控鼠标键盘
自动化部署 Vercel-MCP 一键部署网站到线上
设计稿转代码 Figma-MCP 读取设计稿自动生成网页

如何使用 MCP?只需要配置一个 mcp.json 文件即可在 IDE 中使用。

步骤 操作 说明
1 找到 MCP Server 从资源站或 GitHub 找到需要的 MCP Server:官方 Server 列表MCP.so(中文)Pulse MCPSmithery
2 配置 mcp.json 在 IDE 中配置 Server(见下方示例)
3 重启 IDE 即可使用 AI 自动发现并加载 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" }
    }
  }
}

Skills 正在替代 MCP?随着 Skills 的普及,越来越多场景使用 Skills 替代 MCP。Skills 更轻量、更易编写。MCP 更适合复杂工具集成、多客户端复用的场景。

IDE mcp.json 位置
Cursor ~/.cursor/mcp.json
Claude Desktop ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
Windsurf ~/.windsurf/mcp.json

如何实现一个 MCP Server?

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. 定义工具列表
  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(本地进程) MCP Server 作为子进程运行,通过标准输入输出通信 简单、安全、适合本地工具 只能本地使用,不支持远程
HTTP + SSE(远程服务) MCP Server 作为 HTTP 服务运行,支持 SSE 推送 支持远程访问、多客户端共享 需要部署服务器、配置认证

通信流程(4 步):1. 握手(initialize) — MCP Server 启动时向 Client 发送握手请求,声明协议版本和能力 (Server → Client)

{
  "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, "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 用于匹配响应。

技术深究:MCP 核心 API

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

A2A(Agent-to-Agent Protocol)是 Google 于 2025 年 4 月推出的 Agent 之间相互协作的通信标准,让不同厂商、不同框架的 Agent 能够相互发现、分配任务、交换信息。

概念 英文 作用 类比
Agent Card Agent 名片 描述 Agent 的能力 员工工牌
Task 任务 Agent 之间传递的工作单元 工单
Message 消息 Agent 之间的通信内容,支持多模态 聊天记录
SSE Server-Sent Events 服务器推送技术,用于实时任务进度更新 消息推送
使用场景 说明
多 Agent 协作复杂任务 需求分析 Agent → 代码 Agent → 测试 Agent,各自发挥专长
集成不同厂商的 Agent Google、Anthropic、OpenAI 的 Agent 相互协作
任务委托和进度追踪 主 Agent 分配任务给专家 Agent,实时接收进度更新
步骤 操作 API
1 发布 Agent Card /.well-known/agent.json
2 发现 Agent agents/get
3 发送任务 tasks/send(支持 SSE 推送)
4 获取结果 tasks/get

3.4 A2A 的内部实现

A2A 内部实现对等网络架构的通信细节

A2A 可以做什么?让多个 AI Agent 相互协作,每个 Agent 做自己擅长的事。

场景 Pipeline
软件开发流水线 需求分析 Agent → 代码 Agent → 测试 Agent → 部署 Agent
多厂商 Agent 集成 Google、Anthropic、OpenAI 的 Agent 相互调用
企业工作流 HR Agent → 财务 Agent → 审批 Agent 协同处理
智能客服升级 接待 Agent → 业务 Agent → 人工 Agent 逐级转接
科研协作 文献 Agent → 实验 Agent → 分析 Agent → 报告 Agent
自动化运维 监控 Agent → 诊断 Agent → 修复 Agent → 通知 Agent

A2A 协议于 2025 年 4 月发布,目前还在快速发展中。建议关注官方文档获取最新进展。

通信流程(5 步):1. 发现(agents/get) — Agent 之间通过 HTTP 获取对方 Agent Card

GET /.well-known/agent.json
→ {"name": "Code Agent", "url": "...", "version": "1.0.0", "capabilities": {...}, "skills": [...]}

技术深究: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 通信

// 任务发送 (HTTP POST)
POST /tasks/send → {"id": "task-001", "message": {"role": "user", "parts": [{"type": "text", "text": "写一个登录接口"}]}}

// 实时推送 (SSE)
GET /tasks/task-001/sse → event: progress | data: {"status": "processing", "progress": 50}
                       → event: completed | data: {"status": "completed", "result": {...}}

技术深究:A2A 核心 API

API 方法 作用
agents/get GET 获取 Agent Card,了解其能力
tasks/send POST 发送任务,同步等待结果
tasks/sendSubscribe POST 发送任务并订阅 SSE,实时获取进度
tasks/get GET 获取任务状态和结果
tasks/cancel GET 取消正在执行的任务

技术深究:认证机制

方式 适用场景 示例
API Key 内部 Agent 通信 Authorization: Bearer sk-xxxxxApiKey sk-xxxxx
OAuth 2.0 企业级认证,支持令牌刷新 Authorization: Bearer {access_token} + POST /oauth/token 刷新

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 不是竞争关系,而是互补关系

MCP vs A2A — AI Agent 两大协议的定位差异。想象你在一座商场:MCP 像"统一插座标准",让各种电器都能插上使用;A2A 像"内部对讲系统",让不同店铺之间可以协作。

维度 MCP(工具连接) A2A(Agent 协作)
全称 Model Context Protocol Agent-to-Agent Protocol
发起方 Anthropic Google
发布时间 2024.11 2025.04
架构 Client-Server Peer-to-Peer
数据格式 JSON-RPC 2.0 HTTP + JSON
类比 USB-C 接口(统一充电方式) 企业微信(发任务、聊天)

核心思想: 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. 小结

核心要点

协议 一句话理解 发布时间 发起方 适用场景
MCP AI 连接工具的"USB-C" 2024.11 Anthropic 工具集成、数据源连接
A2A Agent 协作的"企业微信" 2025.04 Google 多 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)