MCP协议中的“资源”究竟指什么?
一、资源的定义在 MCP(Model Context Protocol)中,“资源”是一种只读数据单元,由服务器暴露给客户端,用来为大型语言模型(LLM)提供上下文信息。它们通过统一 URI 标识,可被检索、缓存并在多轮对话中复用。
二、资源与工具的区别
- 控制权不同:
- 资源 → 应用端控制:客户端决定何时读取,用于丰富上下文。
- 工具 → 模型端控制:LLM 主动调用,执行带副作用的操作。
- 副作用不同:
- 资源为纯读取,不会修改外部状态;
- 工具通常包含写操作或触发外部服务。
- 调用成本:
- 资源读取轻量、可缓存;
- 工具调用可能需要事务管理或权限校验。
三、资源的典型形态
- 文件与文档:PDF、Markdown、代码片段等。
- 数据库快照:表结构、查询结果集、统计摘要。
- 应用数据:项目配置、Issue 列表、日志片段。
- API 只读端点:如天气信息、库存查询 GET 接口。
四、生命周期与访问方式
- 声明:服务器在能力声明文件中列出可用资源及元数据(名称、URI、大小、MIME)。
- 检索:客户端通过 JSON-RPC 方法(如
mcp.getResource
)按 URI 获取。 - 缓存:资源可在 Client 侧或 Host 网关进行版本化缓存,减少重复传输。
- 失效:若基础数据变更,服务器会推送事件或返回新版本号提醒刷新。
五、使用资源的最佳实践
- 颗粒度适中:避免单个资源过大导致上下文爆炸。
- 元数据丰富:提供摘要、哈希、最后更新时间,便于智能体判断是否加载。
- 权限最小化:仅对需要的角色开放读取权限,防止敏感数据泄露。
- 与工具配合:先读取资源了解上下文,再调用工具执行写操作,形成安全高效的工作流。