Software Engineeringunpacked

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:

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:

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:

  1. 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.
  2. Return every result together. One tool_result per tool_use, matched by tool_use_id, all in the next user message, with the tool_result blocks before any text.
  3. Answer calls you didn't run. A skipped call still gets a tool_result, with is_error: true and 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.