--- title: function_tool sidebarTitle: function_tool --- # `fastmcp.tools.function_tool` Standalone @tool decorator for FastMCP. ## Functions ### `tool` ```python 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` ```python 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` ```python run(self, arguments: dict[str, Any]) -> ToolResult ``` Run the tool with arguments. #### `register_with_docket` ```python 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` ```python 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()