首页 > 其他分享 >MCP(Model Context Protocol)模型上下文协议 理论篇8 - 根目录(Roots)

MCP(Model Context Protocol)模型上下文协议 理论篇8 - 根目录(Roots)

时间:2025-01-16 22:57:26浏览次数:3  
标签:Protocol name 列表 Context 服务器 根目录 roots 客户端

模型上下文协议(Model Context Protocol, MCP) 提供了一种标准化的方式,使客户端能够向服务器暴露文件系统的“根目录”(Roots)。根目录定义了服务器在文件系统中可以操作的边界,使服务器能够了解它们可以访问哪些目录和文件。支持该协议的客户端可以从服务器请求根目录列表,并在列表发生变化时接收通知。

用户交互模型(User Interaction Model)

在 MCP 中,根目录通常通过工作区(workspace)或项目配置界面暴露。

例如,实现可以提供工作区/项目选择器(workspace/project picker),允许用户选择服务器应有权访问的目录和文件。这可以与版本控制系统或项目文件中的自动工作区检测功能结合使用。

然而,实现可以自由地通过任何适合其需求的界面模式暴露根目录——协议本身并不强制规定任何特定的用户交互模型。

能力声明(Capabilities)

支持根目录的客户端必须在初始化时声明根目录能力:

{
  "capabilities": {
    "roots": {
      "listChanged": true
    }
  }
}

listChanged 表示客户端是否会在根目录列表发生变化时发出通知。

协议消息(Protocol Messages)

列出根目录(Listing Roots)

为了获取根目录,服务器发送 roots/list 请求:

请求:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "roots/list"
}

响应:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "roots": [
      {
        "uri": "file:///home/user/projects/myproject",
        "name": "我的项目(My Project)"
      }
    ]
  }
}

根目录列表变更(Root List Changes)

当根目录发生变化时,支持 listChanged 的客户端必须发送通知:

{
  "jsonrpc": "2.0",
  "method": "notifications/roots/list_changed"
}

消息流(Message Flow)

数据类型(Data Types)

根目录(Root)

根目录定义包括:

  • uri:根目录的唯一标识符。在当前规范中,这必须是一个 file:// URI。
  • name:可选的人类可读名称,用于显示。

根目录示例

项目目录(Project Directory)

{
  "uri": "file:///home/user/projects/myproject",
  "name": "我的项目(My Project)"
}

多个仓库(Multiple Repositories)

[
  {
    "uri": "file:///home/user/repos/frontend",
    "name": "前端仓库(Frontend Repository)"
  },
  {
    "uri": "file:///home/user/repos/backend",
    "name": "后端仓库(Backend Repository)"
  }
]

总结

根目录(Roots) 是 模型上下文协议(Model Context Protocol, MCP) 的一部分,旨在为客户端和服务器之间的文件系统交互提供标准化支持。通过定义根目录,协议明确了服务器在文件系统中的操作边界,确保服务器只能访问指定的目录和文件。客户端可以暴露根目录列表,并在列表发生变化时通知服务器,从而实现动态的权限管理。

根目录的作用

    • 根目录定义了服务器可以访问的文件系统范围。
    • 支持动态更新,客户端可以在根目录列表变化时通知服务器。

1. 用户交互模型

    • 根目录通常通过工作区(workspace)或项目配置界面暴露。
    • 实现可以结合版本控制系统或项目文件自动检测根目录。

2. 能力声明

    • 客户端需在初始化时声明是否支持根目录列表变更通知(listChanged)。

3. 协议消息

    • 服务器通过 roots/list 请求获取根目录列表。
    • 客户端通过 notifications/roots/list_changed 通知服务器根目录列表的变化。

4. 消息流

    • 服务器与客户端通过请求和通知实现根目录的发现与更新。

5. 数据类型

    • 根目录包含 uri(唯一标识符)和 name(可读名称)。
    • 支持单项目目录和多仓库场景。

应用场景

  • 单项目目录:适用于单个项目的文件访问控制。
  • 多仓库管理:适用于同时管理多个代码仓库的场景,如前端和后端分离的项目。

