Claude tool_choice explained: auto, any, tool and none, plus parallel tool calls
tool_choice tells Claude whether it may, must or must not call a tool: auto lets Claude decide (the default when tools are provided), any requires some tool, tool forces one named tool, and none blocks tools. Forcing has costs: no text before the call, no thinking, and on Claude Opus 5.5, Sonnet 5.5 and Fable 5.1 it returns a 400. By default Claude can also call several tools in one response; you run them and return every result together in one message.
Video · Claude tool_choice Explained: auto, any, tool or none (CCAR-F) · 4:07
Video · Claude Parallel Tool Calls: Several Tools in One Turn (CCAR-F) · 4:00
The four tool_choice options
When you send tools with a Messages API request, tool_choice sets how free Claude is to use them:
tool_choice |
What Claude does | Typical use |
|---|---|---|
{"type": "auto"} |
Decides: call a tool, or answer in text. The default when tools are provided | Assistants and agents |
{"type": "any"} |
Must call one of the tools, its choice | Extraction when the document type is unknown and each type has its own schema |
{"type": "tool", "name": "find_customer"} |
Must call that tool | A step that must run first |
{"type": "none"} |
Can't call tools. The default when no tools are provided | A text-only turn |
Forcing makes the call happen; it doesn't check what comes back. Validating the result is still your code's job.
What forcing a tool costs
With any or tool, the docs explain that "the API prefills the assistant message to force a tool to be used". Two side effects follow:
- No text before the call, "even if explicitly asked to do so". If you want an explanation and a tool call, use
autoand ask for both in the user message. - No thinking. "Forcing a tool also skips thinking": the response starts with the
tool_useblock.
Which models reject forced tools
Today's newest models restrict it. On Claude Opus 5.5, Claude Sonnet 5.5, Claude Fable 5.1 and Claude Mythos 5.1, any and tool return a 400 invalid_request_error, while auto and none work. Manual extended thinking also rejects them.
The documented alternatives:
autowith strict tool use:strict: trueguarantees the tool input matches its schema and the tool name is valid. Prompting still influences which toolautopicks.- Structured outputs: when what you need is a response in a fixed JSON shape rather than a tool call.
Parallel tool calls
"By default, Claude may call multiple tools in a single response." Ask a support agent about two bookings, and it can call the booking lookup twice in one turn: the response has stop_reason: "tool_use" and two tool_use blocks, each with its own id.
The agentic loop then runs them:
- Choose the order. "The API doesn't prescribe an execution order." Independent, read-only calls are usually safe in parallel. Calls with side effects, shared state or an order to respect are better run one after another.
- Return every result together. One
tool_resultpertool_use, matched bytool_use_id, all in the next user message, with thetool_resultblocks before any text. - Answer calls you didn't run. A skipped call still gets a
tool_result, withis_error: trueand a short reason.
The docs call result formatting "the most common issue": sending each result in its own user message teaches Claude to stop making parallel calls. And if one call depended on another that hadn't finished, return an error; Claude will reissue it on the next turn. A system prompt line such as "Only batch tool calls that are independent of each other" helps.
Turning parallel calls off
json
{
"tool_choice": {"type": "auto", "disable_parallel_tool_use": true}
}
The flag goes inside tool_choice, not at the top level. With auto, Claude calls at most one tool per response; with any or tool, exactly one.
tool_choice on the Claude Certified Architect exam
The CCAR-F exam tests this in task 2.3 (forced selection so a tool runs first, any to guarantee a call) and task 4.3 (any when several extraction schemas exist and the document type is unknown). Task 1.3 adds the parallel pattern for agents: a coordinator spawns subagents in parallel by emitting several Task calls in one response, not across separate turns. In today's Agent SDK that tool is named Agent; see multi-agent systems.
The exam guide v1.0 teaches any and forced tool as the way to guarantee a call. Answer the exam with the guide; in production, check the model first.
More in all articles.
Sources: Define tools: forcing tool use; Parallel tool use; Handle tool calls; Strict tool use; API errors, all read in October 2026; Claude Certified Architect Foundations exam guide v1.0, task statements 1.3, 2.3 and 4.3.
FAQ
What is the default tool_choice for Claude?
auto when the request includes tools, and none when it doesn't. With auto, Claude decides whether to call a tool or answer in text.
How do I force Claude to call a specific tool?
Send tool_choice {"type": "tool", "name": "your_tool"}, or {"type": "any"} to require some tool. Forced calls skip the text before the call and skip thinking. Claude Opus 5.5, Sonnet 5.5, Fable 5.1 and Mythos 5.1 reject any and tool with a 400; there, use auto with strict tools or structured outputs.
Can Claude call multiple tools at once?
Yes. By default Claude may return several tool_use blocks in one response. Run them, then send one tool_result per tool_use, all in the next user message, matched by tool_use_id.
How do I turn off parallel tool use?
Set disable_parallel_tool_use: true inside tool_choice, not as a top-level parameter. With auto, Claude then calls at most one tool per response.