How many tools is too many
By the end: Judge when a tool set has grown too large and apply a strategy for keeping it usable.
Every tool you declare costs tokens on every request and adds a choice the model has to get right. Tool sets grow the way permissions do — nobody removes anything — and past some size selection accuracy falls noticeably.
There is no universal number, and it depends on how distinct the tools are, but the symptoms of too many are recognisable: the model picks a neighbour of the right tool, chains three calls where one would do, or ignores a tool entirely because a more prominent one seems close enough.
Three strategies, in order of how often they are the right answer. Merge: if two tools are almost always called together, make them one. Scope: give the agent only the tools its current job needs, choosing the set from the request rather than declaring everything always. Nest: expose one tool that lists what is available and another that invokes by name, so breadth costs one declaration instead of fifty.
- A billing ticket gets: get_order, get_invoice, search_orders, docs_search, escalate.
- A shipping ticket gets: get_order, track_shipment, search_orders, docs_search, escalate.
- Neither gets: issue_refund, edit_customer, close_account — those need a person, so the agent never sees them.
That last line is worth pausing on. Not declaring a tool is the strongest possible constraint on an agent using it, stronger than any instruction, and it costs nothing at runtime. When you find yourself writing "never use X unless..." into a system prompt, ask whether X should be in that agent’s tool list at all.

