vacuous-tests-mcp
vacuous-tests-mcp
Un servidor MCP que encuentra pruebas que pasan sin importar lo que haga el código.
Una prueba vacua es peor que una que falta. Una prueba que falta es visiblemente ausente. Una prueba vacua se sienta en la suite, se ejecuta en verde, cuenta en el total y se cita como evidencia de que un comportamiento está cubierto — mientras no comprueba nada. Es cobertura que está invisiblemente ausente, y sobrevive exactamente a las situaciones para las que existen las pruebas.
Son fáciles de escribir por accidente y difíciles de detectar leyendo, porque una prueba vacua y una real a menudo se ven casi idénticas.
El caso del que surgió esto
Un archivo Rust, de 6,764 líneas, en un proyecto cuya suite de pruebas ya estaba bajo auditoría manual regular. Dos pruebas en él:
// 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");Ambas incrustan el código fuente del propio archivo. La primera afirma directamente sobre SRC — y SRC contiene la
prueba en sí, incluida la cadena que se busca. Es verdadera por construcción: elimina el código de producción que dice proteger
y sigue en verde. La segunda corta primero el módulo de prueba y afirma solo sobre la porción de producción, por lo que falla
cuando el código de producción cambia. Esa es una barrera real.
Escanear ese archivo informa un hallazgo, en la línea correcta, y deja los otros cuatro sitios de include_str! en paz.
El escáner sigue el enlace en lugar de hacer coincidencia de patrones en include_str!, que es lo que separa los dos casos.
Related MCP server: leakguard-mcp
Reglas
Regla | Severidad | Qué detecta |
| alta | La prueba incrusta su propio código fuente y afirma que un literal aparece en él. El literal está en la afirmación, por lo que nunca puede fallar. |
| alta | Ninguna afirmación de ningún tipo. Solo un panic o un throw puede hacer fallar la prueba, por lo que un comportamiento incorrecto pero silencioso pasa. |
| alta |
|
| alta | Nada en el cuerpo que pueda fallar. |
| info |
|
Lenguajes
Lenguaje | Método | Precisión |
Python |
| Exacta |
Rust | escáner de coincidencia de llaves sobre el texto fuente | Heurística |
JavaScript / TypeScript | escáner de coincidencia de llaves sobre el texto fuente | Heurística |
Los escáneres de Rust y JS enmascaran literales de cadena y comentarios antes de coincidir, por lo que una { dentro de una
cadena o una afirmación comentada no puede engañarlos. Están ajustados para omitir un caso en lugar de inventar uno: un falso
positivo cuesta más que un falso negativo aquí, porque la primera respuesta incorrecta enseña a la gente a ignorar la salida.
Trata cada hallazgo como una pregunta a comprobar, no como un veredicto. Cada uno nombra un archivo y una línea, por lo que confirmarlo lleva segundos.
Instalación
Aún no está en PyPI — instala desde el código fuente:
git clone https://github.com/zegroged/vacuous-tests-mcp
cd vacuous-tests-mcp
pip install .Eso pone un comando vacuous-tests-mcp en tu PATH.
Úsalo desde un cliente MCP
Añade a la configuración MCP de tu cliente:
{
"mcpServers": {
"vacuous-tests": {
"command": "vacuous-tests-mcp"
}
}
}Para Claude Code:
claude mcp add vacuous-tests -- vacuous-tests-mcpLuego pídele que escanee algo:
Escanea ./src en busca de pruebas que no puedan fallar.
Herramientas
scan_tests(path, include_skipped=True, max_findings=100)
Recorre un archivo o directorio e informa de pruebas que no pueden fallar. Los directorios de compilación y dependencias
(target, node_modules, .venv, …) se omiten. Los hallazgos vuelven primero por mayor severidad, cada uno con una ruta, línea, nombre de prueba, regla y fragmento.
list_rules()
Cada regla con una descripción, para que un modelo pueda decidir qué pedir.
explain_rule(rule)
Qué detecta una regla y cómo se resuelve normalmente el hallazgo.
El servidor solo lee. No escribe archivos, no ejecuta el código que escanea y no mira fuera de la ruta que se le da.
Desarrollo
pip install -e ".[dev]"
pytestLa suite cubre cada regla en cada lenguaje y — lo más importante — comprueba que una prueba normal situada junto a una vacua no se informe. También hay una prueba de extremo a extremo que inicia el servidor como subproceso y lo conduce a través de un apretón de manos MCP real, por lo que la capa de protocolo está cubierta en lugar de asumida.
Limitaciones
La detección de Rust y JS/TS es textual, no un análisis sintáctico. Las pruebas generadas por macros, el formato inusual y los cierres muy anidados pueden pasarse por alto.
no-assertionsno sabe que una prueba puede existir puramente para demostrar que algo no entra en pánico. Tal prueba es un verdadero positivo según la regla y un falso positivo por intención; dilo con una afirmación explícita y se callará.Solo se escanean los lenguajes de la tabla anterior. Otros archivos se ignoran, no se adivinan.
Licencia
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