MCP 客户端特性现状:Elicitation 当立,Roots 与 Sampling 已弃用(SEP-2577)
2026-07-28 规范版重排了 MCP 客户端特性:Roots 与 Sampling 被弃用(SEP-2577,保留期至少 12 个月),Elicitation 保留并新增 URL 模式。逐条拆解三特性的现状、弃用原因与迁移方向。
操作步骤
盘点能力声明
检查客户端与服务器代码里的 roots 与 sampling 能力声明及调用点,确认哪些交互路径依赖这两个特性。
替换 Roots 信息传递
把'告知服务器相关目录/文件'的用途改为经工具参数传入路径、经资源 URI 暴露内容、或在服务器配置中声明;注意 roots 本就不是访问控制,替换方案需自行补足权限边界。
替换 Sampling 调用并声明 Elicitation
将借客户端调用 LLM 的路径改为直连 LLM provider API;如需向用户收集信息或引导敏感交互,按新规范声明 elicitation 能力(form / url 模式)并遵守敏感信息红线。
写 MCP 客户端前必须知道的一件事:2026-07-28 规范版通过 SEP-2577 弃用了 Roots 与 Sampling 两个客户端特性——按特性生命周期政策,两者在规范中保留至少 12 个月,新实现 SHOULD NOT 采用;三者中唯一保留并持续演进的是 Elicitation,且它扩展出了全新的 URL 模式。本文基于 2026-09-08 重抓的三份官方规范页逐条拆解现状、弃用背景与迁移方向,供存量实现对照迁移。
1. 现状总览:一保留、两弃用
| 特性 | 2026-07-28 规范版状态 | 说明 |
|---|---|---|
| Elicitation | 保留,持续演进 | Form / URL 双模式;Form 收结构化数据,URL 承接敏感交互 |
| Roots | 已弃用(SEP-2577) | 保留 ≥12 个月;迁移到工具参数 / 资源 URI / 服务器配置 |
| Sampling | 已弃用(SEP-2577) | 保留 ≥12 个月;迁移到直连 LLM provider API |
两条通用的生命周期规则:弃用特性在规范中保留至少 12 个月(自该版发布起算),到期才可移除;新实现 SHOULD NOT 采用弃用特性,存量实现 SHOULD 迁移。
2. Elicitation:保留者的双模式设计
Elicitation 让服务器在处理请求的过程中,经客户端向用户请求额外信息——客户端保持对用户交互与数据共享的控制权。2026-07-28 版把它扩展成两种模式:
Form 模式:结构化数据收集
服务器请求用户提供结构化数据,可用可选的 JSON Schema 校验响应。能力声明形如 elicitation: {form: {}, url: {}}(空对象等价于仅声明 Form 模式,向后兼容);声明方必须至少支持一种模式,服务器不得向未声明对应模式的客户端发送请求。
{
"_meta": {
"io.modelcontextprotocol/clientCapabilities": {
"elicitation": { "form": {}, "url": {} }
}
}
}
URL 模式:敏感交互带外完成
服务器把用户引导到外部 URL 完成敏感交互——这类交互不经 MCP 客户端。规范给的示例是 API key 提供:请求体带 mode: "url"、目标 url 与 message;用户返回 action: "accept" 表示同意前往,但交互本身在带外进行,客户端不直接获知结果——客户端重试原请求时,服务器根据回传的 requestState 判断交互是否完成。
{
"method": "elicitation/create",
"params": {
"mode": "url",
"url": "https://mcp.example.com/ui/set_api_key",
"message": "Please provide your API key to continue."
}
}
公告同时给了一个重要用例:URL 模式可用于承接 OAuth 授权流,与《MCP 授权机制拆解:OAuth 2.1 落进 MCP 的完整流程(2026-07-28 规范版)》里的授权链路设计直接衔接。
安全红线(MUST 级)
- 服务器 MUST NOT 用 Form 模式请求密码、API key、access token、支付凭据;
- 此类敏感交互 MUST 走 URL 模式。"敏感信息"指授予访问权或授权交易的机密与凭据;一般联系信息(姓名、邮箱、用户名)不在此列,由服务器自行斟酌、以用户可审查可拒绝为前提。
客户端侧的 MUST:UI 必须明示是哪个服务器在请求信息;提供清晰的拒绝与取消选项;Form 模式允许用户发送前审阅并修改响应;URL 模式必须展示目标域名/主机并在跳转前取得用户同意。
{
"action": "accept",
"content": { "propertyName": "value" }
}
(URL 模式的 accept 不含 content;另有 decline / cancel 两种动作。)
3. Roots:信息性指导的退场
Roots 的原设计:客户端向服务器暴露文件系统的"根",告知哪些目录和文件是相关的,服务器据此聚焦操作。规范原本就写明两条限制——它是信息性指导而非访问控制,协议不强制服务器停留在 roots 内;uri 必须是 file:// URI。
弃用后的迁移方向(引自弃用声明):把目录与文件经工具参数、资源 URI 或服务器配置传入。迁移时注意:原来指望 roots 充当"权限边界"的实现要重新设计——它从来不是访问控制,弃用只是把这件事挑明。
4. Sampling:服务器借模型通道的退场
Sampling 的原设计:服务器经客户端请求 LLM 采样(completions / generations),支持文本、音频、图像交互,可在 prompt 中带入 MCP 上下文——价值是客户端保持对模型访问、选择与权限的控制,服务器无需自己的 API key。它也有完整的配套约束: SHOULD 始终有人类在环可拒绝采样请求;客户端应提供可审阅可编辑 prompt 的 UI;带工具的采样需声明 sampling.tools 能力,服务器不得向未声明方发送。
弃用后的迁移方向:直连 LLM provider API——模型调用的控制与凭据管理回到实现方自己的 provider 集成。存量使用在 12 个月保留期内照常工作,新实现不应再声明 sampling 能力。
5. 迁移清单与常见错误
- 先盘点能力声明:
roots、sampling、sampling.tools的声明与调用点都在迁移清单上;替换顺序建议"先补替代路径、再撤旧声明",避免功能真空。 - Roots 换成"配置传入"不是换个名字:工具参数传入路径后,路径校验与权限边界由你的实现负责——原来就不是访问控制,现在更不是。
- Sampling 替代要重做安全设计:直连 provider API 后,"客户端在环审批"的保护没有了;prompt 注入防护与费用控制需要自己实现。
- Elicitation 不要超红线:Form 模式请求 API key 是 MUST 级违规;敏感交互一律 URL 模式 + 域名展示 + 同意。
- 能力声明要精确:声明了不支持的特性或漏声明已支持的特性,都会让对端行为不可预期(服务器不得向未声明能力的客户端发送对应请求)。
6. 下一步
- 授权链路(与 Elicitation URL 模式衔接):《MCP 授权机制拆解:OAuth 2.1 落进 MCP 的完整流程(2026-07-28 规范版)》。
- 实现层安全清单:《MCP 安全指南:官方 8 类攻击面与缓解清单》。
- stdio 本地场景的传输细节:《MCP stdio 传输详解:消息帧、进程生命周期与向后兼容(2026-07-28 规范版)》。
关键要点
- SEP-2577 弃用了 Roots 与 Sampling 两个客户端特性:按特性生命周期政策保留至少 12 个月(自 2026-07-28 版发布起算),新实现 SHOULD NOT 采用
- Roots 迁移方向:把目录/文件经工具参数、资源 URI 或服务器配置传入——它原本只是信息性指导而非访问控制,协议从不强制服务器停留在 roots 内
- Sampling 迁移方向:直连 LLM provider API;它原本让服务器借客户端调用 LLM(无需服务器 API key),支持文本/音频/图像交互
- Elicitation 保留并扩展:Form 模式收结构化数据(可选 JSON Schema 校验);URL 模式把用户引导到外部 URL 完成敏感交互(如 OAuth 流程、支付流)——敏感交互不经 MCP 客户端
- Elicitation 安全红线:服务器 MUST NOT 用 Form 模式请求密码、API key、access token、支付凭据;此类交互 MUST 走 URL 模式
- 响应三动作模型:accept(含提交数据)/ decline(明确拒绝)/ cancel(取消)——URL 模式的 accept 只代表用户同意离开,交互结果经 requestState 回查
常见问题
官方参考
相关文章
Codex CLI 接入 MCP 服务器:config.toml 配置全字段手册
Codex CLI 通过 config.toml 里的 [mcp_servers] 表接 MCP 服务器:stdio 用 command/args/env,远程用 url/bearer_token/http_headers,还有 startup_timeout_sec、enabled_tools、required 等控制面。本文按 codex 源码的配置结构逐项讲清。
阅读全文MCP Apps 解读:让 MCP Server 在对话里渲染交互式 UI(SEP-1865)
MCP Apps(SEP-1865,Final)拆解:工具声明 ui:// 资源,宿主在沙箱 iframe 里渲染交互式 HTML——数据可视化、表单、仪表盘直接长在对话里。机制、安全模型、官方 SDK 代码与八家宿主支持面一文讲清。
阅读全文Model Hardware Standard 解读:MHS 如何让 AI 智能体安全操控物理设备
Anthropic 8-27 公告的 Model Hardware Standard(MHS)研究预览版拆解:标准化驱动 + read/write 原语 + MCP/CLI/代码文件三种控制机制,六家机构实测数据与八家硬件厂商跟进——开源在即的物理设备操控标准。
阅读全文订阅 GPTMap Weekly
每周一封邮件,精选 OpenAI 重要更新、深度解读与最佳实践。无广告,可随时退订。
提交后将在新标签页打开 Buttondown 完成订阅确认。