用户交互模型
MCP 中的 roots 通常通过工作区或项目配置界面暴露。 例如,实现可以提供一个工作区/项目选择器,允许用户选择服务器应有权访问的目录和文件。这可以与从版本控制系统或项目文件进行的自动工作区检测相结合。 然而,实现可以自由地通过任何适合其需求的界面模式暴露 roots——协议本身不强制规定任何特定的用户交互模型。能力
支持 roots 的客户端**必须(MUST)**在每个请求的_meta.io.modelcontextprotocol/clientCapabilities 中声明 roots 能力:
协议消息
列出 Roots
要在处理一个客户端请求期间检索 roots,服务器发送一个包含roots/list 请求的 InputRequiredResult:
输入请求(在 InputRequiredResult.inputRequests 内投递):
inputResponses 内返回):
消息流
数据类型
Root
一个 root 定义包括:uri:root 的唯一标识符。在当前规范中,这**必须(MUST)**是一个file://URI。name:用于显示目的的可选人类可读名称。
项目目录
多个仓库
错误处理
如果发生错误,客户端不需要用一条错误消息重放初始调用,因为在InputRequiredResult 模式下服务器并不等待响应。
安全考量
-
客户端必须(MUST):
- 只暴露具有适当权限的 roots
- 校验所有 root URI 以防止路径遍历
- 实现适当的访问控制
- 监控 root 的可访问性
-
服务器应当(SHOULD):
- 处理 roots 变得不可用的情况
- 在操作期间尊重 root 边界
- 对照所提供的 roots 校验所有路径
实现指南
-
客户端应当(SHOULD):
- 在向服务器暴露 roots 之前提示用户同意
- 为 root 管理提供清晰的用户界面
- 在暴露之前校验 root 的可访问性
- 监控 root 变更
-
服务器应当(SHOULD):
- 在使用之前检查 roots 能力
- 在操作中尊重 root 边界
- 适当地缓存 root 信息