Stop Giving Your AI Agent 25 Tools
Tool definitions cost tokens and add decisions. Published reports put the inflection near 15 tools. The minimal-base-plus-dynamic-loading pattern, and what it changed for us.

On this page
An agent with seven tools makes good decisions. The same agent with twenty-five picks the wrong one often enough that people stop trusting it, and it costs several times as much to do it.
This is the least intuitive failure in agent design, because nothing breaks. No error is raised. The agent confidently chooses a tool that was never right for the request.
What actually goes wrong when you add tools
Every tool definition is paid for twice.
It is paid for in tokens, because the definition sits in the context window on every single request whether or not it gets used, which is the same standing cost that made prompt caching worth 57% of our per-request bill. And it is paid for in decisions, because each new tool is one more near-neighbour the model has to rule out before it picks. Choosing between seven options is a different problem from choosing between twenty-five, and models degrade on the second one in a way that better models only partly fix.
The symptoms arrive together: responses slow down, costs climb, and the agent starts reaching for the wrong tool on requests it used to get right.
Where does the curve actually turn?
We did not run this benchmark ourselves. The numbers below are a synthesis of published reports on production deployments across OpenAI, Anthropic and LangGraph systems, including Redis's research on MCP tool overload, and they agree with each other closely enough to plan against:
Tool count | Accuracy | Tokens per request | Latency |
|---|---|---|---|
5-7 | 95% | ~800 | 1-2s |
10-15 | 85% | ~2,000 | 2-4s |
20-30 | 60% | ~5,000 | 8-12s |
50+ | 42% | 150,000+ | 15s+ |
Two things stand out. The accuracy decline is not gentle: it holds up to about fifteen tools and then falls off. And the token column is worse than linear, because a large tool catalogue tends to bring large schemas with it. Redis's write-up reports over 150,000 tokens consumed before the user has asked anything at all, and a 96% token reduction from loading tools dynamically instead.
The pattern: a small base, everything else on demand
The fix is not to have fewer capabilities. It is to have fewer capabilities in context at once.
Keep a base set of tools that earn their place on nearly every request:
1BASE_TOOLS = [2 "list_skills", # discover capabilities3 "activate_skill", # load specialised tools4 "search_knowledge_base", # core RAG5 "get_current_time", # basic utility6 "calculator", # basic math7 "remember", # memory write8 "recall", # memory read9]
Seven tools. Two of them exist purely so the agent can go get the others.
Everything else is grouped into skills that enter the tool list only when the run needs them:
1async def prepare_tools(ctx, tool_defs):2 # Start with base tools only3 allowed = list(BASE_TOOLS)45 # Add tools from activated skills6 for skill in ctx.deps.activated_skills:7 skill_tools = get_skill_tools(skill)8 allowed.extend(skill_tools)910 return [t for t in tool_defs if t.name in allowed]
Activating a research skill brings in web search, URL crawling and news search. A documents skill brings in PDF generation and markdown export. A visualisation skill brings in charts and image generation. None of them is in context until it is wanted.
What belongs in the base
The line is easier to draw than it looks:
Keep in base | Move to a skill |
|---|---|
Used in 80%+ of requests | Specialised use case |
Low token cost | High token cost |
No side effects | Creates files or sends email |
Universal utility | Domain-specific |
The side-effects row is the one people skip. A tool that sends an email should never be sitting in context by default, because "available" and "chosen by mistake" are closer together than anyone wants.
What it changed here
Our own before-and-after, measured on our agent in February 2026:
Metric | Before | After | Change |
|---|---|---|---|
Base tokens | ~2,000 | ~800 | 60% lower |
Accuracy | 75% | 92% | 23% higher |
Average latency | 4.5s | 1.8s | 60% lower |
Tool confusion | 25% | 5% | 80% lower |
Accuracy went up because the agent had fewer wrong answers available, not because anything about the model changed. That is the part worth internalising: the context window is a design surface, and what you leave out of it is a decision you are making on the model's behalf.
It is also the architecture the product runs on. Savra carries dozens of marketing skills across a dozen domains, and the agent never sees more than a handful of them at once, which is what makes one agent workable where a stack of tools is not.
FAQ
How many tools should an AI agent have?
Five to ten always available, everything else loaded on demand. What matters is how many are in context for a single decision, not how many exist.
Why does adding tools make an agent less accurate?
Each definition costs tokens on every request and adds one more near-neighbour to rule out when choosing. The failure mode is a confidently wrong choice, not an error.
What belongs in the base tool set?
Things used in most requests, cheap, side-effect free and domain-neutral. Anything that writes a file or sends a message belongs in a skill.
What is dynamic tool loading?
The agent starts with the base set plus the ability to discover and activate more, so the tool list stays short and relevant at every decision point.
Keep reading

We Added 3 Lines of Code. AI Costs Dropped 57%.
A first-hand account of enabling Anthropic prompt caching: the trace that found the bottleneck, the three settings that fixed it, and the before-and-after cost and latency numbers.

3x Faster AI Responses with Parallel Tool Execution
Sequential tool calls make an agent wait on I/O it could overlap. How asyncio.gather cuts a three-lookup response from 1.5s to 0.5s, with rate limiting that keeps it safe.
Aug 22, 2026

Your AI Vendors Are Data Processors: The DPA Homework Behind Platform App Reviews
How to build the data-processor list Meta's App Review asks for, why your AI vendors belong on it, and how to execute the OpenAI DPA. Anthropic's is already in its commercial terms.
Aug 21, 2026
See if your brand sounds like itself.
Run the free 90-second Brand Genome audit. No card, just your score.