MCP 提供了两种发现资源的方式:
- 直接资源
- 资源模板
直接资源#
服务器直接暴露一组固定资源,通过 JSON-RPC 方法 resources/list 提供给客户端。
每个资源包含字段如下:
{ uri: string; // 资源的唯一 URI(例如 file:///xxx) name: string; // 人类可读的名称 description?: string;// 可选描述,解释用途或内容 mimeType?: string; // MIME 类型,如 text/plain, image/png size?: number; // 文件大小(单位:字节)}例如:
{ "uri": "file:///logs/build.log", "name": "构建日志", "description": "包含最近一次构建的所有输出信息", "mimeType": "text/plain", "size": 18423}资源模板#
服务器还可以提供一组 URI 模板,供客户端根据参数动态构造 URI(例如选择城市、文件名等)。
这些模板符合 RFC 6570 的格式,例如:
file:///project/src/{filename}screen://localhost/{displayId}
TIP
RFC 6570 是一份由 IETF 制定的标准文档,它定义了一种 URI 模板语法,用于通过填入变量值来构建动态 URI。
每个模板的结构如下:
{ uriTemplate: string; // 可变 URI 模板(如 file:///{path}) name: string; // 模板的说明名称 description?: string;// 模板描述 mimeType?: string; // 匹配资源的 MIME 类型(适用于所有匹配项)}例如:
{ "uriTemplate": "file:///home/user/{filename}", "name": "用户目录下的文件", "description": "允许读取任意用户目录下的文件名", "mimeType": "text/plain"}课堂练习
为 MCP Server 注册资源模板。
setRequestHandler
| 功能 | Schema 名 | 结构 |
|---|---|---|
| 读取资源 | ReadResourceRequestSchema | { method: "resources/read", params: { uri } } |
| 列出资源 | ListResourcesRequestSchema | { method: "resources/list", params: {} } |
| 列出资源模板 | ListResourceTemplatesRequestSchema | { method: "resources/templates", params: {} } |
-EOF-