7.Defining resources
此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org
==================================================
MCP 服务器中的资源允许您向客户端公开数据,类似于典型 HTTP 服务器中的 GET 请求处理程序。它们非常适合需要获取信息而不是执行操作的场景。
通过示例理解资源
假设您想构建一个文档提及功能,用户可以输入 @document_name 来引用文件。这需要两个操作:
- 获取所有可用文档的列表(用于自动完成)
- 获取特定文档的内容(当被提及时)

当用户输入 @ 时,您需要显示可用的文档。当他们提交包含提及的消息时,您会自动将该文档的内容注入到发送给 Claude 的提示中。

How Resources Work
资源遵循请求-响应模式。您的客户端发送带有 URI 的 ReadResourceRequest,MCP 服务器响应数据。URI 就像您要访问的资源的地址。

Types of Resources
有两种类型的资源:

- 直接资源:不会改变的静态 URI,如 docs://documents
- 模板化资源:带有参数的 URI,如 docs://documents/{doc_id}
对于模板化资源,Python SDK 会自动从 URI 中解析参数,并将它们作为关键字参数传递给你的函数。
实现资源
资源使用 @mcp.resource() 装饰器来定义。以下是创建两种类型资源的方法:
直接资源(列出文档)
@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]
MIME Types
资源可以返回任何类型的数据 - 字符串、JSON、二进制数据等。mime_type 参数为客户端提供关于你返回的数据类型的提示:
- application/json - 结构化 JSON 数据
- text/plain - 纯文本内容
- 任何其他适用于不同数据格式的有效 MIME 类型
MCP Python SDK 会自动序列化您的返回值。您无需手动转换为 JSON 字符串。
Testing Resources
您可以使用 MCP Inspector 测试您的资源。运行您的服务器:
uv run mcp dev mcp_server.py
然后在浏览器中连接到检查器。您将看到:

- Resources:列出您的直接/静态资源
- Resource Templates:显示接受参数的模板化资源
点击任何资源进行测试,查看客户端将接收到的确切响应结构。

Key Points
- 资源暴露数据,工具执行操作
- 对静态数据使用直接资源,对参数化查询使用模板化资源
- MIME 类型帮助客户端理解响应格式
- SDK 会自动处理序列化
- 模板化 URI 中的参数名称会成为函数参数
Resources 为向 MCP 客户端提供数据提供了一种简洁的方式,支持文档提及、文件浏览或任何需要从服务器获取信息的场景等功能。
==================================================
此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org