摘要
做 AI Agent(智能体)项目时,很多人一开始会关注 Prompt(提示词)、Memory(记忆)、RAG(检索增强生成)和多智能体编排。但当项目真正要接入数据库、文件系统、内部 API、第三方工具,甚至让不同平台的 Agent 协作时,就会遇到一个更工程化的问题:
Agent 到底应该怎样标准化地连接外部世界?
结论先说:
MCP(Model Context Protocol,模型上下文协议):解决 Agent 如何统一调用工具和数据的问题,可以理解为 Agent 连接工具的标准接口。
A2A(Agent-to-Agent,智能体间通信协议):解决不同 Agent 如何互相发现、委派任务、同步状态的问题,可以理解为 Agent 之间协作的通信协议。
选型口诀:单个 Agent 接工具,用 MCP;多个 Agent 跨系统协作,用 A2A;企业级系统通常两者一起用。
1. 为什么需要 MCP 和 A2A
在没有统一协议之前,每个模型、每个工具、每个 Agent 平台之间都要写一套定制对接代码。
比如:
一个 Agent 要接 PostgreSQL,需要一套接口;
要接 GitHub,又要一套接口;
要接企业内部工单系统,还要再写一套;
如果未来从 LangGraph 换到 AutoGen,或者从某个模型平台迁移到另一个平台,又要重新适配。
这就是典型的点对点集成问题:一开始能跑,后面越来越难维护。
MCP 和 A2A 的价值,就是把这些连接关系标准化:
| 协议 | 解决的问题 | 连接对象 | 类比 |
|---|---|---|---|
| MCP | 模型/Agent 如何调用外部工具和数据 | Agent -> Tools | USB-C 接口 |
| A2A | 不同 Agent 如何发现、委派和协作 | Agent -> Agent | HTTP + 任务协议 |
2. MCP 是什么:让 Agent 标准化调用工具
MCP 的核心定位是:为大模型和 Agent 访问外部工具、数据源、服务提供统一接口。
通俗理解:
MCP 不是一个具体工具,而是一套工具接入标准。只要工具按 MCP Server 的方式暴露能力,Agent 就可以按统一方式发现并调用它。
MCP 中最常见的能力包括:
Tools(工具):可执行函数,比如查询天气、读取数据库、创建工单、发送消息。
Resources(资源):只读数据源,比如文件内容、数据库查询结果、接口返回数据。
Prompts(提示模板):可复用的 Prompt 片段,用于规范模型调用方式。
2.1 MCP 三层架构
MCP 通常包含三层:
| 角色 | 作用 |
|---|---|
| Host(宿主应用) | 例如 Claude Desktop、Cursor、VS Code 插件、自己的 Agent 应用,负责创建和管理 MCP Client |
| MCP Client(客户端) | 由 Host 创建,负责和 MCP Server 通信 |
| MCP Server(服务器) | 暴露 Tools、Resources、Prompts 等能力,供 Client 调用 |
MCP Server 可以通过不同传输方式和 Client 通信。stdio(标准输入输出)常用于本地开发调试,可以简单理解为“Host 拉起一个本地进程,然后通过输入输出流和它通信”。生产环境更常见的是 HTTP/SSE(Server-Sent Events,服务端事件流)等远程传输方式,方便部署、鉴权、监控和扩缩容。
3. MCP Server 生命周期:上线后要按服务治理
很多初学者会把 MCP Server 当成一个脚本,但在生产环境里,它更接近一个独立服务。
只要它被多个 Agent 复用,或者被团队共享,就要考虑生命周期管理。
典型生命周期可以拆成四步:
| 阶段 | 重点 |
|---|---|
| 启动注册 | 加载配置、验证依赖、注册 Server ID、版本、工具列表、端点 |
| 能力协商 | Client 通过initialize建立会话,Server 声明自己支持的能力 |
| 运行健康 | 处理工具调用、设置超时、记录日志、暴露健康检查 |
| 优雅停用 | 停止接收新请求、处理存量请求、断开连接、释放资源 |
工程实践上,MCP Server 至少要注意四件事:
凭据管理:API Key、数据库密码不要硬编码,也不要随代码上传。
沙箱隔离:文件系统、网络、命令执行权限要受控,避免工具越权。
结构化错误:不要把完整堆栈直接抛给 Agent,应该返回可理解、可恢复的错误。
可观测性:记录工具名、耗时、成功失败、参数摘要,并接入日志和监控系统。
4. A2A 是什么:让 Agent 标准化协作
A2A 关注的不是 Agent 如何调用工具,而是不同 Agent 之间如何互相协作。
举个例子:
用户提出需求:“帮我分析上个月销售数据,并生成一份客户流失报告。”
企业系统里可能会有多个 Agent:
数据分析 Agent:负责查询数据仓库;
CRM Agent:负责读取客户资料;
报告 Agent:负责生成文档;
审批 Agent:负责走内部流程。
这时问题就变成:这些 Agent 如何互相发现?如何知道对方能做什么?如何把任务委派过去?如何同步执行状态?
A2A 就是为这类场景设计的协议。
4.1 A2A 的核心组件
A2A 常见核心概念包括:
| 概念 | 说明 |
|---|---|
| Agent Card(能力卡片) | 描述一个 Agent 的能力、端点、认证方式,便于其他 Agent 发现它 |
| Task(任务) | 标准化的任务对象,用于表达任务提交、执行中、完成、失败等状态 |
| Transport(传输) | 基于现有 Web 技术栈传输消息,例如 HTTP、SSE、JSON-RPC 等 |
| Observability(可观测性) | 通过 Trace ID、结构化日志等方式追踪跨 Agent 调用链路 |
A2A 的关键不是让一个 Agent 暴露内部代码,而是让它对外暴露“我能做什么、怎么调用我、任务现在是什么状态”。
5. MCP vs A2A:最重要的是连接对象不同
很多人容易把 MCP 和 A2A 混在一起。其实只要看连接对象,就很好区分。
| 对比维度 | MCP | A2A |
|---|---|---|
| 连接对象 | Agent 和工具/数据 | Agent 和 Agent |
| 核心目标 | 统一工具调用 | 统一任务协作 |
| 典型场景 | 查数据库、读文件、调用 API、执行函数 | 跨部门 Agent 协作、跨平台任务委派 |
| 通信模型 | Client-Server(客户端-服务器) | Agent 间任务通信 |
| 关注重点 | 工具定义、参数 Schema、资源访问 | 能力发现、任务状态、进度同步 |
| 使用时机 | 单 Agent 需要增强外部能力 | 多 Agent 需要协同完成复杂流程 |
一句话总结:
MCP 让 Agent 会“用工具”,A2A 让 Agent 会“找同事协作”。
6. 企业级架构里,两者通常一起用
一个更真实的企业级 AI 系统,通常不是只选一个协议,而是分层使用。
典型流程如下:
用户请求 | v 入口 Agent | | 通过 A2A 分发任务 v 数据分析 Agent / 报告 Agent / 工单 Agent | | 通过 MCP 调用工具 v 数据库 / 文件系统 / 内部 API / 第三方服务
这里的分工非常清楚:
A2A 负责 Agent 之间的任务路由和协作;
MCP 负责每个 Agent 内部的工具和数据接入;
安全、鉴权、审计、监控放在统一基础设施层处理。
7. 生产环境怎么落地 MCP Server
前面我们已经理解了 MCP 的定位、架构和生命周期。接下来再看一个更工程化的问题:如果 MCP Server 不只是本地调试,而是要进入团队或企业生产环境,应该怎么部署和治理?
如果出现下面任意情况,就不要再把 MCP Server 当成普通脚本使用,而应该把它按独立服务来治理:
一个 MCP Server 被多个 Agent 复用;
需要统一鉴权、限流和审计;
需要独立发版、灰度发布或回滚;
需要监控健康状态和调用耗时;
需要和企业内部服务网络打通。
生产环境更推荐:
MCP Server -> 容器化部署 -> API Gateway 鉴权和限流 -> Registry 服务发现 -> Prometheus 指标 -> 结构化日志 -> 告警系统
8. 总结
这篇文章可以记住三句话:
MCP 解决 Agent 调工具的问题:它把工具、资源、提示模板标准化,让 Agent 可以用统一方式接外部能力。
A2A 解决 Agent 之间协作的问题:它通过能力发现、任务对象、状态同步,让不同 Agent 能跨系统协作。
企业级系统通常 MCP + A2A 一起用:A2A 管 Agent 之间的任务流转,MCP 管每个 Agent 内部的工具调用。
如果你现在刚开始做 Agent 项目,建议先从 MCP 入手,因为它离业务落地最近:查数据库、读文件、调用内部 API,都是最直接的生产需求。当单个 Agent 能力稳定以后,再引入 A2A 做多 Agent 协作,会更符合工程演进节奏。
参考资料
Model Context Protocol 官方文档
MCP Specification
A2A Protocol Specification
Google Developers Blog: Announcing the Agent2Agent Protocol