Skip to content

CCAR-F · Domain 2: Tool Design & MCP Integration · 18% of the exam

Task 2.3: Distribute tools appropriately across agents and configure tool choice

Giving each agent only the tools its role needs, narrow cross-role tools for frequent needs, constrained tools in place of generic ones, and the tool_choice options that decide whether Claude may, must, or must specifically call a tool.

Study it

  • Scoping tools per agent and the tool_choice options

    Partly covered by: Agents and Tools

Sample questions

Try each one before opening the answer. Every option is explained, with the Anthropic documentation page that proves it.

Question 1 · choose 1

Your synthesis subagent was given the same 18 tools as every other agent in the research system, including web search, URL fetching and database queries. It now starts new web searches halfway through writing reports and sometimes calls the wrong tool for a citation check. What change best improves its reliability?

  1. ALimit the synthesis subagent to the few tools its role needs, using the tools list in its definition
  2. BGive every tool a longer, more detailed description so that the synthesis subagent can choose among all 18 more accurately
  3. CSet tool_choice to "any" for the synthesis subagent so that it always commits to a tool on each turn
  4. DKeep all 18 tools and add a paragraph to its prompt about which ones to ignore during synthesis
Show the answer and why
  • ALimit the synthesis subagent to the few tools its role needs, using the tools list in its definition

    Correct

    Fewer, role-specific tools reduce decision complexity and stop an agent from wandering into work that belongs to other specialists.

  • BGive every tool a longer, more detailed description so that the synthesis subagent can choose among all 18 more accurately

    Incorrect

    Better descriptions help, but an agent with tools outside its specialty still faces 18 choices it does not need.

  • CSet tool_choice to "any" for the synthesis subagent so that it always commits to a tool on each turn

    Incorrect

    Requiring a tool call on every turn makes the extra tool calls more frequent, not less.

  • DKeep all 18 tools and add a paragraph to its prompt about which ones to ignore during synthesis

    Incorrect

    The tools stay in its context and remain tempting; prompt guidance lowers the misuse rate without removing it.

Giving an agent too many tools degrades selection and invites cross-specialization misuse. Scope each subagent's tools to its role and route other needs through the coordinator.

Question 2 · choose 2

An extraction pipeline calls the Claude API on a model that supports forced tool use. For every document, extract_metadata must run before any enrichment tool, because the enrichment tools need its output; after that, Claude should choose which enrichment tools fit the document. Which TWO settings implement this? (Choose TWO.)

  1. ASend the first request with tool_choice {"type": "tool", "name": "extract_metadata"}
  2. BSend the follow-up requests with tool_choice "none" so that Claude works only from the metadata
  3. CSend the follow-up requests with tool_choice "auto" so that Claude picks the enrichment tools from the metadata
  4. DKeep tool_choice "auto" throughout and state in the prompt that extract_metadata must always come first
  5. ESend the first request with tool_choice "any" so that Claude has to start with one of the tools
Show the answer and why
  • ASend the first request with tool_choice {"type": "tool", "name": "extract_metadata"}

    Correct

    Forcing a named tool guarantees that this specific tool is called first.

  • BSend the follow-up requests with tool_choice "none" so that Claude works only from the metadata

    Incorrect

    "none" prevents tool calls entirely, so no enrichment tool would run.

  • CSend the follow-up requests with tool_choice "auto" so that Claude picks the enrichment tools from the metadata

    Correct

    After the forced first step, later turns let Claude decide which tools the document needs.

  • DKeep tool_choice "auto" throughout and state in the prompt that extract_metadata must always come first

    Incorrect

    With "auto" Claude may skip or reorder the call; the prompt makes the order likely, not certain.

  • ESend the first request with tool_choice "any" so that Claude has to start with one of the tools

    Incorrect

    "any" requires some tool call but lets Claude pick an enrichment tool before extract_metadata.

Use forced tool selection to pin the first step, then return to "auto" for the follow-up turns. "any" guarantees a tool call but not which one, and "none" disables tools.

Question 3 · choose 1

A routing step in your support system must end every request by calling one of three handoff tools: to_billing, to_technical or to_sales. Claude picks the right one most of the time, but sometimes it answers in prose ("This sounds like a billing question") without calling any tool. The model supports forced tool use and extended thinking is off. Which tool_choice setting fits?

  1. A{"type": "tool", "name": "to_billing"}, so that a tool is always called
  2. B{"type": "auto"}, with "always call a tool" added to the prompt
  3. C{"type": "any"}, so that Claude must call a tool but chooses which one
  4. D{"type": "none"}, so that Claude only classifies the request in text
