Install the gate and watch your first HOLD
The gate installed and wired into your MCP hosts, and a live contract change held right in front of you, so you know exactly what a HOLD looks like before it matters.
The tool your agent trusted on Monday can change on Tuesday, with no version bump your client notices. The gate installs locally, pins the declared contract of each tool you wire it in front of on first sight, and HOLDs a call when that contract silently changes, before your agent acts. It is a contract-diff, not a safety verdict, and it holds no credentials. Here is the whole path, start to finish.
- 01
Install the gate#
Run this in your terminal. It installs the gate binary and rewrites each MCP host's config so that host's servers launch behind the gate. Free, no account, runs locally.
uv tool install mcpindex-gate && mcpindex-config-wirePrefer the one-script install?
The install script does the same install + wiring in one pass - read it before you run it:
Read the script firstPipe to less to read it before you run it. uninstall.sh restores the original config.
curl -fsSL https://mcpindex.ai/install.sh | lessRun itcurl -fsSL https://mcpindex.ai/install.sh | sh - 02
See what it wired#
The one-liner only touches the hosts it actually finds on your machine. These are the hosts it knows how to config-wire:
Detected and wiredClaude DesktopClaude CodeCursorVS CodeWindsurfClineZedGemini CLIThe installer rewrites each host's config so its servers launch behind the gate. It only touches hosts it finds; the rest are untouched.
- 03
Restart your host#
Quit and reopen the host you use (Claude Desktop, Cursor, and so on) so it reloads the gated config. Nothing changes about how you call your tools. The gate sits in the path and stays quiet until a contract drifts.
Not seeing this?
If tools stop appearing after the restart, run
mcpindex-config-wire statusto check the wiring, oruninstall.shto un-wire every host config and restore the originals. - 04
Watch a contract change get held#
Now the part that matters. Pin a tool's contract, apply a change, and watch what the gate does. This runs the real diff logic in your browser (the same mapping the installed gate uses), so there is nothing to fake. Try a breaking change and a benign one:
in-path drift gatedeterministic · client-side · contract-diffposturepinned contract TOFU baselinemake_report( title: string, count: integer[0..1000], mode: enum[fast, full], ) // read-onlyapply a silent change to the toolcontract-diff, not a safety verdictthis is the same deterministic gate that runs in your agent - 05
Read the verdict#
A HOLD means the live contract differs from what you pinned, so the call is paused before your agent acts. A PROCEED means there was no breaking difference (a benign added-optional field can pass through). The verdict is about what changed, never a claim that the tool is safe.
HOLDgate, in-paththe live contract differs from what you pinned; the call is paused before your agent acts.
PROCEEDgate, in-pathno breaking difference (a benign added-optional field can pass); the call goes through.
REVIEWdirectory screenan advisory, semantic-only read flagged something to look at before you wire the tool.
UNVERIFIEDdirectory screenno verdict on file yet; the directory is not asserting anything about it.
- 06
Find the trace on stderr#
As the gate works it leaves one quiet line per call on your host's stderr, so you can see it is present without it getting in your way.
On your host's stderrmcpindex · noted github/create_issue mcpindex · noted github/delete_repo - delete, irreversible ⬡ mcpindex - caught a silent change: a new required parameter on github/delete_repo. Held before your agent ran it.The first time a tool runs it leaves one dim line. When a contract has drifted, a HOLD banner names what changed and pauses the call - a contract-diff, not a claim the tool is unsafe.
- 07
Bookmark your receipts page - the primary audit surface#
Each gated call is recorded to a private receipt log keyed to your install. It is credential-blind: the verdict and the action, never the arguments or content. On the receipt that decision is logged on the trust axis: a PROCEED shows as ALLOW, a HOLD as DENY, an inconclusive as REVIEW. This page is the primary place to check what the gate did for you - host clients often bury the gate's stderr lines in log files, but the receipts page is always one click away. Your install id is a random token at ~/.mcpindex/install_id (run: cat ~/.mcpindex/install_id), and your page lives at mcpindex.ai/receipts?id=<install-id>. Open it once and bookmark it. From gate v0.9.0 the gate also prints a local weekly summary line (calls gated, drift seen, holds) that links the same page; the counters are local-only and nothing about that line is sent anywhere.
Open your Gate Activity — the tool hash, the verdict (ALLOW, REVIEW, or DENY), and the action, one row per gated call. Paste your install id from ~/.mcpindex/install_id, then bookmark the resulting URL.
Read Fig. 16 as text
0s ------ 20s ------ 30s ------ 45s -------------- whenever
| | | | |
install wire your restart first tools/list first drift
the gate hosts the host = every tool pinned = your first HOLD
+---- silent ----+ +--- the point ---+
| nothing to | | this is the only|
| configure. | | time the gate |
| nothing to | | interrupts you. |
| see. correct. | | |
+----------------+ +-----------------+
silence after install is the gate working, not the gate being broken.Permalink, SVG & reuse · CC BY 4.0
Read Fig. 05 as text
|- HELD filesystem - write_file
ChangeKind added-required-param (1) fixed taxonomy. never free prose.
pinned write_file(path, content) (2) your baseline. what you saw first.
live write_file(path, content, (3) what the server sends now.
mode *)
* newly required
posture guard (4) why it held here. monitor would notify.
blast radius WRITE - not reversible (5) what the call would have done.
- stays on this machine
-> re-pin -> reject -> tune posture (6) three exits. all reversible.
the gate says "this changed", never "this is unsafe".Permalink, SVG & reuse · CC BY 4.0
Read Fig. 06 as text
|- HELD
|
+- did you expect this change?
| yes --> re-pin. the new contract becomes your baseline. done.
| no --> is it breaking or destructive?
| yes --> reject the call. check the server's changelog.
| check /ledger - did the crawler see it too?
| no --> re-pin, or move that server to the monitor posture.
|
+- holding too often?
guard --> monitor notify and proceed. you still see every change.
guard --> strict hold anything not PROVEN benign.
every exit is reversible. a re-pin can be re-pinned.Permalink, SVG & reuse · CC BY 4.0
- Do I need an account to install the mcpindex gate?
- No. The gate installs locally with one command, needs no account, and holds no credentials. An account only matters later if you opt into cloud tiers or higher limits.
- What does a HOLD from the gate actually mean?
- A HOLD means the tool's live declared contract differs from what you pinned on first sight, so the gate pauses the call before your agent acts. It is a contract-diff (this changed), not a claim that the tool is safe or unsafe.
- Will the gate change how I use my tools?
- No. It sits in the path and stays quiet, leaving one trace line per call on stderr. You only notice it when a tool's contract changes and it holds the call for you to look at.