๐ฉบ A health check for your MCP setup โ measure the context tax and hygiene of your MCP servers
Project description
๐ฉบ mcp-checkup
A health check for your MCP setup.
One command that tells you what your MCP servers cost you โ in context-window tokens and dollars โ and whether they follow basic security hygiene.
The problem
Every MCP server you connect injects its full tool schemas into your model's context window โ on every single request โ before you type a word.
- GitHub's official MCP server alone consumes ~17,600 tokens per request in tool definitions (autopsy).
- Teams have burned 72% of a 200k context window on tool definitions before doing any actual work (MCP spec issue #2808).
- A security audit of publicly exposed MCP servers found 119 out of 119 sampled allowed unauthenticated access to internal tool listings.
You are paying a context tax on every request, and you probably have no idea
how big it is. mcp-checkup measures it.
What it looks like
Real output of a bare uvx mcp-checkup on a developer laptop (v0.2.0):
$ uvx mcp-checkup
๐ฉบ MCP Checkup โ 5 server(s), 128 tools
โโโโโโโโโโโโโโโโโณโโโโโโโโโโโโโโโโโณโโโโโโโโณโโโโโโโโโโโโณโโโโโโโโโณโโโโโโโโโ
โ Server โ Clients โ Tools โ anthropic โ openai โ gemini โ
โกโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฉ
โ alpaca โ claude-code โ 69 โ 18,611 โ 19,025 โ 18,542 โ
โ edgartools โ claude-code โ 13 โ 3,725 โ 3,803 โ 3,712 โ
โ playwright โ claude-desktop โ 23 โ 3,198 โ 3,336 โ 3,175 โ
โ filesystem โ claude-desktop โ 14 โ 1,640 โ 1,723 โ 1,626 โ
โ yahoo-finance โ claude-code โ 9 โ 1,396 โ 1,450 โ 1,387 โ
โโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโค
โ Total โ โ 128 โ 28,570 โ 29,337 โ 28,442 โ
โโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโดโโโโโโโโดโโโโโโโโโโโโดโโโโโโโโโดโโโโโโโโโ
Context tax: ~28,916 tokens on Anthropic models (incl. 346 tool-use
system overhead), before your first message.
That's 14% of a 200k context window, spent before the first user message.
Supported clients (auto-discovery)
| Client | Config discovered |
|---|---|
| Claude Desktop | claude_desktop_config.json (macOS/Windows/Linux) |
| Claude Code | project .mcp.json + ~/.claude.json user/local scopes |
| Cursor | ~/.cursor/mcp.json + project .cursor/mcp.json |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
| VS Code | .vscode/mcp.json + user-profile mcp.json (servers key) |
The HYGIENE pillar (auth, tool-poisoning, schema-bloat checks) arrives in v0.4.0 โ the block below is that target design:
$ uvx mcp-checkup
๐ฉบ MCP Checkup โ 4 servers, 38 tools
WEIGHT HYGIENE
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
github 17,612 tok $0.053/req โ 2 tools reachable without auth
slack 4,105 tok $0.012/req โ ok
filesystem 2,890 tok $0.009/req โ unrestricted root path
custom-api 9,441 tok $0.028/req โ 3 schemas 8ร over minimal size
Context tax: 34,048 tokens โ 17% of a 200k window, before your first message.
Run `mcp-checkup --fix` to emit compressed schemas.
Run `mcp-checkup --fail-over 20000` in CI to stop the bloat from coming back.
Quickstart
uvx mcp-checkup # or: pip install mcp-checkup
Point it at your client config (.mcp.json, Claude Desktop, Cursor, โฆ) or a
running server. That's the whole interface โ one command, one report.
Roadmap
Full detail per milestone in ROADMAP.md.
| Version | Theme | One line |
|---|---|---|
| v0.1.0 | Weigh one server | weigh <target> prints a per-tool token table for one server |
| v0.2.0 | Auto-discovery | Zero-flag scan of Claude Desktop/Code, Cursor, Windsurf, VS Code |
| v0.3.0 | Dollars & context tax | $/request, $/session, and context-tax % per model |
| v0.4.0 | Hygiene | Weight (W01โW05) and security (H01โH04) checks, two-pillar report |
| v0.5.0 | CI gate | Budget/severity gates, stable exit codes, GitHub Action |
| v0.6.0 | --fix emit |
Semantic-safe schema compression with before/after report |
| v0.7.0 | Trim proxy + rug-pull pins | serve --wrap --trim proxy, changed-since-pin detection |
| v0.8.0 | Shareable reports | Self-contained HTML report, badge endpoint, diff command |
| v0.9.0 | Hardening + SDK v2 | MCP SDK v2 transport, Windows CI, perf budget |
| v1.0.0 | Stable | Frozen CLI/exit codes/schema with a deprecation policy |
How counting works (and its error bars)
Each tool schema is serialized into every provider's actual wire format
(Anthropic tools, OpenAI functions, Gemini functionDeclarations) and
counted with tiktoken's o200k_base encoding โ exact for the GPT-4o/GPT-5
family, a close proxy (ยฑ~10%) for Anthropic and Gemini. Anthropic totals add
the documented tool-use system-prompt overhead. For billing-exact Anthropic
numbers, install mcp-checkup[precise], set ANTHROPIC_API_KEY, and pass
--precise โ it queries the free count_tokens API with your real schemas.
Prices and context windows come from a vendored snapshot of LiteLLM's
community-maintained pricing table; --refresh-pricing fetches the latest at
runtime (with silent fallback). $ per session assumes schemas are resent
every turn โ with prompt caching you pay full price on turn one and on every
cache invalidation.
Status
Early days โ the measurement engine is being built in the open. If the context tax bothers you too: โญ star the repo to follow along, open an issue with your worst MCP token bill, or see CONTRIBUTING.md to help build it.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_checkup-0.3.0.tar.gz.
File metadata
- Download URL: mcp_checkup-0.3.0.tar.gz
- Upload date:
- Size: 159.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e9dff6065e37905de1b51624d6d298f572668b8f7614cb3c33856dca5db6ab8a
|
|
| MD5 |
65c6cbe8a967f1d3fdf7305eb7a0f9e7
|
|
| BLAKE2b-256 |
d7e4c3b1283818796e4f5383a3b7d76b9f2816eae19775e7e4707edfbf023736
|
File details
Details for the file mcp_checkup-0.3.0-py3-none-any.whl.
File metadata
- Download URL: mcp_checkup-0.3.0-py3-none-any.whl
- Upload date:
- Size: 31.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b0f9707b2fbfa5e1358a1fbefe1dee3f0d8ee8691ce7748d475d323e4d81ffcd
|
|
| MD5 |
a2955294b49b85b173d2f58908bb350f
|
|
| BLAKE2b-256 |
a3cd2732ae4dd3c6b043de87dd68ba06a86023065c378c7382ba5ddb2e2ffdd0
|