What your tools cost before anyone calls one
Tool schemas are re-sent on every request, plus a provider system prompt you never see.
Tool definitions are input tokens. Every name, description, parameter and enum value in your `tools` array is serialised into the request on every call, whether or not the model uses any of them.
On top of that, providers inject their own tool-use instructions. Anthropic publishes the figures: between roughly 286 and 804 tokens depending on model and tool-choice setting, before a single byte of your own schemas. That overhead is invisible in your code and appears only on your invoice.
Teams are routinely surprised to find their tool block is larger than their system prompt. Twenty tools with paragraph-length descriptions is a few thousand tokens on every request, forever.
Two fixes, in order of impact. First, cache the tool block — it is perfectly static, which makes it ideal cache content. Second, stop sending tools the current step cannot use: load them per phase, or expose a small set and let the model request more.
18 tools, 3,900 tokens, attached to every request including the ones that just answer a question.A 4-tool set for this step, behind a cache breakpoint.Check your own prompt
The analyser checks this pattern along with the other 25, prices each finding against your request volume, and hands back a rewritten prompt. It runs in your browser — nothing is uploaded.
Run the analyserMore on tools & schemas
- JSON indented for a human readerPretty-printing JSON in a prompt adds 20-30% tokens for whitespace nobody reads.
- A JSON schema written out in EnglishDescribing your output shape in prose costs more than declaring it, and works less well.
- Tool schemas carrying dead weightLong descriptions, JSON Schema boilerplate, and enums with a hundred values.