--- title: local_provider sidebarTitle: local_provider --- # `fastmcp.server.providers.local_provider` LocalProvider for locally-defined MCP components. This module provides the `LocalProvider` class that manages tools, resources, templates, and prompts registered via decorators or direct methods. LocalProvider can be used standalone and attached to multiple servers: ```python from fastmcp.server.providers import LocalProvider # Create a reusable provider with tools provider = LocalProvider() @provider.tool def greet(name: str) -> str: return f"Hello, {name}!" # Attach to any server from fastmcp import FastMCP server1 = FastMCP("Server1", providers=[provider]) server2 = FastMCP("Server2", providers=[provider]) ``` ## Classes ### `LocalProvider` Provider for locally-defined components. Supports decorator-based registration (`@provider.tool`, `@provider.resource`, `@provider.prompt`) and direct object registration methods. When used standalone, LocalProvider uses default settings. When attached to a FastMCP server via the server's decorators, server-level settings like `_tool_serializer` and `_support_tasks_by_default` are injected. **Methods:** #### `add_tool` ```python add_tool(self, tool: Tool | Callable[..., Any]) -> Tool ``` Add a tool to this provider's storage. Accepts either a Tool object or a decorated function with __fastmcp__ metadata. #### `remove_tool` ```python remove_tool(self, name: str, version: str | None = None) -> None ``` Remove tool(s) from this provider's storage. **Args:** - `name`: The tool name. - `version`: If None, removes ALL versions. If specified, removes only that version. **Raises:** - `KeyError`: If no matching tool is found. #### `add_resource` ```python add_resource(self, resource: Resource | ResourceTemplate | Callable[..., Any]) -> Resource | ResourceTemplate ``` Add a resource to this provider's storage. Accepts either a Resource/ResourceTemplate object or a decorated function with __fastmcp__ metadata. #### `remove_resource` ```python remove_resource(self, uri: str, version: str | None = None) -> None ``` Remove resource(s) from this provider's storage. **Args:** - `uri`: The resource URI. - `version`: If None, removes ALL versions. If specified, removes only that version. **Raises:** - `KeyError`: If no matching resource is found. #### `add_template` ```python add_template(self, template: ResourceTemplate) -> ResourceTemplate ``` Add a resource template to this provider's storage. #### `remove_template` ```python remove_template(self, uri_template: str, version: str | None = None) -> None ``` Remove resource template(s) from this provider's storage. **Args:** - `uri_template`: The template URI pattern. - `version`: If None, removes ALL versions. If specified, removes only that version. **Raises:** - `KeyError`: If no matching template is found. #### `add_prompt` ```python add_prompt(self, prompt: Prompt | Callable[..., Any]) -> Prompt ``` Add a prompt to this provider's storage. Accepts either a Prompt object or a decorated function with __fastmcp__ metadata. #### `remove_prompt` ```python remove_prompt(self, name: str, version: str | None = None) -> None ``` Remove prompt(s) from this provider's storage. **Args:** - `name`: The prompt name. - `version`: If None, removes ALL versions. If specified, removes only that version. **Raises:** - `KeyError`: If no matching prompt is found. #### `get_tasks` ```python get_tasks(self) -> Sequence[FastMCPComponent] ``` Return components eligible for background task execution. Returns components that have task_config.mode != 'forbidden'. This includes both FunctionTool/Resource/Prompt instances created via decorators and custom Tool/Resource/Prompt subclasses. #### `tool` ```python tool(self, name_or_fn: AnyFunction) -> FunctionTool ``` #### `tool` ```python tool(self, name_or_fn: str | None = None) -> Callable[[AnyFunction], FunctionTool] ``` #### `tool` ```python tool(self, name_or_fn: str | AnyFunction | None = None) -> Callable[[AnyFunction], FunctionTool] | FunctionTool | partial[Callable[[AnyFunction], FunctionTool] | FunctionTool] ``` Decorator to register a tool. This decorator supports multiple calling patterns: - @provider.tool (without parentheses) - @provider.tool() (with empty parentheses) - @provider.tool("custom_name") (with name as first argument) - @provider.tool(name="custom_name") (with name as keyword argument) - provider.tool(function, name="custom_name") (direct function call) **Args:** - `name_or_fn`: Either a function (when used as @tool), a string name, or None - `name`: Optional name for the tool (keyword-only, alternative to name_or_fn) - `title`: Optional title for the tool - `description`: Optional description of what the tool does - `icons`: Optional icons for the tool - `tags`: Optional set of tags for categorizing the tool - `output_schema`: Optional JSON schema for the tool's output - `annotations`: Optional annotations about the tool's behavior - `exclude_args`: Optional list of argument names to exclude from the tool schema - `meta`: Optional meta information about the tool - `enabled`: Whether the tool is enabled (default True). If False, adds to blocklist. - `task`: Optional task configuration for background execution - `serializer`: Deprecated. Return ToolResult from your tools for full control over serialization. **Returns:** - The registered FunctionTool or a decorator function. #### `resource` ```python resource(self, uri: str) -> Callable[[AnyFunction], Resource | ResourceTemplate | AnyFunction] ``` Decorator to register a function as a resource. If the URI contains parameters (e.g. "resource://{param}") or the function has parameters, it will be registered as a template resource. **Args:** - `uri`: URI for the resource (e.g. "resource\://my-resource" or "resource\://{param}") - `name`: Optional name for the resource - `title`: Optional title for the resource - `description`: Optional description of the resource - `icons`: Optional icons for the resource - `mime_type`: Optional MIME type for the resource - `tags`: Optional set of tags for categorizing the resource - `enabled`: Whether the resource is enabled (default True). If False, adds to blocklist. - `annotations`: Optional annotations about the resource's behavior - `meta`: Optional meta information about the resource - `task`: Optional task configuration for background execution - `auth`: Optional authorization checks for the resource **Returns:** - A decorator function. #### `prompt` ```python prompt(self, name_or_fn: AnyFunction) -> FunctionPrompt ``` #### `prompt` ```python prompt(self, name_or_fn: str | None = None) -> Callable[[AnyFunction], FunctionPrompt] ``` #### `prompt` ```python prompt(self, name_or_fn: str | AnyFunction | None = None) -> Callable[[AnyFunction], FunctionPrompt] | FunctionPrompt | partial[Callable[[AnyFunction], FunctionPrompt] | FunctionPrompt] ``` Decorator to register a prompt. This decorator supports multiple calling patterns: - @provider.prompt (without parentheses) - @provider.prompt() (with empty parentheses) - @provider.prompt("custom_name") (with name as first argument) - @provider.prompt(name="custom_name") (with name as keyword argument) - provider.prompt(function, name="custom_name") (direct function call) **Args:** - `name_or_fn`: Either a function (when used as @prompt), a string name, or None - `name`: Optional name for the prompt (keyword-only, alternative to name_or_fn) - `title`: Optional title for the prompt - `description`: Optional description of what the prompt does - `icons`: Optional icons for the prompt - `tags`: Optional set of tags for categorizing the prompt - `enabled`: Whether the prompt is enabled (default True). If False, adds to blocklist. - `meta`: Optional meta information about the prompt - `task`: Optional task configuration for background execution - `auth`: Optional authorization checks for the prompt **Returns:** - The registered FunctionPrompt or a decorator function.