CCAR-F questions and answers — Domain 2: Tool Design & MCP
11 practice questions on Tool Design & MCP Integration, the domain weighted at 18% of the CCAR-F exam. Every answer explains why the distractors fail — that is the part that transfers to questions you have not seen before.
Question 1
Your search_orders tool is frequently called with malformed date strings. What is the most reliable fix?
- Add a line to the system prompt describing the date format
- Tighten
input_schema— describe the format in the parameter description, and setstrict: truewithadditionalProperties: false - Post-process the argument and guess the intended date
- Switch to a larger model
Answer: B. The schema is the contract the model is generating against; strict: true makes conformance enforced rather than requested. System-prompt notes about a specific parameter are easily lost among many tools. Guessing at malformed input hides the defect and creates silent wrong answers.
Question 2
A tool call fails because the order does not exist. How should your application return this?
- Raise an exception in your handler and omit the
tool_resultblock - Return a
tool_resultwithis_error: trueand an actionable message incontent - Return an empty
tool_result - Return a
tool_resultcontaining an empty list of orders
Answer: B. Failures travel back through the same protocol channel: a tool_result with is_error: true and the reason in content. Omitting the block breaks the exchange, since every tool_use needs a matching result. Empty results are read as 'no data found', which is a different fact entirely.
Question 3
Which error payload best supports an agent's decision-making?
{"error": "Request failed"}{"error": {"code": "RATE_LIMITED", "message": "...", "isRetryable": true, "suggestedAction": "Retry after 30s"}}{"status": 500}- An HTTP status code with the response body stripped
Answer: B. The agent needs three things: what happened, whether retrying could help, and what else it might do. The isRetryable flag is what turns blanket retry-with-backoff into a policy that retries transient failures and surfaces permanent ones immediately.
Question 4
You are consolidating an agent's tool set. Which change is most likely to improve reliability?
- Replace
get_user,get_user_emailandget_user_tierwith oneget_customer_profile - Split
get_customer_profileinto six single-field tools for precision - Add a
helptool that explains the other tools - Register every tool twice under different names to improve recall
Answer: A. Each tool costs context and adds a chance of mis-selection. Consolidating overlapping micro-tools into a coherent, higher-level tool reduces both. Splitting further, adding meta-tools, or duplicating names all increase the surface the model must choose across.
Question 5
In MCP, which primitives are exposed by servers?
- Sampling, elicitation and logging
- Tools, resources and prompts
- Tools, sampling and roots
- Resources, transports and sessions
Answer: B. Servers expose tools (executable actions), resources (context data) and prompts (reusable templates). Sampling, elicitation and logging are the client-side primitives — the ways a server can ask the host to run a completion, ask the user something, or emit logs.
Question 6
An internal MCP server runs on the same machine as the client and serves that one client. Which transport is appropriate, and why?
- Streamable HTTP, because it supports OAuth
- stdio, because it is direct process communication with no network overhead
- WebSocket, because it is bidirectional
- SSE, because it is the modern default
Answer: B. stdio is designed for exactly this: a local process serving a single client, with no network hop. Streamable HTTP is the choice for remote servers serving many clients, where standard HTTP authentication — preferably OAuth — matters. SSE as a standalone transport is deprecated.
Question 7
Your team needs everyone on the project to get the same MCP server automatically after cloning the repo. Which scope?
local, stored in~/.claude.jsonuser, so it is available everywhereproject, stored in.mcp.jsonat the repo root- Managed organisation scope
Answer: C. Project scope writes to .mcp.json at the project root, which you commit. Local and user scopes live in ~/.claude.json and are personal to one machine. Managed scope is an organisation-wide deployment, heavier than a single team repository needs.
Question 8
A committed .mcp.json needs an API token that differs per developer. What is the correct approach?
- Commit the token and rotate it monthly
- Use
${API_TOKEN}expansion in theheadersvalue, with each developer setting the variable - Have each developer edit
.mcp.jsonand gitignore it - Move the server to user scope for everyone
Answer: B. Environment expansion — ${VAR} and ${VAR:-default} — is what makes a shared .mcp.json committable. Gitignoring the file loses the shared configuration entirely; user scope means every developer configures it from scratch; committing secrets is never right. For rotating credentials such as Kerberos tickets, headersHelper runs a script that prints the headers.
Question 9
Which permission rule denies every tool from every MCP server?
mcp__*mcp__server__*mcp__serverMCP(*)
Answer: A. MCP tools are named mcp__<server>__<tool>. mcp__server and mcp__server__* each remove one named server's tools; mcp__* removes every MCP tool from any server. There is no MCP(*) form.
Question 10
In a CI run, an MCP server entry fails config validation. What happens by default, and how should the pipeline react?
- The run aborts with a non-zero exit code; no action needed
- The entry is skipped and the run continues and exits cleanly; check
mcp_server_errorsin thesystem/initevent to fail the build - Claude Code prompts for confirmation, blocking the pipeline
- The server is retried until
MCP_TIMEOUTelapses, then the run aborts
Answer: B. Invalid entries are skipped and the run exits cleanly, which is exactly how a silently degraded pipeline happens. With --output-format stream-json, the system/init event carries mcp_servers and mcp_server_errors; gate the build on the latter being empty. The same pattern applies to plugin_errors.
Question 11
Claude returns two tool_use blocks in one response. What must your next request contain?
- A single
tool_resultfor the first tool, then another request for the second - Both
tool_resultblocks together, each matching itstool_use_id - A
tool_resultfor whichever finished first, with the other discarded - A summary of both results in a plain text user message
Answer: B. Parallel tool use means all matching results go back together in the next user message, keyed by tool_use_id. Splitting them across requests breaks the exchange. If your backend cannot handle concurrency, disable it with {"type":"auto","disable_parallel_tool_use": true} rather than mishandling the results.
← Previous: Questions & answers — Domain 1 | Next: Questions & answers — Domain 3 →
Explore Other Certification Study Guides
Switch to another exam guide to prepare for your next Claude certification:
Claude Certified Associate — Foundations
Entry-level certification for non-coders: prompting, output evaluation, model selection, workflow integration, configuration, governance & responsible use.
Claude Certified Architect — Professional
Advanced enterprise architecture: solution design, system integration, evaluation frameworks, governance, safety & developer enablement.
Claude Certified Developer — Foundations
Build software on Claude: API integration, model selection, tools & MCP servers, agents vs workflows, security, safety & debugging.