高级原语与 2026 新特性:Roots、Sampling、Tasks 与 MCP Apps
五大原语的设计理念
在上一篇文章中,我们了解了 MCP 的三大核心原语:Tools、Resources、Prompts。
但 MCP 协议实际上定义了 五大原语(如果算上 2026 年新增的 Tasks),它们共同构成了 MCP 的能力体系:
| 原语 | 控制方 | 核心价值 | 新增版本 |
|---|---|---|---|
| Prompts | 用户 | 复用交互模式 | |
| Resources | 应用 | 只读数据访问 | |
| Tools | 模型 | 执行动作 | |
| Roots | 客户端 | 资源边界管理 | 2025-06 |
| Sampling | 客户端 | 采样控制权 | 2025-06 |
| Tasks | 客户端 | 异步任务编排 | 2025-11 |
设计原则:
- 明确控制权:每个原语都有明确的控制方
- 职责分离:不同的能力由不同的方控制
- 渐进增强:基础功能只用三大原语,高级功能可选
Roots:资源根目录管理
什么是 Roots?
Roots 允许 Client 向 Server 暴露文件系统的「根目录」,Server 只能访问这些根目录下的资源。
核心价值:
- 访问控制:限制 Server 可以访问哪些目录
- 多租户隔离:不同 Server 使用不同的根目录
- 变更通知:根目录列表变更时自动通知 Server
Roots 工作流程
1. Server 请求 roots/list
↓
2. Client 返回可访问的根目录列表
{
"roots": [
{
"name": "home",
"uri": "file:///Users/用户名"
},
{
"name": "project",
"uri": "file:///Projects/MyProject"
}
]
}
↓
3. Server 在这些边界内操作
↓
4. Root 列表变更时 Client 推送通知
notifications/roots/list_changed
Roots 使用场景
场景 1:文件访问控制
// Client 配置只暴露特定目录
{
"mcpServers": {
"my-server": {
"allowedRoots": [
"file:///Users/用户名/Documents",
"file:///Users/用户名/Projects"
]
}
}
}
场景 2:多租户隔离
租户 A 的 Server → 只能访问 /tenant-a/
租户 B 的 Server → 只能访问 /tenant-b/
场景 3:动态权限管理
用户在 Client 中修改访问权限
↓
Client 推送 roots/list_changed 通知
↓
Server 自动更新可访问的根目录列表
Roots 最佳实践
1. 最小权限原则
只暴露 Server 需要的目录,不要暴露整个文件系统。
2. 明确命名
AI 编程知识库会员专享内容
开通后解锁「高级原语与 2026 新特性:Roots、Sampling、Tasks 与 MCP Apps」全文,AI 编程知识库全年访问
扫码添加企业微信,找大熊掌门开通会员

添加后说明想开通的会员类型即可