
前言
MCP(Model Context Protocol)协议于 2025-06-18 发布了最新版本,这是一次涵盖安全性增强、功能补完与规范简化的重大更新。本次更新不仅改进了工具调用与资源交互的灵活性,还引入了结构化数据验证、elicitation 机制和更严格的版本协商策略,进一步提升了协议在实现中的可扩展性、安全性与开发者体验。
准备好了吗?准备一杯你最喜欢的咖啡或茶,随着本文一探究竟吧。

📌 重大变化
1. 移除对 JSON‑RPC 批处理的支持。
在实现 Streamable HTTP 传输时,未发现批处理的实际需求;JSON‑RPC 的通知/响应模型也难以满足实时性和并发调用需求,故为简化规范、避免歧义而移除此功能。
2. 增强工具调用结果,新增结构化输出功能。
引入 outputSchema 和 structuredContent 字段,目标是在不破坏现有 content 结构的前提下,为简单 JSON 输出场景提供轻量、可验证的格式化通道,尤其有助于提升与不受信任服务器交互时的数据安全性与可靠性。
3. 将 MCP 服务器归类为 OAuth 资源服务器,并添加受保护资源元数据以便发现对应的授权服务器。
将 MCP 服务器明确定位为 OAuth 资源服务器,并通过公开 Protected Resource Metadata(RFC 9728)指向其授权服务器,方便客户端自动发现、避免滥用访问令牌,并提升整体安全性与部署一致性。
4. 强制要求 MCP 客户端实现遵循 RFC 8707 的 Resource Indicators,以防止恶意服务器获取访问令牌。
5. 增加了对授权规范中的安全注意事项及最佳实践的说明,并新增了"安全最佳实践"页面。
6. 支持 "elicitation" 功能,使服务器在交互中可向用户额外请求信息。
MCP 此前缺乏标准方式让服务器在交互过程中动态请求用户补充信息,导致开发者需依赖多步骤工具调用或自定义协议。该引入 "elicitation" 能力,为工作流中的确认、澄清、登录跳转等情境提供结构化输入机制,完善模型、用户与服务器三者之间的双向交互闭环。
示例:
为了向用户请求信息,服务器发送 elicitation/create 请求:
Request: 要求:
json
{
"jsonrpc": "2.0",
"id": 1,
"method": "elicitation/create",
"params": {
"message": "Please provide your GitHub username"
}
}
Response: 回复:
css
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "chenmingyong0423"
}
]
}
}
7. 工具调用结果中新增资源链接(resource links)类型。
为支持工具返回外部或大型资源但避免直接嵌入其内容,引入新的 ResourceLink 类型,允许工具调用返回可供客户端后续访问的资源引用,解决嵌入式内容在交互流中不可行或不高效的场景需求,如延迟加载、大文件、临时资源等。
8. 要求在使用 HTTP 传输时,通过 MCP-Protocol-Version 请求头协商指定后续请求的协议版本。
当前协议中,客户端在初始化阶段协商协议版本后,若未启用 session 模式,后续请求将无法携带该版本信息,导致服务端无法正确识别其行为标准。为支持无状态 HTTP 请求场景,要求客户端在每个请求中通过 MCP-Protocol-Version 请求头明确声明所使用的协议版本,从而确保多版本环境下的兼容性与正确解析。
9. 将 Lifecycle Operation 描述中的(SHOULD)改成(MUST)。
旧内容:
markdown
During the operation phase, the client and server exchange messages according to the negotiated capabilities.
Both parties **SHOULD**:
- Respect the negotiated protocol version
- Only use capabilities that were successfully negotiated
更新后:
markdown
During the operation phase, the client and server exchange messages according to the negotiated capabilities.
Both parties **MUST**:
- Respect the negotiated protocol version
- Only use capabilities that were successfully negotiated
🛠️ 其它 Schema 更改
1. 为附加接口类型增加 _meta 字段,并指定 正确的用法。
2. 在 CompletionRequest 中添加 context 字段,使其能包含先前解析的变量。
为支持上下文相关的参数补全场景(如根据已选 GitHub 用户名补全仓库名),在 CompletionRequest 中新增 context 字段,使客户端可将此前解析的变量一并传递给服务器,从而提供更准确、相关性更高的建议。
3. 新增 title 字段用于人类友好的展示名称,从而可以将 name 专用于程序化标识。
为提升终端用户体验,为协议中的对象(如资源、工具、提示等)统一引入可选字段 title,用于展示更友好的人类可读名称,而将 name 保留为程序化标识。
你好,我是陈明勇,一名热爱技术、乐于分享的开发者,同时也是开源爱好者。
我专注于分享 Go 语言相关的技术知识,同时也会深入探讨 AI 领域的前沿技术。
成功的路上并不拥挤,有没有兴趣结个伴?
Go 开源库代表作 :go-mongox 、go-optioner。