Guides / tool definition token cost
Tool definition token cost, billed whether the tool runs or not
Tool definitions are input tokens, so every schema you attach bills on every call whether the model uses it or not. A large tool block is a fixed tax on all traffic. Culpa, a local-first LLM cost, margin, and forecast ledger, meters input tokens per call, so a growing tool block shows up as a rising floor rather than a mystery.
Why this happens
Tools get added to the shared definition list because that's the easy place to put them, and the list is sent with every request so the model can choose. The cost isn't the tool call, it's the description. Twenty tools with detailed parameter schemas can run to several thousand input tokens, sent on every call in every conversation and every agent step, to be used by a small fraction of them.
What this usually looks like
- Input tokens per call have a high floor even on short user messages.
- Adding a tool raised cost across all traffic rather than only on calls that used it.
- An agent run costs more per step than the same model costs elsewhere, at similar transcript length.
- Your tool list has entries nobody can remember the model ever selecting.
Free, no card, no account
Run the free Cost Leak Scan
It shows your most expensive conversation before you install anything.
Mistakes that cost the most
| Mistake | Why it hurts | Do instead |
|---|---|---|
| Attaching every tool to every call. | You pay the full schema block on all traffic to serve the small share that needs any given tool. | Scope tools to the step or route that can actually use them, and measure the input-token floor before and after. |
| Writing verbose parameter descriptions for clarity. | Every word bills on every call, so a generous description is a recurring cost rather than a one-off. | Keep descriptions to what changes the model's choice, and move detail into the tool's own error messages. |
| Leaving deprecated tools in the definition list. | A tool nobody calls still costs its full schema on every request, indefinitely. | Audit the list against actual selection counts, and delete anything the model hasn't chosen in a month. |
Run this check tonight
- Count the tokens in your serialised tool definitions. Send them through a tokeniser rather than estimating.
- Multiply that by your monthly call count and your input rate. That's the fixed cost of the block.
- Count how often each tool was actually selected last month. Delete the ones at zero.
- Compare input tokens on your shortest possible request against your tool block size. The ratio is often ugly.
- Check whether the tool block sits at the front of the prompt where it can be cached, or after something variable.
Eighteen tools, and what the unused ones cost
Illustrative example
A tool block of 18 definitions serialising to 3,200 input tokens, sent on every call. 5 million calls a month on Claude Sonnet 5 at its real introductory rate of $0.002 per 1k input. Selection counts show 5 tools carry nearly all use.
$23,000 a month was going to tool descriptions the model almost never chose. Nothing about the product changes when they're scoped to the routes that need them.
Every number, with its confidence and source
| Figure | What it means | Confidence | Source |
|---|---|---|---|
| $0.0064 per call | cost of a 3,200-token tool definition block at real Claude Sonnet 5 input rates | calculated | 3.2 x $0.002 per 1k input tokens, using the Claude Sonnet 5 introductory rate from the price book, effective 2026-07-02. |
| $9,000 to $32,000 | modelled monthly tool-block spend at five million calls, trimmed versus untrimmed | estimated | Both endpoints from the teardown arithmetic at the real Claude Sonnet 5 input rate. A range because call volume and block size are modelled. |
What a generic answer can’t know
A provider bills your input tokens without distinguishing tool schemas from the user's message. It can't tell you what share of your input is a tool block, or which tools were never selected, because that analysis needs the request structure. Culpa reads it on your infrastructure, keeps your prompts and responses there, and counts the calls to run your plan.
Questions founders ask next
Do I pay for tools the model doesn't call?
Yes. The definitions travel in the request as input tokens so the model can choose between them, and they bill at the input rate whether one is selected or not. An unused tool costs exactly as much as a used one to offer.
Does prompt caching cover the tool block?
It can, if the block sits at the front of the prompt and stays byte-identical. Put anything variable before it and the prefix match fails, at which point you pay full rate for the whole block on every call.
How many tools is too many?
Judge it by tokens rather than count. Price the serialised block against your call volume, and compare that number to the value the rarely-selected tools actually deliver. Most teams find the answer obvious once it's a dollar figure.
On your infrastructure
Culpa runs on your infrastructure. Your prompts and responses never leave it. Culpa counts calls to run your plan, and it fails open, so if it ever breaks your app keeps running.
Free, no card, no account
Run the free Cost Leak Scan
It shows your most expensive conversation before you install anything.
Keep reading
Sources: Anthropic pricing. Last reviewed 2026-08-01. Plain text version.