Labsco
MCP SERVER

QA Radar

by MuratKus

Tell an agent which files to test first — git churn, coverage gaps and test mapping combined into a risk score.

Automated Testing & QA
Summary
An agent could compute this itself — the argument is that it shouldn't.

The README makes the case openly: a capable agent with bash could run git log, parse coverage.xml and glob for test files, but that is several sequential calls, hundreds of KB of context, and a weighted score improvised each session. Doing it in code makes the answer reproducible and cheap. The diff-aware scoring is the sharpest piece — it normalises against the full repository so a file with two commits in a PR is not flagged critical just because it is the only file the agent can see.

What it is

A Python analyser that reads three signals out of a repository — how often a file changes, how well it is covered, and whether it has a corresponding test file — and combines them into a per-file risk score with readable reasons. It runs as an MCP server for coding agents and as a CLI for humans and CI. The point is that the answer is computed the same way every time, rather than reasoned out from raw `git log` in the model's context.

What you get
  • `qaradar_healthcheck` for a full quality overview of a repository
  • `qaradar_risky_modules` ranks files by risk with the reasons behind each rating
  • `qaradar_churn` finds the hotspots; `qaradar_coverage_gaps` finds the blind spots; `qaradar_untested_files` finds source files with no test at all
  • `qaradar_pr_risk` scores only the files changed between a base ref and HEAD, but normalises against the whole repo so a small PR does not get falsely flagged critical
  • `qaradar_should_run` answers whether a re-analysis is warranted and whether it should cover the diff or the full repo
  • Coverage formats normalised across coverage.py JSON, Istanbul/Jest JSON, Cobertura XML, LCOV and Go cover profiles
  • Test-naming conventions encoded per language for Python, JavaScript/TypeScript, Go, Swift, Kotlin, Dart and Objective-C, with best-effort support for Java, Ruby and Rust
  • Five slash commands when installed as a Claude Code plugin: `/qaradar:qa-check`, `/qaradar:qa-risky`, `/qaradar:qa-untested`, `/qaradar:qa-plan`, `/qaradar:qa-pr-risk`
Requirements

No account and no key — it reads the repository you point it at. `uvx qaradar serve` runs it without installing; `pip install qaradar` installs it. Package `qaradar`, version 0.4.0, stdio transport. In Claude Code the one-step path is `/plugin marketplace add Muratkus/qaradar` then `/plugin install qaradar@qaradar-marketplace`, which wires the server and the slash commands together. Coverage signals need an existing coverage report in the repo; churn and test mapping work without one. Persistence is opt-in via `--save`, writing to `.qaradar/state.json`.

Setup effort

One command — uvx qaradar serve