Skip to main content

fastmcp.tools.function_tool

Standalone @tool decorator for FastMCP.

Functions

tool

tool(name_or_fn: str | Callable[..., Any] | None = None) -> Any
Standalone decorator to mark a function as an MCP tool. Returns the original function with metadata attached. Register with a server using mcp.add_tool().

Classes

DecoratedTool

Protocol for functions decorated with @tool.

ToolMeta

Metadata attached to functions by the @tool decorator.

FunctionTool

Methods:

from_function

from_function(cls, fn: Callable[..., Any]) -> FunctionTool
Create a FunctionTool from a function. Args:
  • fn: The function to wrap
  • metadata: ToolMeta object with all configuration. If provided, individual parameters must not be passed.
  • name, title, etc.: Individual parameters for backwards compatibility. Cannot be used together with metadata parameter.

run

run(self, arguments: dict[str, Any]) -> ToolResult
Run the tool with arguments.

register_with_docket

register_with_docket(self, docket: Docket) -> None
Register this tool with docket for background execution. FunctionTool registers the underlying function, which has the user’s Depends parameters for docket to resolve. The function is wrapped to eagerly restore HTTP headers from Redis so that get_http_request() works even without explicit dependency injection.

add_to_docket

add_to_docket(self, docket: Docket, arguments: dict[str, Any], **kwargs: Any) -> Execution
Schedule this tool for background execution via docket. FunctionTool splats the arguments dict since .fn expects **kwargs. Args:
  • docket: The Docket instance
  • arguments: Tool arguments
  • fn_key: Function lookup key in Docket registry (defaults to self.key)
  • task_key: Redis storage key for the result
  • **kwargs: Additional kwargs passed to docket.add()