The cost
You are paying for tools
you never called.
A tool definition is not a link. It is text: a name, a description, and a full JSON Schema for every parameter, for every tool on every server you have switched on. It goes to the model on every request, whether or not the model ever calls it. Skill frontmatter works the same way, loaded up front so the model knows when a skill applies.
None of that is a bug: a model cannot pick a tool it cannot see, and discovery has to be paid for somewhere. But it is a budget, and a budget nobody reads is not a budget. So how many tokens did your loadout cost you before you typed a word today?
npx efaimo weigh "npx -y @modelcontextprotocol/server-everything" 1,120
o200k tokens of tool definitions, for 13 tools you have not called yet. About 0.6% of a 200k window, resident on every request.
- Claude-style<function> blocks of JSON
- 1,120
- OpenAI toolsthe tools array, as sent
- 1,142
- raw JSONthe wire response, unserialized
- 1,607
Same 13 tools. Same server. Three ways of writing them down, 487 tokens apart. This is why the number has to be measured against the host you actually use, and why one quoted figure for "an MCP server" is not worth much.
- server instructions
- 312
- resources
- 7
- prompts
- 4
Those 13 bars add up to 1,062. The measured
total is 1,120. The 58 token gap is the
markup that joins them, and the markup does not add up either: a
<function> tag pair costs 6 tokens
written out and 4 once it wraps a tool, because the tokenizer
merges what it finds at the seams. 13 pairs at 4,
plus 6 for the <functions> block around them,
is the 58. You cannot add up a column of token counts and get the total.
That is not a caveat, it is the reason this is a tool and not a spreadsheet.
Estimated with the o200k_base tokenizer. Hosts wrap these definitions in their own fixed framing text, which is per-host constant and excluded on purpose. Run the command yourself and you should get this back. How the numbers are made ->
On all 13 of these tools the JSON Schema costs more than the prose that describes it. Trimming a description is the visible economy; the schema is the one that pays. Both columns are tokenized separately from the whole definition, so they do not sum to the tool's total, for the same reason the 13 bars above do not sum to the measured total.
Servers SHOULD return tools from tools/list in a
deterministic order to enable client-side caching and improve LLM
prompt cache hit rates.
One thing that is measured The registry that lists these servers proves who published them, with GitHub OAuth and DNS or HTTP domain verification. That is identity, and identity is worth having. It is a different question from what a server costs you once it is loaded, and the registry is still, in its own words, a preview release. Source ->