深入解读 Model Context Protocol (MCP) 2025-06-18 修订:面向开发者的实战指南
通过这篇通俗易懂的博客文章,我们将带你了解 MCP 2025-06-18 版本的核心变化与最佳实践,帮助大家快速上手并应用到实际项目中。
目录
背景介绍:什么是 MCP?
Model Context Protocol(MCP)是一套专门用于大模型与各类服务器之间交互的开放协议。它定义了请求、响应以及工具调用等一系列标准格式,帮助开发者快速搭建稳定、安全的 AI 服务环境。
在 MCP 之前,不同 AI 平台各自为政,接口风格和安全方案皆不相同,导致集成成本高、维护难度大。MCP 诞生的初衷就是统一这些交互方式,让模型调用和工具访问有一致的体验。
适合人群:
对 AI 服务接口设计和安全有初步了解的后端开发者 希望在现有项目中集成大模型调用的产品或架构工程师
此次修订概览
2025-06-18 版本相较于上一个 2025-03-26 版本,重点聚焦在:
-
安全性:增强 OAuth、资源指示器等机制,避免令牌泄露风险 -
可用性:取消 JSON-RPC 批处理,简化请求逻辑;引入结构化输出,减少解析成本 -
可扩展性:支持多种工具输出格式,新增用户交互能力
整体来看,这次修订是一次“以开发者体验为核心”的优化,既照顾到最基础的请求兼容性,也通过细节提升交互效率。
十大核心改动详解
下面我们逐条进行解读,并给出示例和实战建议。
1. 移除 JSON-RPC 批处理支持
变更描述
-
移除对 JSON-RPC 批处理 的支持。 -
原因:批处理请求跨工具和任务时容易导致状态错乱,且大模型场景下并行度可通过其他方式控制。
实战影响
-
单次请求最大化单一任务:推荐将一个模型调用拆成多个独立请求,明确责任边界。 -
并行场景替换方案:可借助客户端异步库(如 async/await
)或任务队列来调度并行调用。
// 示例:不再支持批量数组
[
{"jsonrpc": "2.0", "method": "complete", "params": {...}, "id": 1},
{"jsonrpc": "2.0", "method": "complete", "params": {...}, "id": 2}
]
改为:
POST /v1/complete HTTP/1.1
Content-Type: application/json
{"jsonrpc": "2.0", "method": "complete", "params": {...}, "id": 1}
2. 支持结构化工具输出
变更描述
-
新增对 结构化工具输出的支持,定义了统一的 JSON schema,让工具调用结果更易解析。 -
参见 Structured Tool Output。
实战影响
-
前端可直接渲染:无需二次 HTML 解析; -
数据校验更简单:借助 JSON Schema 校验工具,提高可靠性; -
跨平台复用:同一份输出,可用于 Web/移动端/桌面端。
{
"tool": "weather",
"output": {
"type": "forecast",
"data": [{"day": "Monday", "high": 25, "low": 15}, ...]
}
}
3. MCP 服务器分类为 OAuth 资源服务器
变更描述
-
将 MCP 服务器明确 分类为 OAuth Resource Servers,并在 .well-known
路径下新增受保护资源元数据。 -
支持客户端自动发现对应的 Authorization Server。
实战影响
-
自动化授权流程:客户端可根据资源指示器,自动查找到授权端点; -
多租户支持更友好:在同一域名下区分不同资源,降低重复配置。
GET /.well-known/resource-server
{
"authorization_endpoint": "https://auth.example.com/oauth2/authorize",
"token_endpoint": "https://auth.example.com/oauth2/token"
}
4. 客户端实现资源指示器
变更描述
-
要求 MCP 客户端必须支持 RFC 8707 中定义的Resource Indicators,以防止恶意服务器获取非本意的令牌。
实战影响
-
请求示例:
POST /v1/complete HTTP/1.1 Authorization: Bearer abc123 Content-Type: application/json Resource: https://api.example.com/mcp { ... }
-
安全加成:令牌严格绑定请求资源,无法滥用。
5. 安全考虑与最佳实践更新
变更描述
-
对授权与密钥管理的安全考虑进行了澄清,并新增一整页 Security Best Practices 文档。
实战影响
-
密钥轮换建议:定期更新 API Key,避免长期有效; -
最小权限原则:仅授予模型调用所需的最基础权限; -
审计日志:记录调用详情与 IP 信息,便于追踪。
6. 支持用户交互信息获取(Elicitation)
变更描述
-
引入 Elicitation 机制,允许服务器在对话过程中向用户请求更多信息,例如缺失的参数或上下文。
实战影响
-
增强对话体验:在用户输入不完整时,智能提示补充;
-
降低错误率:避免因缺失字段导致的调用失败;
-
示例场景:
{ "elicitation": { "prompt": "您希望查询哪个城市的天气?", "requiredFields": ["city"] } }
7. 工具调用结果中新增资源链接
变更描述
-
在工具响应中可包含 resourceLinks 字段,指向相关文档或 API 链接。
实战影响
-
文档深度整合:客户端渲染时可附带“查看文档”按钮; -
提升开发效率:一键跳转到官方说明。
{
"tool": "translate",
"output": { ... },
"resourceLinks": ["https://docs.example.com/translate"]
}
8. HTTP 请求中强制指定协议版本
变更描述
-
规定后续所有 HTTP 请求必须在头部通过 MCP-Protocol-Version
明确协议版本。
实战影响
-
版本兼容管理:服务端可根据版本号决定路由或降级逻辑;
-
示例:
POST /v1/complete HTTP/1.1 MCP-Protocol-Version: 2025-06-18 Content-Type: application/json { ... }
9. 生命周期操作:从 SHOULD 到 MUST
变更描述
-
将原文档中对生命周期操作中 SHOULD
级别的建议提升为MUST
强制要求。
实战影响
-
严格流程管理:所有客户端和服务器必须实现完整的生命周期回调;
-
示例变更:
- Clients **SHOULD** send a `terminate` event when the session ends. + Clients **MUST** send a `terminate` event when the session ends.
其他模式变更一览
-
新增 _meta
字段:为更多接口类型添加了元信息,便于扩展; -
CompletionRequest 新增 context
字段:允许携带预先解析的变量,提升连续对话的上下文连贯性; -
新增 title
字段:用于显示友好的名称,name
保留为程序标识符。
这些更新主要是为了让协议模式更加灵活,减少自定义扩展时的冲突。
如何平滑升级到 2025-06-18 版本?
-
版本检测:检查 .well-known/resource-server
中的MCP-Protocol-Version
; -
安全配置:务必启用 RFC 8707 资源指示器,并更新 Client 认证逻辑; -
移除批处理:逐步替换批量请求代码,改为并行或串行单次请求; -
适配工具输出:更新 JSON Schema,使用结构化输出字段; -
回归测试:针对生命周期事件、Elicitation、resourceLinks 等新特性编写自动化测试。
常见问题解答 (FAQ)
Q1:为什么要移除 JSON-RPC 批处理?
A:批处理模式虽能减少 HTTP 请求次数,但在多工具场景下易引起状态管理混乱。改为单次请求有助于明晰调用顺序,同时现代 HTTP/2 支持多路复用,性能下降有限。
Q2:结构化输出适用哪些场景?
A:任何工具调用结果都建议采用结构化格式,尤其是需要在前端呈现表格、图表、卡片等组件时最为高效。
Q3:Elicitation 会不会打断主流程?
A:Elicitation 只是一个可选交互,如果客户端或用户无能力响应,服务端可降级为默认行为,不会强制中断。
Q4:升级过程中如何兼容旧版本?
A:通过 MCP-Protocol-Version
头部区分版本,并在服务端同时保留对 2025-03-26 的支持,逐步通知客户端切换。
结语:拥抱更安全、可扩展的交互协议
MCP 2025-06-18 版在安全、可用与可扩展性方面进行了多项改进。对开发者而言,这意味着更清晰的调用模式、更加可靠的授权流程以及友好的工具输出格式。
希望本文能帮助你快速上手新的 MCP 版本,并在实际项目中平滑过渡。让我们一起用更安全、可维护的标准协议,为下一代 AI 应用打下坚实基础!