vacuous-tests-mcp
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., "@vacuous-tests-mcpscan ./src for vacuous tests"
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.
vacuous-tests-mcp
An MCP server that finds tests which pass no matter what the code does.
A vacuous test is worse than a missing one. A missing test is visibly missing. A vacuous test sits in the suite, runs green, counts in the total, and gets quoted as evidence that a behaviour is covered — while checking nothing. It is coverage that is invisibly absent, and it survives exactly the situations tests exist to catch.
They are easy to write by accident and hard to spot by reading, because a vacuous test and a real one often look nearly identical.
The case this was built from
A Rust file, 6,764 lines, in a project whose test suite was already under regular manual audit. Two tests in it:
// flagged
const SRC: &str = include_str!("lib.rs");
assert!(SRC.contains("pub sas_verified: bool,"), "the field must be exposed");// not flagged
const SRC: &str = include_str!("lib.rs");
let prod = SRC.split_once("\n#[cfg(test)]\nmod tests {").expect("test module").0;
assert!(prod.contains("InviterSecrets::create_for_group("), "production never calls it");Both embed the file's own source. The first asserts on SRC directly — and SRC contains the
test itself, including the very string being searched for. It is true by construction: delete
the production code it claims to guard and it stays green. The second cuts the test module off
first and asserts on the production slice only, so it fails when the production code changes.
That one is a real gate.
Scanning that file reports one finding, at the right line, and leaves the other four
include_str! sites alone. The scanner follows the binding rather than pattern-matching on
include_str!, which is what separates the two cases.
Related MCP server: leakguard-mcp
Rules
Rule | Severity | What it catches |
| high | The test embeds its own source and asserts a literal appears in it. The literal is in the assertion, so it can never fail. |
| high | No assertion of any kind. Only a panic or throw can fail the test, so wrong-but-quiet behaviour passes. |
| high |
|
| high | Nothing in the body to fail. |
| info |
|
Languages
Language | Method | Accuracy |
Python |
| Exact |
Rust | brace-matching scanner over the source text | Heuristic |
JavaScript / TypeScript | brace-matching scanner over the source text | Heuristic |
The Rust and JS scanners mask string literals and comments before matching, so a { inside a
string or a commented-out assertion cannot mislead them. They are tuned to miss a case rather
than invent one: a false positive costs more than a false negative here, because the first
wrong answer teaches people to ignore the output.
Treat every finding as a question to check, not a verdict. Each one names a file and a line, so confirming it takes seconds.
Install
Not on PyPI yet — install from source:
git clone https://github.com/zegroged/vacuous-tests-mcp
cd vacuous-tests-mcp
pip install .That puts a vacuous-tests-mcp command on your PATH.
Use it from an MCP client
Add to your client's MCP configuration:
{
"mcpServers": {
"vacuous-tests": {
"command": "vacuous-tests-mcp"
}
}
}For Claude Code:
claude mcp add vacuous-tests -- vacuous-tests-mcpThen ask it to scan something:
Scan ./src for tests that can't fail.
Tools
scan_tests(path, include_skipped=True, max_findings=100)
Walk a file or directory and report tests that cannot fail. Build and dependency directories
(target, node_modules, .venv, …) are skipped. Findings come back highest severity first,
each with a path, line, test name, rule and snippet.
list_rules()
Every rule with a description, so a model can decide what to ask for.
explain_rule(rule)
What one rule detects and how the finding is usually resolved.
The server only reads. It does not write files, does not execute the code it scans, and does not look outside the path it was given.
Development
pip install -e ".[dev]"
pytestThe suite covers each rule in each language, and — more importantly — checks that a normal test sitting next to a vacuous one is not reported. There is also an end-to-end test that starts the server as a subprocess and drives it through a real MCP handshake, so the protocol layer is covered rather than assumed.
Limitations
Rust and JS/TS detection is textual, not a parse. Macro-generated tests, unusual formatting and heavily nested closures can be missed.
no-assertionsdoes not know that a test may exist purely to prove something does not panic. Such a test is a true positive by the rule and a false positive by intent; say so with an explicit assertion and it goes quiet.Only the languages in the table above are scanned. Other files are ignored, not guessed at.
License
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Tools
Related MCP Servers
- FlicenseAqualityCmaintenanceAI-powered code review tool that detects AI-generated code defects invisible to traditional linters — hallucinated packages, deprecated APIs, cross-file contradictions, hidden security anti-patterns, and over-engineering. Works as a standalone CLI, GitHub Action, or MCP server. Supports TypeScript, Python, Java, Go, and Kotlin. Free for individuals, no API key required.433
- AlicenseAqualityAmaintenanceStatic-analyzes Python code for lookahead bias and data leakage, preventing invalid backtests in time-series ML.5MIT
- AlicenseAqualityBmaintenanceOn-demand micro-mutation sandbox for AI test verification that maps weaknesses in unit tests by running isolated mutation testing via the Model Context Protocol.342MIT

OrangePro MCPofficial
AlicenseAqualityAmaintenanceAnalyzes code to map behaviors, identify untested gaps, and generate grounded integration tests that actually run.81564317MIT
Related MCP Connectors
Flaky test detection, root cause analysis, and fix suggestions for development teams.
Deterministic validation for AI-generated artifacts: JSON Schema, OpenAPI response, SQL syntax.
Zero-config MCP security scanner for AI-generated apps. 25K+ vulnerability patterns.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- 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/zegroged/vacuous-tests-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server