QA Radar
About
MCP server that tells your agent which files to test first — git churn, coverage gaps, and test mapping as per-file risk scores.
Details
- Author
- muratkus
- Categories
- Developer Tools, Other
Jump to
Install as Claude Code Plugin (Recommended)
The fastest path — one command wires up the MCP server and installs 4 slash commands. No manual config editing.
Step 0 — install uv(if you don't have it):
curl -LsSf https://astral.sh/uv/install.sh | sh # or: pip install uv
uv launches qaradar on demand from PyPI — you don't need topip install qaradarseparately.
/plugin marketplace add Muratkus/qaradar
/plugin install qaradar@qaradar-marketplace
What you get:6 MCP tools auto-configured + 5 slash commands:
Example:after merging a big feature branch, run/qaradar:qa-checkto see what regressed. Before opening a PR, run/qaradar:qa-pr-riskto see what you need to test first.
Alternative: manual MCP config(if you prefer not to use the plugin):
Add to your Claude Code MCP config (~/.claude/mcp.jsonfor user-level, or.mcp.jsonin the project root for project-level):
{ "mcpServers": { "qaradar": { "command": "uvx", "args": ["qaradar", "serve"] } } }
"What should I test first in this repo?" "Which files are the riskiest right now?" "Show me the highest-churn files from the last month." "Which source files have no tests at all?" "Which of my changed files are risky?" ← diff-aware
Give your AI coding agent the quality brain it doesn't have to grow from scratch.
QA Radar analyzes your codebase and produces a structured quality health report — combining git churn, test coverage, and test-to-source mapping into risk-scored modules. It works as anMCP serverfor AI coding agents (Claude Code, Cursor, Windsurf) and as astandalone CLIfor humans and CI pipelines.
Built for developers who want their AI agent to writetargetedtests, not generic ones.
/plugin marketplace add Muratkus/qaradar /plugin install qaradar@qaradar-marketplace
Then ask your agent:"What should I test first?"
QA Radar answers the question every new team member (and every AI agent) asks:"What should I test first?"
It scans three signals and combines them into a per-file risk score:
The output is a ranked list of modules by risk level (critical → low), with human-readable reasons for each rating.
A capable agent with bash access could rungit log --numstat, parsecoverage.xml, and glob for test files. So why an MCP server?
Install as Claude Code Plugin (Recommended)
The fastest path — one command wires up the MCP server and installs 4 slash commands. No manual config editing.
Step 0 — install uv(if you don't have it):
curl -LsSf https://astral.sh/uv/install.sh | sh # or: pip install uv
uv launches qaradar on demand from PyPI — you don't need topip install qaradarseparately.
/plugin marketplace add Muratkus/qaradar
/plugin install qaradar@qaradar-marketplace
What you get:6 MCP tools auto-configured + 5 slash commands:
Example:after merging a big feature branch, run/qaradar:qa-checkto see what regressed. Before opening a PR, run/qaradar:qa-pr-riskto see what you need to test first.
Alternative: manual MCP config(if you prefer not to use the plugin):
Add to your Claude Code MCP config (~/.claude/mcp.jsonfor user-level, or.mcp.jsonin the project root for project-level):
{ "mcpServers": { "qaradar": { "command": "uvx", "args": ["qaradar", "serve"] } } }
"What should I test first in this repo?" "Which files are the riskiest right now?" "Show me the highest-churn files from the last month." "Which source files have no tests at all?" "Which of my changed files are risky?" ← diff-aware
Diff-aware: what's risky in this PR?
qaradar_pr_riskscores only the files changed between a base ref and HEAD — not the whole repo. It keeps risk scores calibrated by using full-repo normalization, so a file with 2 commits in a PR isn't falsely flagged CRITICAL just because it's the only changed file the agent knows about.
"Which of my changed files are risky?" "Do any of the files I changed lack tests?" "What should I review before opening this PR?"
# Diff against main — shows only changed files qaradar analyze . --base main # Diff against a specific ref qaradar analyze . --base origin/main --days 60
qaradar_pr_riskauto-detects the base branch fromGITHUB_BASE_REF(set automatically in GitHub Actions) or falls back tomain/master. Passbase_refexplicitly to override.
# Full health check on current directory qaradar analyze # Analyze a specific repo with 180 days of history qaradar analyze /path/to/repo --days 180 # Output as JSON (for piping to other tools) qaradar analyze --json-output # Show top 10 risky modules only qaradar analyze --top 10 # Diff-aware: score only files changed since main qaradar analyze . --base main
git clone https://github.com/Muratkus/qaradar.git cd qaradar pip install -e .
All language support lives in one registry —qaradar/analyzers/languages.py— so adding a language is a single entry (extensions, test-name convention, test-function counter), consumed by both churn and test-mapping.
Java, Ruby, Rust — test detection via naming conventions. Coverage via Cobertura XML or LCOV if emitted.
Coverage parsing is format-driven, so it spans more ecosystems than test-mapping detection, which is language-specific.
Monorepos:Istanbul/Jest reports are auto-discovered underpackages//coverageandapps//coverage, and absolute/package-relative coverage paths are normalized to repo-relative so they join correctly against churn and test-mapping signals.
╭──────────────── QA Radar Health Report ─────────────────╮ │ Repository: /home/user/my-service │ │ Source files: 47 Test files: 23 Ratio: 0.49 │ │ Avg coverage: 62.3% Tested: 31 Untested: 16 │ ╰─────────────────────────────────────────────────────────╯ CRITICAL risk modules: 3 HIGH risk modules: 7 ┌─────────────────────────────────────────────────────────┐ │ Risky Modules │ ├──────────────────────┬──────────┬───────┬───────────────┤ │ File │ Risk │ Score │ Reasons │ ├──────────────────────┼──────────┼───────┼───────────────┤ │ src/payments/core.py │ CRITICAL │ 0.87 │ High churn: │ │ │ │ │ 34 commits; │ │ │ │ │ No tests │ │ src/auth/tokens.py │ CRITICAL │ 0.82 │ Low coverage: │ │ │ │ │ 12.3%; Active │ │ │ │ │ recently │ └──────────────────────┴──────────┴───────┴───────────────┘
By default QA Radar is stateless. Opt in to persistence to track a repo across runs and drive incremental re-analysis (daily/weekly, or after N diffs, or after an agent finishes work).
qaradar analyze . --save # record a snapshot to .qaradar/state.json (gitignore it) qaradar should-run . # exit 0 if a re-run is warranted, 1 if not — prints JSON qaradar status . # last run, commits/days since, current decision + risk delta
should-runis agate, not a scheduler — wire it into whatever you already use:
# cron / CI / git hook: only do expensive work when criteria are met qaradar should-run . && qaradar analyze . --save
It reportsscope: "full"(interval elapsed) orscope: "diff"(enough files changed), so an agent calling theqaradar_should_runMCP tool knows whether to follow up withqaradar_healthcheckorqaradar_pr_risk. State is one.qaradar/state.jsonper repo, so a "collection of repos" is just a loop over repos in your own infra.
[schedule] interval_days = 7 # re-run the full healthcheck at least weekly min_changed_files = 25 # ...or sooner, once this many files have changed
--savealso reports adeltavs the previous run — which files newly became risky, which got worse, which improved or resolved.
- v0.1.2— Claude Code plugin + slash commands
- v0.2.0— Config file (qaradar.toml), Tier 2 language validation, hardening
- v0.3.0— Diff-aware mode:qaradar_pr_risk+--baseCLI flag
- v0.4.0— Mobile/monorepo language coverage (Swift, Kotlin, Obj-C, Dart, React Native, Jest); run persistence + re-run criteria (should-run,--save,qaradar_should_run)
- v0.5.0— Flaky test detection from CI history (JUnit XML parsing)
- The bottleneck has moved.AI makes writing tests easy. Knowingwhichtests matter is the hard part.
- Quality is a landscape, not a number.A single coverage percentage hides everything. Risk is per-module, per-signal, per-timeframe.
- Agents need context.An AI coding assistant that doesn't know your repo's fragile areas will write generic tests. Give it the quality landscape and it writes targeted ones.
This is a web browser that enables your coding agent, such as Claude Code, to visit websites on your behalf and assist you in identifying bugs or creating UI test cases.
Prevents regression by providing Blast Radius data to AI based on your git history
An MCP server for Nextflow development and testing, which requires a local clone of the Nextflow Git repository.
Bring agent evaluations, observability, and synthetic test set generation directly into your IDE for free with Galileo's new MCP server
Browser automation via MCP for Chrome and Firefox
Bring the full power of BrowserStack’s Test Platform to your AI tools, making testing faster and easier for every developer and tester on your team.
Official Chrome DevTools MCP server for controlling and inspecting a live Chrome browser from coding agents such as Gemini, Claude, Cursor, and Copilot.
Run code in secure sandboxes hosted by E2B
An MCP server for interacting with the Postman API, requiring an API key.
Proxyman MCP allows AI to inspect HTTP traffic, create debugging rules, and control Proxyman - all through natural language conversations.
Agents make claims. Reelier writes receipts — record an agent's tool-call workflow once, replay it deterministically at 0 tokens, and diff runs to catch drift.
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.





