[ PROMPT_NODE_24770 ]
文件系统提供程序
[ SKILL_DOCUMENTATION ]
# 文件系统提供程序
> 从 Python 文件自动发现组件
`FileSystemProvider` 会扫描目录中的 Python 文件,并自动注册使用 `@tool`、`@resource` 或 `@prompt` 装饰的函数。这实现了一种类似于 Next.js 路由的文件组织模式,使您的项目结构成为组件注册表。
## 为什么使用文件系统发现
传统的 FastMCP 服务器需要在文件之间进行协调。要么您的工具文件导入服务器以调用 `@server.tool()`,要么服务器文件导入所有工具模块。这两种方法都会产生一些开发者希望避免的耦合。
`FileSystemProvider` 消除了这种协调。每个文件都是独立的——它使用不需要访问服务器实例的独立装饰器(`@tool`、`@resource`、`@prompt`)。提供程序在启动时发现这些文件,因此您无需修改服务器文件即可添加新工具。
这是某些团队偏好的约定,并不一定适用于所有项目。其权衡如下:
* **无需协调**:文件不导入服务器;服务器不导入文件
* **可预测的命名**:函数名成为组件名(除非被覆盖)
* **开发模式**:可选择在每个请求时重新扫描文件以进行快速迭代
## 快速开始
创建一个指向组件目录的提供程序,然后将其传递给您的服务器。使用 `Path(__file__).parent` 使路径相对于您的服务器文件。
python
from pathlib import Path
from fastmcp import FastMCP
from fastmcp.server.providers import FileSystemProvider
mcp = FastMCP("MyServer", providers=[FileSystemProvider(Path(__file__).parent / "mcp")])
在您的 `mcp/` 目录中,创建带有装饰函数的 Python 文件。
python
# mcp/tools/greet.py
from fastmcp.tools import tool
@tool
def greet(name: str) -> str:
"""按名称问候某人。"""
return f"Hello, {name}!"
当服务器启动时,`FileSystemProvider` 会扫描目录,导入所有 Python 文件,并注册它找到的任何装饰函数。
## 装饰器
FastMCP 提供了标记函数以供发现的独立装饰器:来自 `fastmcp.tools` 的 `@tool`,来自 `fastmcp.resources` 的 `@resource`,以及来自 `fastmcp.prompts` 的 `@prompt`。它们支持与服务器绑定装饰器相同的完整语法——所有参数的工作方式完全相同。
### @tool
将函数标记为工具。默认情况下,函数名即为工具名。
python
from fastmcp.tools import tool
@tool
def ca