MCP 给 Agent 接上手脚,A2A 让 Agent 找到同事
协议解决的是互操作语法,不是智能、信任或权限。模型上下文协议(Model Context Protocol, MCP)标准化 AI 应用怎样发现和调用上下文能力;Agent2Agent(A2A,Agent-to-Agent)标准化独立 Agent 怎样发布技能、接收长期任务并交换结果。两者可以嵌套,但用户授权、最小权限、审批、隔离和审计仍由系统承担。
没有协议时,每接一个系统都像焊一根私有转接线
模型知道“我要查日历”,并不等于它知道某个日历软件开发工具包(Software Development Kit, SDK)怎样认证、参数叫什么、结果如何流式返回。统一协议把发现、schema(结构契约)、调用和生命周期变成共同语言,让 host、tool provider 与远程 Agent 能独立演进。
把能力描述标准化
工具用 name、description 与 input schema 说明怎样调用;A2A v1.0 的 Agent Card 用 supportedInterfaces、skills、输入/输出 modes 与安全方案描述远程能力。模型和系统不再硬编码每家 SDK。
把长任务状态标准化
一次天气查询可同步返回,但合同审查可能运行十分钟并等待人补资料。A2A Task 用状态与 Artifact 表达长期工作。MCP 2025-11-25 的 Tasks 是 experimental core;2026-07-28 RC 把重新设计、wire 不兼容的 Tasks 移到 extension,不能混用。
把“内部不透明”保留下来
A2A 的远程 Agent 只承诺能力与结果,不要求公开其 prompt、memory 或私有工具。互操作发生在边界,不等于共享内部 chain-of-thought。
MCP 像统一插座,A2A 像项目外包合同
插座规定电器怎样接入电源,但不替你决定这台电器是否安全;合同规定任务目标、交付物与状态,但不要求外包团队公开每个内部步骤。两者都减少适配成本,却不会自动产生信任。
Host 管模型和用户,一个 Client 对应一个 Server 连接
以下按核查日稳定的 2025-11-25 规范讲解。MCP 的核心架构是 host–client–server:Host 是完整 AI 应用,创建多个 client 分别连接 server;data layer 使用 JSON-RPC 2.0(以 JavaScript Object Notation, JSON 编码的 Remote Procedure Call, RPC,即远程过程调用)消息表达生命周期与 primitives,transport layer 负责标准输入输出(standard input/output, stdio)或超文本传输协议(Hypertext Transfer Protocol, HTTP)等通信与授权。
应用选择的只读上下文
文件、数据库 schema、记录或文档内容。应用通常决定何时读取并放进上下文;资源可被恶意内容污染,因此“只读”只说明不能写系统,不说明内容可信。
模型可能主动调用的动作
搜索、查询、写文件、发消息、下单或执行代码。输入按 JSON Schema 校验,但 schema 正确不代表业务允许;高风险动作仍要 host 做政策判断和用户确认。
用户显式选择的复用模板
Server 提供参数化交互模板和示例,帮助 host 组织某类任务。Prompt 不是不可覆盖的系统安全边界,也不应携带不可审计的秘密权限。
Resource 给 schema,Tool 执行参数化查询,Prompt 教用户做周报
Host 先用 resources/read 取得表结构,让模型理解字段;再从 tools/list 发现只读查询工具,按 input schema 构造参数;用户选择“生成周报” prompt 后,应用组合资源和工具。数据库账号、行级权限、查询超时与脱敏仍由 server 和 host 承担。
一个 host 可以同时创建多个 MCP Client,分别连接文件、代码、监控和数据库 Server。隔离连接能避免一个 Server 直接看到另一个 Server 的内容;但 host 若把结果混在同一上下文,仍要防跨源提示注入。
远程 Agent 暴露“会做什么”,不暴露“脑子里怎样做”
A2A 面向独立、可能由不同组织和框架实现的 Agent。Client Agent 代表用户发起请求,A2A Server 作为 Remote Agent 接收消息;它可直接返回无状态 Message,也可创建有状态 Task。v1.0 把共同语义与具体传输绑定分开,内部模型、memory 与工具仍可保持不透明。
先统一语义对象
AgentCard、Message、Task、Part、Artifact 与 Extension 是共同数据模型;规范的 a2a.proto 是这些对象与请求/响应消息的权威定义。
再统一抽象操作
SendMessage、GetTask、CancelTask、GetExtendedAgentCard 等操作先定义行为,再映射到具体网络消息格式(wire protocol);公开 Agent Card 则由发现机制获取。调用方不能把某个 SDK 方法名当跨版本合同。
最后选择传输绑定
v1.0 可在 Agent Card 的 supportedInterfaces 中声明精确字面值 JSONRPC、GRPC 或 HTTP+JSON(分别对应 JSON-RPC、gRPC、HTTP+JSON),以及各自统一资源定位符(Uniform Resource Locator, URL)与 protocolVersion;客户端选择双方都支持的接口。
Agent Card:先发现,再选择兼容接口
它是 JSON 元数据:name、supportedInterfaces、capabilities、默认输入/输出 modes 与 skills 是核心必填项,provider 与安全方案等字段可选。v1.0 支持签名卡片,但签名只在验证算法、签名者与信任锚后才有意义;客户端仍要结合可信域、传输层安全(Transport Layer Security, TLS)或受控 registry 验证来源。
Message:双方交换内容
用户、client agent 与 remote agent 通过 parts 传文本、文件引用或结构化数据。每个 part 都要按类型、大小和来源验证,不能因为来自“另一个 Agent”就直接进入工具调用。
Task:长期工作的状态容器
任务概念上可经历 submitted、working、input-required、auth-required、completed、failed、canceled 或 rejected。v1.0 wire format 使用 TASK_STATE_* 枚举,不应和 v0.3 的小写字符串混用;状态机让调用方知道该等待、补信息、取消还是读取 Artifact。
Artifact:任务产生的制品
报告、代码、表格或文件属于输出制品。Artifact 是可交付对象,不自动等于已验证事实;接收方要扫描、校验、标来源,再决定能否进入后续动作。
MCP 往下接能力,A2A 向外接同事
主 Agent 用 MCP 看监控,再用 A2A 委派数据库专家
主 Agent 通过只读监控 MCP 获取告警与 trace,判断疑似数据库抖动后,向远程数据库管理员(Database Administrator, DBA)Agent 发起 A2A Task。DBA Agent 在自己的安全域内用 MCP 调指标、运行只读诊断,返回诊断 Artifact;任何写配置、扩容或 failover 都回到主 host 展示参数并等待人工审批。
工具不是 Agent
一个 query_database tool 是被调用的能力,不负责长期目标、自主协作和任务状态;把每个应用程序接口(Application Programming Interface, API)包成 Agent 会增加身份、状态与调度复杂度。
Agent 不必暴露工具清单
Remote Agent 可以只发布“数据库性能诊断” skill,内部到底用了哪些 MCP Server 属于其安全域。A2A 交换交付物,不交换全部内部权限。
两个协议都要协商版本
Client、Server、SDK 和 extension 更新速度不同。锁定协议版本、能力集与兼容测试;未知 capability 应拒绝或降级,而不是猜语义。
能发现工具、能发 Task,只说明攻击面也接通了
发现元数据按“不可信输入”处理
工具 description、resource 内容和 Agent Card 都可能含提示注入或欺骗性能力。固定可信 registry、限制动态来源、记录版本;不要让描述文本直接改变系统策略。
认证回答“是谁”,授权回答“能做什么”
HTTP over TLS(HTTPS)和 OAuth 授权/凭证不能替代 scope、resource 与业务权限。RFC 8707 的 resource indicator 思想是 token 只面向目标资源;常规请求的认证信息按 security scheme 与 binding 传递,例如 HTTP header、query/cookie、gRPC metadata 或 mutual TLS,而不是塞进 Message。任务内补授权默认走带外安全通道;只有通过带外方式或 extension 预先协商过带内机制,才可改走带内。服务端仍要按调用者过滤 Task。v1.0 的授权码流可声明 Proof Key for Code Exchange(PKCE,代码交换证明密钥),客户端也不应把用户给它的 token 原样转给任意下游。
高风险动作要做可理解审批
确认框应显示目标系统、具体参数、影响范围、费用和可撤销性。只弹“允许 Agent 使用工具吗?”无法让用户判断风险,也容易被提示注入诱导点击。
执行面隔离,结果面仍要验证
工具设超时、限流、sandbox、出网与文件系统边界;A2A webhook(网络回调)要防 Server-Side Request Forgery(SSRF,服务端请求伪造)并验证通知来源。返回文本、代码和文件仍要扫描,不能自动成为下一条 shell、Structured Query Language(SQL,结构化查询语言)或转账参数。
stdio 省去了网络监听,但本地 Server 仍可能读文件、执行进程或窃取环境变量。安装来源、可执行文件签名、工作目录、环境白名单和操作系统(Operating System, OS)sandbox 与远程 OAuth 同样重要。
稳定规范、当前文档和 Release Candidate 必须分开写
2025-11-25
本页把它作为核查日的稳定规范基线。实现时绑定具体 protocol version 与 SDK,不把 docs 中可能提前出现的下一版概念默认视为稳定。
2026-07-28 Release Candidate
MCP 项目已在 2026-05-21 发布候选,披露 stateless core、Extensions、授权强化与 breaking changes;但 2026-07-16 尚未到计划最终日期,只适合隔离迁移测试。
wire 1.0 · repo tag v1.0.1
v1.0.0 于 2026-03-12 建立稳定线;规范页头截至核查日仍列它为 Latest Released Version,但官方仓库 latest tag 已是 v1.0.1。patch 不进入 A2A-Version 协商,生产仍要同时锁 wire、SDK 与实现 tag。
v1.0 的 interaction wire format 有 breaking changes:Agent Card 把顶层 url 与 protocolVersion 移入 supportedInterfaces,而顶层 version 仍表示 Agent 自身版本;Part 改为 member-based discrimination,状态枚举改名,客户端通过 A2A-Version 协商。卡片可同时广告 0.3 与 1.0 接口,所以正确迁移是双读/按版本发,不是把旧 payload 直接改一个版本号。
v1.0 的 tenant 是从选中 AgentInterface 回传的 opaque routing key,用来把请求路由到正确 Agent 或租户;它不能替代认证、对象级授权或“当前调用者能否读取该 Task”的服务端检查。
先双栈适配器,再小流量兼容测试,最后迁移生产
把协议解析与业务策略分层;2025-11-25 稳定版回归 initialize/initialized,RC 适配器则改测 MCP-Protocol-Version、server/discover、Mcp-Method/Mcp-Name,再分别覆盖能力、错误、取消、流式、授权与安全路径。不要为了尝鲜让 RC 的 breaking changes 直接改动生产权限模型。
一手来源与证据边界
优先使用论文、官方文档、官方模型卡和代码仓库。页面中的数字只代表来源所述设置,不自动外推到其他模型与数据。
截至核查日的 MCP 稳定规范入口、生命周期、JSON Schema 与 HTTP 授权框架。
MCP host–client–server、data / transport 两层、tools/resources/prompts 与双向能力。
Tools、Resources、Prompts 的控制方、发现与调用方式,以及多 Server 组合例。
MCP 具体攻击面、token passthrough、confused deputy、SSRF 与缓解建议。
候选版的 stateless core、Extensions、授权强化和 breaking changes;核查日尚非最终稳定版。
1.0 wire 规范的数据模型、抽象操作、JSON-RPC/gRPC/HTTP+JSON bindings、版本协商与安全要求。
1.0 稳定线的初始正式发布与 breaking changes 清单。
截至核查日官方仓库的 latest tag;修复 HTTP binding、转码错误与 TaskStatus 文档,不改变协商用的 1.0 wire version。
v0.3→v1.0 的 Agent Card、Part、状态枚举、OAuth、签名和多租户迁移边界。
well-known、受控 registry、私有配置三种发现方式,以及 Agent Card 缓存与保护。
只用于解释旧 wire format 与 v1.0 双栈迁移,不再当 latest。
OAuth 客户端、授权服务器与资源服务器的安全最佳实践。
把 access token 绑定到目标资源,避免同一 token 被跨服务滥用。
MCP 稳定版 data layer 的请求、响应、错误与 notification 基础消息语义。