record · diff · gate
A tool vanished from the contract. CI exits 1.
Snapshot an MCP server's schema and behavior, then fail CI when the next version moves. Fixture servers are in the repo, so it runs offline.
✓ fixtures in the repo✓ runs offline✓ no LLM anywhere
gate fail-on=risky
This build would be blocked.
6 findings in this diff
tool "archive_note" was removed — a client holding the old contract will fail
A real diff from the committed fixtures. Run this pair yourself — same engine, in your browser, offline.
the mechanism
How a diff gets a tier
snapgauge record writes a snapshot of a server's schema and observed behavior. snapgauge check records again and sorts every difference onto one of four rungs. The four rungs above are the clean@v1 → drift-breaking@v2 diff, read four ways.
risky is the rung most diff tools would call cosmetic: description and title text is the surface a model routes on, so a rewrite is treated as a behavior change. Full catalog (37 rules): /docs.
watch it run
Not a mockup.
Recorded against the deployed site at snapgauge.vercel.app/demo. It picks the clean@v1 → drift-breaking@v2 pair shown above, runs it, and shows the same tiered findings table and exit code.
Text alternative: the recording opens /demo, selects the drift-breaking@v2 fixture pair, presses Run, and shows the resulting findings table — 2 breaking and 1 risky findings, exit code 1. No audio.
not a replacement
Complementary to the official conformance suite
The official MCP conformance suite answers whether a server obeys the spec today. snapgauge does not re-implement it — it answers a different, narrower question.
Question
official suite
Does this server obey the spec, right now?
snapgauge
Did THIS server change vs. its own recorded contract — and how does it behave one client-version back?
Method
official suite
Scenario-based, wire-schema validated, run fresh every time.
snapgauge
Recorded snapshot diff (self-vs-self over time) + degradation profiles across client capability sets.
Output
official suite
Pass/fail against the 2026-07-28 revision.
snapgauge
Tiered findings (breaking/risky/compatible/cosmetic) with an exit code CI can gate on.
When it runs
official suite
Any time, against any server, no history required.
snapgauge
After the first `snapgauge record` — it needs a prior snapshot to compare against.
what CI reads
Exit codes
1 vs 3 is deliberate: different owner, different fix.
| code | meaning | who fixes it |
|---|---|---|
| 0 | Clean — no findings at/above the gate. | Nobody — nothing to do. |
| 1 | Drift at/above the gate (--fail-on, default risky). | The consumer: review the diff, then either --update the stored snapshot (drift was intentional) or fix/pin the server. |
| 2 | Probe/connection failure (unreachable, auth, timeout, malformed response). | The consumer's environment/config — check the target URL, credentials, and network reachability. |
| 3 | Compat/degradation violation — the server is wrong, not merely different. | The server's maintainer — it violates the 2026-07-28 revision's degradation contract. |
| 4 | Usage/config/snapshot-format error (incl. probe-spec mismatch: re-record). | The consumer — fix the CLI invocation or config, or re-run snapgauge record. |
| 5 | Internal error — a bug in snapgauge itself. | snapgauge's maintainer — please report it (SECURITY.md). |
one command
Install
npx snapgauge@1 checkthe shape of it
A sharp tool: one job, done deterministically. No dashboard, no accounts, no LLM anywhere in the product. Five-minute quickstart, the snapshot format, failure modes, and limitations are in the docs.