Tool Implementation
Tool Implementation is 4.4% of the CCDV-F blueprint, the heaviest sub-skill in its domain. It tests tool granularity, result payloads sized for a context window, parameters a model can fill without guessing, and safety under repeat calls.
Written by Kiran Manne
4.4% of the CCDV-F blueprint, which is roughly 2 questions of 53. It sits inside Tools and MCPs, worth 10.6% in total.
Tool Implementation is 4.4% of CCDV-F, the heaviest of the three Tools and MCPs sub-skills, and worth roughly two questions. The parent domain page covers the contract: how a definition is read, how the call and result cycle works, how failures come back. This page is about the design decisions underneath that contract, which is where most real tools go wrong.
The reframing that helps is to stop treating a tool as an exposed function and start treating it as an interface for an unusual kind of caller. That caller reads a short description, cannot see your source, fills in arguments from natural language, receives whatever you return into a window it pays for on every subsequent turn, and may call the same thing twice because it was not sure the first attempt landed. Almost every implementation guideline follows from one of those five properties.
The biggest single lever is what you return. A wrapper forwarding an upstream response verbatim is the default implementation and usually the wrong one: it fills the window with fields nobody will read, buries the two values that mattered, and makes every later turn more expensive. Working out what the model needs in order to take its next step, and returning exactly that, is the job.
What the exam tests here
- Choosing tool granularity, including when a mode parameter should become separate tools
- Designing a result payload for a caller that pays for it on every following turn
- Parameters the model can fill without first computing something
- Handling repeated or concurrent invocation of a side-effecting tool safely
- Forcing, permitting or preventing tool use for a particular request
- Evaluating a tool by whether it gets selected and filled correctly, not only by whether it runs
Granularity: one tool per decision the model makes
Two failure shapes bracket the right answer. A single tool with a mode argument pushes the selection problem inside the schema, where one description has to cover several behaviours with no per-branch guidance: a manage_records tool taking create, update, delete or search is four tools in a trench coat. At the other extreme, twelve near-identical retrieval tools differing by one filter force a choice the model cannot make well.
Split when the branches have genuinely different purposes, arguments or risk profiles, since separate tools give you separate descriptions, separate schemas and separate permission decisions. Merge when the difference is a parameter a caller would naturally supply. The question is whether the model needs different guidance for the two cases.
Design the return value for the window it will live in
A result is not a response to a client that renders it once. It is context persisting for the remainder of the conversation and resent on every following turn. A tool returning a whole file when a signature was wanted, or two hundred search hits when three were needed, imposes that cost repeatedly.
Return the smallest thing that lets the model take its next step: a short summary, the specific fields bearing on the decision, and identifiers it can use to request more. Paginate rather than truncate blindly, and state in the result that more exists, because a silently shortened list gets treated as complete. Prose with embedded identifiers is often easier to act on than a deeply nested object, and it costs fewer tokens than the same facts wrapped in structure.
Parameters the model can fill without doing arithmetic
Every argument the model has to derive is an opportunity to derive it wrong. Relative dates computed against today, offsets into a list, paths assembled from a working directory it is inferring, values requiring a lookup before the call: all fail occasionally, and the failure is silent, because a well-formed call carrying a wrong value produces a plausible result.
Design them out. Accept an absolute date and a duration rather than an implied window, take a full path rather than a fragment to resolve, name the enumerated value rather than its numeric code. Where a fixed set exists, express it as an enumeration so a wrong value becomes impossible rather than unlikely, and where a default is sensible, apply it in the implementation instead of demanding one.
Repeat calls, and effects that outlive them
A model may invoke the same tool twice: because a result was ambiguous, because a timeout returned nothing and it tried again, or because a parallel batch contained a duplicate. For anything read-only that is merely wasteful. For anything that creates, charges, sends or deletes, it is a defect that appears in production and never in testing.
Make the operation safe to repeat. Accept a caller-supplied key so a second identical request returns the first outcome instead of performing the action again, or check for an existing matching record before creating one. Where an action genuinely cannot be made repeatable, put it behind a confirmation step so repetition needs a human. And return something definitive on timeout, since an ambiguous outcome is what provokes the retry.
Where candidates go wrong
Trap 1: one tool per API endpoint
Mirroring an existing service surface is fast and produces a toolset organised around a system's internal structure rather than around what the model is trying to accomplish. The result is four calls chained to answer a question the underlying service could have answered in one, spending context and turns on plumbing.
Design the toolset from the tasks instead. If listing, filtering and fetching is always the same three-step dance, the tool is the dance. Answers justifying a tool layout by pointing at the shape of the API behind it are usually the distractor.
Trap 2: the unit tests pass, so the tool works
A tool has two failure surfaces and testing the function covers one. The other is whether the model selects it when it should, avoids it when it should not, and fills the arguments correctly, and that can only be measured by running realistic requests and inspecting the calls that come back.
Log every invocation with its arguments and read the ones that surprised you. A high rate of malformed or misdirected calls points at the description and schema in your definition, not at a defect in the model.
Trap 3: leaving tool choice automatic when the task demands a call
Some requests must go through a tool: a lookup where guessing is unacceptable, a mandatory first step in a pipeline, an extraction whose entire purpose is the structured argument. Left to its own judgement the model will occasionally answer from what it already knows, which is precisely the failure the tool existed to prevent.
The tool-choice setting exists for exactly this, letting a request require some tool, require a named one, or forbid tools altogether. Reaching for firmer wording in the prompt is the weaker answer.
Common questions
How many CCDV-F questions come from Tool Implementation?
4.4% of 53 questions is roughly two, making it the largest sub-skill in Tools and MCPs, ahead of Agentic Customization at 4.1% and well ahead of MCP Server Development at 2.1%. Time spent on tool design pays better here than time spent on protocol detail.
Should I split a tool that takes an action parameter?
Usually yes, when the branches differ in purpose, in the arguments they need or in how dangerous they are. Splitting buys a description tailored to each case, a schema that only permits the fields that branch uses, and the ability to permit reads while gating deletes. Keep them together only when the difference really is one ordinary parameter.
How much should a tool return?
The smallest amount that supports the next decision, plus identifiers for fetching more. Remember the result is resent on every subsequent turn, so an oversized payload is a recurring charge rather than a one-off. When a list is shortened, say so in the result, because otherwise it will be treated as the complete set.
How do I stop a model calling the same tool twice?
You do not prevent it, you make it harmless. Accept an idempotency key so a repeated request returns the original outcome, or check for an existing match before creating anything. Where that is impossible, require a human confirmation. Returning a clear outcome even on failure also helps, since ambiguity is what triggers the second attempt.
The rest of Tools and MCPs
- Agentic Customization (4.1%)
- MCP Server Development (2.1%)
Practise this
The CCDV-F bank covers every sub-skill in the blueprint, weighted the way the real paper is. Free sample questions need no account.
Free CCDV-F questions