Chaos-MCP
Breek je code met opzet, en ontdek wat je tests nooit opmerkten.
Chaos (Χάος) is in de Griekse kosmogonie het allereerste wat bestond, de gapende leegte die Hesiodus in de Theogonie voor alles laat komen. Orde ontstond eruit, niet andersom. De naam betekent 'kloof' of 'afgrond', en dat is precies waar deze tool naar zoekt.
- 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)
Wat het doet
Dekking zegt dat een regel is uitgevoerd, niet dat iemand heeft gecontroleerd wat die regel deed. Verander een > in een >=, draai de suite, en als die nog steeds slaagt, dan heeft niets in die suite die vergelijking ooit getoetst, hoe groen het rapport ook was.
Chaos-MCP doet dat met opzet, en systematisch. Drie tools: audit_code_resilience (één bestand auditen), triage_test_coverage (een hele boom zwakste-eerst rangschikken) en estimate_audit (een goedkope schatting vooraf van het aantal mutanten en de looptijd). Elke overlevende mutant is een concrete regel met een concrete wijziging die je suite liet passeren, en dat is een veel scherpere aanwijzing dan een percentage.
Elke run gebeurt in een sandbox: je echte werkruimte wordt nooit aangeraakt, en er wordt gecontroleerd dat het echte pad van het doelbestand binnen die sandbox ligt voordat een engine draait. 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, zodat de host de toolchain niet hoeft te installeren.
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
Twee aanroepen, allebei echt uitgevoerd op de eigen broncode van Chaos-MCP.
Een snelle schatting vooraf, zonder dat er een mutatie draait:
Aanroep (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:
Aanroep (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 doodden |
triage_test_coverage | Rangschikt een hele boom zwakste-eerst, met optionele git-diff-scoping |
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 zelf scoort vervolgens minder Rust-mutanten 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 herverifië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 ooit zelf af te breken.
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. container.mode: "auto" gebruikt een container zodra de geconfigureerde runtime bereikbaar is, en valt anders terug op native uitvoering.