[ PROMPT_NODE_24776 ]
resources-and-templates
[ SKILL_DOCUMENTATION ]
# 资源与模板 (Resources & Templates)
> 向你的 MCP 客户端公开数据源和动态内容生成器。
资源代表 MCP 客户端可以读取的数据或文件,而资源模板通过允许客户端根据 URI 中传递的参数请求动态生成的资源来扩展这一概念。
FastMCP 主要通过 `@mcp.resource` 装饰器简化了静态和动态资源的定义。
## 什么是资源?
资源为 LLM 或客户端应用程序提供对数据的只读访问权限。当客户端请求资源 URI 时:
1. FastMCP 找到相应的资源定义。
2. 如果它是动态的(由函数定义),则执行该函数。
3. 内容(文本、JSON、二进制数据)被返回给客户端。
这允许 LLM 访问与对话相关的文件、数据库内容、配置或动态生成的信息。
## 资源
### `@resource` 装饰器
定义资源最常见的方法是装饰一个 Python 函数。该装饰器需要资源的唯一 URI。
python
import json
from fastmcp import FastMCP
mcp = FastMCP(name="DataServer")
# 返回字符串的基本动态资源
@mcp.resource("resource://greeting")
def get_greeting() -> str:
"""提供简单的问候消息。"""
return "Hello from FastMCP Resources!"
# 返回 JSON 数据的资源
@mcp.resource("data://config")
def get_config() -> str:
"""以 JSON 格式提供应用程序配置。"""
return json.dumps({
"theme": "dark",
"version": "1.2.0",
"features": ["tools", "resources"],
})
**核心概念:**
* **URI:** `@resource` 的第一个参数是客户端用于请求此数据的唯一 URI(例如 `"resource://greeting"`)。
* **惰性加载:** 被装饰的函数(`get_greeting`, `get_config`)仅在客户端通过 `resources/read` 明确请求该资源 URI 时才会执行。
* **推断元数据:** 默认情况下:
* 资源名称:取自函数名称(`get_greeting`)。
* 资源描述:取自函数的文档字符串。
#### 装饰器参数
你可以使用 `@mcp.resource` 装饰器中的参数自定义资源的属性:
python
from fastmcp import FastMCP
mcp = FastMCP(name="DataServer")
# 指定元数据的示例
@mcp.resource(
uri="data://app-status", # 显式 URI(必需)
name="ApplicationStatus", # 自定义名称
description="提供当前应用程序的状态"