更新
MCP Specification 在 2025-03-26 发布了最新的版本,本文对主要的改动进行详细介绍和解释。
2025-03-26 版本与 2024-11-05 版本的主要更新对比表格:
类别 | 2024-11-05 版本 | 2025-03-26 版本 | 更新意义与影响 |
授权机制 | 基于 OAuth 2.0,支持隐式授权流和基本权限控制 | 升级至 OAuth 2.1,废弃隐式授权流,强制 PKCE 和 HTTPS | 安全性提升,减少 Token 泄露风险,适应公共客户端(如移动端、本地应用)场景。 |
传输协议 | 使用 HTTP + SSE(双端点),支持单向流式通信 | 替换为 Streamable HTTP(单端点),支持双向通信与断线恢复 | 简化部署复杂度,支持灵活通信模式(一次性响应或流式推送),优化网络稳定性。 |
JSON-RPC 批处理 | 未强制支持,部分实现可选 | 协议层面强制支持批处理(Batching),要求 MUST 实现 | 减少网络开销,支持并行任务处理,提升批量操作效率(如原子事务)。 |
工具元数据 | 仅有inputSchema和description描述 | 新增 Tool Annotations(操作类、展示类元数据) | 显式标记工具风险(如destructive)、支持自动权限管控与前端 UI 适配,提升安全合规性。 |
进度通知 | 仅支持百分比或数值进度 | 新增message字段,支持动态状态描述 | 提升用户交互体验(如显示“数据加载中,剩余 50%”)。 |
多模态支持 | 支持文本、图像 | 新增音频数据流支持 | 扩展语音助手、实时音频处理等场景能力。 |
参数补全 | 未明确支持 | 新增completions能力声明,支持参数自动补全建议 | 提升开发者效率,减少手动输入错误。 |
会话管理 | 未明确会话标识 | 引入Mcp-Session-Id头部,支持断线重连与状态恢复 | 增强长时任务(如语音交互)的可靠性,降低网络波动影响。 |
安全要求 | 依赖 OAuth 2.0 的推荐实践 | 强制 HTTPS、Token 绑定与存储加密,支持短期 Token 轮换 | 减少中间人攻击风险,缩小 Token 泄露后的有效窗口。 |
一、更安全的 OAuth 2.1
1.1 从 OAuth 2.0 到 2.1 的本质跨越
旧版 OAuth 2.0 长期存在三大致命隐患:
在 AI 工具场景中,这些漏洞可能造成灾难性后果。例如通过截获未加密的授权码,攻击者可伪造"数据库清理工具"的合法调用请求。
PKCE 通过密码学挑战响应机制,彻底杜绝中间人攻击:
# 客户端生成PKCE参数示例import hashlib,base64, oscode_verifier = base64.urlsafe_b64encode(os.urandom(32)).decode('utf-8').rstrip('=')code_challenge = hashlib.sha256(code_verifier.encode()).digest()code_challenge = base64.urlsafe_b64encode(code_challenge).decode('utf-8').rstrip('=')
传统 OAuth 2.0:客户端 → 授权服务器:申请授权码 授权服务器 → 客户端:返回裸授权码
OAuth 2.1 + PKCE:客户端 → 授权服务器:申请授权码 + code_challenge 授权服务器 → 客户端:返回加密授权码 客户端 → 令牌端点:code_verifier + 授权码
1.2 协议机制:为 AI 场景量身打造的授权体系
针对 AI 工具生态的碎片化特点,MCP 强制要求支持 RFC7591 动态注册协议:
该机制使得:
通过标准化发现端点实现协议自描述:
GET /.well-known/oauth-authorization-server HTTP/1.1Host: api.example.comMCP-Protocol-Version: 2025-03-26HTTP/1.1200 OK{"issuer":"https://api.example.com","authorization_endpoint":"https://auth.example.com/authorize","token_endpoint":"https://auth.example.com/token","capabilities": ["KCE","TOKEN_ROTATION"]
}
发现失败时,客户端自动回退到预设端点路径,保障兼容性。
1.3 实现规范:MCP 的六大安全铁律
// 令牌元数据示例{"token":"eyJhbGciOi...","binding":{"client_id":"mcp-client-xyz","ip_range":"192.168.1.0/24","device_fingerprint":"SHA3-256(硬件特征)"}}
// 安全的令牌验证伪代码publicbooleanverifyToken(String token){try{JWT jwt = decode(token);if(jwt.isExpired())thrownewTokenExpiredException();if(!jwt.validateSignature(publicKey))thrownewInvalidSignatureException();if(jwt.getClaim("scope").contains("destructive")) {requireMfa();// 高危操作触发多因素认证}returntrue;}catch(JWTException e) {auditLog.logSecurityEvent("INVALID_TOKEN", token);returnfalse;}}
1.4 对 AI 工具生态的影响
通过ToolAnnotations接口定义的元数据(见代码块),开发者可向客户端提供工具行为的非强制性提示。这些标注对工具链生态产生以下影响:
title提供语义化命名readOnlyHint/destructiveHint标明操作是否具备破坏性openWorldHint区分内外部作用域(如搜索引擎 vs 内存访问)idempotentHint允许客户端自动重试幂等请求(如查询操作)生态兼容性保障
所有标注仅作为行为建议,客户端不得据此替代安全控制。例如:
if(tool.annotations.destructiveHint) {showDestructiveWarningDialog();// 前端提示}awaitenforceRBACPolicy();// 真实权限由RBAC引擎校验
1.5 开发者迁移指南
旧版代码片段:
// OAuth 2.0隐式流consttoken =getTokenFromURLFragment();callMCPService(token);
新版安全实现:
// OAuth 2.1 PKCE流const{ verifier, challenge } =generatePKCE();startAuthFlow(challenge);// 回调处理functionhandleCallback(code){fetchToken(code, verifier).then(token=>{secureStorage.save('mcp_token', token);callMCPService(token);});}
二、Streamable HTTP:
统一通信协议的革命性升级
2.1 从双端点到单端点的进化之路
2024-11-05 版本采用的 HTTP+SSE 双通道方案存在三大结构性缺陷:
典型案例:当 AI 助手同时执行"语音转文字+实时翻译"时,旧方案需要建立 4 个独立连接(2 工具 × 2 协议),导致移动端平均延迟增加 400ms。
新协议通过三大创新实现通信范式转换:
基于 MCP 官方测试平台的数据:
指标 | 旧协议(HTTP+SSE) | Streamable HTTP | 提升幅度 |
连接建立耗时 | 320ms±50ms | 180ms±20ms | 43.75% |
数据传输冗余度 | 18% | 5% | 72.2% |
断线恢复成功率 | 68% | 93% | 36.8% |
三、JSON-RPC 批处理:
效率革命的协议级支持
3.1 批处理机制的实现原理
新版规范第 4.2 条明确规定:
所有 MCP 实现必须支持 JSON-RPC 2.0 批处理规范。对于包含通知(notification)的批处理请求,服务端应在完成处理后返回 HTTP 202 Accepted 状态码。
合法请求示例:
json[{"jsonrpc":"2.0","id":1,"method":"text_analyze","params":{"text":"Hello"}},{"jsonrpc":"2.0","id":2,"method":"image_tag","params":{"url":"img.jpg"}},{"jsonrpc":"2.0","method":"log_event"} // 无ID的通知类型]
响应处理规则:
3.2 性能优化案例分析
假设处理 100 个独立请求:
// Go语言实现批处理并行执行funcHandleBatch(ctx context.Context, batch []RPCRequest)[]RPCResponse {varwg sync.WaitGroupresChan :=make(chanRPCResponse,len(batch))for_, req :=rangebatch {wg.Add(1)gofunc(r RPCRequest){deferwg.Done()result := processSingle(r)resChan <- result}(req)}wg.Wait()close(resChan)varresponses []RPCResponseforres :=rangeresChan {responses =append(responses, res)}returnresponses}
注意事项:
四、工具元数据:
安全与体验的双重进化
4.1 Tool Annotations 架构解析
tools:- name: database_backupannotations:# 标准行为提示 (遵循 ToolAnnotations 接口定义)title:"Database Backup" # 语义化标题readOnlyHint:false # 非只读操作destructiveHint:false # 非破坏性操作idempotentHint:true # 幂等操作(重复执行无副作用)openWorldHint:false # 作用域封闭(仅限本地数据库)
4.2 安全增强实践
当检测到destructiveHint: true时:
审计日志示例:
json{"action":"data_purge","user":"ai_agent_123","riskLevel":"critical","annotations": {"destructiveHint":true},"timestamp":"2025-03-27T08:15:30Z","mfaUsed":true}
基于元数据的策略引擎:
defgenerate_policy(tool):policy = {"effect":"allow"iftool.requiredScopeselse"deny","conditions": []}iftool.annotations.get('destructiveHint'):policy['conditions'].append({"type":"mfa","required":True})returnpolicy
五、智能进度通知:
从数字到语义的进化
5.1 动态消息通知机制
新增message字段支持结构化状态描述:
{"type":"rogressNotification",
"progress":65,"message":{"phase":"数据清洗","detail":"已处理 12000/20000 条记录","next_step":"即将开始特征提取"}}
应用价值:
六、多模态扩展:音频流支持落地
6.1 音频协议实现方案
新增audio/*内容类型支持:
httpPOST /voice-processContent-Type: audio/webmTransfer-Encoding: chunked<音频二进制流>
关键技术特性:
场景案例:智能客服系统可同时接收用户语音流并实时返回文字响应
七、参数补全:开发者体验升级
7.1 智能补全工作流程
GET /completions?prefix=dat响应:["date_format","data_source","dataset"]
八、会话管理:长时任务可靠性保障
8.1 会话全生命周期管理
核心标识:
Mcp-Session-Id:sess_XYZ123(UUIDv7格式)
断线恢复流程:
1. 客户端缓存最后接收的Event-ID(如159)2. 重连时携带:Last-Event-ID:159Mcp-Session-Id: sess_XYZ1233. 服务端从断点续传或返回增量更新
九、总结 - 构建下一代 AI 协作范式
9.1 对客户端的影响
技术适配挑战
体验升级机遇
9.2 对服务端的影响
架构改造需求
9.3 对开发者工具链的重构
SDK 关键升级点:
# 新一代SDK伪代码示例classMCPClient:def__init__(self):self.session =ResilientSession() # 自动重连+断点续传self.annotator =ToolAnnotationParser() # 元数据解析引擎self.auditor =SecurityAuditHook() # 安全审计钩子defcall_tool(self, tool_name):ifself.annotator.risk_level(tool_name) =='critical':self.auditor.log_operation(tool_name) # 自动触发审计
工具链升级带来:
9.4 如何快速接入新特性
Higress 已率先支持 Streamable HTTP 传输格式,并且对 MCP 2025-03-26 版本的多项特性都保持高优先级跟紧,如 Mcp-Session-Id 头的会话管理,并支持批量请求、响应和通知,以及 SSE 流的可恢复性等。
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |