加载中

MCP 服务器中的资源允许您向客户端公开数据,类似于典型 HTTP 服务器中的 GET 请求处理程序。它们非常适合您需要获取信息而不是执行操作的场景。

理解资源

将资源视为只读端点,可以返回任何类型的数据——字符串、JSON、二进制文件等。您可以设置一个 'mime_type' 来向客户端提示您返回的数据类型。

资源的工作方式是定义一个 URI(类似于 URL),客户端可以请求该 URI。当客户端需要数据时,它会发送一个带有特定 URI 的 ReadResourceRequest,您的服务器会以包含数据的 ReadResourceResult 进行响应。

两种类型的资源

您可以创建两种主要类型的资源:

  • 直接资源(Direct Resources) - 具有不包含任何参数的静态 URI(例如 "docs://documents")
  • 模板化资源(Templated Resources) - 在其 URI 中包含参数,这些参数会被解析并传递给您的函数(例如 "docs://documents/{doc_id}")

对于模板化资源,Python SDK 会自动从 URI 中解析参数,并将它们作为关键字参数传递给您的函数。URI 中的参数名称必须与您函数的参数名称完全匹配。

创建资源

以下是实现这两种类型资源的方法:

python
@mcp.resource(
    "docs://documents",
    mime_type="application/json"
)
def list_docs() -> list[str]:
    return list(docs.keys())

@mcp.resource(
    "docs://documents/{doc_id}",
    mime_type="text/plain"
)
def fetch_doc(doc_id: str) -> str:
    if doc_id not in docs:
        raise ValueError(f"Doc with id {doc_id} not found")
    return docs[doc_id]

MCP Python SDK 会自动序列化您返回的任何内容。您不需要手动将数据转换为 JSON 字符串——只需返回 Python 对象,SDK 会处理转换。

测试您的资源

您可以使用 MCP Inspector 测试资源。使用以下命令启动您的服务器:

uv run mcp dev mcp_server.py

然后在浏览器中连接到 inspector。您将看到两个部分:

  • Resources - 列出您的直接/静态资源
  • Resource Templates - 显示您的模板化资源

点击任意资源以测试它。对于模板化资源,您需要为参数提供值。inspector 会向您展示客户端将收到的确切响应结构,包括 mime type 和序列化数据。

实际使用场景

资源非常适合用于实现聊天应用程序中的文档提及等功能。例如,当用户输入 "@" 来提及文档时,您可以:

  1. 使用直接资源获取所有可用文档的列表以实现自动补全
  2. 使用模板化资源在提及特定文档时获取其内容

这种方法让您可以预先将文档内容注入到提示中,而无需 AI 使用工具来获取信息。