MCP 中的资源允许您的服务器公开可以直接包含在提示中的数据,而不需要通过工具调用来访问信息。这创建了一种更高效的方式来为像 Claude 这样的 AI 模型提供上下文。
理解资源流程

当用户想要访问资源内容时,流程如下:
- 用户请求有关某个资源的信息(例如"@report.pdf")
- 您的代码需要一份文档名称列表以实现自动补全
- MCP 客户端向 MCP 服务器发送 ReadResourceRequest
- 服务器以包含资源数据的 ReadResourceResult 作为响应
- 您的代码随后可以将此数据直接放入提示中
实现资源读取
要从您的 MCP 客户端读取资源,您需要实现一个 read_resource 函数。首先,添加必要的导入:
python
import json
from pydantic import AnyUrl核心函数向您的 MCP 会话发出请求并处理响应:
python
async def read_resource(self, uri: str) -> Any:
result = await self.session().read_resource(AnyUrl(uri))
resource = result.contents[0]处理不同的资源类型
资源可以返回不同类型的内容,因此您需要检查 MIME 类型并相应地进行解析:
python
if isinstance(resource, types.TextResourceContents):
if resource.mimeType == "application/json":
return json.loads(resource.text)
return resource.text这种方法处理两种主要场景:
- 需要解析的 JSON 资源
- 可以原样返回的纯文本资源
测试资源访问

您可以通过在应用程序中进行测试来验证您的资源实现是否有效。当您输入"@"后跟资源名称时,您应该会看到可用资源的自动补全列表。选择其中一个将把其内容直接包含在您的提示中。
这种方法的关键优势在于效率——Claude 可以立即接收文档内容,而无需进行额外的工具调用来访问信息。
资源与工具的使用对比
资源在以下情况下特别有用:
- 您有经常被引用的静态或半静态内容
- 您想要减少 API 调用的次数
- 内容应立即在提示上下文中可用
这与工具不同,工具更适合动态操作,或者当您需要 AI 根据对话上下文来决定是否访问某些信息时。