tools/list is where the tokens go.

This page is about the protocol method, not about your workflow. MCP is stateless: a client cannot know which tool you will call, so tools/list returns the complete input schema of every tool, and a well-behaved client puts all of it in front of the model. That response is the bill.

71,929 tokens of tools/list

255 tools across a handful of servers, full inputSchema JSON, encoded with tiktoken cl100k_base. The same catalog reduced to a name index is 581 tokens (−99.2%) — same tools, same servers, same capabilities.

Where the bytes actually are

A single well-documented tool is typically 300–600 tokens of JSON: property names, nested types, required arrays, defaults, and the prose descriptions that make the tool usable at all. None of that is waste — it is what makes a call correct. The problem is scope, not quality: the model is handed the schema of tools it will never call in that session, and handed it again on the next turn.

What the model receivesOn a 255-tool catalog
tools/list, full schemas71,929 tokens
name index (names only)581 tokens
name + parameter types (--slim)3,035 tokens
one tool's full schema, on demandthat tool only

All four rows are the same catalog, measured the same way — the rows are directly comparable, which is the only reason quoting them together is fair.

Why caching does not fix it

Some clients cache the tools/list response to avoid refetching it. That saves the round trip; it does not save the context. The tokens still enter the window, still occupy the attention budget, and still need to be re-sent for the model to reason over them. Caching addresses latency, not cost.

What a name index changes

mcptoon answers tools/list with names and a short line instead of full schemas, keeps the schemas on disk, and returns exactly one real schema when the model asks to inspect a tool. The protocol interaction is unchanged from the model's point of view — it still chooses a tool and calls it — but the standing cost drops by two orders of magnitude.

pip install mcptoon
mcptoon manifest                         # what the model sees: 581 tokens
mcptoon manifest --slim                  # names + param types: 3,035 tokens
mcptoon inspect <server> <tool>     # one full schema, on demand
mcptoon bench                            # reproduce all of this on your catalog

Get mcptoon on GitHub Calculate your token cost

FAQ

Is tools/list called on every turn?

Not necessarily the network call — but the result is re-sent with the conversation each turn, which is what costs tokens. Clients that cache the response still pay it in context.

Can I just trim the descriptions?

Partly, and it is a real lever — descriptions are a large share of the bytes. But trimming fights the documentation that makes tools usable, whereas indexing removes the need to send unused schemas at all.

How is this different from "too many MCP tools"?

Same symptom, different angle: this page is about what the protocol method returns. The tools guide is the diagnostic walkthrough — whether the problem is yours and what the alternatives cost.