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?

The answer, for one server efaimo v0.1.0 · 2026-07-17 00:23 UTC
$ 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

all 13 tools, Claude-style tokens

gzip-file-as-resource 202
simulate-research-query 131
get-annotated-message 102
get-resource-reference 84
trigger-long-running-operation 84
get-resource-links 78
get-structured-content 73
get-sum 69
echo 54
toggle-simulated-logging 51
toggle-subscriber-updates 47
get-env 45
get-tiny-image 42

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 ->

Where the weight sits, per tool
gzip-file-as-resource 45 146
simulate-research-query 49 71
get-annotated-message 14 76
get-resource-reference 11 62
trigger-long-running-operation 11 62
get-resource-links 12 55
get-structured-content 12 49
get-sum 6 52
echo 6 39
toggle-simulated-logging 14 24
toggle-subscriber-updates 11 24
get-env 11 24
get-tiny-image 7 24

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.
MCP specification, draft changelog -> The protocol itself now budgets for the prompt cache. Nothing about this is exotic any more.

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 ->