Chaos-MCP
Vind codewijzigingen die je bestaande tests niet detecteren.
Chaos (Χάος) betekent 'kloof' of 'afgrond' in het Grieks en is de naam van de oorspronkelijke leegte in de Theogonie van Hesiodus.
- TypeScript
- MCP
- StrykerJS
- cosmic-ray
- cargo-mutants
- Infection
GitHub (opent in een nieuw tabblad)README (opent in een nieuw tabblad)Changelog (opent in een nieuw tabblad)
Op deze paginaWat het doet
Wat het doet
Codecoverage meet welke regels worden uitgevoerd, maar niet welk gedrag de tests controleren. Als je bijvoorbeeld > vervangt door >= en de suite blijft slagen, detecteren de bestaande tests die wijziging niet.
Chaos-MCP brengt zulke wijzigingen systematisch aan. audit_code_resilience analyseert één bestand, triage_test_coverage rangschikt een bestandsboom op zwakke testdekking en estimate_audit schat vooraf het aantal mutanten en de looptijd. Elke overlevende mutant verwijst naar een regel en wijziging die de tests niet detecteren: een concreet startpunt voor controle en aanvullende tests.
Elke run draait in een sandbox zonder je werkruimte te wijzigen. Voordat een engine start, controleert Chaos-MCP of het opgeloste pad van het doelbestand binnen die sandbox ligt. Vier mutation-engines dekken vier ecosystemen: StrykerJS voor TypeScript en JavaScript, cosmic-ray voor Python, cargo-mutants voor Rust en Infection voor PHP, elk native of via een vastgepind container-image. Voor uitvoering in een container hoeft de engine-toolchain niet op de host geïnstalleerd te zijn.
Snel starten
Chaos-MCP staat nog niet op npm, dus installeer het vanaf de broncode.
git clone https://github.com/AraneaDev/Chaos-MCP.git
cd Chaos-MCP
npm install
npm run build
claude mcp add chaos-mcp -- node /absolute/path/to/Chaos-MCP/build/index.jsVoorbeelden
Deze twee calls zijn uitgevoerd op de broncode van Chaos-MCP.
Schat het aantal mutanten zonder mutation testing uit te voeren:
Call (estimate_audit):
{ "filePath": "src/utils/path-safety.ts" }Resultaat:
{
"target": "src/utils/path-safety.ts",
"language": "typescript",
"mutants": 36,
"fidelity": "approx",
"basis": "source heuristic: 31 constructs",
"note": "Approximate mutant count from a source-parse heuristic; the real audit may differ. Run audit_code_resilience for exact results."
}Een volledige audit van een klein bestand:
Call (audit_code_resilience):
{ "filePath": "src/utils/ignore-dirs.ts", "maxSurvivors": 5 }Resultaat:
{
"target": "src/utils/ignore-dirs.ts",
"mutationScore": "100.00%",
"summary": { "total": 8, "killed": 8, "survived": 0 },
"survivors": [],
"noCoverage": [],
"note": "No surviving mutants — the test suite caught every mutation.",
"runId": "f17fcb15"
}Mogelijkheden
| Tool | Wat het doet |
|---|---|
audit_code_resilience | Muteert één bestand en rapporteert per regel welke mutanten je tests wel en niet detecteren |
triage_test_coverage | Rangschikt een hele bestandsboom, zwakste eerst, met een optionele afbakening op de git-diff |
estimate_audit | Snelle schatting van het aantal mutanten en, optioneel, de looptijd, voorafgaand aan een volledige run |
| Taal | Engine | Installeren in het doelproject | Nauwkeurigheid van estimate_audit |
|---|---|---|---|
| TypeScript/JavaScript | StrykerJS | @stryker-mutator/core, plus @stryker-mutator/vitest-runner bij een vitest-project | approx |
| Python | cosmic-ray | pipx install cosmic-ray | approx |
| Rust | cargo-mutants | cargo install cargo-mutants | exact |
| PHP | Infection | composer require --dev infection/infection, met Xdebug of PCOV | approx |
Rust is als enige exact, omdat cargo-mutants --list opsomt welke mutanten het gaat genereren. De andere drie schatten op basis van een bronheuristiek. De audit kan minder Rust-mutanten tellen dan de schatting: mutanten die niet compileren tellen niet mee in de noemer en komen als incompetent in het rapport.
Elke audit draait desgewenst in een vastgepinde container in plaats van native op de host. Een runId uit een eerdere audit laat je precies die overlevende mutanten opnieuw verifiëren nadat je tests hebt aangevuld. Mutanten die logisch equivalent zijn aan het origineel kun je onderdrukken, waarna ze buiten de score blijven. minScore zet elke audit of triage om in een pass/fail-veld voor CI, zonder een fout te geven als de drempel niet wordt gehaald.
Configuratie
Chaos-MCP leest chaos-mcp.config.json uit de root van je werkruimte.
{
"defaultTimeoutMs": 300000,
"mutatorDenylist": ["StringLiteral"],
"concurrency": 4,
"defaultMaxFiles": 25,
"defaultMaxSurvivors": 10,
"defaultSeverityFloor": "medium",
"container": {
"mode": "auto",
"runtime": "docker",
"cpus": 2,
"memoryMb": 4096
}
}mutatorDenylist sluit mutatortypen globaal uit. defaultMaxSurvivors en defaultSeverityFloor begrenzen hoeveel overlevende mutanten een rapport toont en vanaf welke ernst ze meetellen. container.mode: "auto" gebruikt een container zodra de geconfigureerde runtime bereikbaar is, en valt anders terug op native uitvoering.