Skip to content

Resources

资源也是 MCP Server 向客户端应用提供信息的一种形式。

例如:

URI#

URI 英语全称为 Uniform Resource Identifier,中文是“统一资源标识符”,用于互联网上某个资源的唯一标识。

URI 的格式为:

[protocol]://[host]/[path]

例如:

在 MCP 协议中,不强制 URI 规则,允许 Server 自定义。

回头在 MCP Server 中,所有的资源都会有一个 URI.

资源类型#

MCP 中的资源分为两类:Text resources 和 Binary resources

文本资源#

文本资源是用 UTF-8 编码的纯文本数据,适合用来展示、编辑、分析。

二进制资源#

二进制资源是原始的二进制数据,必须通过 base64 编码传输。

发现资源#

MCP 提供了两种发现资源的方式:

  1. 直接资源
  2. 资源模板

直接资源#

服务器直接暴露一组固定资源,通过 JSON-RPC 方法 resources/list 提供给客户端。

工具:tools/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
}

资源模板#

后面再说。

读取资源#

客户端通过发送 JSON-RPC 请求:

方法名为 resources/read,在 params 中写上资源的 URI

{
"method": "resources/read",
"params": {
"uri": "file:///logs/error.log"
}
}

服务器返回一个 JSON 对象,包含一个 contents 数组,每个数组元素表示一个资源内容对象,结构如下:

{
contents: [
{
uri: string; // 必填,资源的唯一 URI
mimeType?: string; // 可选,MIME 类型,如 text/plain、image/png
// 以下两者二选一
text?: string; // 文本资源内容(UTF-8 编码)
blob?: string; // 二进制资源内容(Base64 编码)
}
]
}

MCP 支持 一次 resources/read 返回多个资源内容

比如:读取一个目录:file:///project/src/,返回值可能是里面多个文件的内容(如多个 .ts 文件)

课堂练习

为 MCP 服务器注册资源上下文。

调试工具:

Terminal window
npx @modelcontextprotocol/inspector

在线base64图片预览:https://jaredwinick.github.io/base64-image-viewer/

data:image/png;base64,<base64编码>