在 MCP 中理解根 (Roots)
根是 MCP 中的一个概念,用于定义服务器操作的边界。它们为客户端提供了一种通知服务器相关资源及其位置的方式。
什么是根 (Roots)?
根是客户端建议服务器应关注的 URI。当客户端连接到服务器时,它会声明服务器应该处理哪些根。根主要用于文件系统路径,但也可以是任何有效的 URI,包括 HTTP URL。
例如,根可以是:
file:///home/user/projects/myapp
https://api.example.com/v1
为什么使用根?
根有几个重要的作用:
- 指导:它们通知服务器相关的资源和位置
- 清晰:根明确了哪些资源是工作区的一部分
- 组织:多个根让你可以同时处理不同的资源
根是如何工作的?
当客户端支持根时,它会:
- 在连接时声明
roots
功能 - 提供建议的根列表给服务器
- 当根发生变化时,通知服务器(如果支持)
虽然根是信息性的,不是强制执行的,但服务器应当:
- 尊重提供的根
- 使用根 URI 来定位和访问资源
- 优先在根的边界内进行操作
常见的用例
根通常用于定义:
- 项目目录
- 仓库位置
- API 端点
- 配置位置
- 资源边界
最佳实践
在使用根时:
- 仅建议必要的资源
- 使用清晰、描述性的根名称
- 监控根的可访问性
- 优雅地处理根的变化
示例
以下是一个典型的 MCP 客户端如何暴露根的示例:
{
"roots": [
{
"uri": "file:///home/user/projects/frontend",
"name": "前端仓库"
},
{
"uri": "https://api.example.com/v1",
"name": "API 端点"
}
]
}
这个配置建议服务器同时关注一个本地仓库和一个 API 端点,并保持它们在逻辑上的分离。