token-filter-mcp
Filters output from Biome linter, grouping errors by rule and omitting clean files.
Filters output from ESLint linter, grouping errors by rule and omitting clean files.
Provides smart filtering for git operations such as status, diff, log, commit, push, and pull, returning concise summaries.
Supports reading JavaScript files with modes like 'signatures' (only declarations) and 'relevant' (sections matching focus pattern with context).
Filters output from Jest test runner, removing passing tests and displaying only failure details with file location and expected/received values.
Filters output from npm commands, returning a compact summary of packages installed instead of full resolution trees.
Filters output from pytest test runner, showing only test failures with location and expected/received values.
Supports reading Python files with modes like 'signatures' (only declarations) and 'relevant' (sections matching focus pattern with context).
Filters output from Ruff linter, grouping errors by rule and omitting clean files.
Supports reading Rust files with modes like 'signatures' and 'relevant', and filters output from cargo test, showing only test failures.
Supports reading TypeScript files with modes like 'signatures' (only declarations) and 'relevant' (sections matching focus pattern with context).
Filters output from Vitest test runner, showing only test failures with location and expected/received values.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@token-filter-mcprun npm test and show only failures"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
๐งน token-filter-mcp
Your LLM is wasting 80% of its context window on noise. This fixes that.
An MCP server that sits between your AI coding assistant and its tools, intelligently compressing outputs before they consume your precious context. Longer sessions. Better reasoning. Lower costs.
๐ธ The Problem Nobody Talks About
Every time your AI assistant runs a command, it dumps the entire raw output into its context window:
+ โ src/auth.test.ts (14 tests) โ you don't need this
+ โ src/utils.test.ts (8 tests) โ or this
+ โ src/payments.test.ts (12 tests) โ or this
+ โ src/users.test.ts (10 tests) โ or this
- โ src/orders.test.ts (3 tests) โ THIS is what matters
- โ should validate quantity > 0
- Expected: error
- Received: successThe vast majority of tool output is noise: tests that pass, git headers, resolution trees, progress bars, whitespace. ~80% of what goes into the context window is information the LLM will never act on.
That noise eats your context window, degrades reasoning quality, and costs you money.
Related MCP server: claw-tsaver
โก The Solution
โ Without token-filter-mcp
Context fills up fast
LLM loses track of conversation
Paying for tokens it ignores
Sessions hit context limit early
Reads 14 lines to find 1 failure
โ With token-filter-mcp
Context stays lean
LLM maintains coherence longer
Only paying for useful tokens
Sessions last significantly longer
Reads exactly the failure, acts immediately
token-filter-mcp intercepts every tool output and applies intelligent, context-aware filtering โ returning only what the LLM actually needs to make decisions.
No configuration needed. No changes to your workflow. Just plug it in.
๐ฏ Real Results
Average savings across real-world tool outputs: 60-90% fewer tokens consumed
๐ง How It Works
flowchart LR
A[๐ค LLM Agent] -->|tool call| B[๐งน token-filter-mcp]
B -->|execute| C[๐ป System]
C -->|raw output| B
B -->|filtered output| A
style B fill:#7c3aed,stroke:#5b21b6,color:#fff
style A fill:#2563eb,stroke:#1d4ed8,color:#fff
style C fill:#059669,stroke:#047857,color:#fff1๏ธโฃ Detect โ Identifies what command was run (test runner? git? linter?)
2๏ธโฃ Execute โ Runs the command and captures full output
3๏ธโฃ Filter โ Applies the optimal strategy for that command type
4๏ธโฃ Verify โ Ensures no errors or actionable info was removed
5๏ธโฃ Return โ Sends compressed output to the LLM
๐จ Contextual Detection
The server doesn't blindly truncate. It understands what you ran and applies the right strategy:
It detects... | And does this... |
๐งช Test runners (jest, vitest, pytest, cargo test, go test) | Strips passing tests. Shows only failures with location + expected/received |
๐ | Converts to |
๐ | Removes repeated headers, keeps only hunks with ยฑ3 context |
๐ | One-liner: |
๐ Linters (tsc, eslint, biome, ruff) | Groups errors by rule/file, omits clean files |
๐ฆ Package installs | Returns |
โ Unknown commands | Conservative: deduplicate + truncate to 100 lines |
๐ก๏ธ Zero Information Loss
The #1 design principle: never hide an error.
โ
Lines matching error patterns (FAIL, Error:, TypeError, panic...) โ NEVER removed
โ
Non-zero exit codes โ full error output preserved
โ
Parser can't understand format โ returns raw output
โ
passthrough mode available for when you need everything๐ Installation
Add this to your MCP client config โ that's it:
{
"mcpServers": {
"token-filter": {
"command": "npx",
"args": ["-y", "token-filter-mcp"]
}
}
}npm install -g token-filter-mcp{
"mcpServers": {
"token-filter": {
"command": "token-filter-mcp"
}
}
}๐ Where does the config go?
Client | Config file |
Kiro |
|
Claude Desktop |
|
Cursor |
|
Any MCP client | Wherever it reads |
๐ง 5 Tools, One Purpose
{ "command": "npm test", "filter_level": "normal" }Level | Behavior |
| Smart filtering with sensible defaults |
| 50% additional reduction for tight context budgets |
| Raw output when you need everything (capped at 200KB) |
{ "path": "src/app.ts", "mode": "signatures" }Mode | What it returns |
| Content minus blank blocks, license headers, grouped imports |
| Only declarations โ no implementation bodies |
| Only sections matching |
Supports: TypeScript, JavaScript, Python, Rust, Go
{ "pattern": "useState", "path": "src", "group_by": "file", "max_results": 20 }Results grouped by file, deduplicated, with context lines. Uses ripgrep when available.
{ "command": "npm test" }All pass:
[PASS] 47/47 tests passed (3.2s)Failures:
[PASS] 44/47 tests passed
[FAIL] 3 failures:
1. src/auth.test.ts:42 โ "should refresh token"
Expected: 200
Received: 401
2. src/payments.test.ts:89 โ "should validate 3DS"
TypeError: Cannot read property 'status' of undefined
at processPayment (src/payments.ts:156)Auto-detects: Jest, Vitest, pytest, cargo test, go test
{ "operation": "status" }Operation | What you get |
|
|
| Only hunks with changes, no header spam |
|
|
|
|
|
|
|
|
โ๏ธ Configuration (Optional)
Works great out of the box. Customize only if you want to.
{
"defaults": {
"max_output_lines": 100,
"test_show_passes": false,
"git_log_max": 15,
"diff_context_lines": 3,
"dedup_threshold": 3
},
"commands": {
"my-custom-script.sh": { "filter_level": "passthrough" }
},
"metrics": { "enabled": true }
}Same schema. Project config overrides global. Global overrides built-in defaults.
๐ Built-in Observability
When enabled, every invocation is logged to ~/.config/token-filter-mcp/metrics.jsonl:
{
"tool": "smart_test",
"command": "npm test",
"rawChars": 5200,
"filteredChars": 480,
"savingsPercent": 90.7,
"strategy": "test_result_filter",
"filterDurationMs": 3,
"timestamp": "2026-06-30T15:30:00Z"
}Auto-rotated at 5MB, max 5 history files.
What it tracks:
Real savings per tool and command type
Which filters are most effective
Passthrough re-invocations (signal that a filter might be too aggressive)
๐ก๏ธ Guarantees
Guarantee | Detail |
๐ Zero loss | Errors, test failures, and changes are never filtered out |
โก < 50ms overhead | Filtering adds negligible latency vs raw execution |
๐ช Safe fallback | Unknown commands get conservative treatment, not silence |
๐ No lock-in | Standard MCP protocol โ works with any compliant client |
๐ No network | Everything runs locally over stdio. Your code never leaves your machine |
๐ ๏ธ Development
git clone https://github.com/VMexicano/token-filter-mcp
cd token-filter-mcp
npm install
npm run build
npm test # 57 tests, all passingThe best token is the one you never spend.
Made with ๐ by Victor Mexicano
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/VMexicano/token-filter-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server