第 77 页 / 共 100 页 / 飞书修订版 5

8.Accessing resources

此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)

邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org

==================================================

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

理解资源请求

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

image1.jpeg

流程很简单:当用户想要引用一个文档时(比如输入"@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 类型充当你确定正确解析策略的提示。

Required Imports

为了使其正常工作,你需要在 MCP 客户端中导入这些模块:

import json

from pydantic import AnyUrl

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

测试资源访问

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

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

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

与您的应用程序集成

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

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

==================================================



此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org