
前言
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。