Show the answer and why
  • A{"type": "tool", "name": "to_billing"}, so that a tool is always called

    Incorrect

    Forcing one named tool removes the choice between the three handoffs.

  • B{"type": "auto"}, with "always call a tool" added to the prompt

    Incorrect

    With auto, Claude may still answer in text; the instruction raises the odds but guarantees nothing.

  • C{"type": "any"}, so that Claude must call a tool but chooses which one

    Correct

    any requires a tool call on every response while leaving the choice of tool to Claude.

  • D{"type": "none"}, so that Claude only classifies the request in text

    Incorrect

    none prevents tool calls altogether, the opposite of what the step needs.

tool_choice "auto" lets Claude decide whether to call a tool, "any" requires a call to one of the provided tools, a named tool forces that specific tool, and "none" prevents tool use. To guarantee a call while keeping the choice, use "any".

Question 4 · choose 1

Your extraction request enables manual extended thinking (thinking type "enabled") and sets tool_choice {"type": "any"}. The API returns an error. What is the fix?

  1. AMove the tools into the system prompt as text
  2. BUse tool_choice "auto" or "none" instead
  3. CKeep "any" and raise the thinking budget
  4. DReplace "any" with {"type": "tool", "name": ...}
Show the answer and why
  • AMove the tools into the system prompt as text

    Incorrect

    Tools must be defined in the tools parameter to be called.

  • BUse tool_choice "auto" or "none" instead

    Correct

    Manual extended thinking does not support "any" or a named tool.

  • CKeep "any" and raise the thinking budget

    Incorrect

    The combination itself is unsupported.

  • DReplace "any" with {"type": "tool", "name": ...}

    Incorrect

    Forcing a named tool is also unsupported with manual extended thinking.

With manual extended thinking, only tool_choice "auto" and "none" work; forced modes return an error.

Question 5 · choose 1

Your high-volume pipeline caches its long system prompt and tool definitions. You start switching tool_choice between requests and see cache reuse drop for the message history. What does the documentation say about this?

  1. AChanging tool_choice clears the cached tool definitions as well
  2. BCaching cannot be used with tools at all
  3. Ctool_choice has no effect on caching
  4. DChanging tool_choice invalidates the cached message blocks
Show the answer and why
  • AChanging tool_choice clears the cached tool definitions as well

    Incorrect

    Tool definitions and system prompts remain cached.

  • BCaching cannot be used with tools at all

    Incorrect

    Tools are commonly cached.

  • Ctool_choice has no effect on caching

    Incorrect

    Changes to tool_choice do affect the cached message blocks.

  • DChanging tool_choice invalidates the cached message blocks

    Correct

    tool_choice changes force message content to be reprocessed.

With prompt caching, a change to tool_choice invalidates cached message blocks; keep it stable when cache reuse of the history matters.

Question 6 · choose 1

Only your data-analysis subagent should be able to use the warehouse MCP server; the coordinator and other subagents should not see its tools. Where should the server be configured?

  1. AIn the coordinator's mcpServers option, so that subagents inherit it
  2. BIn the project's .mcp.json, shared by every agent
  3. CIn each subagent's prompt, with the server's URL
  4. DIn the mcpServers field of that subagent's definition
Show the answer and why
  • AIn the coordinator's mcpServers option, so that subagents inherit it

    Incorrect

    That makes the tools available to the coordinator too.

  • BIn the project's .mcp.json, shared by every agent

    Incorrect

    Project scope exposes the server broadly.

  • CIn each subagent's prompt, with the server's URL

    Incorrect

    A prompt cannot connect a server.

  • DIn the mcpServers field of that subagent's definition

    Correct

    mcpServers on an AgentDefinition scopes a server to that agent.

Scope tools by role: an AgentDefinition can list its own MCP servers, so only the agent that needs a server gets its tools.

Question 7 · choose 1

Your deployment tools must run strictly one at a time: create_release, then upload_artifacts, then promote. Claude sometimes requests two of them in the same response. How can you make Claude call at most one tool per response?

  1. ASet disable_parallel_tool_use as a top-level request parameter
  2. BSet disable_parallel_tool_use: true inside the tool_choice object
  3. CSet tool_choice to "none" for every request
  4. DMerge the three tools into one with a step parameter
Show the answer and why
  • ASet disable_parallel_tool_use as a top-level request parameter

    Incorrect

    It belongs inside tool_choice, not at the top level.

  • BSet disable_parallel_tool_use: true inside the tool_choice object

    Correct

    With "auto", this limits Claude to at most one tool call per response.

  • CSet tool_choice to "none" for every request

    Incorrect

    This prevents tool calls entirely.

  • DMerge the three tools into one with a step parameter

    Incorrect

    Possible, but it does not stop parallel calls to other tools and changes the interface.

Parallel tool use is on by default; disable_parallel_tool_use inside tool_choice restricts Claude to one tool call per response.

Practise domain 2 →Practise all domains →