Skip to content

Coding agents that remember your outages.

Agents write more of the code every month, and they never saw last quarter’s incident. Aftershock gives them that memory before they commit, and its checks catch them if they forget.

Five tools over MCP

A stateless MCP server over Streamable HTTP. Use a read-only token; it can look things up but never start anything.

check_change
Pass the files you changed. Get the past incidents those files caused, the behaviour to keep, and the test that will run.
ask
Ask about past incidents in plain language. Answers cite incident keys and nothing else.
list_lessons
Lessons from production as markdown, for one path or the whole repository.
get_incident, list_incidents
What happened, the fix, its proven tests and where it began.
run_check
Re-run a pull request’s check. Offered only to tokens with write access.

Set it up in your editor

Turn on the MCP server in Settings → Labs, create a read-only token in Settings → API tokens, then add it to your tool.

Claude Code

terminal
claude mcp add --transport http aftershock https://aftershock-mk.vercel.app/api/mcp \  --header "Authorization: Bearer as_live_..."

Cursor

.cursor/mcp.json
{ "mcpServers": { "aftershock": {  "url": "https://aftershock-mk.vercel.app/api/mcp",  "headers": { "Authorization": "Bearer as_live_..." } } } }

VS Code and Copilot

.vscode/mcp.json
{ "servers": { "aftershock": { "type": "http",  "url": "https://aftershock-mk.vercel.app/api/mcp",  "headers": { "Authorization": "Bearer ${input:aftershock-token}" } } },  "inputs": [{ "id": "aftershock-token", "type": "promptString", "password": true }] }

Lessons in AGENTS.md

Codex, Cursor, Copilot and Claude Code read AGENTS.md before they start. One click opens a pull request that writes your proven lessons into a marked section; the rest of the file stays yours.

AGENTS.md
<!-- aftershock:lessons:start -->## Lessons from production (Aftershock)### INC-12 · app/services/payment_service.pyPayment retry charged a customer twice.Expected: one order, one charge; the retry is rejected with 400Test: tests/aftershock/test_inc_12_payment_retry.py<!-- aftershock:lessons:end -->