Skip to main content
Glama
zegroged

vacuous-tests-mcp

by zegroged

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

Правила

Правило

Серьёзность

Что оно выявляет

self-referential-source

high

Тест встраивает свой собственный исходный код и утверждает, что в нём встречается литерал. Литерал находится в утверждении, поэтому он никогда не может упасть.

no-assertions

high

Нет никаких утверждений. Только паника или исключение могут привести к падению теста, поэтому неверное, но тихое поведение проходит.

tautological-assertion

high

assert!(true), assert_eq!(x, x), expect(true).toBe(true) — выполняется независимо от кода.

empty-body

high

В теле нет ничего, что могло бы упасть.

skipped-test

info

#[ignore], it.skip, @pytest.mark.skip. Проходит зелёным, потому что не выполняется.

Языки

Язык

Метод

Точность

Python

ast из стандартной библиотеки

Точный

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

Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    A
    quality
    C
    maintenance
    AI-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.
    4
    33

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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