Skip to main content
Glama
sudo-ai-git

io.github.sudo-ai-git/mcp-benchmark-hygiene

mcp-benchmark-hygiene

mcp-name: io.github.sudo-ai-git/mcp-benchmark-hygiene

Детерминированное обнаружение утечки конфигурации pytest, которая незаметно искажает оценку агентных бенчмарков / функций.

Без LLM. Без сети. Один вопрос, на который даётся надёжный ответ:

Если я запущу python -m pytest <tests> в этом рабочем каталоге, унаследует ли он хост-шлюз покрытия/прерывания, который ошибочно оценивает проходящий код как непройденный?


Какую ошибку это выявляет

Автоматизированные оценочные обвязки агентов часто запускают python -m pytest <hidden_tests> внутри рабочего каталога цели. Если этот каталог вложен в корень репозитория с pytest addopts — например:

[tool.pytest.ini_options]
addopts = "--cov=harness --cov-report=term-missing:skip-covered --cov-fail-under=80"

...pytest определяет pyproject.toml хоста как свой rootdir, наследует addopts и падает на собственном шлюзе покрытия хоста (harness собран на 0% → ниже порога → ненулевой код выхода). Затем обвязка фиксирует функционально ПРОХОДЯЩИЙ код как НЕПРОЙДЕННЫЙ.

Это ровно та ошибка, что описана в sudo-ai-git/vulcanbench-findings: декларативный оценщик VulcanBench ошибочно оценивал каждую функциональную задачу как 0.0 по этой причине; с -o addopts=, нейтрализующим утечку, те же рабочие каталоги проходили 10/10.

Related MCP server: forge-repo-mcp

Исправление, которое он вам даёт

Когда рабочий каталог помечен как CORRUPTED, инструмент возвращает исправленную команду:

python -m pytest -o addopts= <tests>

-o addopts= снимает унаследованные шлюзы покрытия/прерывания. (Либо запускайте оценщик из-за пределов корня репозитория.)

Инструменты

tool

purpose

inspect_workspace(path)

полный анализ: цепочка ini, действующие addopts, вердикт CLEAN/CORRUPTED/UNKNOWN + исправленная команда

check_addopts(path)

простой булев результат: corrupted + причины

summarize(analysis)

однострочная практическая сводная строка

Детерминированное ядро (без зависимостей)

Анализ проходит по каталогу рабочей области вплоть до корня файловой системы, читая pyproject.toml / pytest.ini / tox.ini / setup.cfg в порядке первого найденного у pytest, и извлекает addopts. Флаги:

  • шлюзы покрытия — --cov, --cov-fail-under, --cov-report, --cov-config

  • шлюзы прерывания/строгости — --maxfail, -x, --strict, --strict-markers, --pdb, --ff

Помечаются только шлюзы, меняющие коды выхода / прерывающие оценку. Безвредный addopts сообщается как CLEAN с точной строкой.

Установка и запуск (MCP stdio)

Одна команда (рекомендуется) — установка из репозитория, токен PyPI не нужен:

uv tool install git+https://github.com/sudo-ai-git/mcp-benchmark-hygiene
mcp-benchmark-hygiene                        # run stdio server
mcp-benchmark-hygiene --http --port 8137     # or Streamable HTTP

Или через pipx: pipx install git+https://github.com/sudo-ai-git/mcp-benchmark-hygiene

Напрямую из исходников (запасной вариант):

{ "mcpServers": {
    "benchmark-hygiene": { "command": "python3", "args": ["/abs/path/to/mcp_server.py"] }
}}

Требуется официальный python-пакет mcp (pip install mcp). Детерминированное ядро (inspect_workspace / check_addopts / summarize) импортируется и работает с нулевым числом зависимостей — пакет mcp нужен только для stdio-сервера.

Streamable HTTP (удалённый/публикуемый через Smithery)

python3 mcp_server.py --http --port 8137   # serves on http://<host>:8137/mcp/

Запустите с --http, чтобы обслуживать через Streamable HTTP (удалённую MCP-конечную точку) вместо stdio. Это тот транспорт, который smithery mcp publish <url> ожидает для публикации по URL — так что как только появится сервисный токен Smithery, сервер разворачивается как есть.

Пример

inspect_workspace(path="/home/runner/vulcanbench/workspace/task-1")
→ {
    "ok": true,
    "workspace": "/home/runner/vulcanbench/workspace/task-1",
    "ini_chain": [{"file": "/home/runner/vulcanbench/pyproject.toml",
                   "addopts": "--cov=harness ... --cov-fail-under=80"}],
    "effective_addopts": "--cov=harness ... --cov-fail-under=80",
    "will_corrupt_grading": true,
    "verdict": "CORRUPTED",
    "fixed_command": ["python3", "-m", "pytest", "-o", "addopts=", "<tests>"],
    "reasons": ["coverage gate(s) present: ['--cov', '--cov-fail-under']"]
}

Проверка

  • python3 test_detector.py — 5/5 проверок детектирования ядра (корневой шлюз, вложенное наследование, чистый, шлюз прерывания, pyproject без pytest)

  • python3 test_e2e.py — гоняет реальный MCP stdio-транспорт (initialize → tools/call) и проверяет, что CORRUPTED / CLEAN проходят по проводу

Часть семейства

Это один из трёх детерминированных, без LLM MCP-серверов доверия к агентам от sudo-ai-git:

  • mcp-skill-sec — предустановочный аудит навыков/безопасности

  • mcp-verify-claim — отчётность по утверждениям с проверкой доказательств и честной градацией

  • mcp-benchmark-hygiene — обнаружение утечки конфигурации pytest / честности оценки (этот репозиторий)

Лицензия и происхождение

MIT. Создано независимо на основе задокументированной находки VulcanBench #79; не подразумевается одобрение со стороны morganlinton/VulcanBench или связь с ними.

Заказать индивидуальную интеграцию

Нужно подключить это к вашей внутренней системе (аутентификация, логирование, прохождение сканера безопасности, хостинг)? Откройте запрос на индивидуальную сборку. Эталонные MIT-активы можно свободно использовать в любом случае.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to run and analyze pytest tests for desktop applications through interactive commands. Supports test execution, filtering, result analysis, and debugging for comprehensive test automation workflows.
    2
    -
  • A
    license
    A
    quality
    B
    maintenance
    Provides structured, sandboxed test and lint feedback for coding agents, returning compact typed verdicts with failure fingerprints instead of raw runner output. It enables impact-selected test execution in isolated containers, distinguishing pre-existing failures from regressions.
    4
    Apache 2.0