MCP 中的资源允许您的服务器公开可以直接包含在提示中的数据,而不需要通过工具调用来访问信息。这创建了一种更高效的方式来为像 Claude 这样的 AI 模型提供上下文。
理解资源请求
当您在 MCP 服务器上定义了资源后,您的客户端需要一种方式来请求和使用它们。客户端充当您的应用程序和 MCP 服务器之间的桥梁,自动处理通信和数据解析。

这个流程很简单:当用户想要引用一个文档时(比如输入"@report.pdf"),您的应用程序使用 MCP 客户端从服务器获取该资源,并将其内容直接包含在发送给 Claude 的提示中。
实现资源读取
核心功能需要在您的 MCP 客户端中实现一个 read_resource 函数。该函数接受一个 URI 参数来标识要获取的资源:
async def read_resource(self, uri: str) -> Any:
result = await self.session().read_resource(AnyUrl(uri))
resource = result.contents[0]来自 MCP 服务器的响应包含一个 contents 列表。您通常只需要第一个元素,它包含实际的资源数据以及诸如 MIME 类型之类的元数据。
处理不同的内容类型
资源可以返回不同类型的内容,因此您的客户端需要适当地解析它们。MIME 类型会告诉您如何处理数据:
if isinstance(resource, types.TextResourceContents):
if resource.mimeType == "application/json":
return json.loads(resource.text)
return resource.text这种方法确保 JSON 资源被正确解析为 Python 对象,而纯文本资源则以字符串形式返回。MIME 类型充当您确定正确解析策略的提示。
所需的导入
为了使其正常工作,您需要在 MCP 客户端中使用以下导入:
import json
from pydantic import AnyUrljson 模块处理 JSON 响应的解析,而 AnyUrl 确保对 URI 参数进行正确的类型处理。
测试资源访问
实现完成后,您可以通过 CLI 应用程序测试该功能。当您输入类似"@report.pdf 文档里有什么?"这样的内容时,系统应该:
- 在自动完成列表中显示可用资源
- 允许您选择一个资源
- 自动获取资源内容
- 将该内容包含在发送给 Claude 的提示中

关键优势在于 Claude 直接在提示中接收文档内容,从而无需通过工具调用来访问信息。这使得交互更快、更高效。
与您的应用程序集成
请记住,您编写的 MCP 客户端代码会被应用程序的其他部分使用。read_resource 函数成为一个构建块,其他组件可以调用它来获取文档内容、列出可用资源,或将资源数据整合到提示中。
这种关注点分离使您的代码保持整洁:MCP 客户端负责处理与服务器的通信,而您的应用程序逻辑则专注于如何有效地使用这些数据。