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