Tool Explosion
also known as Bloated Tool Registry, 100-Tool Agent, Too Many Tools, Tool Registry Bloat, Function-Calling Accuracy Collapse
Anti-pattern: expose every available tool in every request and watch function-calling accuracy collapse.
Context
A team is building an agent on a platform where registering new tools is essentially free: MCP (Model Context Protocol) servers, plugin ecosystems, and tool registries make it trivial to expose dozens or hundreds of tools to the model at once. The path of least resistance is to expose them all so that the model can in principle reach for anything that exists.
Problem
Past roughly twenty tools in a single request, function-calling accuracy drops sharply for almost every current model. The agent starts picking the wrong tool for a task, invents wrong arguments, or fails to call any tool when one is needed. Adding more tools feels free because each individual registration is cheap, but the cost is paid invisibly on every request as a degraded selection. The exact threshold drifts with model capability, which makes it tempting to ignore — until the agent starts misbehaving in production with no obvious change to blame.
Forces
- Adding tools feels free; selecting subsets feels like extra engineering.
- Discovery is push-style; filter is pull-style.
- Frontier models tolerate larger palettes; the threshold drifts.
Example
A team exposes all 80 tools to the agent on every request, expecting the model to pick the right one. Function-calling accuracy collapses past 20 tools and the agent picks wrong tools or invents wrong arguments. They stop doing this and add a tool-loadout step that selects a small task-relevant subset per request, cap the exposed set at a tested threshold, and add function-calling accuracy as a release gate.
Diagram
Solution
Therefore:
Don't. Use tool-loadout to select per-task subsets. Cap exposed tools at a tested threshold. Measure function-calling accuracy as a release gate.
What this pattern forbids. By definition, this anti-pattern imposes no useful constraint; the missing constraint is the failure mode.
And the patterns that stand alongside it, or against it —
- conflicts-withTool Loadout★★— Select a small task-relevant subset of available tools per request rather than exposing the full registry to the model.
- complementsHero Agent✕— Anti-pattern: stuff every capability into one agent with one giant prompt.
- alternative-toMCP-as-Code-API★— Materialize MCP servers as a directory of typed code wrappers so the agent writes code that imports them and large tool outputs flow between calls inside the sandbox without ever entering the model's context window.
- complementsTool Loadout Hot-Swap✕— Anti-pattern: add or remove tool definitions during a running task so the tool set the model sees changes from turn to turn.
- complementsAuthorized Tool Misuse✕— Anti-pattern: grant the agent a tool with broad authorization and trust the agent to use it in benign ways.
Neighbourhood
Click any neighbour to follow the language. Scroll to zoom, drag to pan.