加载中

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

理解资源请求

当您在 MCP 服务器上定义了资源后,您的客户端需要一种方式来请求和使用它们。客户端充当您的应用程序和 MCP 服务器之间的桥梁,自动处理通信和数据解析。

这个流程很简单:当用户想要引用一个文档时(比如输入"@report.pdf"),您的应用程序使用 MCP 客户端从服务器获取该资源,并将其内容直接包含在发送给 Claude 的提示中。

实现资源读取

核心功能需要在您的 MCP 客户端中实现一个 read_resource 函数。该函数接受一个 URI 参数来标识要获取的资源:

python
async def read_resource(self, uri: str) -> Any:
    result = await self.session().read_resource(AnyUrl(uri))
    resource = result.contents[0]

来自 MCP 服务器的响应包含一个 contents 列表。您通常只需要第一个元素,它包含实际的资源数据以及诸如 MIME 类型之类的元数据。

处理不同的内容类型

资源可以返回不同类型的内容,因此您的客户端需要适当地解析它们。MIME 类型会告诉您如何处理数据:

python
if isinstance(resource, types.TextResourceContents):
    if resource.mimeType == "application/json":
        return json.loads(resource.text)
    
    return resource.text

这种方法确保 JSON 资源被正确解析为 Python 对象,而纯文本资源则以字符串形式返回。MIME 类型充当您确定正确解析策略的提示。

所需的导入

为了使其正常工作,您需要在 MCP 客户端中使用以下导入:

python
import json
from pydantic import AnyUrl

json 模块处理 JSON 响应的解析,而 AnyUrl 确保对 URI 参数进行正确的类型处理。

测试资源访问

实现完成后,您可以通过 CLI 应用程序测试该功能。当您输入类似"@report.pdf 文档里有什么?"这样的内容时,系统应该:

  • 在自动完成列表中显示可用资源
  • 允许您选择一个资源
  • 自动获取资源内容
  • 将该内容包含在发送给 Claude 的提示中

关键优势在于 Claude 直接在提示中接收文档内容,从而无需通过工具调用来访问信息。这使得交互更快、更高效。

与您的应用程序集成

请记住,您编写的 MCP 客户端代码会被应用程序的其他部分使用。read_resource 函数成为一个构建块,其他组件可以调用它来获取文档内容、列出可用资源,或将资源数据整合到提示中。

这种关注点分离使您的代码保持整洁:MCP 客户端负责处理与服务器的通信,而您的应用程序逻辑则专注于如何有效地使用这些数据。