🗺 Tools and MCP
Tools and MCPs carries 10.6% of CCDV-F, about six items of 53. That is more than Security and Safety and several times Claude Code, but it is a third of what Applications and Integration is worth, so give it an evening rather than a week, and spend that evening on mechanics instead of philosophy.
The items are implementation items. Expect to be shown a tool definition and asked why the model never calls it, shown a broken turn sequence and asked what the API rejects, asked how a failing tool should report back, or asked which MCP primitive fits a given piece of context. Being able to name the parts of an MCP server, the two transports and the discovery handshake covers most of the protocol questions.
The idea that unlocks the domain: a tool is a prompt with a schema attached, and the loop is strictly turn-based. Claude never executes anything. It emits a tool_use block, your code runs the work, and you send a tool_result carrying the matching tool_use_id in the next user turn. Errors are results, not exceptions. Everything else here is a variation on that one cycle.
name, a description, and an input_schema that is a JSON Schema object with properties and required. Everything else is your code.enum for closed sets, required for what you cannot default. A loose schema is an invitation for the model to invent arguments.tools with the request, Claude returns stop_reason of tool_use plus a tool_use block holding id, name and input, your code executes it, and you continue the conversation.tool_result block with tool_use_id set to that block's id.tool_use in a turn must be answered. Put all the tool_result blocks in a single user message, before any other content in that message.tool_use blocks in one assistant turn. Execute them concurrently when they are side-effect free, and return every result together in the next user message. The tool-choice object carries a flag to switch parallel use off when ordering matters.stop_reason is end_turn, and enforce your own iteration ceiling so a stuck agent stops.tool_use with no matching tool_result, or a tool_result whose tool_use_id matches nothing, is a malformed conversation and the API rejects the request. Never quietly skip a tool you failed to run.tool_result marked as an error with a short plain-language reason, so Claude can retry with different arguments or tell the user.input JSON is truncated. Raise the limit or retry; do not try to repair partial JSON. When streaming, accumulate the partial-JSON deltas and parse only once the block is complete.MEDIATE — a tool mediates between the model and your systems, in this order.
name, description, input_schema. The description is the prompt; the schema is the guardrail.tools array and detect the reply: stop_reason of tool_use plus a block carrying id, name and input.tool_result for every call, each with its matching tool_use_id.Practise this domain with original, exam-style questions.
Start practising free