MCP schema diff

A raw JSON diff of two tool schemas tells you bytes changed. A contract diff tells you what it means for a consumer. Zevruna's open-source differ (@zevruna/diff, MIT) canonicalizes both schemas, sorted keys, volatile fields stripped, and classifies every structural change from the consumer's perspective.

Renames are detected as renames: a removed field whose schema hash matches an added field's is reported as `customer_id → contact_id`, not as an unrelated removal and addition. That single distinction is the difference between a five-second fix and an hour of archaeology.

Try it

The instant check on the homepage diffs any public server against its previous snapshot. Locally: `zevruna diff before.json after.json` prints the classified redline in your terminal and exits 1 on breaking changes, so it drops straight into scripts and CI.

Descriptions are part of the schema

For REST APIs, doc changes are cosmetic. For MCP, the description text steers which tool the model selects and how it constructs arguments. Zevruna computes a word-level delta and flags rewrites above threshold as risky, the only differ that treats model-facing text as contract surface.

Canonicalization is most of the trick

Before anything is compared, both contracts are rewritten into one canonical form: keys sorted, volatile fields stripped. Two servers advertising the same contract then produce the same hash regardless of how either serialized it, and a re-ordered JSON object stops being reported as a change.

Without that step a differ generates noise on every poll and gets muted within a week, which is the real reason schema diffing has a reputation for being useless.

Severity is a consumer question

The same diff is fatal to one caller and irrelevant to another. A removed output field only breaks consumers that read it. So the classifier answers the general question, what class of change is this, and leaves the specific one, does it break me, to be answered by crossing it with a manifest of what your code actually touches.

Questions

Is the differ open source?

Yes. @zevruna/diff is MIT-licensed on npm, and it is the same classifier the hosted monitor runs. Nothing about the classification is behind the product.

Do I need an account to diff two schemas?

No. The tool on this page runs without one, and the CLI diff works entirely locally. An account is for continuous monitoring, not for comparing two files.

Can I use it in CI without the rest of Zevruna?

Yes. zevruna diff before.json after.json exits 1 when it classifies anything breaking, so it drops into a shell script or a CI step like any other linter.

Why does it flag description changes?

Because description text steers which tool a model selects and how it builds arguments, so it is contract surface even though no type changed. It is scored as a word-level delta and only flagged above a threshold, not on every typo fix.

Next step

npm install @zevruna/diff, the classifier is open source.

Check a server freeRead the docs

Free tool

Diff two MCP contracts

Paste the before and after. No server required, no account, nothing stored.

Runs the same @zevruna/diff the product runs. Nothing is stored, and no account is needed.