Skip to main content
New in version 2.0.0 Use this when you need to execute server-side functions and process their results. Tools are executable functions exposed by MCP servers. The client’s call_tool() method executes a tool by name with arguments and returns structured results.

Basic Execution

Arguments are passed as a dictionary. For multi-server clients, tool names are automatically prefixed with the server name (e.g., weather_get_forecast for a tool named get_forecast on the weather server).

Execution Options

The call_tool() method supports timeout control and progress monitoring:

Structured Results

New in version 2.10.0 Tool execution returns a CallToolResult object. The .data property provides fully hydrated Python objects including complex types like datetimes and UUIDs, reconstructed from the server’s output schema.

CallToolResult Properties

.data
Any
Fully hydrated Python objects with complex type support (datetimes, UUIDs, custom classes). FastMCP exclusive.
.content
list[mcp.types.ContentBlock]
Standard MCP content blocks (TextContent, ImageContent, AudioContent, etc.).
.structured_content
dict[str, Any] | None
Standard MCP structured JSON data as sent by the server.
.is_error
bool
Boolean indicating if the tool execution failed.
For tools without output schemas or when deserialization fails, .data will be None. Fall back to content blocks in that case:
FastMCP servers automatically wrap primitive results (like int, str, bool) in a {"result": value} structure. FastMCP clients automatically unwrap this, so you get the original value in .data.

Error Handling

By default, call_tool() raises a ToolError if the tool execution fails:
To handle errors manually instead of catching exceptions, disable automatic error raising:

Sending Metadata

New in version 2.13.1 The meta parameter sends ancillary information alongside tool calls for observability, debugging, or client identification:
See Client Metadata to learn how servers access this data.

Raw Protocol Access

For complete control, use call_tool_mcp() which returns the raw MCP protocol object: