What you will be able to do
- Explain why the tool description is the main thing Claude uses to decide whether and when to call a tool
- List what a strong description must contain: purpose, when to use it and when not to, what each parameter means, and its limits
- Decide when to add input_examples or change a tool's arguments so they are harder to get wrong
- Review a system prompt for wording and keyword-sensitive instructions that change tool selection, and rephrase them in terms of when each tool should be used
- Write descriptions that differentiate similar tools by purpose, expected inputs, outputs and when to use each one versus its alternatives
Key concept
The description is how Claude picks a tool — Claude never sees your tool's code. It decides whether and when to call the tool from what it can see: the user's request, plus the name, description and schema you wrote. A vague description means the choice is made on too little information.
1.What Claude actually sees when it picks a tool
Anthropic calls tool use a contract. You declare which operations exist and what their inputs and outputs look like. Claude decides when and how to call them. What makes this different from an ordinary API is who is calling: a language model choosing a function based on the conversation, not a developer who has read your code. Claude never sees how the tool is implemented, only the schema you wrote and the results you send back.
So what decides the choice? The overview docs answer directly: Claude decides when to call a tool from the user's request and the tool's description. With the default tool_choice of auto, Claude calls a tool when the request matches that tool's described capability and the answer isn't already in context. Everything Claude knows about a tool's capability comes from the text you wrote.
That text also has a physical location. When you send the tools parameter, the API builds a special system prompt from your tool definitions, your tool configuration and your own system prompt. Your descriptions sit in the same prompt as your instructions, which is why the two can interfere with each other, as the rest of this section shows.
Checkpoint 1 of 8· Check yourself
With the default tool_choice, which of these determines whether Claude calls a particular tool?
Claude makes the call by comparing the request with what the description says the tool does. It cannot see runtime behaviour or implementation quality.
“It calls a tool when the request maps to that tool's described capability and the answer isn't already in context.”Source: platform.claude.com
Because descriptions and instructions share one prompt, system prompt wording affects tool selection as well. The overview docs say the boundary between calling a tool and answering directly is steerable through your system prompt, and small changes of phrasing move it. "Use the tools to investigate before responding." increases tool use. "Always call a tool first before responding." pushes further. "Use your judgment about whether to call a tool or respond directly." keeps triggering behaviour conservative. The tool choice cookbook adds that with tool_choice set to auto, Claude can be over-eager to call tools, and that a detailed prompt helps Claude determine when to call a tool and when not to. Its example ran with a deliberately weak prompt and two tools, a sentiment tool and a calculator. When a tweet said "I had four and just adopted 2 more! Guess how many I have now?", Claude reached for the calculator instead of analysing sentiment. The words in the input pulled it toward the wrong tool.
The same risk applies to keyword-sensitive instructions in your own system prompt. The docs don't name this failure, but it follows from what they do say. If a line ties a word or phrase to a tool ("whenever the user mentions X, use tool Y"), that instruction sits in the same prompt as the descriptions and steers the choice, so it can create unintended tool associations that override a well-written description. When a tool keeps being called for the wrong requests and its description is already sharp, review the system prompt. Look for instructions that bind keywords to tools, and rephrase them in terms of when each tool should and shouldn't be used.
Checkpoint 2 of 8· Check yourself
You change one system prompt line from "Use your judgment about whether to call a tool or respond directly." to "Always call a tool first before responding." The tool descriptions are unchanged. What do the docs say happens?
The docs present these phrasings as steps on a scale. Wording in the system prompt moves when Claude calls tools even when the descriptions stay the same. To actually require a tool call you set tool_choice, not the prompt.
“A stronger form such as "Always call a tool first before responding." pushes further.”Source: platform.claude.com
2.What a strong description contains
The Define tools guide says to provide extremely detailed descriptions and calls this 'by far the most important factor in tool performance.' It lists what to cover: what the tool does, when it should be used and when it shouldn't, what each parameter means and how it changes the tool's behaviour, and any caveats or limits, including what information the tool does not return. It also gives a minimum length: at least 3–4 sentences per description, more if the tool is complex.
Anthropic's agent-building guidance says much the same from the designer's side. A good tool definition often includes example usage, edge cases, input format requirements, and clear boundaries from other tools. A useful test is to put yourself in the model's place. If you would have to think hard about how to use the tool from its description alone, so will the model. Write it the way you would write a great docstring for a junior developer on your team.
The docs show the difference with two versions of the same stock-price tool. Here is the good one:
{
"name": "get_stock_price",
"description": "Retrieves the current stock price for a given ticker symbol. The ticker symbol must be a valid symbol for a publicly traded company on a major US stock exchange like NYSE or NASDAQ. The tool will return the latest trade price in USD. It should be used when the user asks about the current or most recent price of a specific stock. It will not provide any other information about the stock or company.",
"input_schema": {
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "The stock ticker symbol, e.g. AAPL for Apple Inc."
}
},
"required": ["ticker"]
}
}The poor version keeps the same name and schema but has the description "Gets the stock price for a ticker." and no description on the ticker parameter. The docs' verdict is that it is too brief and leaves Claude with many open questions about how the tool behaves and when to use it. The table below sets out what was lost.
| Element | Good description | Poor description |
|---|---|---|
| What the tool does | Retrieves the current stock price | Gets the stock price |
| Valid input | Valid ticker on a major US exchange like NYSE or NASDAQ | Not stated |
| What it returns | Latest trade price in USD | Not stated |
| When to use it | User asks about the current or most recent price of a specific stock | Not stated |
| Limits | Will not provide any other information about the stock or company | Not stated |
| ticker parameter | Described, with the example AAPL | Type only, no description |
Checkpoint 3 of 8· Check yourself
A tool described only as "Searches orders." keeps getting called for refund requests it can't handle. According to the Define tools guidance, which gap in the description matters most here?
The guide says a description must cover when the tool should be used and when it shouldn't, plus its limits. Without those, Claude can't tell that refunds are out of scope.
“When it should be used (and when it shouldn't)”Source: platform.claude.com
Checkpoint 4 of 8· Exam question
Two tools, `analyze_content` (summarizes pasted text) and `analyze_document` (summarizes uploaded documents), share nearly identical one-line descriptions. Users report the model frequently calls `analyze_document` for pasted web article text instead of `analyze_content`. What is the most effective fix?
Correct answer: A — Rewrite each description to state the expected input type and add a note on when the other tool applies.
- A. Correct. Tool descriptions are the model's primary signal for tool selection; stating the expected input type and contrasting the two tools removes the ambiguity causing the misrouting.
- B. Incorrect. Sampling temperature affects token-level randomness in generated text, not the semantic reasoning the model uses to distinguish two functionally similar tool descriptions.
- C. Incorrect. Promotional wording adds length without adding differentiating information about input type or scope, so the ambiguity between the two tools remains.
- D. Incorrect. Removing a tool eliminates its intended use case rather than fixing the underlying description ambiguity, and pasted text would now be mishandled by a document-only tool.
3.Examples and arguments that are hard to get wrong
Some tools have inputs that are hard to describe in words alone: nested objects, optional parameters, or values that must follow a set format. For these, the definition can carry an optional input_examples field. This is an array of example input objects that appear in the prompt next to the schema. They show Claude when to include optional parameters, which formats to use, and how to structure complex inputs. Three rules apply. Every example must be valid against the tool's input_schema, and invalid examples return a 400 error. The field works on user-defined and Anthropic-schema client tools, but not on server tools. And examples cost prompt tokens: roughly 20–50 for a simple example and 100–200 for a complex nested one. The guidance still puts descriptions first and treats examples as an extra for complex tools.
Checkpoint 5 of 8· Fill the gap
Which field name completes this tool definition so Claude sees concrete, schema-validated sample inputs?
" ? ": [
{"location": "San Francisco, CA", "unit": "fahrenheit"},
{"location": "Tokyo, Japan", "unit": "celsius"},
{
"location": "New York, NY" # 'unit' is optional
},
],input_examples is the optional array of example inputs. Each one must validate against input_schema, which is why the third example can leave out the optional unit.
Source: platform.claude.comSometimes the fix belongs in the arguments rather than the wording. Anthropic's term for this is 'poka-yoke': change the arguments so mistakes are harder to make. While building its SWE-bench agent, Anthropic saw the model mishandle relative file paths after it had moved out of the root directory. The team changed the tool to always require absolute paths, and the model then used it flawlessly.
To find out which fix is needed, measure. Many tool errors for invalid parameters suggest the tool needs a clearer description or better examples. When Anthropic launched Claude's web search tool, it found Claude needlessly adding 2025 to search queries, which biased the results. The fix was a better tool description.
Checkpoint 6 of 8· Check yourself
Your evaluation transcripts show lots of tool errors caused by invalid parameter values. What does Anthropic's guidance say this most likely points to?
Frequent invalid-parameter errors are a sign that the description or examples are failing to show Claude what valid input looks like.
“lots of tool errors for invalid parameters might suggest tools could use clearer descriptions or better examples.”Source: www.anthropic.com
Checkpoint 7 of 8· Exam question
A support agent has both `search_web` and `fetch_webpage_results` as separate tools. Testing shows the model almost always calls `search_web`, even for tasks better suited to `fetch_webpage_results`. The system prompt contains "Always prefer searching for the most up to date information." What most likely explains the bias?
Correct answer: D — Keyword-sensitive system prompt wording creates an unintended association that overrides the more accurate tool description.
- A. Incorrect. Parallel tool use restrictions are not described here, and there is no indication the fetch tool is structurally excluded from the candidate set.
- B. Incorrect. Tool schemas do not carry a temperature value; temperature is a model-level sampling parameter unrelated to individual tool definitions.
- C. Incorrect. There is no fixed token-length threshold that categorically excludes longer tool descriptions from being selected by the model.
- D. Correct. The phrase 'always prefer searching' repeatedly emphasizes the word 'search,' creating a keyword-driven bias that overrides the more suitable tool's description.
4.Telling similar tools apart
The tool description is the primary mechanism Claude uses for tool selection. The overview says Claude decides when to call a tool from the user's request and the tool's description, and the Define tools guide calls detailed descriptions 'by far the most important factor in tool performance.' This matters most when tools resemble each other. Anthropic's advanced tool use post reports that the most common failures are wrong tool selection and incorrect parameters, especially when tools have similar names like notification-send-user vs. notification-send-channel. The writing-tools post adds that when tools overlap in function or have a vague purpose, agents can get confused about which ones to use. Minimal descriptions give Claude nothing to separate two near-identical tools, so selection among similar tools becomes unreliable.
The troubleshooting guide names both the symptom and the fix. If Claude calls tool A when you wanted tool B, the likely cause is description ambiguity. The fix is to sharpen descriptions and differentiate tools by WHEN to use them, not only WHAT they do.
In practice, each tool in a group of similar tools needs a description that answers four things for that tool alone:
- its purpose: what it does - its expected inputs: what each parameter means and what format it takes - its outputs: what it returns, and what it does not return - when to use it versus similar alternatives, and when not to
This is the Define tools checklist applied with the neighbouring tool in view. Anthropic's agent-building guidance calls the last part 'clear boundaries from other tools' and says clear parameter names and descriptions are especially important when using many similar tools. Names help as well. Namespacing by service and by resource (for example asana_search, jira_search, asana_projects_search) helps agents pick the right tool at the right time.
Checkpoint 8 of 8· Check yourself
Claude keeps calling notification-send-channel when the user wants to message one person. Each tool's description says what it sends, but neither says when to choose it over the other. What fix does the troubleshooting guide prescribe?
The guide traces 'tool A instead of tool B' to description ambiguity and says to differentiate tools by when to use them. strict only validates names and inputs, and it does nothing to steer which tool Claude picks.
“Sharpen descriptions. Differentiate tools by WHEN to use them, not only WHAT they do.”Source: platform.claude.com
Exam traps
Each one states something that sounds right. Open it to see what is actually true.
1.If the tool name is self-explanatory, a one-line description is enough.Why is that wrong?
The guidance sets a minimum of 3–4 sentences per description and wants usage boundaries, parameter meanings and limits spelled out. A clear name does not replace any of that.
Covered in What a strong description contains
2.When Claude picks the wrong one of two similar tools, the fix is to describe more precisely what each tool does.Why is that wrong?
The troubleshooting guide says to differentiate similar tools by when to use them, not only by what they do. Two precise descriptions of what each tool does can still leave the choice between them ambiguous.
Covered in Telling similar tools apart
Sources
Every claim above is drawn from one of these pages, quoted as it was written on the date shown.
- 1.
“Claude determines when to call a tool based on the user's request and the tool's description.”
↩︎ What Claude actually sees when it picks a tool“This boundary is steerable through your system prompt.”
↩︎ What Claude actually sees when it picks a tool“"Use your judgment about whether to call a tool or respond directly." keeps triggering behavior conservative.”
↩︎ What Claude actually sees when it picks a tool“Claude determines when to call a tool based on the user's request and the tool's description.”
↩︎ Key concept“It calls a tool when the request maps to that tool's described capability and the answer isn't already in context.”
↩︎ Checkpoint“A stronger form such as "Always call a tool first before responding." pushes further.”
↩︎ Checkpoint - 2.
“You specify what operations are available and what shape their inputs and outputs take; Claude determines when and how to call them.”
↩︎ What Claude actually sees when it picks a tool“Claude never sees your implementation; it only sees the schema you provided and the result you returned.”
↩︎ Prediction - 3.
“the API constructs a special system prompt from the tool definitions, tool configuration, and any user-specified system prompt”
↩︎ What Claude actually sees when it picks a tool“This is by far the most important factor in tool performance.”
↩︎ What a strong description contains“The poor description is too brief and leaves Claude with many open questions about the tool's behavior and usage.”
↩︎ What a strong description contains“This is particularly useful for complex tools with nested objects, optional parameters, or format-sensitive inputs.”
↩︎ Examples and arguments that are hard to get wrong“Invalid examples return a 400 error”
↩︎ Examples and arguments that are hard to get wrong“~20–50 tokens for simple examples, ~100–200 tokens for complex nested objects”
↩︎ Examples and arguments that are hard to get wrong“This is by far the most important factor in tool performance.”
↩︎ Telling similar tools apart“Aim for at least 3–4 sentences for each tool description, more if the tool is complex.”
↩︎ Exam trap 1“When it should be used (and when it shouldn't)”
↩︎ Checkpoint - 4.https://platform.claude.com/cookbook/tool-use-tool-choiceSecondary source
“Writing a detailed prompt helps Claude determine when to call a tool and when not to.”
↩︎ What Claude actually sees when it picks a tool“"I love my cats! I had four and just adopted 2 more! Guess how many I have now?"”
↩︎ What Claude actually sees when it picks a tool - 5.https://www.anthropic.com/engineering/building-effective-agentsSecondary source
“A good tool definition often includes example usage, edge cases, input format requirements, and clear boundaries from other tools.”
↩︎ What a strong description contains“Think of this as writing a great docstring for a junior developer on your team.”
↩︎ What a strong description contains“Poka-yoke your tools. Change the arguments so that it is harder to make mistakes.”
↩︎ Examples and arguments that are hard to get wrong“we changed the tool to always require absolute filepaths—and we found that the model used this method flawlessly.”
↩︎ Examples and arguments that are hard to get wrong“This is especially important when using many similar tools.”
↩︎ Telling similar tools apart - 6.https://www.anthropic.com/engineering/writing-tools-for-agentsSecondary source
“Claude was needlessly appending 2025 to the tool’s query parameter”
↩︎ Examples and arguments that are hard to get wrong“When tools overlap in function or have a vague purpose, agents can get confused about which ones to use.”
↩︎ Telling similar tools apart“lots of tool errors for invalid parameters might suggest tools could use clearer descriptions or better examples.”
↩︎ Checkpoint - 7.
“Sharpen descriptions. Differentiate tools by WHEN to use them, not only WHAT they do.”
↩︎ Telling similar tools apart“Sharpen descriptions. Differentiate tools by WHEN to use them, not only WHAT they do.”
↩︎ Exam trap 2 - 8.https://www.anthropic.com/engineering/advanced-tool-useSecondary source
“The most common failures are wrong tool selection and incorrect parameters, especially when tools have similar names like notification-send-user vs. notification-send-channel.”
↩︎ Telling similar tools apart