MCP Context Tax Index
The median MCP server charges 1,919 tokens of context before it does anything at all. Across the 30 servers we could boot and price, the spread runs from 33 to 19,054 tokens — and 20 of the 51 servers we tried would not start on a clean machine at all.
What Context Tax is
When you connect an MCP server to an agent, the agent asks it for a list of its tools. Every tool comes back with a name, a description and a JSON schema for its arguments, and all of that goes into the model’s context window at the start of the conversation and again on every turn. You pay for it whether the model calls a single tool or none. That standing charge is what we call the Context Tax, and it is the number this index measures.
It is not the same as how useful a server is. A heavy server can be worth its weight; a light one can be useless. But the tax is paid up front, it is paid repeatedly, and almost nobody publishes it — so we started every server we could find and wrote it down.
The headline numbers
Sample size matters here, so read it plainly: we attempted 51 servers, 31 started (60.8%), and 30 of those advertised at least one tool and could therefore be priced. That is a small index, not a census of the MCP ecosystem. Installing all 30 priced servers at once would cost 117,168 tokens and 312 tools on every single turn. Median boot time, for the servers that booted, was 8.9s.
Every priced server, heaviest first
| Server | Vendor | Tools | Context tax | Per tool | Boot |
|---|---|---|---|---|---|
| Notion | Notion | 24 | ~19,054 | 794 | 8.9s |
| Desktop Commander | community | 26 | ~15,226 | 586 | 55.1s |
| CircleCI | CircleCI | 13 | ~12,932 | 995 | 17.5s |
| MongoDB | MongoDB | 31 | ~9,462 | 305 | 52.2s |
| Firecrawl | Firecrawl | 25 | ~9,077 | 363 | 16.3s |
| Shopify Dev | Shopify | 5 | ~6,590 | 1,318 | 60.8s |
| Pinecone | Pinecone | 9 | ~6,165 | 685 | 8.2s |
| Kubernetes | community (Flux159) | 23 | ~5,964 | 259 | 26.3s |
| Playwright MCP | Microsoft | 24 | ~4,626 | 193 | 5.4s |
| GitHub (archived npm server) | Anthropic (archived) | 26 | ~3,964 | 152 | 6.0s |
| Filesystem · official | Anthropic (reference) | 14 | ~3,243 | 232 | 9.0s |
| Netlify | Netlify | 9 | ~3,083 | 343 | 33.8s |
| n8n | community (czlonkowski) | 7 | ~2,942 | 420 | 15.0s |
| Memory · official | Anthropic (reference) | 9 | ~2,688 | 299 | 5.1s |
| Tavily | Tavily | 5 | ~1,924 | 385 | 6.7s |
| Everything (test server) · official | Anthropic (reference) | 13 | ~1,913 | 147 | 7.5s |
| Git · official | Anthropic (reference) | 12 | ~1,477 | 123 | 2.1s |
| Excel | community (negokaz) | 6 | ~1,406 | 234 | 8.9s |
| Context7 | Upstash | 2 | ~1,215 | 608 | 7.8s |
| Sequential Thinking · official | Anthropic (reference) | 1 | ~1,147 | 1,147 | 6.7s |
| should-i-use (ours) | MrKeyoor | 6 | ~666 | 111 | 7.9s |
| Puppeteer (archived) | Anthropic (archived) | 7 | ~612 | 87 | 33.5s |
| Exa | Exa Labs | 2 | ~534 | 267 | 13.0s |
| Browserbase | Browserbase | 6 | ~393 | 66 | 21.7s |
| Time · official | Anthropic (reference) | 2 | ~300 | 150 | 2.0s |
| Fetch · official | Anthropic (reference) | 1 | ~276 | 276 | 3.1s |
| MySQL | community (benborla29) | 1 | ~100 | 100 | 17.0s |
| YouTube Transcript | community | 1 | ~84 | 84 | 7.2s |
| E2B Code Sandbox | E2B | 1 | ~72 | 72 | 10.6s |
| PostgreSQL (archived) | Anthropic (archived) | 1 | ~33 | 33 | 6.2s |
Tokens per tool separates two different kinds of expensive. A server can be costly because it exposes a lot of tools, or because each tool carries a large schema. The worst per-tool figure here is Shopify Dev at 1,318 tokens for each of its 5.
The servers that would not start
20 of the 51 servers exited before the protocol handshake finished on a machine with no credentials on it. 10 of those had told us, through their own documentation or startup output, that they wanted an API key or a token first, so their failure is expected and is really a note about setup cost rather than quality. The rest simply died. A server that cannot start unattended is worth knowing about before you put it in an agent loop, so we publish the failures in the same table as the successes rather than dropping them.
| Server | Vendor | Wanted credentials | What happened |
|---|---|---|---|
| Slack (archived) | Anthropic (archived) | yes | exited with code 1 before initialize completed |
| Google Drive (archived) | Anthropic (archived) | not declared | exited with code 1 before initialize completed |
| Google Maps (archived) | Anthropic (archived) | yes | exited with code 1 before initialize completed |
| Brave Search (archived) | Anthropic (archived) | yes | exited with code 1 before initialize completed |
| GitLab (archived) | Anthropic (archived) | yes | exited with code 1 before initialize completed |
| Sentry | Sentry | yes | exited with code 1 before initialize completed |
| Supabase | Supabase | yes | exited with code 1 before initialize completed |
| Stripe | Stripe | yes | exited with code 1 before initialize completed |
| PayPal | PayPal | not declared | exited with code 0 before initialize completed |
| Azure MCP | Microsoft | not declared | exited with code 1 before initialize completed |
| Elasticsearch | Elastic | not declared | exited with code 1 before initialize completed |
| Heroku | Heroku | not declared | exited with code 1 before initialize completed |
| Apify Actors | Apify | yes | exited with code 1 before initialize completed |
| Chroma | Chroma | not declared | exited with code 1 before initialize completed |
| Qdrant | Qdrant | not declared | exited with code 1 before initialize completed |
| DuckDuckGo Search | community | not declared | exited with code 1 before initialize completed |
| Blender | community | not declared | exited with code 1 before initialize completed |
| Obsidian | community | yes | exited with code 1 before initialize completed |
| Figma (Framelink) | community | not declared | boot timeout after 90s (npx install + start) |
| Airtable | community (domdomegg) | yes | exited with code 1 before initialize completed |
How we measured this
Each server is launched over stdio on a clean machine with an empty environment — no API keys, no config file, no prior install. We send the MCP initialize handshake, then tools/list, and record what comes back: the protocol version, the server name and version it reports, the number of tools, the exact byte length of the tools/list response, and the same figure per tool. Boot has 90 seconds; anything slower is recorded as a timeout. We never call a tool, because calling one would do something to somebody else’s account.
Tokens are an estimate, not a count from a tokenizer: we divide the character length of the payload by four, which is the usual rule of thumb for English-and-JSON text. That is accurate enough to compare servers with each other and to size a context budget; it is not accurate enough to reconcile against a bill. Treat every token figure on this page as approximate and comparative. The wider lab procedure is on how we test.
Measured 19 Aug 2026, in one batch. Boot times include fetching the package with npx or uvx on a cold cache, so they are worst-case, and they vary with the network. Servers change: a release that adds three tools moves a row. Cite the date you pulled the data.
Take the data
One row per server, failures included: slug, name, vendor, category, whether it booted, boot milliseconds, tool count, context tax in tokens, tokens per tool, raw tools/list bytes, protocol version and the date we measured it. Free to reuse with attribution (CC BY 4.0) — cite “MrKeyoor MCP Context Tax Index” and link to this page.
Our other index measures whether open-source projects install at all: the Install Success Index. Think a number here is wrong? Name the server and we will re-boot it — contact, corrections policy.