协议修订:2024-11-05
用户交互模型
MCP 中的资源设计为应用驱动,由宿主应用根据其需求决定如何整合上下文。 例如,应用可以:- 通过 UI 元素(如树状或列表视图)显式选择资源
- 允许用户搜索并过滤可用资源
- 基于启发式算法或 AI 模型的选择自动包含上下文

功能能力
支持资源的服务器必须声明resources 能力:
subscribe:客户端是否可以订阅单个资源的变更通知。listChanged:当可用资源列表发生变化时,服务器是否发送通知。
subscribe 和 listChanged 都是可选的——服务器可以支持两者之一、两者都支持,或都不支持:
协议消息
列出资源
客户端通过发送resources/list 请求来发现可用资源。此操作支持分页。
请求:
读取资源
客户端通过发送resources/read 请求来获取资源内容:
请求:
资源模板
资源模板允许服务器使用 URI 模板 暴露参数化资源。参数可以通过 补全 API 自动补全。 请求:列表变更通知
当可用资源列表发生变化时,声明了listChanged 能力的服务器应该发送通知:
订阅
协议支持可选的资源变更订阅。客户端可以订阅特定资源,并在资源变更时接收通知: 订阅请求:消息流程
数据类型
资源
资源定义包括:uri:资源的唯一标识name:人类可读的名称description:可选描述mimeType:可选的 MIME 类型
资源内容
资源可以包含文本或二进制数据:文本内容
二进制内容
常见 URI 协议
协议定义了若干标准 URI 协议。此列表不完整——实现可以自由使用其他自定义 URI 协议。https://
用于表示网络上的资源。 服务器应该仅在客户端能够自行从网络上直接获取和加载资源时才使用此协议——即客户端不需要通过 MCP 服务器读取该资源。 对于其他用例,服务器应该优先使用其他 URI 协议,或定义自定义协议,即使服务器本身将通过互联网下载资源内容。file://
用于标识行为类似文件系统的资源,但资源不需要映射到实际的物理文件系统。 MCP 服务器可以使用 XDG MIME 类型(如inode/directory)来标识非普通文件(如目录)资源,这些资源没有标准 MIME 类型。
git://
Git 版本控制集成。错误处理
服务器应该为常见失败情况返回标准 JSON-RPC 错误:- 资源未找到:
-32002 - 内部错误:
-32603
安全考虑
- 服务器必须验证所有资源 URI
- 对敏感资源应该实施访问控制
- 二进制数据必须正确编码
- 在执行操作前应该检查资源权限