Test Coverage MCP
MCP-сервер, который даёт AI-агентам (кодинг, тестирование) возможность видеть и отслеживать покрытие кода тестами. Работает с LCOV-файлами любого языка программирования.
Проблема
- Слепота к покрытию: агенты не видят, улучшили или ухудшили они покрытие.
- Трата токенов: разбор больших LCOV-файлов (до 10+ МБ) сжигает тысячи токенов.
- Ненадёжные скрипты: самодельные парсеры часто ошибаются.
Решение
- Осведомлённость: агент может запросить покрытие в любой момент одним вызовом инструмента.
- Эффективность: ответ занимает <100 токенов.
- Точность: промышленный парсер LCOV.
- Базовые линии: можно зафиксировать текущее покрытие и отслеживать изменения в сессии без хранения состояния в памяти.
Установка
npm install -g test-coverage-mcp
Настройка
Добавьте сервер в конфигурацию вашего AI-инструмента.
Claude Desktop (Claude Code)
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"test-coverage": {
"command": "npx",
"args": ["-y", "test-coverage-mcp"]
}
}
}
После обновления перезапустите Claude Desktop.
Cursor IDE
Создайте или отредактируйте .cursor/mcp.json в корне проекта:
{
"mcpServers": {
"test-coverage": {
"command": "npx",
"args": ["-y", "test-coverage-mcp"]
}
}
}
GitHub Copilot (VS Code)
Создайте или отредактируйте .vscode/mcp.json в рабочей области:
{
"servers": {
"test-coverage": {
"command": "npx",
"args": ["-y", "test-coverage-mcp"]
}
}
}
Требуется VS Code 1.99+ или Visual Studio 17.14+. Корпоративным пользователям нужно включить политику "MCP servers in Copilot".
Windsurf (Codeium IDE)
macOS: ~/.codeium/windsurf/mcp_config.json
Windows: %APPDATA%\Codeium\Windsurf\mcp_config.json
Linux: ~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"test-coverage": {
"command": "npx",
"args": ["-y", "test-coverage-mcp"]
}
}
}
Или через GUI: Settings → Advanced Settings → Cascade → Add Server.
Доступные инструменты
coverage_summary
Общее покрытие проекта из LCOV-файла.
Вход: { lcovPath?: string } (по умолчанию "./coverage/lcov.info")
Выход: { linesCoveragePercentage: number, branchesCoveragePercentage: number }
Пример:
coverage_summary({ lcovPath: "./coverage/lcov.info" })
// { linesCoveragePercentage: 87.5, branchesCoveragePercentage: 82.1 }
coverage_file_summary
Покрытие для конкретного файла.
Вход: { lcovPath?: string, filePath: string }
Выход: { path: string, linesCoveragePercentage: number, branchesCoveragePercentage: number }
Пример:
coverage_file_summary({
lcovPath: "./coverage/lcov.info",
filePath: "src/utils/parser.ts"
})
// { path: "src/utils/parser.ts", linesCoveragePercentage: 92.0, branchesCoveragePercentage: 88.5 }
start_recording
Зафиксировать текущее покрытие как базовую линию для последующего сравнения.
Вход: { lcovPath: string }
Выход: "Recording started"
Пример:
start_recording({ lcovPath: "./coverage/lcov.info" })
// "Recording started"
get_diff_since_start
Сравнить текущее покрытие с записанной базовой линией.
Вход: { lcovPath: string }
Выход: { linesPercentageImpact: number, branchesPercentageImpact: number } (положительное — улучшение, отрицательное — регресс)
Пример:
get_diff_since_start({ lcovPath: "./coverage/lcov.info" })
// { linesPercentageImpact: +2.3, branchesPercentageImpact: +1.8 }
Примеры использования
Проверка покрытия перед началом работы
Агент запрашивает coverage_summary, видит текущие 87.5% строк и 82.1% ветвей, и ставит цель не ухудшить их.
Отслеживание влияния во время разработки
Агент вызывает start_recording, пишет код и тесты, затем get_diff_since_start — и видит, что покрытие выросло на 2.3% по строкам и 1.8% по ветвям.
Проверка конкретного файла
После модификации src/auth/validator.ts агент вызывает coverage_file_summary и получает 95% строк и 92% ветвей.
Как это работает
- Парсит LCOV-файлы промышленным парсером, поддерживающим все вариации формата.
- Вычисляет проценты покрытия для проекта или отдельных файлов.
- Хранит базовые линии во временной директории для отслеживания в рамках сессии.
- Возвращает компактные JSON-ответы, экономящие токены.
Поддержка форматов LCOV
- Файлы с секциями сводок (
SF:, end_of_record).
- Файлы с построчными данными (
DA:).
- Файлы с данными о покрытии ветвей (
BRDA:, BRF:, BRH:).
- Смешанные форматы в одном файле.
Устранение неполадок
- "LCOV file not found": убедитесь, что тесты запущены с покрытием, и путь к LCOV-файлу корректен (по умолчанию
./coverage/lcov.info).
- "No coverage data found for file": проверьте, что путь к файлу в точности совпадает с тем, что указан в LCOV-файле (некоторые фреймворки используют абсолютные пути, другие — относительные).
- "No baseline recording found": сначала вызовите
start_recording. Базовые линии хранятся во временном хранилище и очищаются при перезапуске системы.
Разработка
# Установка зависимостей
npm install
# Сборка
npm run build
# Запуск тестов (с покрытием!)
npm test
# Линтер
npm run lint
# Тестирование с MCP inspector
npm run inspect
Лицензия
MIT © Yoni Goldberg
Ссылки
Комментарии
Комментариев пока нет. Будьте первым.