tool_choice has four values. auto lets Claude decide whether to call a tool, any forces a call to one of your tools, tool forces a call to the one tool you name, and none stops Claude from calling tools at all.
The four values
auto is the default when you send tools. Claude calls a tool when the request maps to one, or answers in text. none is the default when you send no tools. any means Claude must call one of the provided tools but picks which. tool forces one named tool, for example {"type": "tool", "name": "get_weather"}.
With any or tool, the API prefills the assistant turn so the response starts with the tool call. Claude writes no explanation before the tool_use block, even if your prompt asks for one, and it skips thinking: there is no thinking block. If you want a sentence of context or some reasoning first, use auto and say in the user message which tool to use.
Where forced tool use is rejected
Manual extended thinking (thinking: {"type": "enabled"}) does not support any or tool; only auto and none work. Claude Opus 5.5, Claude Sonnet 5.5, Claude Fable 5.1 and Claude Mythos 5.1 return a 400 for any and tool whatever the thinking settings. On those models, use auto with strict: true on your tools to guarantee schema-valid inputs, or structured outputs when you need a fixed JSON reply.
Cost and caching
Declaring tools adds a tool-use system prompt, and its size depends on tool_choice. On Claude Opus 5 it is 286 tokens for auto or none and 406 tokens for any or tool. With no tools at all and none, it is 0. A request path that never needs tools should leave the tools array out rather than send it with none.
Changing tool_choice between requests invalidates cached message blocks. Tool definitions and the system prompt stay cached, but message content is reprocessed.
To limit Claude to a single call per response, set disable_parallel_tool_use: true inside the tool_choice object. It is not a top-level request parameter.
Where the exam catches people
Believing a system prompt can make Claude explain itself before a forced call: with any or tool the turn is prefilled and no text comes first.
Believing tool_choice: none removes all tool overhead: the tool-use system prompt is still added while the tools array is present.
Believing a tool_choice change invalidates the whole cache: tools and system stay cached, only message blocks are reprocessed.
Believing every model accepts any: Opus 5.5, Sonnet 5.5, Fable 5.1 and Mythos 5.1 return a 400 for any and tool.