MCP Roots 已弃用怎么办:roots/list 兼容核验与工作区边界迁移
旧版 MCP 文件工具常把“允许访问哪些目录”交给 Roots:客户端声明工作区,服务端通过 roots/list 获取目录,再决定能否读取文件。这个机制现在进入了迁移期。2026-07-28 规范已经把 Roots 标为弃用,但旧客户端不会立刻消失,生产系统仍需要把兼容核验和路径越界拦截做好。
就算碰到 Roots 已经标记弃用的提示,也不用急着全量替换现有逻辑,先把兼容校验层搭好,再逐步把工作区范围迁移到显式授权的新路径上,就能避免文件读写越界、切换工作区读错内容的问题。
- 初始化阶段先看客户端是否声明
capabilities.roots,再决定是否请求roots/list。 - Root URI 只是工作区提示,不等于操作系统权限;每次读写仍要做规范化路径和边界校验。
listChanged为 true 时,收到notifications/roots/list_changed后要重新拉取并替换缓存。- 新项目优先把目录、资源 URI 或授权范围放进工具参数、资源 URI 或服务端配置。
先用一次基线请求看清 Roots 到底提供了什么
一个文件分析工具收到“扫描当前项目”的请求时,不能直接把服务器所在机器的工作目录当成项目目录。旧协议的正确顺序是:客户端在初始化能力中声明 Roots,服务端在处理具体请求时发送 roots/list,客户端返回一组 file:// URI 和可选名称。

{
"method": "roots/list",
"params": {}
}
{
"result": {
"roots": [
{"uri": "file:///workspace/payments", "name": "payments"}
]
}
}
这里能得到的是“客户端允许服务端关注的根目录列表”,不是一张可以绕过文件系统权限的授权票据。服务端仍应把 URI 解析成绝对路径,拒绝不支持的 scheme,并对后续目标路径逐次验收。
能力协商和根目录缓存要分成两个检查点
服务端不要假定每个客户端都支持 Roots。初始化结果里没有 capabilities.roots 时,应返回明确的“不支持工作区选择”错误,或改走工具参数;不要盲发 roots/list 等待超时。
| 检查项 | 通过条件 | 失败处理 |
|---|---|---|
| 能力声明 | 存在 roots,并确认 listChanged | 回退到工具参数或服务端配置 |
| URI 格式 | 使用 file://,解码后是绝对路径 | 拒绝未知 scheme、相对路径和空 URI |
| 缓存更新 | 通知后重新请求并原子替换根列表 | 暂停受影响的文件操作 |
listChanged 只说明客户端会在列表变更时通知服务端。它不代表服务端可以继续使用旧缓存,更不代表某个根目录永久有效。把根列表和连接、用户身份、请求关联起来,才能避免工作区切换后读错目录。
路径边界必须在每次文件操作前重新判断
最常见的漏洞不是 roots/list 返回了错误目录,而是服务端把用户传入的 ../secrets.env 直接拼在根目录后面。稳妥做法是先 URL 解码,再规范化路径,最后判断目标是否位于某个已验证根目录之下;判断时要处理符号链接和大小写敏感差异。
root := cleanAndResolve(rootURI)
target := cleanAndResolve(join(root, userPath))
if !isWithin(target, root) {
return ErrOutsideWorkspace
}
return readFile(target)
这段伪代码表达的是校验顺序,不是把 Roots 当成沙箱。真正的隔离还需要操作系统权限、容器挂载、符号链接策略和审计日志共同完成。对写入、删除、批量扫描等高影响动作,建议额外要求工具参数里的明确范围和用户确认。
收到 roots/list_changed 后怎么避免读到旧工作区
用户在客户端切换项目时,客户端会发送 notifications/roots/list_changed。服务端收到后先把旧列表标记为过期,再请求新的 roots/list。在新列表返回前,不要让后台扫描任务继续扩展旧目录;已经打开的文件句柄也应绑定旧请求的生命周期。

- 记录通知到达时的连接、用户和当前工作区版本号。
- 暂停依赖根目录缓存的新文件任务,避免通知和读取并发造成竞态。
- 重新拉取列表并生成新版本,完成路径校验后再恢复任务。
- 把旧版本任务收口为取消或完成,不要把新根目录套到旧任务上。
2026-07-28 之后,新项目应该把边界放在哪里
Roots 被弃用,不等于旧接口当天失效,而是新设计不应继续把它当成主要扩展点。根据 MCP 的弃用说明,常见替代方向有三种:
- 工具参数:让
scan_project接收明确的项目标识或相对路径,服务端按账号配置映射到实际目录。 - 资源 URI:由客户端或服务端暴露已选择的资源,工具只处理传入的资源标识,不自行发现整棵文件树。
- 服务端配置:在部署配置中固定允许的工作区,适合无人值守任务和严格的租户隔离。
迁移时可以保留 Roots 兼容层:旧客户端继续走 roots/list,新客户端走显式参数;两条路径最终都汇聚到同一个 isWithin 校验器和同一套审计事件。这样改动集中,退出 Roots 时也不必重新实现文件访问安全。
上线前用四个断言验收工作区边界
- 没有 Roots 能力的客户端是否得到可解释的回退结果,而不是超时?
file://URI 解码、路径规范化、符号链接和大小写处理是否有测试?- 根列表变更时,旧缓存、后台任务和打开的文件是否会被错误复用?
- 新接口是否已经把范围放进工具参数、资源 URI 或服务端配置,并复用同一个边界校验器?
相关问题
Roots 已弃用后,旧客户端还能不能继续用?
可以继续做兼容,但要按目标协议版本和 SDK 的弃用提示安排迁移。兼容期内仍要保留能力核验、路径校验和更新通知处理。
拿到 Root URI 就能读取目录外的文件吗?
不能。Root 只是服务端可操作范围的协议输入,操作系统权限和每次目标路径的边界判断仍然有效。
客户端没有设置 listChanged 怎么办?
把根列表视为不会主动通知变化,按请求或连接生命周期重新获取,或者要求用户通过显式工具参数传入项目范围。
工具参数和 Roots 能否同时保留?
可以。兼容层可接受 Roots,新路径优先使用显式参数;两者都必须归一化到同一套授权和路径校验逻辑。
MCP Roots 的迁移重点不是把 roots/list 换成另一个 RPC,而是把“工作区边界”从隐含的客户端能力变成可验证、可审计的输入。旧协议先做好兼容,新项目再把范围收进工具参数、资源 URI 或服务端配置,文件访问才不会随着协议版本变化失去安全边界。
GitHub Desktop 怎么预览 Pull Request:Changes、History 与 base 分支核对
- 上一篇
- GitHub Desktop 怎么预览 Pull Request:Changes、History 与 base 分支核对
- 下一篇
- PHP 8.4 mb_ucfirst 怎么处理多字节标题首字母:编码、空字符串与旧版本兼容
-
- 科技周边 · 人工智能 | 6小时前 | 人工智能 · mcp · sampling · 协议迁移 · MRTR · 模型 API · MCP Sampling sampling/createMessage MCP 2026-07-28 MRTR SEP-2577 大模型 API
- MCP Sampling 为什么不该继续扩张:模型责任、上下文过滤与兼容验收
- 213浏览 收藏
-
- 科技周边 · 人工智能 | 9小时前 | oauth · 人工智能 · mcp · ai agent · OAuth MCP redirect_uri iss CIMD Client ID Metadata Documents
- MCP OAuth 登录为何报 redirect_uri:iss、CIMD 与授权服务器绑定怎么核对
- 267浏览 收藏
-
- 科技周边 · 人工智能 | 14小时前 |
- Gemini Interactions API 迁移验收清单:6 类断言覆盖 steps、工具和 SSE
- 376浏览 收藏
-
- 科技周边 · 人工智能 | 14小时前 |
- Gemini Interactions API 迁移怎么做:outputs 改 steps、response_format 与流式事件兼容
- 367浏览 收藏
-
- 科技周边 · 人工智能 | 2天前 | anthropic · claude · AI应用开发 · cache_control Claude Prompt Caching 缓存命中
- Claude Prompt Caching 怎么验收:静态前缀、动态尾部与缓存命中率
- 363浏览 收藏
-
- 科技周边 · 人工智能 | 2天前 |
- MCP notifications/progress 怎么接:progressToken、递增进度与超时收口
- 241浏览 收藏
-
- 科技周边 · 人工智能 | 2天前 |
- MCP elicitation/create 怎么设计:工具调用中的表单输入与敏感信息边界
- 340浏览 收藏
-
- 科技周边 · 人工智能 | 2天前 |
- Gemini URL Context 取证链怎么做:Go 关联 retrieved_url、引用与 token 用量
- 320浏览 收藏
-
- 科技周边 · 人工智能 | 2天前 |
- Gemini API URL Context 怎么验收:Go 识别抓取状态、引用标注与失败回退
- 426浏览 收藏
-
- 科技周边 · 人工智能 | 2天前 |
- MCP 2026-07-28 怎么迁移:无会话请求、MRTR 与工具调用验收
- 407浏览 收藏
-
- 科技周边 · 人工智能 | 2天前 | 安全 · mcp · ai agent · MCP ToolAnnotations readOnlyHint destructiveHint idempotentHint
- MCP ToolAnnotations 上线前怎么核对:四个 Hint 的实测与拦截
- 195浏览 收藏
-
- 科技周边 · 人工智能 | 2天前 | 安全 · mcp · ai agent · MCP ToolAnnotations readOnlyHint
- MCP 工具注解怎么做安全验收:readOnlyHint、destructiveHint 与幂等边界
- 452浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ljg-skills
- ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
- 4950次使用
-
- MELO音乐
- MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
- 4517次使用
-
- UniScribe
- UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
- 4463次使用
-
- 剧云
- 剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
- 4707次使用
-
- 万象有声
- 万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
- 4661次使用
-
- CodeGeeX for Jetbrains IDEs正式上线!
- 2023-01-17 284浏览
-
- 技术阿里云实现ocr批量图片和pdf文件表格图片转换excel文档/支持票据图片提取/普通图片文字提取处理
- 2023-01-18 387浏览
-
- 直播预告|FeatureStore Meetup V2
- 2023-01-10 328浏览
-
- 深入浅出特征工程 – 基于 OpenMLDB 的实践指南(上)
- 2023-02-25 426浏览
-
- 开源机器学习数据库OpenMLDB v0.4.0产品介绍
- 2023-01-10 147浏览