优势

  • 标准化:提供统一的协议规范,便于不同客户端和服务器的集成。
  • 灵活性:允许客户端根据需求自定义根目录的暴露方式。
  • 动态更新:支持根目录列表的实时变更通知,确保服务器始终访问最新的文件范围。

通过 根目录,客户端和服务器可以更安全、高效地协作,同时为用户提供灵活的文件访问控制能力。

标签:Protocol,name,列表,Context,服务器,根目录,roots,客户端
From: https://blog.csdn.net/aiqlcom/article/details/145096712

相关文章

  • Module yaml error: Unexpected key in data: static_context [line 9 col 3]
    yum安装报错处理用户86858821006132023-04-07226阅读1分钟 Moduleyamlerror:Unexpectedkeyindata:static_context[line9col3]Moduleyamlerror:Unexpectedkeyindata:static_context[line9col3]Moduleyamlerror:Unexpectedkeyindata:stat......
  • 【git】Qualcomm 代码clone失败出现RProtocol https not supported or disabled in li
    问题描述    在尝试从https://服务器(ChipCode是)克隆任何内容时收到此输出,则表示您正在使用的curl/libcurl实例是在不支持此协议的情况下构建的。如果在构建时运行的configure脚本找不到curl使SSL工作所需的所有库和包含文件,则可能会发生这种情况。如果conf......
  • DraggableSheetContext
    DraggableSheetContext基础库3.2.0开始支持,低版本需做兼容处理。相关文档:draggable-sheetDraggableSheet实例,可通过wx.createSelectorQuery的NodesRef.node方法获取。方法DraggableSheetContext.scrollTo(Objectobject)滚动到指定位置。size取值[0,1],size......
  • 如何修改网站根目录权限?
    您好,修改网站根目录权限是确保网站正常运行和安全的重要步骤。权限设置不当可能导致网站无法访问或出现各种错误。以下是详细的步骤和注意事项,帮助您正确设置网站根目录权限:理解权限模式:Linux系统中,文件和目录权限通常用三位数字表示,如755或777。第一位数字代表文件所有者的......
  • MCP(Model Context Protocol)模型上下文协议 进阶篇3 - 传输
    MCP目前定义了两种标准的客户端-服务端通信传输机制:stdio(标准输入输出通信)HTTPwithServer-SentEvents(SSE)(HTTP服务端发送事件)客户端应尽可能支持 stdio。此外,客户端和服务端也可以以插件方式实现自定义传输机制。1.stdio传输在stdio传输中:客户端将MCP服务......
  • 根目录挂载,raid使用,bcache缓存策略
    一.了解挂载命令,常用的命令lsblk#查看磁盘blkid#查看磁盘的UUIDdd#拷贝磁盘命令使两块盘的UUID一致ddif=拷贝方of=被拷贝ddif=/dev/sda1of=/dev/sdb1#将sda1的数据拷贝到sdb1mount/dev/sda/home配置系统前给主机添加磁盘并配置reid二.三.reid完成......
  • LivePusherContext.stop
    LivePusherContext.stop(Objectobject)以Promise风格调用:不支持小程序插件:支持相关文档:live-pusher组件功能描述停止推流,同时停止摄像头预览参数Objectobject属性类型默认值必填说明successfunction否接口调用成功的回调函数failfunction......
  • LivePusherContext.stopBGM
    LivePusherContext.stopBGM(Objectobject)基础库2.4.0开始支持,低版本需做兼容处理。以Promise风格调用:不支持小程序插件:支持相关文档:live-pusher组件功能描述停止背景音参数Objectobject属性类型默认值必填说明successfunction否接口调......
  • LivePusherContext.stopPreview
    LivePusherContext.stopPreview(Objectobject)基础库2.7.0开始支持,低版本需做兼容处理。以Promise风格调用:不支持小程序插件:支持相关文档:live-pusher组件功能描述关闭摄像头预览参数Objectobject属性类型默认值必填说明successfunction否......
  • LivePusherContext.toggleTorch
    LivePusherContext.toggleTorch(Objectobject)基础库2.1.0开始支持,低版本需做兼容处理。以Promise风格调用:不支持小程序插件:支持相关文档:live-pusher组件功能描述切换手电筒参数Objectobject属性类型默认值必填说明successfunction否接......