[ PROMPT_NODE_24772 ]
本地提供程序
[ SKILL_DOCUMENTATION ]
# 本地提供程序
> 用于装饰器注册组件的默认提供程序
`LocalProvider` 存储您直接在服务器上定义的组件。当您使用 `@mcp.tool`、`@mcp.resource` 或 `@mcp.prompt` 时,您实际上是在向服务器的 `LocalProvider` 添加组件。
## 工作原理
每个 FastMCP 服务器都将 `LocalProvider` 作为其第一个提供程序。通过装饰器或直接方法注册的组件都存储在这里:
python
from fastmcp import FastMCP
mcp = FastMCP("MyServer")
# 这些存储在服务器的 `LocalProvider` 中
@mcp.tool
def greet(name: str) -> str:
"""按名称问候某人。"""
return f"Hello, {name}!"
@mcp.resource("data://config")
def get_config() -> str:
"""返回配置数据。"""
return '{"version": "1.0"}'
@mcp.prompt
def analyze(topic: str) -> str:
"""创建一个分析提示词。"""
return f"Please analyze: {topic}"
当客户端请求组件时,总是会优先查询 `LocalProvider`,确保您直接定义的组件优先于挂载或代理服务器中的组件。
## 组件注册
### 使用装饰器
注册组件最常用的方法:
python
@mcp.tool
def my_tool(x: int) -> str:
return str(x)
@mcp.resource("data://info")
def my_resource() -> str:
return "info"
@mcp.prompt
def my_prompt(topic: str) -> str:
return f"Discuss: {topic}"
### 使用直接方法
您也可以添加预构建的组件对象:
python
from fastmcp.tools import Tool
# 创建一个工具对象
my_tool = Tool.from_function(some_function, name="custom_tool")
# 将其添加到服务器
mcp.add_tool(my_tool)
mcp.add_resource(my_resource)
mcp.add_prompt(my_prompt)
### 移除组件
按名称或 URI 移除组件:
python
mcp.local_provider.remove_tool("my_tool")
mcp.local_provider.remove_resource("data://info")
mcp.local_provider.remove_prompt("my_prompt")
## 重复处理
当您尝试添加已存在的组件时,行为取决于 `on_duplicate` 设置:
| 模式 | 行为 |
| ------------------- | ----------------------- |
| `"error"` (默认) | 引发 `ValueError` |
| `"warn"` | 记录警告并替换 |
| `"replace"` | 静默替换 |
| `"ignore"` | 保留现有组件 |
在创建服务器时进行配置:
python
mcp = FastMCP("MyServer", on_duplicate="warn")
## 组件可见性
组件可以