加载中

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

理解资源流程

当用户在您的应用程序中输入类似"What's in the @..."的内容时,系统需要获取可用资源列表以进行自动补全。MCP 客户端向服务器发送 ReadResourceRequest,服务器会响应一个可供引用的文档名称列表。

实现资源读取

核心功能发生在您的 MCP 客户端的 read_resource 方法中。此方法接受一个 URI 参数,用于标识要从服务器获取的资源。

首先,添加必要的导入以处理 JSON 解析和 URL 验证:

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 资源被正确解析,而纯文本资源则按原样返回。

测试实现

实现完成后,您可以通过运行 CLI 应用程序来测试资源功能。当您输入"@"后跟资源名称时,系统将:

  • 在自动补全列表中显示可用资源
  • 允许您使用方向键和空格键选择资源
  • 将资源内容直接包含在发送给 Claude 的提示中

这意味着 Claude 可以立即接收文档内容,而无需进行额外的工具调用,从而使交互更加高效。

主要优势

与工具相比,资源在访问静态信息方面具有以下几个优势:

  • 内容直接包含在提示中,减少延迟
  • 对话期间无需额外的 API 调用
  • 通过自动补全功能获得更好的用户体验
  • 静态数据与动态操作之间有更清晰的分离

资源最适合用于您希望轻松提供给 AI 模型访问的相对静态的信息,例如文档、报告或参考资料。