Sumo QA — a senior-QA-shaped MCP server for pre-coding QA planning, TDD scaffolding, mutation-testing follow-up, code review, and test-data discovery.
Project description
sumo-qa MCP
A senior-QA MCP server + skills library that delivers ISTQB-grade testing discipline to AI coding agents across Claude Code, Cursor, Codex, OpenCode, JetBrains AI Assistant + Junie, and VS Code + GitHub Copilot. The discipline lives in skill files the host LLM follows literally; MCP tools provide canonical knowledge catalogues; a SessionStart hook auto-injects the using-sumo-qa router so the agent reliably runs the workflow without you having to remember to invoke it.
🚀 New here? 5-minute demo →
Install with one line, run one prompt on your real repo, see the senior-QA workflow happen on actual code. No staged data, no scripted output.
Why sumo-qa?
Most AI coding assistants approach QA the way a junior engineer would: "add unit tests, consider edge cases, maybe test performance too." That's a checklist, not testing. sumo-qa makes the AI work like a senior QA — risks named against specific lines, design techniques (boundary-value, decision-table, property-based, mutation) picked from a loaded ISTQB-grounded catalogue, test suites run fresh in this turn before any "safe to merge" claim.
The discipline is enforced by 13 skill files the host LLM follows literally — each one with an Iron Law (TDD's red phase before any production code; mutation-strengthening keeps production code locked; no plan ships without measurable entry AND exit criteria) and a HARD-GATE callout the LLM can't talk itself past. A SessionStart hook auto-injects the entry router on every conversation, so the workflow kicks in without you having to remember to invoke it.
Read DEMO.md for the 5-minute install-and-run-this-prompt walkthrough.
Install
One-line install (PyPI)
pip install sumo-qa
# or: uv tool install sumo-qa
After install, restart your MCP host (Claude Code / Cursor / Codex / OpenCode / JetBrains AI Assistant / VS Code + Copilot) so it picks up the new MCP server.
Claude Code plugin
/plugin marketplace add sumithr/sumo-qa
/plugin install sumo-qa@sumo-qa-dev
Then uv tool install sumo-qa (or pip install sumo-qa) so the MCP server binary is on PATH. The skills come from the plugin; the MCP tools come from the binary.
Multi-host batch install (JetBrains + VS Code + everywhere)
python3 install.py
Configures every supported host detected on this machine. Per-host flags + troubleshooting in docs/INSTALL.md.
From a git URL (latest main)
uv tool install --from git+https://github.com/sumithr/sumo-qa.git sumo-qa
What you get
| Layer | What it is |
|---|---|
13 skills (skills/*/SKILL.md) |
Iron-Law-enforced procedures the host LLM follows. Cover deciding approach, preparing for work, scaffolding TDD, reviewing diffs, strengthening tests, finding test data, answering testing questions, repo-wide strategising — plus planning + subagent execution + finishing chain (planning → dispatch parallel subagents → capture evidence + PR-ready summary). |
| 24 MCP entry points | 13 skill tools + 7 knowledge loaders + 4 test-data tools. Thin file IO; no inference. |
5 knowledge catalogues (knowledge/*.md) |
4 authoritative catalogues (classifications, approaches, principles, techniques) — the LLM picks from these, not from training-data recall. Plus 1 category-fit primer (specialty_tools) where the LLM picks tool brands from its training knowledge and the file confirms the category fits. Editable as plain markdown. |
Host support
Each host surfaces the same skills and tools differently — that's a host-API difference, not a sumo-qa choice. All routes call the same MCP server and read the same SKILL.md content.
| Host | Slash invocation | Setup |
|---|---|---|
| Claude Code | /qa-deciding-approach (hyphens) |
Native plugin: /plugin marketplace add sumithr/sumo-qa then /plugin install sumo-qa@sumo-qa-dev. Or install.py --claude-code. |
| Cursor | Natural language; Cursor picks skills by description | Native plugin: /add-plugin sumo-qa |
| Codex | Natural language; Codex picks skills by description | Codex plugin marketplace (search "Sumo QA") |
| OpenCode | skill tool (use skill tool to load sumo-qa/...) |
Add "sumo-qa@git+..." to opencode.json plugin array, restart |
| JetBrains AI Assistant | /qa_deciding_approach (underscores) |
One-time Settings → Tools → AI Assistant → Model Context Protocol → Add server with absolute binary path. install.py --jetbrains prints the fields to paste. |
| JetBrains Junie | Natural language; Junie picks tools by description | Drop the JSON install.py prints into ~/.junie/mcp/sumo-qa.json (global) or <repo>/.junie/mcp/ (per-project) |
| VS Code + Copilot (Agent mode, Claude Sonnet 4.5 or equivalent) | Natural language; Copilot picks tools by description | install.py --vscode --workspace <repo> writes <repo>/.vscode/mcp.json |
In Claude Code, MCP tools are NOT slash-invocable directly — use natural language (e.g. "load the QA classifications") and the AI picks the right tool. In JetBrains AI Assistant, every tool IS slash-invocable. Both paths work; both end up calling the same skill body.
Quick test in any host: ask in chat "load the QA classifications". Should return 10 names: api_contract_change, business_logic_change, security_change, performance_change, frontend_change, infrastructure_change, test_change, docs_change, config_change, data_migration. If yes, you're wired correctly.
See it in action
Ten polished worked examples showing what sumo-qa actually looks like in conversation — diff reviews refusing to declare safe-to-merge, TDD cycles with the red output surfaced verbatim, mutation survivors walked one-at-a-time, formal test plans gated on measurable entry/exit criteria, and the surprising one where it correctly says "no tests needed" and stops:
- tests/scenarios/worked-examples/ — start with 02 — review-my-changes for the strongest demo opener.
- tests/scenarios/SCENARIOS.md — the underlying scenario specs (user prompt → expected interaction shape → anti-patterns the skill prevents).
License
Licensed under the Apache License, Version 2.0. See NOTICE for attribution requirements that apply to forks and redistributors.
Docs
- AGENTS.md — AI-agent bootstrap and per-host setup
- docs/ARCHITECTURE.md — three layers, host delivery, knowledge authority
- docs/SKILLS.md — the 13 skills with their Iron Laws
- docs/TOOLS.md — the 24 MCP entry points
- docs/INSTALL.md — per-host install detail, schema differences, troubleshooting
- docs/CONFIGURATION.md — env vars
- docs/DEVELOPMENT.md — local dev
- docs/TEST-DATA.md — known-good test-data catalogue
- docs/superpowers/ — design spec, implementation plans, iteration history
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sumo_qa-0.1.0.tar.gz.
File metadata
- Download URL: sumo_qa-0.1.0.tar.gz
- Upload date:
- Size: 359.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6ebe26b4aed7b34c1b37db2da4636524d837f08d4f5ea703729edeef39f1c677
|
|
| MD5 |
4c302238e80da8c930666ee72110a146
|
|
| BLAKE2b-256 |
a4b7ab6329688cffdff20165e192f687ec4d0c9ba14e6fe2f42fd47672db2bf6
|
Provenance
The following attestation bundles were made for sumo_qa-0.1.0.tar.gz:
Publisher:
release.yml on sumithr/sumo-qa
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sumo_qa-0.1.0.tar.gz -
Subject digest:
6ebe26b4aed7b34c1b37db2da4636524d837f08d4f5ea703729edeef39f1c677 - Sigstore transparency entry: 1520586052
- Sigstore integration time:
-
Permalink:
sumithr/sumo-qa@3c4e50b912b1d9602058f0612af21388637e7b73 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/sumithr
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3c4e50b912b1d9602058f0612af21388637e7b73 -
Trigger Event:
push
-
Statement type:
File details
Details for the file sumo_qa-0.1.0-py3-none-any.whl.
File metadata
- Download URL: sumo_qa-0.1.0-py3-none-any.whl
- Upload date:
- Size: 102.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eac64eb53dd5567ee67576e369aca54a9b59c232e8aefe0128f1ca3a36192d7c
|
|
| MD5 |
0a602f1eee0279a433aded51053f72e2
|
|
| BLAKE2b-256 |
69df4e20f673e6685a37c7d1e35ce9f271da38ce853aaed703cacfc833ec073c
|
Provenance
The following attestation bundles were made for sumo_qa-0.1.0-py3-none-any.whl:
Publisher:
release.yml on sumithr/sumo-qa
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sumo_qa-0.1.0-py3-none-any.whl -
Subject digest:
eac64eb53dd5567ee67576e369aca54a9b59c232e8aefe0128f1ca3a36192d7c - Sigstore transparency entry: 1520586088
- Sigstore integration time:
-
Permalink:
sumithr/sumo-qa@3c4e50b912b1d9602058f0612af21388637e7b73 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/sumithr
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3c4e50b912b1d9602058f0612af21388637e7b73 -
Trigger Event:
push
-
Statement type: