diff --git a/docs/python-sdk/fastmcp-server-providers-local_provider-decorators-prompts.mdx b/docs/python-sdk/fastmcp-server-providers-local_provider-decorators-prompts.mdx
index d070aacb7..e7d7d68f9 100644
--- a/docs/python-sdk/fastmcp-server-providers-local_provider-decorators-prompts.mdx
+++ b/docs/python-sdk/fastmcp-server-providers-local_provider-decorators-prompts.mdx
@@ -14,7 +14,7 @@ registration functionality to LocalProvider.
## Classes
-### `PromptDecoratorMixin`
+### `PromptDecoratorMixin`
Mixin class providing prompt decorator functionality for LocalProvider.
@@ -26,7 +26,7 @@ This mixin contains all methods related to:
**Methods:**
-#### `add_prompt`
+#### `add_prompt`
```python
add_prompt(self: LocalProvider, prompt: Prompt | Callable[..., Any]) -> Prompt
@@ -37,19 +37,19 @@ Add a prompt to this provider's storage.
Accepts either a Prompt object or a decorated function with __fastmcp__ metadata.
-#### `prompt`
+#### `prompt`
```python
-prompt(self: LocalProvider, name_or_fn: AnyFunction) -> FunctionPrompt
+prompt(self: LocalProvider, name_or_fn: F) -> F
```
-#### `prompt`
+#### `prompt`
```python
-prompt(self: LocalProvider, name_or_fn: str | None = None) -> Callable[[AnyFunction], FunctionPrompt]
+prompt(self: LocalProvider, name_or_fn: str | None = None) -> Callable[[F], F]
```
-#### `prompt`
+#### `prompt`
```python
prompt(self: LocalProvider, name_or_fn: str | AnyFunction | None = None) -> Callable[[AnyFunction], FunctionPrompt] | FunctionPrompt | partial[Callable[[AnyFunction], FunctionPrompt] | FunctionPrompt]
diff --git a/docs/python-sdk/fastmcp-server-providers-local_provider-decorators-resources.mdx b/docs/python-sdk/fastmcp-server-providers-local_provider-decorators-resources.mdx
index fe1727e3c..70c67d91c 100644
--- a/docs/python-sdk/fastmcp-server-providers-local_provider-decorators-resources.mdx
+++ b/docs/python-sdk/fastmcp-server-providers-local_provider-decorators-resources.mdx
@@ -14,7 +14,7 @@ and template registration functionality to LocalProvider.
## Classes
-### `ResourceDecoratorMixin`
+### `ResourceDecoratorMixin`
Mixin class providing resource decorator functionality for LocalProvider.
@@ -27,7 +27,7 @@ This mixin contains all methods related to:
**Methods:**
-#### `add_resource`
+#### `add_resource`
```python
add_resource(self: LocalProvider, resource: Resource | ResourceTemplate | Callable[..., Any]) -> Resource | ResourceTemplate
@@ -38,7 +38,7 @@ Add a resource to this provider's storage.
Accepts either a Resource/ResourceTemplate object or a decorated function with __fastmcp__ metadata.
-#### `add_template`
+#### `add_template`
```python
add_template(self: LocalProvider, template: ResourceTemplate) -> ResourceTemplate
@@ -47,10 +47,10 @@ add_template(self: LocalProvider, template: ResourceTemplate) -> ResourceTemplat
Add a resource template to this provider's storage.
-#### `resource`
+#### `resource`
```python
-resource(self: LocalProvider, uri: str) -> Callable[[AnyFunction], Resource | ResourceTemplate | AnyFunction]
+resource(self: LocalProvider, uri: str) -> Callable[[F], F]
```
Decorator to register a function as a resource.
diff --git a/docs/python-sdk/fastmcp-server-providers-local_provider-decorators-tools.mdx b/docs/python-sdk/fastmcp-server-providers-local_provider-decorators-tools.mdx
index 07c6219fa..d3cf4daa2 100644
--- a/docs/python-sdk/fastmcp-server-providers-local_provider-decorators-tools.mdx
+++ b/docs/python-sdk/fastmcp-server-providers-local_provider-decorators-tools.mdx
@@ -14,7 +14,7 @@ registration functionality to LocalProvider.
## Classes
-### `ToolDecoratorMixin`
+### `ToolDecoratorMixin`
Mixin class providing tool decorator functionality for LocalProvider.
@@ -26,7 +26,7 @@ This mixin contains all methods related to:
**Methods:**
-#### `add_tool`
+#### `add_tool`
```python
add_tool(self: LocalProvider, tool: Tool | Callable[..., Any]) -> Tool
@@ -37,19 +37,19 @@ Add a tool to this provider's storage.
Accepts either a Tool object or a decorated function with __fastmcp__ metadata.
-#### `tool`
+#### `tool`
```python
-tool(self: LocalProvider, name_or_fn: AnyFunction) -> FunctionTool
+tool(self: LocalProvider, name_or_fn: F) -> F
```
-#### `tool`
+#### `tool`
```python
-tool(self: LocalProvider, name_or_fn: str | None = None) -> Callable[[AnyFunction], FunctionTool]
+tool(self: LocalProvider, name_or_fn: str | None = None) -> Callable[[F], F]
```
-#### `tool`
+#### `tool`
```python
tool(self: LocalProvider, name_or_fn: str | AnyFunction | None = None) -> Callable[[AnyFunction], FunctionTool] | FunctionTool | partial[Callable[[AnyFunction], FunctionTool] | FunctionTool]
diff --git a/docs/python-sdk/fastmcp-server-server.mdx b/docs/python-sdk/fastmcp-server-server.mdx
index be0129414..267f66d13 100644
--- a/docs/python-sdk/fastmcp-server-server.mdx
+++ b/docs/python-sdk/fastmcp-server-server.mdx
@@ -10,7 +10,7 @@ FastMCP - A more ergonomic interface for MCP servers.
## Functions
-### `default_lifespan`
+### `default_lifespan`
```python
default_lifespan(server: FastMCP[LifespanResultT]) -> AsyncIterator[Any]
@@ -26,7 +26,7 @@ Default lifespan context manager that does nothing.
- An empty dictionary as the lifespan result.
-### `create_proxy`
+### `create_proxy`
```python
create_proxy(target: Client[ClientTransportT] | ClientTransport | FastMCP[Any] | FastMCP1Server | AnyUrl | Path | MCPConfig | dict[str, Any] | str, **settings: Any) -> FastMCPProxy
@@ -54,53 +54,53 @@ use `FastMCPProxy` or `ProxyProvider` directly from `fastmcp.server.providers.pr
## Classes
-### `StateValue`
+### `StateValue`
Wrapper for stored context state values.
-### `FastMCP`
+### `FastMCP`
**Methods:**
-#### `name`
+#### `name`
```python
name(self) -> str
```
-#### `instructions`
+#### `instructions`
```python
instructions(self) -> str | None
```
-#### `instructions`
+#### `instructions`
```python
instructions(self, value: str | None) -> None
```
-#### `version`
+#### `version`
```python
version(self) -> str | None
```
-#### `website_url`
+#### `website_url`
```python
website_url(self) -> str | None
```
-#### `icons`
+#### `icons`
```python
icons(self) -> list[mcp.types.Icon]
```
-#### `local_provider`
+#### `local_provider`
```python
local_provider(self) -> LocalProvider
@@ -115,13 +115,13 @@ Use this to remove components:
mcp.local_provider.remove_prompt("my_prompt")
-#### `add_middleware`
+#### `add_middleware`
```python
add_middleware(self, middleware: Middleware) -> None
```
-#### `add_provider`
+#### `add_provider`
```python
add_provider(self, provider: Provider) -> None
@@ -141,7 +141,7 @@ always take precedence over providers.
- Prompts become "namespace_promptname"
-#### `get_tasks`
+#### `get_tasks`
```python
get_tasks(self) -> Sequence[FastMCPComponent]
@@ -153,7 +153,7 @@ Overrides AggregateProvider.get_tasks() to apply server-level transforms
after aggregation. AggregateProvider handles provider-level namespacing.
-#### `add_transform`
+#### `add_transform`
```python
add_transform(self, transform: Transform) -> None
@@ -168,7 +168,7 @@ They transform tools, resources, and prompts from ALL providers.
- `transform`: The transform to add.
-#### `add_tool_transformation`
+#### `add_tool_transformation`
```python
add_tool_transformation(self, tool_name: str, transformation: ToolTransformConfig) -> None
@@ -180,7 +180,7 @@ Add a tool transformation.
Use ``add_transform(ToolTransform({...}))`` instead.
-#### `remove_tool_transformation`
+#### `remove_tool_transformation`
```python
remove_tool_transformation(self, _tool_name: str) -> None
@@ -192,7 +192,7 @@ Remove a tool transformation.
Tool transformations are now immutable. Use enable/disable controls instead.
-#### `list_tools`
+#### `list_tools`
```python
list_tools(self) -> Sequence[Tool]
@@ -205,7 +205,7 @@ and middleware execution. Returns all versions (no deduplication).
Protocol handlers deduplicate for MCP wire format.
-#### `get_tool`
+#### `get_tool`
```python
get_tool(self, name: str, version: VersionSpec | None = None) -> Tool | None
@@ -225,7 +225,7 @@ session transforms can override provider-level disables.
- The tool if found and enabled, None otherwise.
-#### `list_resources`
+#### `list_resources`
```python
list_resources(self) -> Sequence[Resource]
@@ -238,7 +238,7 @@ and middleware execution. Returns all versions (no deduplication).
Protocol handlers deduplicate for MCP wire format.
-#### `get_resource`
+#### `get_resource`
```python
get_resource(self, uri: str, version: VersionSpec | None = None) -> Resource | None
@@ -257,7 +257,7 @@ transforms (including session-level) have been applied.
- The resource if found and enabled, None otherwise.
-#### `list_resource_templates`
+#### `list_resource_templates`
```python
list_resource_templates(self) -> Sequence[ResourceTemplate]
@@ -270,7 +270,7 @@ auth filtering, and middleware execution. Returns all versions (no deduplication
Protocol handlers deduplicate for MCP wire format.
-#### `get_resource_template`
+#### `get_resource_template`
```python
get_resource_template(self, uri: str, version: VersionSpec | None = None) -> ResourceTemplate | None
@@ -289,7 +289,7 @@ all transforms (including session-level) have been applied.
- The template if found and enabled, None otherwise.
-#### `list_prompts`
+#### `list_prompts`
```python
list_prompts(self) -> Sequence[Prompt]
@@ -302,7 +302,7 @@ and middleware execution. Returns all versions (no deduplication).
Protocol handlers deduplicate for MCP wire format.
-#### `get_prompt`
+#### `get_prompt`
```python
get_prompt(self, name: str, version: VersionSpec | None = None) -> Prompt | None
@@ -321,19 +321,19 @@ transforms (including session-level) have been applied.
- The prompt if found and enabled, None otherwise.
-#### `call_tool`
+#### `call_tool`
```python
call_tool(self, name: str, arguments: dict[str, Any] | None = None) -> ToolResult
```
-#### `call_tool`
+#### `call_tool`
```python
call_tool(self, name: str, arguments: dict[str, Any] | None = None) -> mcp.types.CreateTaskResult
```
-#### `call_tool`
+#### `call_tool`
```python
call_tool(self, name: str, arguments: dict[str, Any] | None = None) -> ToolResult | mcp.types.CreateTaskResult
@@ -363,19 +363,19 @@ return ToolResult.
- `ValidationError`: If arguments fail validation
-#### `read_resource`
+#### `read_resource`
```python
read_resource(self, uri: str) -> ResourceResult
```
-#### `read_resource`
+#### `read_resource`
```python
read_resource(self, uri: str) -> mcp.types.CreateTaskResult
```
-#### `read_resource`
+#### `read_resource`
```python
read_resource(self, uri: str) -> ResourceResult | mcp.types.CreateTaskResult
@@ -404,19 +404,19 @@ return ResourceResult.
- `ResourceError`: If resource read fails
-#### `render_prompt`
+#### `render_prompt`
```python
render_prompt(self, name: str, arguments: dict[str, Any] | None = None) -> PromptResult
```
-#### `render_prompt`
+#### `render_prompt`
```python
render_prompt(self, name: str, arguments: dict[str, Any] | None = None) -> mcp.types.CreateTaskResult
```
-#### `render_prompt`
+#### `render_prompt`
```python
render_prompt(self, name: str, arguments: dict[str, Any] | None = None) -> PromptResult | mcp.types.CreateTaskResult
@@ -446,7 +446,7 @@ return PromptResult.
- `PromptError`: If prompt rendering fails
-#### `add_tool`
+#### `add_tool`
```python
add_tool(self, tool: Tool | Callable[..., Any]) -> Tool
@@ -464,7 +464,7 @@ with the Context type annotation. See the @tool decorator for examples.
- The tool instance that was added to the server.
-#### `remove_tool`
+#### `remove_tool`
```python
remove_tool(self, name: str, version: str | None = None) -> None
@@ -483,19 +483,19 @@ Remove tool(s) from the server.
- `NotFoundError`: If no matching tool is found.
-#### `tool`
+#### `tool`
```python
-tool(self, name_or_fn: AnyFunction) -> FunctionTool
+tool(self, name_or_fn: F) -> F
```
-#### `tool`
+#### `tool`
```python
-tool(self, name_or_fn: str | None = None) -> Callable[[AnyFunction], FunctionTool]
+tool(self, name_or_fn: str | None = None) -> Callable[[F], F]
```
-#### `tool`
+#### `tool`
```python
tool(self, name_or_fn: str | AnyFunction | None = None) -> Callable[[AnyFunction], FunctionTool] | FunctionTool | partial[Callable[[AnyFunction], FunctionTool] | FunctionTool]
@@ -551,7 +551,7 @@ server.tool(my_function, name="custom_name")
```
-#### `add_resource`
+#### `add_resource`
```python
add_resource(self, resource: Resource | Callable[..., Any]) -> Resource | ResourceTemplate
@@ -566,7 +566,7 @@ Add a resource to the server.
- The resource instance that was added to the server.
-#### `add_template`
+#### `add_template`
```python
add_template(self, template: ResourceTemplate) -> ResourceTemplate
@@ -581,10 +581,10 @@ Add a resource template to the server.
- The template instance that was added to the server.
-#### `resource`
+#### `resource`
```python
-resource(self, uri: str) -> Callable[[AnyFunction], Resource | ResourceTemplate | AnyFunction]
+resource(self, uri: str) -> Callable[[F], F]
```
Decorator to register a function as a resource.
@@ -640,7 +640,7 @@ async def get_weather(city: str) -> str:
```
-#### `add_prompt`
+#### `add_prompt`
```python
add_prompt(self, prompt: Prompt | Callable[..., Any]) -> Prompt
@@ -655,19 +655,19 @@ Add a prompt to the server.
- The prompt instance that was added to the server.
-#### `prompt`
+#### `prompt`
```python
-prompt(self, name_or_fn: AnyFunction) -> FunctionPrompt
+prompt(self, name_or_fn: F) -> F
```
-#### `prompt`
+#### `prompt`
```python
-prompt(self, name_or_fn: str | None = None) -> Callable[[AnyFunction], FunctionPrompt]
+prompt(self, name_or_fn: str | None = None) -> Callable[[F], F]
```
-#### `prompt`
+#### `prompt`
```python
prompt(self, name_or_fn: str | AnyFunction | None = None) -> Callable[[AnyFunction], FunctionPrompt] | FunctionPrompt | partial[Callable[[AnyFunction], FunctionPrompt] | FunctionPrompt]
@@ -744,7 +744,7 @@ Decorator to register a prompt.
```
-#### `mount`
+#### `mount`
```python
mount(self, server: FastMCP[LifespanResultT], namespace: str | None = None, as_proxy: bool | None = None, tool_names: dict[str, str] | None = None, prefix: str | None = None) -> None
@@ -791,7 +791,7 @@ mounted server.
- `prefix`: Deprecated. Use namespace instead.
-#### `import_server`
+#### `import_server`
```python
import_server(self, server: FastMCP[LifespanResultT], prefix: str | None = None) -> None
@@ -832,7 +832,7 @@ templates, and prompts are imported with their original names.
objects are imported with their original names.
-#### `from_openapi`
+#### `from_openapi`
```python
from_openapi(cls, openapi_spec: dict[str, Any], client: httpx.AsyncClient | None = None, name: str = 'OpenAPI Server', route_maps: list[RouteMap] | None = None, route_map_fn: OpenAPIRouteMapFn | None = None, mcp_component_fn: OpenAPIComponentFn | None = None, mcp_names: dict[str, str] | None = None, tags: set[str] | None = None, validate_output: bool = True, **settings: Any) -> Self
@@ -861,7 +861,7 @@ response structure while still returning structured JSON.
- A FastMCP server with an OpenAPIProvider attached.
-#### `from_fastapi`
+#### `from_fastapi`
```python
from_fastapi(cls, app: Any, name: str | None = None, route_maps: list[RouteMap] | None = None, route_map_fn: OpenAPIRouteMapFn | None = None, mcp_component_fn: OpenAPIComponentFn | None = None, mcp_names: dict[str, str] | None = None, httpx_client_kwargs: dict[str, Any] | None = None, tags: set[str] | None = None, **settings: Any) -> Self
@@ -885,7 +885,7 @@ Use this to configure timeout and other client settings.
- A FastMCP server with an OpenAPIProvider attached.
-#### `as_proxy`
+#### `as_proxy`
```python
as_proxy(cls, backend: Client[ClientTransportT] | ClientTransport | FastMCP[Any] | FastMCP1Server | AnyUrl | Path | MCPConfig | dict[str, Any] | str, **settings: Any) -> FastMCPProxy
@@ -903,7 +903,7 @@ instance or any value accepted as the `transport` argument of
`fastmcp.client.Client` constructor.
-#### `generate_name`
+#### `generate_name`
```python
generate_name(cls, name: str | None = None) -> str
diff --git a/src/fastmcp/server/providers/local_provider/decorators/prompts.py b/src/fastmcp/server/providers/local_provider/decorators/prompts.py
index 5e01b7a04..d36c7d2f4 100644
--- a/src/fastmcp/server/providers/local_provider/decorators/prompts.py
+++ b/src/fastmcp/server/providers/local_provider/decorators/prompts.py
@@ -9,7 +9,7 @@ from __future__ import annotations
import inspect
from collections.abc import Callable
from functools import partial
-from typing import TYPE_CHECKING, Any, overload
+from typing import TYPE_CHECKING, Any, TypeVar, overload
import mcp.types
from mcp.types import AnyFunction
@@ -23,6 +23,8 @@ from fastmcp.server.tasks.config import TaskConfig
if TYPE_CHECKING:
from fastmcp.server.providers.local_provider import LocalProvider
+F = TypeVar("F", bound=Callable[..., Any])
+
class PromptDecoratorMixin:
"""Mixin class providing prompt decorator functionality for LocalProvider.
@@ -71,7 +73,7 @@ class PromptDecoratorMixin:
@overload
def prompt(
self: LocalProvider,
- name_or_fn: AnyFunction,
+ name_or_fn: F,
*,
name: str | None = None,
version: str | int | None = None,
@@ -83,7 +85,7 @@ class PromptDecoratorMixin:
meta: dict[str, Any] | None = None,
task: bool | TaskConfig | None = None,
auth: AuthCheck | list[AuthCheck] | None = None,
- ) -> FunctionPrompt: ...
+ ) -> F: ...
@overload
def prompt(
@@ -100,7 +102,7 @@ class PromptDecoratorMixin:
meta: dict[str, Any] | None = None,
task: bool | TaskConfig | None = None,
auth: AuthCheck | list[AuthCheck] | None = None,
- ) -> Callable[[AnyFunction], FunctionPrompt]: ...
+ ) -> Callable[[F], F]: ...
def prompt(
self: LocalProvider,
diff --git a/src/fastmcp/server/providers/local_provider/decorators/resources.py b/src/fastmcp/server/providers/local_provider/decorators/resources.py
index 52314378e..80a3e9a5c 100644
--- a/src/fastmcp/server/providers/local_provider/decorators/resources.py
+++ b/src/fastmcp/server/providers/local_provider/decorators/resources.py
@@ -8,7 +8,7 @@ from __future__ import annotations
import inspect
from collections.abc import Callable
-from typing import TYPE_CHECKING, Any
+from typing import TYPE_CHECKING, Any, TypeVar
import mcp.types
from mcp.types import Annotations, AnyFunction
@@ -23,6 +23,8 @@ from fastmcp.server.tasks.config import TaskConfig
if TYPE_CHECKING:
from fastmcp.server.providers.local_provider import LocalProvider
+F = TypeVar("F", bound=Callable[..., Any])
+
class ResourceDecoratorMixin:
"""Mixin class providing resource decorator functionality for LocalProvider.
@@ -118,7 +120,7 @@ class ResourceDecoratorMixin:
meta: dict[str, Any] | None = None,
task: bool | TaskConfig | None = None,
auth: AuthCheck | list[AuthCheck] | None = None,
- ) -> Callable[[AnyFunction], Resource | ResourceTemplate | AnyFunction]:
+ ) -> Callable[[F], F]:
"""Decorator to register a function as a resource.
If the URI contains parameters (e.g. "resource://{param}") or the function
@@ -166,7 +168,7 @@ class ResourceDecoratorMixin:
resolved_task: bool | TaskConfig = task if task is not None else False
- def decorator(fn: AnyFunction) -> Resource | ResourceTemplate | AnyFunction:
+ def decorator(fn: AnyFunction) -> Any:
# Check for unbound method
try:
params = list(inspect.signature(fn).parameters.keys())
diff --git a/src/fastmcp/server/providers/local_provider/decorators/tools.py b/src/fastmcp/server/providers/local_provider/decorators/tools.py
index c59fa8a3f..93209eb21 100644
--- a/src/fastmcp/server/providers/local_provider/decorators/tools.py
+++ b/src/fastmcp/server/providers/local_provider/decorators/tools.py
@@ -10,7 +10,7 @@ import inspect
import warnings
from collections.abc import Callable
from functools import partial
-from typing import TYPE_CHECKING, Any, Literal, overload
+from typing import TYPE_CHECKING, Any, Literal, TypeVar, overload
import mcp.types
from mcp.types import AnyFunction, ToolAnnotations
@@ -26,6 +26,8 @@ if TYPE_CHECKING:
from fastmcp.server.providers.local_provider import LocalProvider
from fastmcp.tools.tool import ToolResultSerializerType
+F = TypeVar("F", bound=Callable[..., Any])
+
DuplicateBehavior = Literal["error", "warn", "replace", "ignore"]
@@ -90,7 +92,7 @@ class ToolDecoratorMixin:
@overload
def tool(
self: LocalProvider,
- name_or_fn: AnyFunction,
+ name_or_fn: F,
*,
name: str | None = None,
version: str | int | None = None,
@@ -107,7 +109,7 @@ class ToolDecoratorMixin:
serializer: ToolResultSerializerType | None = None, # Deprecated
timeout: float | None = None,
auth: AuthCheck | list[AuthCheck] | None = None,
- ) -> FunctionTool: ...
+ ) -> F: ...
@overload
def tool(
@@ -129,7 +131,7 @@ class ToolDecoratorMixin:
serializer: ToolResultSerializerType | None = None, # Deprecated
timeout: float | None = None,
auth: AuthCheck | list[AuthCheck] | None = None,
- ) -> Callable[[AnyFunction], FunctionTool]: ...
+ ) -> Callable[[F], F]: ...
# NOTE: This method mirrors fastmcp.tools.tool() but adds registration,
# the `enabled` param, and supports deprecated params (serializer, exclude_args).
diff --git a/src/fastmcp/server/server.py b/src/fastmcp/server/server.py
index 1900ee148..db558dca3 100644
--- a/src/fastmcp/server/server.py
+++ b/src/fastmcp/server/server.py
@@ -19,7 +19,7 @@ from contextlib import (
from dataclasses import replace
from functools import partial
from pathlib import Path
-from typing import TYPE_CHECKING, Any, Generic, Literal, cast, overload
+from typing import TYPE_CHECKING, Any, Generic, Literal, TypeVar, cast, overload
import httpx
import mcp.types
@@ -99,6 +99,7 @@ if TYPE_CHECKING:
logger = get_logger(__name__)
+F = TypeVar("F", bound=Callable[..., Any])
DuplicateBehavior = Literal["warn", "error", "replace", "ignore"]
@@ -1300,7 +1301,7 @@ class FastMCP(
@overload
def tool(
self,
- name_or_fn: AnyFunction,
+ name_or_fn: F,
*,
name: str | None = None,
version: str | int | None = None,
@@ -1316,7 +1317,7 @@ class FastMCP(
task: bool | TaskConfig | None = None,
timeout: float | None = None,
auth: AuthCheck | list[AuthCheck] | None = None,
- ) -> FunctionTool: ...
+ ) -> F: ...
@overload
def tool(
@@ -1337,7 +1338,7 @@ class FastMCP(
task: bool | TaskConfig | None = None,
timeout: float | None = None,
auth: AuthCheck | list[AuthCheck] | None = None,
- ) -> Callable[[AnyFunction], FunctionTool]: ...
+ ) -> Callable[[F], F]: ...
def tool(
self,
@@ -1478,7 +1479,7 @@ class FastMCP(
app: AppConfig | dict[str, Any] | bool | None = None,
task: bool | TaskConfig | None = None,
auth: AuthCheck | list[AuthCheck] | None = None,
- ) -> Callable[[AnyFunction], Resource | ResourceTemplate | AnyFunction]:
+ ) -> Callable[[F], F]:
"""Decorator to register a function as a resource.
The function will be called when the resource is read to generate its content.
@@ -1579,10 +1580,7 @@ class FastMCP(
auth=auth,
)
- def decorator(fn: AnyFunction) -> Resource | ResourceTemplate | AnyFunction:
- return inner_decorator(fn)
-
- return decorator
+ return inner_decorator
def add_prompt(self, prompt: Prompt | Callable[..., Any]) -> Prompt:
"""Add a prompt to the server.
@@ -1598,7 +1596,7 @@ class FastMCP(
@overload
def prompt(
self,
- name_or_fn: AnyFunction,
+ name_or_fn: F,
*,
name: str | None = None,
version: str | int | None = None,
@@ -1609,7 +1607,7 @@ class FastMCP(
meta: dict[str, Any] | None = None,
task: bool | TaskConfig | None = None,
auth: AuthCheck | list[AuthCheck] | None = None,
- ) -> FunctionPrompt: ...
+ ) -> F: ...
@overload
def prompt(
@@ -1625,7 +1623,7 @@ class FastMCP(
meta: dict[str, Any] | None = None,
task: bool | TaskConfig | None = None,
auth: AuthCheck | list[AuthCheck] | None = None,
- ) -> Callable[[AnyFunction], FunctionPrompt]: ...
+ ) -> Callable[[F], F]: ...
def prompt(
self,