The CI-shaped surface
Snapshot. Diff. Exit 1 on breaking.
mcpi-cli runs the same diff engine as the app and the directory, shaped for a pipeline: print a server's contract as JSON, commit it next to your code, and let a reconnect after their release tell you exactly what moved — with an exit code you can gate a build on.
Free, like everything that runs on your machines. No account, no key.
A real recorded change: Hugging Face 0.4.11 restructured hf_fs's input schema. This gate would have caught it.
Three commands, one contract
snapshot prints what a server advertises, lint checks it against the spec's static rules, diff classifies what changed between two of them. The exit code is the interface.
The exit code is the contract
0 clean or compatible, 1 breaking or a violated MUST, 2 operational failure. A pipeline gates on it directly — no output parsing, no wrapper script.
Point it at anything
Either side of a diff is a snapshot file, a live https:// endpoint, a stdio: command spawned on the spot, or @label — a baseline pinned in the desktop app, read from the same local store.
Lint against the spec
Static conformance facts about a contract: schema shape, naming, descriptions. A violated MUST exits 1 — the same rules the app shows next to the call form.
The same report everywhere
diff prints Markdown (or --format json) rendered by the same schemadiff crate as the app's export button and the directory's changelog — the report in your PR matches the drawer on your screen.
Auth without a browser
Live sources authenticate with --header only. The CLI never opens a browser and never touches the keychain — the right shape for a runner that has neither.
Publish to your listing
Claimed your server in the directory? mcpi-cli publish pushes an owner-reported snapshot into its public contract history — a changelog your users can subscribe to, captured with your credentials.
Questions someone always asks
How do I install it?
From source, today: clone the public repo and cargo build the mcpi-cli package — you need a Rust toolchain. There is no published binary yet; this page will name one the day it exists, and not before.
Do I need the desktop app?
No. The CLI is complete on its own: snapshot, lint, and diff work against files and live servers with nothing else installed. The app adds one thing the CLI reads — baselines: pin a contract as "v1.2" in the app and any script can gate on @v1.2.
Is it really free?
Yes, like everything that runs on your machines — the CLI, the app, and the whole diff engine. Paid is only the hosted, recurring checking our servers do: the statuspage and watch tiers on the pricing page.
What counts as breaking?
A change that can fail a caller that was correct yesterday: a new required argument, a removed tool, a narrowed type, an enum losing a value. The same edit means opposite things in an input and an output schema, and the classifier knows the direction. Rewordings are cosmetic — reported, never fatal.
Put the gate in before their next release
One snapshot committed next to your code, one line in CI. The next breaking change on a server you depend on fails a build instead of a production agent.