Here are 10 practice questions for the Claude Certified Architect: Foundations exam (CCAR-F), each with the answer and a short explanation. They are scenario-style and multiple choice, like the real exam, and they cover all five official domains. We wrote them ourselves. They are not real exam questions, which are confidential under Anthropic's non-disclosure agreement. Each answer is based on Anthropic's documentation and the official exam guide.
How the real Claude Architect exam questions work
Before you start, know the format. Per Anthropic's official exam guide:
| Detail | Official answer |
|---|---|
| Items | 60, multiple-choice and multiple-response |
| Structure | 4 scenarios picked at random from 6 |
| Time | 120 minutes |
| Passing score | Scaled 720 out of 1,000 |
The five domains and weights are below. Our questions follow the same split as closely as 10 questions allow.
| Domain | Weight | Our questions |
|---|---|---|
| 1. Agentic Architecture and Orchestration | 27% | Q1 to Q3 |
| 2. Tool Design and MCP Integration | 18% | Q4, Q5 |
| 3. Claude Code Configuration and Workflows | 20% | Q6, Q7 |
| 4. Prompt Engineering and Structured Output | 20% | Q8, Q9 |
| 5. Context Management and Reliability | 15% | Q10 |
For the full breakdown, see our Claude Certified Architect exam guide.
How to use these: cover the answer, pick one, then read the explanation. If you get it wrong, open the linked doc in the Sources list.
Domain 1 practice questions: agentic architecture
Question 1: when should the agentic loop stop?
You are building a support agent with the Claude API. Your loop ends as soon as Claude's response contains any text block. In testing, the agent sometimes says "Let me check that order for you" and then stops without calling lookup_order. What is the best fix?
- A. Add "never stop before calling a tool" to the system prompt.
- B. Keep looping while
stop_reasonis"tool_use", run the requested tools, return the results, and stop whenstop_reasonis"end_turn". - C. Cap the loop at 10 iterations and stop when the cap is reached.
- D. Parse the text for phrases like "let me check" and loop again when they appear.
Answer: B. Claude can return text and a tool call in the same response, so text alone does not mean the turn is done. Anthropic's tool use docs say a tool_use stop reason means Claude wants a tool run and the result sent back. Iteration caps and phrase parsing are brittle stand-ins for that signal.
Question 2: why is the synthesis subagent missing facts?
A coordinator agent runs a search subagent, then a synthesis subagent. The search subagent finds strong sources. But the synthesis subagent's report ignores them and says it "found limited information". The coordinator's prompt to the synthesis subagent says: "Write a report on the findings so far." What is the most likely cause?
- A. The synthesis subagent needs a larger context window.
- B. The synthesis subagent does not have web search tools.
- C. Subagents run in their own context and do not inherit the coordinator's history, so the findings must be passed in the prompt.
- D. The search subagent should write its results to the coordinator's system prompt.
Answer: C. Anthropic's docs say each subagent runs in its own context window. It only knows what you give it. The fix is to put the search results, ideally with source metadata, directly into the synthesis subagent's prompt.
Question 3: how do you fix mixed date formats from tools?
Your agent calls three MCP tools. One returns Unix timestamps, one returns ISO 8601 strings, and one returns dates like "03/04/26". The agent sometimes compares dates wrongly when deciding if an order is inside the return window. What is the most reliable fix?
- A. Add a system prompt line telling Claude to convert all dates to ISO 8601 before comparing.
- B. Add a
PostToolUsehook that normalizes every date to one format before Claude sees the result. - C. Add few-shot examples of date conversion.
- D. Ask each tool owner to change their API.
Answer: B. A PostToolUse hook runs after a tool call succeeds, so code can clean the result before the model reasons over it. That gives a deterministic fix in your control. Prompt rules and examples help, but they still leave room for error on every call.
Domain 2 practice questions: tool design and MCP
Question 4: what should a failing MCP tool return?
Your process_refund MCP tool returns {"error": "Operation failed"} for every failure. Logs show the agent retries refunds that failed because they broke the refund policy, and gives up on refunds that failed from a brief timeout. What change helps the agent most?
- A. Retry every failure three times inside the tool.
- B. Return the result with
isError: trueplus structured details: an error category (such as transient, validation, business or permission), whether it is retryable, and a plain-English reason. - C. Return an empty success result so the agent moves on.
- D. Throw an exception that ends the whole conversation.
Answer: B. The MCP spec reports tool failures inside the result with isError, so the model can see and react to them. A generic message hides the one fact the agent needs: whether trying again can work. Hiding errors as success or ending the session are both worse.
Question 5: where do you put a shared MCP server with a secret token?
Your team wants everyone's Claude Code to use the same GitHub MCP server. Each developer has their own token, and tokens must never be committed. What is the best setup?
- A. Add the server to each developer's
~/.claude.jsonby hand. - B. Add the server to the project's
.mcp.jsonand reference the token as${GITHUB_TOKEN}, which each developer sets in their environment. - C. Add the token directly to
.mcp.jsonand add the file to.gitignore. - D. Put the server details in CLAUDE.md.
Answer: B. Project-scoped .mcp.json is shared through version control, and Claude Code supports environment variable expansion in it. So the config is shared but each secret stays local. User-level config in ~/.claude.json is for personal servers, and CLAUDE.md holds instructions, not server config.
Domain 3 practice questions: Claude Code
Question 6: how do you get structured output from Claude Code in CI?
Your CI job runs claude -p "Review this diff for bugs". It runs fine, but your script needs to post each finding as an inline PR comment, and parsing free text keeps breaking. What should you change?
- A. Ask in the prompt for "valid JSON only".
- B. Add
--output-format jsonwith--json-schemaand a schema for the findings, then read the structured result. - C. Remove
-pso you can answer follow-up questions. - D. Pipe the output through a regex.
Answer: B. Anthropic's Claude Code docs say --output-format json with --json-schema returns output that conforms to your schema, in a structured_output field. That gives your script a stable shape. Prompt-only JSON can drift, and removing -p would make the job wait for input.
Question 7: how do you stop a skill from flooding the main session?
Your team has a /map-codebase skill that reads dozens of files and prints a long analysis. After running it, developers find their main session is cluttered and later answers get worse. What is the best fix?
- A. Move the skill's steps into the project CLAUDE.md.
- B. Add
context: forkto the skill's SKILL.md frontmatter so it runs in its own subagent context and returns a summary. - C. Tell developers to run
/clearafter each use. - D. Split the skill into five smaller skills.
Answer: B. Claude Code's skills docs say context: fork runs the skill in its own subagent context. The verbose work stays out of the main conversation. Moving it into CLAUDE.md would load it every session, which makes the problem worse.
Domain 4 practice questions: prompts and structured output
Question 8: why does the model invent missing invoice fields?
You extract invoice data with a tool whose JSON schema marks po_number as required. About 20% of invoices have no PO number, and in those cases the model returns plausible but fake values. What is the best fix?
- A. Add "do not make things up" to the prompt.
- B. Make
po_numberoptional or nullable so the model can return null when the value is absent. - C. Retry the extraction until the value changes.
- D. Lower the temperature.
Answer: B. A required field pushes the model to fill it even when the source has no answer. Letting the field be null gives the model an honest option. Retries cannot help when the information simply is not in the document.
Question 9: what do you do when part of a batch fails?
You send 5,000 documents through the Message Batches API overnight. When it ends, 37 results come back as errored and the rest succeed. What is the most efficient next step?
- A. Resubmit the whole batch of 5,000.
- B. Match results to requests by
custom_id, fix the cause (for example, split documents that were too long), and resubmit only the 37 failures. - C. Switch to the synchronous Messages API for everything.
- D. Assume results come back in the same order as requests and resubmit by position.
Answer: B. Anthropic's batch docs give each request a custom_id so you can match each result to its request. You are not billed for errored requests, and resubmitting only those saves time and money. Relying on result order is risky, so always match on custom_id.
Domain 5 practice question: context and reliability
Question 10: why does a long support chat lose the refund amount?
A long support chat uses rolling summaries to save context. Late in the chat, the agent offers "a partial refund" when the customer was earlier promised $84.50 by 12 March. The summaries said "customer discussed a refund". What is the best fix?
- A. Increase
max_tokens. - B. Keep a structured "case facts" block (amounts, dates, order IDs, promises) outside the summarized history and include it in every request.
- C. Stop summarizing and let the context fill up.
- D. Ask the customer to repeat the details.
Answer: B. Summaries tend to blur exact numbers and dates. Anthropic's exam guide lists a persistent case facts block, kept outside the summarized history, as the pattern for this. It fits Anthropic's broader context engineering advice: keep the smallest set of high-signal tokens in front of the model.
How did you score?
| Score | What it suggests |
|---|---|
| 9 to 10 | Strong grasp. Practise under time pressure next. |
| 6 to 8 | Good base. Revisit the domains you missed. |
| 0 to 5 | Build more first. Work through the docs and hands-on exercises. |
This is a rough guide only. Ten questions cannot predict a 60-item exam.
A pattern to remember: in Anthropic's own sample questions, the right answer usually fixes the root cause with the least added machinery. Code-level controls such as hooks, schemas and IDs beat prompt wording when you need reliability.
Related reading
- Claude Certified Architect exam: format, topics and how to prepare
- Is the Claude certification worth it for engineers?
Get the full question bank
Want more? Our free course, Claude Certified Architect: Foundations Exam Prep, has 203 practice questions with explained answers across 19 lessons, all mapped to the exam domains. Get the full question bank in the course.
Sources
- Claude Certified Architect: Foundations Exam Guide (PDF), Anthropic
- Tool use with Claude, Claude docs
- Create custom subagents, Claude Code docs
- Hooks reference, Claude Code docs
- Tools, Model Context Protocol specification
- Connect Claude Code to tools via MCP, Claude Code docs
- Run Claude Code programmatically, Claude Code docs
- Extend Claude with skills, Claude Code docs
- Batch processing, Claude docs
- Effective context engineering for AI agents, Anthropic
Did this land? Leave a reaction.
Discussion
0 commentsMembers can join the discussion
Become a member to comment and reply to other members.
Become a MemberNo comments yet
Be the first to start the discussion.