MCP 官方文档中文版
  1. 概念
MCP 官方文档中文版
  • 开始使用
    • 简介
    • 示例 Servers
    • 示例 Clients
    • 快速上手
      • 服务器开发
      • 客户端开发
      • Claude 桌面版开发
  • 教程
    • 使用 LLMs 构建 MCP
    • 调试 Debugging
    • 调试器 Inspector
  • 概念
    • 核心架构
    • 资源 Resources
    • 提示词 Prompts
    • 工具 Tools
    • 采样 Sampling
    • 根 Roots
    • 传输 Transports
  • 开发
    • 新计划
    • 规划
    • 贡献
  1. 概念

资源 Resources

将服务器上的数据和内容暴露给 LLM
资源(Resources)是模型上下文协议(MCP)的核心基元,允许服务器暴露可以被客户端读取并用作 LLM 交互上下文的数据和内容。
资源被设计成应用控制的,这意味着客户端应用可以决定如何以及何时使用它们。不同的 MCP 客户端可能以不同的方式处理资源。例如:
Claude 桌面版(Claude Desktop)目前要求用户显式地选择资源后才能使用
其他客户端可能会基于启发式方法自动选择资源
有些实现甚至可能允许 AI 模型本身决定使用哪些资源
服务器作者在实现资源支持时,应该准备好处理上述任何一种交互模式。为了自动地向模型暴露数据,服务器作者应该使用模型控制的基元,例如工具(Tools)。

概述#

资源代表 MCP 服务器希望提供给客户端的任何类型的数据。这可以包括:
文件内容
数据库记录
API 响应
实时系统数据
截图和图像
日志文件
以及更多
每个资源都由唯一的 URI(统一资源标识符)标识,并且可以包含文本或二进制数据。

资源 URI(Resource URIs)#

资源使用以下格式的 URI 标识:
[协议]://[主机]/[路径]
[protocol]://[host]/[path]
例如:
file:///home/user/documents/report.pdf
postgres://database/customers/schema
screen://localhost/display1
协议和路径结构由 MCP 服务器实现定义。服务器可以定义自己的自定义 URI 方案。

资源类型#

资源可以包含两种类型的内容:

文本资源#

文本资源包含 UTF-8 编码的文本数据。 这些适用于:
源代码
配置文件
日志文件
JSON/XML 数据
纯文本

二进制资源#

二进制资源包含以 base64 编码的原始二进制数据。 这些适用于:
图像
PDF
音频文件
视频文件
其他非文本格式

资源发现#

客户端可以通过两种主要方法发现可用的资源:

直接资源#

服务器通过 resources/list 端点暴露一个具体的资源列表。 每个资源包括:

资源模板#

对于动态资源,服务器可以暴露 URI 模板,客户端可以使用这些模板来构造有效的资源 URI:

读取资源#

要读取资源,客户端可以使用资源 URI 发出 resources/read 请求。
服务器将返回资源内容列表:
服务器可能会在对一个 resources/read 请求的响应中返回多个资源。 例如,当读取目录时,可以使用此方法返回目录中的文件列表。

资源更新#

MCP 通过两种机制支持资源的实时更新:

列表更改#

当可用资源列表更改时,服务器可以通过 notifications/resources/list_changed 通知客户端。

内容更改#

客户端可以订阅特定资源的更新:
1.
客户端使用资源 URI 发送 resources/subscribe
2.
当资源更改时,服务器发送 notifications/resources/updated
3.
客户端可以使用 resources/read 获取最新内容
4.
客户端可以使用 resources/unsubscribe 取消订阅

示例实现#

这是一个在 MCP 服务器中实现资源支持的简单示例:
TypeScript
Python

最佳实践#

在实施资源支持时:
1.
使用清晰、描述性的资源名称和 URI
2.
包括有用的描述以指导 LLM 理解
3.
设置适当的 MIME 类型(MIME types)(如果已知)
4.
为动态内容实现资源模板
5.
对频繁更改的资源使用订阅
6.
通过清晰的错误消息来优雅地处理错误
7.
考虑对大型资源列表进行分页
8.
在适当的时候缓存资源内容
9.
在处理之前验证 URI
10.
记录您的自定义 URI 方案

安全注意事项#

在暴露资源时:
验证所有资源 URI
实施适当的访问控制
清理文件路径以防止目录遍历
谨慎处理二进制数据
考虑对资源读取进行速率限制
审计资源访问
加密传输中的敏感数据
验证 MIME 类型
为长时间运行的读取实施超时
适当处理资源清理

扫码加入 Apifox MCP 内测群

MCP生态正在快速发展,我们正在与开发者们一起探索 AI 和 API 协作的未来。

扫码加入交流群
上一页
核心架构
下一页
提示词 Prompts
Built with