The three severities
Every contract change is classified, and the classification — not the JSON — is the headline:
- Breaking — something that worked yesterday fails today. A tool removed, an argument made required, an enum losing a value callers may still send, an output field callers rely on disappearing.
- Compatible — the contract loosened. An optional argument added, an enum gaining a value, a new tool.
- Cosmetic — the contract itself is untouched. Descriptions reworded, documentation edits.
Direction matters: the same edit means opposite things in an input and an output schema. A field added to an input schema as required breaks callers; the same field appearing in an output schema is new data nobody is forced to read. mcpi's rules are parameterised by direction, so you never have to think about it.
$refs are walked, not just compared. A schemars server can gut an enum behind a $ref that itself never changed — mcpi diffs the definitions too, so that change surfaces instead of producing a silently empty diff.
The three answers on connect
- First — never seen this server before; nothing to compare against yet. Deliberately distinct from "unchanged": a first connect is not a clean bill of health.
- Unchanged — seen before, identical contract. The banner also offers the way back into the last recorded change.
- Changed — the diff is ready: a one-line summary above the item list,
breaking/changedmarkers on the affected items, the selected item's changes inline above its call form, and the full drawer grouped by tools, resources, prompts, and capabilities.
Baselines and the timeline
Every recorded contract sits on a timeline (visible on the server overview). Pin any moment under a name — "v1.2", "certified" — and it stays reachable forever, even after the timeline window moves past it. The compare picker diffs any two recorded moments, which answers the question named baselines exist for: how far has this server drifted from the contract we certified in April?
Exporting
The drawer's Copy as Markdown emits the same artifact mcpi-cli diff prints — judgement first, one-sided lines for additions and removals — so the diff you paste into a PR matches the one your pipeline gates on.