深入解读 Model Context Protocol (MCP) 2025-06-18 修订:面向开发者的实战指南

技术网络

通过这篇通俗易懂的博客文章,我们将带你了解 MCP 2025-06-18 版本的核心变化与最佳实践,帮助大家快速上手并应用到实际项目中。


目录

  1. 背景介绍:什么是 MCP?

  2. 此次修订概览

  3. 十大核心改动详解

    1. 移除 JSON-RPC 批处理支持
    2. 支持结构化工具输出
    3. MCP 服务器分类为 OAuth 资源服务器
    4. 客户端实现资源指示器
    5. 安全考虑与最佳实践更新
    6. 支持用户交互信息获取(Elicitation)
    7. 工具调用结果中新增资源链接
    8. HTTP 请求中强制指定协议版本
    9. 生命周期操作:从 SHOULD 到 MUST
  4. 其他模式变更一览

  5. 如何平滑升级到 2025-06-18 版本?

  6. 常见问题解答 (FAQ)

  7. 结语:拥抱更安全、可扩展的交互协议


背景介绍:什么是 MCP?

Model Context Protocol(MCP)是一套专门用于大模型与各类服务器之间交互的开放协议。它定义了请求、响应以及工具调用等一系列标准格式,帮助开发者快速搭建稳定、安全的 AI 服务环境。

在 MCP 之前,不同 AI 平台各自为政,接口风格和安全方案皆不相同,导致集成成本高、维护难度大。MCP 诞生的初衷就是统一这些交互方式,让模型调用和工具访问有一致的体验。

适合人群

  • 对 AI 服务接口设计和安全有初步了解的后端开发者
  • 希望在现有项目中集成大模型调用的产品或架构工程师

此次修订概览

2025-06-18 版本相较于上一个 2025-03-26 版本,重点聚焦在:

  • 安全性:增强 OAuth、资源指示器等机制,避免令牌泄露风险
  • 可用性:取消 JSON-RPC 批处理,简化请求逻辑;引入结构化输出,减少解析成本
  • 可扩展性:支持多种工具输出格式,新增用户交互能力

整体来看,这次修订是一次“以开发者体验为核心”的优化,既照顾到最基础的请求兼容性,也通过细节提升交互效率。


十大核心改动详解

下面我们逐条进行解读,并给出示例和实战建议。

1. 移除 JSON-RPC 批处理支持

变更描述

  • 移除JSON-RPC 批处理 的支持。
  • 原因:批处理请求跨工具和任务时容易导致状态错乱,且大模型场景下并行度可通过其他方式控制。

实战影响

  1. 单次请求最大化单一任务:推荐将一个模型调用拆成多个独立请求,明确责任边界。
  2. 并行场景替换方案:可借助客户端异步库(如 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

实战影响

  1. 前端可直接渲染:无需二次 HTML 解析;
  2. 数据校验更简单:借助 JSON Schema 校验工具,提高可靠性;
  3. 跨平台复用:同一份输出,可用于 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 机制,允许服务器在对话过程中向用户请求更多信息,例如缺失的参数或上下文。

实战影响

  1. 增强对话体验:在用户输入不完整时,智能提示补充;

  2. 降低错误率:避免因缺失字段导致的调用失败;

  3. 示例场景

    {
      "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 版本?

  1. 版本检测:检查 .well-known/resource-server 中的 MCP-Protocol-Version
  2. 安全配置:务必启用 RFC 8707 资源指示器,并更新 Client 认证逻辑;
  3. 移除批处理:逐步替换批量请求代码,改为并行或串行单次请求;
  4. 适配工具输出:更新 JSON Schema,使用结构化输出字段;
  5. 回归测试:针对生命周期事件、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 应用打下坚实基础!