8.Accessing resources
此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org
==================================================
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 类型充当你确定正确解析策略的提示。
Required Imports
为了使其正常工作,你需要在 MCP 客户端中导入这些模块:
import json
from pydantic import AnyUrl
json 模块处理 JSON 响应的解析,而 AnyUrl 确保 URI 参数的正确类型处理。
测试资源访问
实现完成后,您可以通过CLI应用程序测试功能。当您输入类似"@report.pdf文档中有什么内容?"这样的问题时,系统应该:
- 在自动完成列表中显示可用资源
- 允许您选择一个资源
- 自动获取资源内容
- 将该内容包含在发送给Claude的提示中

关键优势在于Claude直接在提示中接收文档内容,无需通过工具调用来访问信息。这使得交互更快速、更高效。
与您的应用程序集成
请记住,您编写的MCP客户端代码会被应用程序的其他部分使用。read_resource函数成为一个构建块,其他组件可以调用它来获取文档内容、列出可用资源或将资源数据集成到提示中。
这种关注点分离保持了代码的整洁:MCP客户端处理与服务器的通信,而您的应用程序逻辑专注于如何有效地使用这些数据。
==================================================
此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org