vacuous-tests-mcp
vacuous-tests-mcp
MCP-сервер, который находит тесты, проходящие независимо от того, что делает код.
Пустой тест хуже отсутствующего. Отсутствующий тест заметно отсутствует. Пустой тест сидит в наборе, проходит зелёным, учитывается в общем количестве и цитируется как доказательство того, что поведение покрыто — хотя ничего не проверяет. Это покрытие, которое невидимо отсутствует, и оно переживает именно те ситуации, для выявления которых существуют тесты.
Их легко написать случайно и трудно заметить при чтении, потому что пустой тест и настоящий часто выглядят почти одинаково.
Случай, на основе которого это было создано
Rust-файл из 6 764 строк в проекте, чей набор тестов уже регулярно проверялся вручную. В нём два теста:
// 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");Оба встраивают исходный код самого файла. Первый утверждает непосредственно о SRC — а
SRC содержит сам тест, включая искомую строку. Он истинен по построению: удалите
производственный код, который он якобы защищает, и он останется зелёным. Второй сначала
отрезает тестовый модуль и утверждает только о производственном срезе, поэтому он падает
при изменении производственного кода. Это настоящий барьер.
Сканирование этого файла сообщает об одном результате, в правильной строке, и оставляет
остальные четыре места с include_str! в покое. Сканер следует за привязкой, а не
сопоставляет шаблон include_str!, что и разделяет эти два случая.
Related MCP server: leakguard-mcp
Правила
Правило | Серьёзность | Что оно выявляет |
| high | Тест встраивает свой собственный исходный код и утверждает, что в нём встречается литерал. Литерал находится в утверждении, поэтому он никогда не может упасть. |
| high | Нет никаких утверждений. Только паника или исключение могут привести к падению теста, поэтому неверное, но тихое поведение проходит. |
| high |
|
| high | В теле нет ничего, что могло бы упасть. |
| info |
|
Языки
Язык | Метод | Точность |
Python |
| Точный |
Rust | сканер сопоставления скобок по исходному тексту | Эвристический |
JavaScript / TypeScript | сканер сопоставления скобок по исходному тексту | Эвристический |
Сканеры Rust и JS маскируют строковые литералы и комментарии перед сопоставлением, поэтому
{ внутри строки или закомментированное утверждение не может их обмануть. Они настроены
скорее пропустить случай, чем выдумать его: ложное срабатывание здесь стоит дороже, чем
пропуск, потому что первый неверный ответ учит людей игнорировать вывод.
Относитесь к каждому результату как к вопросу для проверки, а не как к приговору. Каждый указывает файл и строку, поэтому подтверждение занимает секунды.
Установка
Ещё нет на PyPI — установите из исходников:
git clone https://github.com/zegroged/vacuous-tests-mcp
cd vacuous-tests-mcp
pip install .Это помещает команду vacuous-tests-mcp в ваш PATH.
Использование из MCP-клиента
Добавьте в конфигурацию MCP вашего клиента:
{
"mcpServers": {
"vacuous-tests": {
"command": "vacuous-tests-mcp"
}
}
}Для Claude Code:
claude mcp add vacuous-tests -- vacuous-tests-mcpЗатем попросите его просканировать что-нибудь:
Просканируйте ./src на предмет тестов, которые не могут упасть.
Инструменты
scan_tests(path, include_skipped=True, max_findings=100)
Обходит файл или каталог и сообщает о тестах, которые не могут упасть. Каталоги сборки и
зависимостей (target, node_modules, .venv, …) пропускаются. Результаты возвращаются
сначала по наибольшей серьёзности, каждый с путём, строкой, именем теста, правилом и
фрагментом.
list_rules()
Каждое правило с описанием, чтобы модель могла решить, что запросить.
explain_rule(rule)
Что обнаруживает одно правило и как обычно устраняется результат.
Сервер только читает. Он не записывает файлы, не выполняет сканируемый код и не выходит за пределы указанного пути.
Разработка
pip install -e ".[dev]"
pytestНабор покрывает каждое правило на каждом языке и — что более важно — проверяет, что обычный тест, находящийся рядом с пустым, не сообщается. Также есть сквозной тест, который запускает сервер как подпроцесс и проводит его через реальное рукопожатие MCP, так что протокольный уровень покрыт, а не предполагается.
Ограничения
Обнаружение Rust и JS/TS является текстовым, а не синтаксическим. Макрогенерируемые тесты, необычное форматирование и сильно вложенные замыкания могут быть пропущены.
no-assertionsне знает, что тест может существовать исключительно для доказательства того, что что-то не вызывает панику. Такой тест является истинно положительным по правилу и ложноположительным по намерению; укажите это явным утверждением, и он замолчит.Сканируются только языки из таблицы выше. Остальные файлы игнорируются, а не угадываются.
Лицензия
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