Claude keeps calling get_customer when it should call get_account. Both tools have one-line descriptions. What should you try first?
Why A is the answer
Rewrite both descriptions to say what each returns and when to use it over the other
The description is what the model reads to choose a tool. Forcing the choice breaks the cases where the other tool is right, and a generic tool only moves the ambiguity into its arguments.
In detail
- The description is what the model reads when choosing a tool.
- Say what each one returns and when to use it over the other.
- Test selection with a small set of real requests after you change a description.
Use case
An illustrative scenario, not a real incident.
A CRM agent confuses get_customer and get_account. After each description says what it returns and when to prefer it, the wrong calls drop, with no change to the prompt.
See it in different ways
flowchart LR
A["User request"] --> B["Model reads tool descriptions"]
B --> C{"Clear difference?"}
C -->|Yes| D["Right tool"]
C -->|No| E["Wrong tool"]sequenceDiagram participant A as Your code participant C as Claude A->>C: Request with tools C-->>A: tool_use blocks A->>A: Run the tools A->>C: tool_result blocks first, then any text C-->>A: Final answer
sequenceDiagram participant P0 as Your app participant P1 as Claude P0->>P1: Request with tool descriptions P1->>P1: Compare the request with each description P1-->>P0: tool_use for the best match
Key point: Fix tool choice in the tool descriptions first.
Why the other options are wrong
- B. Raise the temperature so the model explores more options before picking a tool
- Randomness does not make selection more accurate.
- C. Merge them into one generic lookup tool with a type argument for the record
- One generic tool moves the same ambiguity into its arguments.
- D. Force tool_choice to get_account on every request so it can never pick wrongly
- Forcing one tool breaks the cases where the other is right.

