AI Agent 通信协议深度实战:MCP 与 A2A 协议的架构演进、安全模型与生产部署
一、引言:多 Agent 协作的基础设施困境
2025 年至 2026 年间,AI Agent 从单体推理系统向多 Agent 协作架构快速迁移。OpenAI 的 Agents SDK、Google 的 ADK、Anthropic 的 Claude Agent SDK 各自构建了一套工具调用与 Agent 间通信机制,但一个根本性的问题浮出水面:当不同厂商、不同运行时、不同模型驱动的 Agent 需要协同工作时,它们之间"说什么"和"怎么说"?
过去的方案大致分为三类:其一,通过 RESTful API 或 gRPC 暴露 Agent 能力,但缺乏标准化的意图描述和资源发现机制;其二,通过消息队列(Kafka、NATS)实现异步通信,但消息格式与语义完全私有;其三,直接复用 LLM 的工具调用(tool-use)接口,但这种紧耦合方案无法支持异构 Agent 间的组合。
正是在这一背景下,Anthropic 提出了 Model Context Protocol(MCP),Google 提出了 Agent-to-Agent Protocol(A2A)。两者试图从不同层面解决 Agent 互操作问题——MCP 聚焦 Agent 与工具/资源之间的垂直通信,A2A 聚焦 Agent 与 Agent 之间的水平通信。本文将深入剖析两大协议的架构设计、安全模型与生产级部署方案。
二、MCP 协议深度解析
2.1 架构概览:JSON-RPC 2.0 上的能力协商
MCP 以 JSON-RPC 2.0 为传输层构建,核心设计思想是将 LLM Agent 的能力边界划分为三类原语:
- Tools:Agent 可调用的函数,接受结构化输入并返回结构化输出
- Resources:Agent 可读取的上下文数据(文件、数据库记录、API 响应等)
- Prompts:预定义的交互模板,用于标准化 Agent 行为
┌──────────────┐ JSON-RPC 2.0 ┌──────────────┐
│ MCP Client │ ◄─────────────────────┤ MCP Server │
│ (Agent/Host) │ stdio/SSE/HTTP+JSON │ (Tool/Service)│
└──────────────┘ └──────────────┘
MCP Client 通过 initialize 握手交换能力集(Capabilities),Server 声明自身支持的功能与版本。这一能力协商机制是 MCP 区别于传统 REST 设计的关键——它允许运行时动态发现工具列表,而非依赖静态代码生成。
2.2 工具调用流程
一个标准的 MCP 工具调用涉及以下步骤:
- 发现阶段:Client 调用
tools/list获取所有可用工具及其 JSON Schema 描述 - 编排阶段:LLM 根据 Schema 选择工具并生成参数
- 执行阶段:Client 调用
tools/call触发 Server 端执行 - 反馈阶段:Server 返回
CallToolResult,包含文本内容或结构化数据
协议定义文档清单:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "query_database",
"arguments": {
"sql": "SELECT * FROM orders WHERE status = ?",
"params": ["pending"]
}
}
}
2.3 流式传输与进度通知
MCP 支持 Server 在长执行期间通过 notifications/progress 推送进度信息,Client 使用 _meta.progressToken 字段关联通知与请求。这在 RAG 检索、代码生成、长时间数据分析等场景中至关重要——Agent 可以将进度反馈给用户界面,避免用户陷入等待焦虑。
2.4 MCP 的三个传输通道
| 传输方式 | 适用场景 | 特点 |
|---|---|---|
| stdio | 本地子进程 | 低延迟,Agent 以子进程方式启动工具 |
| SSE (Server-Sent Events) | Web 与本地混合 | Client 长连接接收 Server 推送 |
| Streamable HTTP | 生产环境 | 无状态、水平扩展、支持负载均衡 |
Streamable HTTP 是 2025 年底引入的关键演进,它解决了 SSE 在负载均衡和断连恢复上的缺陷,使 MCP Server 可以作为独立微服务部署。
三、A2A 协议深度解析
3.1 设计哲学:将 Agent 视为 Web 服务
如果说 MCP 是 Agent 的"手和眼"(获取工具和数据),那 A2A 就是 Agent 的"嘴巴和耳朵"(与其他 Agent 对话)。A2A 协议的核心原则是将 Agent 抽象为可发现、可组合的 Web 服务单元,每个 Agent 通过 Agent Card(JSON-LD 描述文件)宣告自身能力。
┌──────────────┐ HTTPS + JSON ┌──────────────┐
│ Client Agent │ ───────────────────► │ Remote Agent│
│ │ discover → invoke │ │
│ │ ◄─────────────────── │ │
└──────────────┘ streaming/SSE └──────────────┘
3.2 Agent Card 与能力发现
Agent Card 通常托管在 /.well-known/agent.json 端点,描述 Agent 的名称、能力、输入输出格式、认证需求等:
{
"name": "market-research-agent",
"description": "提供市场研究报告生成能力",
"url": "https://agents.example.com/market-research",
"capabilities": {
"streaming": true,
"pushNotifications": true
},
"skills": [
{
"id": "industry-report",
"description": "生成指定行业的市场分析报告",
"inputModes": ["application/json"],
"outputModes": ["text/markdown", "application/pdf"]
}
]
}
Client Agent 通过 URL 发现远程 Agent,解析 Card 后判断是否调用。skills 字段使用自然语言描述能力,允许 LLM 进行模糊匹配——这比硬编码 API 路径灵活得多。
3.3 Task 对象与生命周期管理
A2A 协议引入 Task 作为 Agent 间交互的一等公民。Task 对象具有明确的生命周期状态机:
submitted → working → input-required → 暂停等待外部输入
↓ ↓
completed failed
这一设计解决了长时任务的核心挑战:如果一个 Agent 需要 10 分钟完成一项分析,轮询是灾难性的,而 WebSocket 又过于重量级。A2A 通过 Task 的 SSE 流实现"订阅-推送"模型:Client 提交 Task 后,持续接收状态更新和最终产物(Artifact)。
3.4 多模态消息与上下文传递
A2A 的 Message 和 Part 抽象支持混合文本、文件引用、结构化数据和内联二进制内容。在复杂的多 Agent 协作场景(如代码审查 Agent 接收代码文件、测试结果、覆盖率报告等多源输入),这种多模态消息结构避免了繁琐的序列转换:
{
"role": "user",
"parts": [
{"kind": "text", "text": "请审查以下代码改动"},
{"kind": "data", "data": {"files": [...]}},
{"kind": "file", "file": {"uri": "s3://bucket/diff.patch"}}
]
}
四、安全模型对比
4.1 MCP 的安全边界
MCP 的安全核心是 信任边界收缩。由于 MCP Server 由 Agent 管理员主动配置,安全问题主要集中在:
- 工具调用注入:恶意 MCP Server 在工具描述中注入诱导指令,欺骗 LLM 执行不当操作。防御方案包括工具签名、权限沙箱、参数脱敏等
- 权限提升:MCP Server 可能以过高权限运行(如 root),应通过 capability-based 沙箱(如 Linux namespaces + seccomp)限制其系统访问
- 凭据暴露:MCP 传输中的 token 和密钥需要 TLS 加密,本地 stdio 模式虽天然安全但无法跨网络
4.2 A2A 的安全模型
A2A 在 Web 层面运行,面临更复杂的分布式安全挑战:
- 身份认证:基于 OIDC/mTLS 实现 Agent 身份相互认证,确保通信双方身份可信
- 授权模型:Agent Card 可以声明 OAuth 2.0 scopes,限制调用方的能力范围
- 消息完整性:请求和响应通过 HTTPS + JWS 签名防篡改
- 流量治理:速率限制、配额管理、熔断机制防止单一 Agent 过载
4.3 两大协议的安全策略对比
| 维度 | MCP | A2A |
|---|---|---|
| 信任模型 | 主机信任(本地/私有) | 零信任(互联网级别) |
| 认证方式 | 通常无或简单 API Key | OAuth 2.0 / mTLS |
| 能力声明 | 运行时 introspection | 静态 Agent Card + 动态 introspection |
| 消息安全 | stdio 模式天然隔离 | HTTPS + JWS 签名 |
| 主要威胁 | 提示注入、权限提升 | 身份伪造、重放攻击、DoS |
五、生产环境部署实战
5.1 MCP Server 的水平扩展方案
将 MCP Server 作为微服务部署时,Streamable HTTP 是首选传输:
from mcp.server.streamable_http import StreamableHTTPServerTransport
# FastAPI + MCP Streamable HTTP 集成示例
@app.post("/mcp")
async def mcp_endpoint(request: Request):
transport = StreamableHTTPServerTransport(
app=app,
json_response=True # 启用 JSON 模式(适合无状态扩展)
)
await transport.handle_request(request)
return Response(
content=transport.response_body,
media_type="application/json",
headers=transport.response_headers
)
关键生产建议:前后通过负载均衡器分发请求时,建议启用 sticky session(基于 MCP Session ID),避免有状态上下文在请求间丢失。对于严格无状态的纯工具调用,JSON Response 模式完全无状态,可任意水平扩展。
5.2 A2A Agent 的 Kubernetes 部署
部署 A2A Agent 到集群时,需要关注:
- Agent Card 端点的可用性和缓存——调用方可能频繁轮询
- Task SSE 连接的生命周期管理与资源回收
- 多租户隔离——多个 Agent 共用同一网关时的认证隔离
- 可观测性——Agent 间调用链的追踪需要使用 OpenTelemetry 上下文传播
以下是一个 A2A Agent 的 Deployment 示例框架:
apiVersion: apps/v1
kind: Deployment
metadata:
name: code-review-agent
spec:
replicas: 3
template:
spec:
containers:
- name: agent
image: registry.example.com/code-review-agent:latest
ports:
- containerPort: 8080
env:
- name: OAUTH_ISSUER
valueFrom:
secretKeyRef:
name: agent-auth
key: issuer-url
- name: AGENT_SKILLS
value: "code-review,security-audit,test-generation"
5.3 多 Agent 编排模式
在实际生产中,多种编排模式共存:
- 中心化编排:一个 Orchestrator Agent 通过 A2A 调用多个 Specialist Agent(代码审查、测试、部署),类似 DAG 执行
- 去中心化协商:Agent 间通过 A2A 相互发现并建立协作,无单一控制节点
- 层级委托:上层 MCP Client(如 IDE)将任务分发给本地 Tool Server 和远程 Agent 混合执行
MCP 与 A2A 并非互斥——典型的生产架构中,MCP 是 Agent 的微血管(连接工具和数据源),A2A 是 Agent 的大动脉(跨 Agent 任务流转)。两者构成完整的 Agent 通信基础设施。
5.4 监控与故障排查
多 Agent 系统调试极其困难。核心可观测性实践包括:
- 为每次 Agent 间调用生成 Trace ID,跨 MCP 和 A2A 边界传播
- 记录 Tool/Task 调用日志(不含敏感参数),用于回放故障
- 建立 Agent 健康度评分:响应延迟、成功率、幻觉率
- 对 Agent Card 做版本管理和变更审计
六、趋势展望
AI Agent 通信协议仍在快速演进中。几个关键方向值得关注:
- MCP 与 A2A 的融合:两个协议正在收敛——MCP 增加了多 Agent 协作扩展,A2A 增加了工具级能力声明
- Agents as a Service:云厂商开始提供托管 Agent 运行时(AWS Bedrock Agents、Google Vertex AI Agents),A2A 是这类服务的互联互通协议
- 语义互操作:Agent Card 从自然语言描述向结构化 Ontology(基于 OWL/SHACL)演进,使机器能精确判断能力匹配
- 联邦聚合:跨组织的 Agent 目录服务(Agent Registry)正在形成,类似 DNS 对 Web 的意义,Agent Registry 将成为 Agent 世界的"服务发现基础设施"
七、结语
MCP 和 A2A 协议代表了 AI Agent 从单体走向分布式协作的关键一步。MCP 标准化了 Agent 与外部世界的交互界面,A2A 标准化了 Agent 之间的协作语言。两者的结合不仅降低了多 Agent 系统的构建门槛,更在推动形成 Agent 生态的开放互通标准。
对于工程师而言,现在介入协议层面的关注与投入正当其时——这不是又一个将被淘汰的新框架,而是 AI Agent 基础设施的 TCP/IP 时刻。

发表评论 取消回复