Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Beschreibung vom Entwickler (englisches Original)
Read-only evidence for the tools agents run: MCP server records, coverage and policy.
Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.
Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.
Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.
Du brauchst
Welche App nutzt du?
Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.
Öffne Claude Desktop → Settings → Developer → Edit Config und füge dies in claude_desktop_config.json ein
{
"mcpServers": {
"agentgate": {
"command": "npx",
"args": [
"-y",
"@zhiliangtech/agentgate",
"mcp"
]
}
}
}Führe das in deinem Terminal aus
claude mcp add agentgate -- npx -y @zhiliangtech/agentgate mcpIn .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen
{
"mcpServers": {
"agentgate": {
"command": "npx",
"args": [
"-y",
"@zhiliangtech/agentgate",
"mcp"
]
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
In .vscode/mcp.json in deinem Projekt einfügen
{
"servers": {
"agentgate": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@zhiliangtech/agentgate",
"mcp"
]
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
Dieser Server läuft auf deinem Computer, und ChatGPT kann sich nur mit Servern im Internet verbinden. Wähle eine andere App.
Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.
Diese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.
Läuft auf deinem Computer; die Tool-Liste erscheint nach der Installation in deiner KI-App.
Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 7. Nov. 2026
Der Registry-Name wurde mit dem GitHub-Konto ciceroyang bestätigt, dem das Repo gehört
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieser Server läuft auf deinem Computer; es gibt keinen Endpunkt im Internet
Läuft auf deinem Computer und nutzt stattdessen lokale Einstellungen
Läuft auf deinem Computer; Tool-Listen können wir nur von Endpunkten im Internet lesen
Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.
Er hat 1 von 1 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.
Die Registry nennt keinen erforderlichen Schlüssel, manche Server bitten dich aber bei der ersten Nutzung, dich anzumelden.
Er läuft auf deinem Computer. Deine KI-App startet ihn bei Bedarf, und die Daten laufen nicht über die Server des Entwicklers (außer der Server ruft selbst einen Onlinedienst auf).
Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (0.5.0) kam vor 2 Monaten in die Registry.
Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Außerdem brauchst du Node.js auf deinem Computer.
In derselben Kategorie: Spec Driven Development, Remote Desktop Commander, Zendesk
Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.
So liest du eine Karte:★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Zendesk MCP Pack — tickets, users, organizations via OAuth.
Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.
English · 中文
A control plane for the tools agents run. It inventories what is in use, records the evidence behind every claim, states what a company refuses, and enforces that decision in CI and at runtime.
The whole project follows one rule:
cleanis emitted only when every check ran. Anything that could not be measured is
unmeasured, and an artefact with an unmeasured part isincomplete— neverclean.
That rule is there because the usual failure of a security scanner is a green build for work nobody did. Here a check that crashes makes the result incomplete, so it cannot happen quietly.
| part | what it does | package |
|---|---|---|
| inventory | enumerate the registry, resolve packages, fetch repositories | packages/collect |
| evidence | join it into one record per server, with the bytes behind every claim | packages/collect |
| policy | scan configs, hooks, manifests and source for what a company would refuse | packages/guard |
| verification | check a claim against something outside the claim | packages/verify |
Server setup is in docs/operations/deployment-runbook.md. The first deployment, on 2026-09-16, is written up in docs/verification.md together with what was checked and what still is not.
docs/capabilities.md lists what this project can and cannot claim, one line each, every line carrying a command you can run. It exists because a consultant once wrote our capabilities down for us and included four we do not have.
The service runs at https://xn--5kvo87g.com/: landing page, pricing, the evidence index (rebuilt daily) and the API on the same host.
https://ciceroyang.github.io/agentgate/ is the landing page on GitHub Pages. The index is a single browsable page at https://ciceroyang.github.io/agentgate/evidence.html, rebuilt daily from the live registry — records are embedded, filtering happens locally, and there is nothing to sign up for. Pricing and a ten-minute walkthrough.
Upgrading to 0.6.0: read the upgrade guide before replacing an existing admission gate or watch installation. The 0.5.0 package can incorrectly pass a required-evidence gate when evidence is absent; do not use it for a new gate. Confirm the version you installed, and see the release record for public-package verification. A source checkout and the hosted service may run different versions.
Node 20 or newer, no dependencies. A clone already carries a sample index, so the service answers immediately; refresh replaces it with a current one.
node bin/agentgate.mjs serve
curl -s localhost:8080/health curl -s localhost:8080/v1/index/summary curl -s localhost:8080/v1/servers/ curl -s localhost:8080/badge/ .svg
The package is on npm as @zhiliangtech/agentgate. Push a v* tag and CI publishes it with provenance; publish-checklist.md has the setup and the record of what was verified.
npx --yes --ignore-scripts @zhiliangtech/agentgate@0.6.0 check --root .
npx --yes --ignore-scripts @zhiliangtech/agentgate@0.6.0 serve
An unversioned npx command follows the latest dist-tag, not this checkout. Pin the accepted version; editing a local version number does not change the public package.
With no policy file, check uses a built-in default that refuses nothing extra, and serve answers from the snapshot the package shipped with. refresh writes to ./data next to you, never into the installed package.
Docker works too, and runs the same command:
docker compose up # the service on :8080
docker compose --profile collect run --rm refresh # rebuild data/index.json and seed the first snapshot
Run node bin/agentgate.mjs serve and open /inventory.html at the address it prints. Paste a list of tool names or pick a text/JSON file, resolve ambiguous matches, fill in the version you actually use, and download a standalone HTML report. The comparison happens in browser memory against the embedded index snapshot: the list is not uploaded or stored, your machine is not scanned, and no tool is executed. When a record carries a coverage block, the report also lists which scanners ran and which did not, and why; a record whose own coverage block says a required scanner did not finish will not be shown as matched, however complete the rest of its evidence looks.
The same thing without a browser:
node bin/agentgate.mjs inventory --input examples/inventory/tools.json --out my-tools.html
node bin/agentgate.mjs inventory --input tools.json --index data/index.json --format json
An input is one name per line, a JSON array, or { "tools": [...] }. Each object may carry name, server, package, registry and version — nothing else. Full client configurations and credentials are rejected on purpose. The inventory guide has the details.
Unmatched, ambiguous, missing-version, mismatched-version and incomplete-evidence items stay in the report. A version match is not proof of what is installed. The committed sample is historical and cannot produce a confirmed match; neither can old evidence without an exact content binding. Even a confirmed match is not a safety certification and not a new scan. Look at the scopes, the findings, the snapshot date and the gaps before you rely on it.
Exit code 0 means a report was produced, not that every tool passed. Malformed input or unreadable data exits 2, and --out will not overwrite an existing file. When you want CI to refuse something, use check, not inventory.
Nobody has this list by hand. discover reads the MCP configuration files already on the machine and produces input that inventory --input accepts. It prints package coordinates as lines when all exported identities are known; if any entry is alias-only, it uses JSON so an alias such as tool@1.2.3 cannot be mistaken for a verified package and version:
node bin/agentgate.mjs discover --out tools.txt # home directory + current directory
node bin/agentgate.mjs discover --roots ~/code/a,~/code/b --format json
It never prints an env value, a header or an argument, and a remote address is cut down to its host, because paths and query strings carry tokens. It reads Codex's .codex/config.toml MCP tables without starting the configured servers. Explicitly disabled entries remain visible in --format json but are omitted from text and inventory exports. Unsupported MCP TOML shapes, malformed files and unreadable files are listed with a reason and make the command exit 2. Package names and versions are taken only from recognizable declared runner arguments; a custom command or remote host is not treated as a verified package or runtime version.
node bin/agentgate.mjs audit --roots ~/code/a,~/code/b,~/code/c --index data/index.json
One scan per directory, one verdict for the set. Any incomplete directory makes the audit incomplete, and a directory that does not exist counts as unmeasured rather than skipped.
node bin/agentgate.mjs watch --input tools.txt --index data/index.json --archive ./archive
node bin/agentgate.mjs watch --verify --archive ./archive node bin/agentgate.mjs watch --input tools.txt --index data/index.json --archive ./archive \ --webhook https://example.invalid/hook --webhook-format wecom
Every run appends one line to a chained archive (prev is the previous line's hash) and stores what it saw under snapshots/ .json. --verify recomputes the chain and every retained snapshot, and exits 1 if anything does not match. Nothing is sent anywhere unless --webhook names an address, and the archive is written before the push, so a chat service being down cannot lose a capture.
node bin/agentgate.mjs framework # who answers which AI-CAIQ item
node bin/agentgate.mjs inventory --input tools.json --framework aicaiq --out report.html
For each AI-CAIQ item the mapping says what we can provide, where our coverage stops, and whether the answer is ours, the customer's, or an independent assessor's. It describes evidence. It is not a compliance conclusion and it does not reproduce the official text. All 58 items of the four domains a reviewer asks a vendor about are classified: 13 answers are ours, 41 are the customer's and 4 need an independent assessor.
The mapping says what we can provide. pack produces the thing itself: one directory a vendor hands to the person reviewing them, where every answer we claim points at evidence in the same directory and everything we could not measure is counted at the top.
node bin/agentgate.mjs pack --input tools.json --archive ./agentgate-archive --out agentgate-pack
node bin/agentgate.mjs pack --verify agentgate-pack # recompute every hash and the seal
It writes pack.json (machine readable), pack.html (for the reviewer), answers.aicaiq.md (all 58 items, each classified), manifest.txt (one sha256 per file) and manifest.sha256 (the seal on the manifest). An answer whose evidence is missing reads unmeasured and the command exits 2, not
docs/samples/evidence-pack-example — verifiable with pack --verify. Contract: docs/spec/evidence-pack-v1.md.
Anything that speaks MCP can ask the index directly. Add this to claude_desktop_config.json, a repo's .mcp.json, or whatever your client reads:
{
"mcpServers": { "agentgate": { "command": "npx", "args": ["--yes", "@zhiliangtech/agentgate@next", "mcp"] } } }
Four read-only tools: lookup_server (one record, with its coverage block), inventory_tools (match the tools you actually use), coverage_report (how much of the index was measured) and check_project (scan a local directory). It reads the local index, never writes, never uploads, and never runs a scanned tool. An incomplete record is reported as incomplete, and a record that the index does not have is reported as missing rather than safe. Details: docs/spec/mcp-server-v1.md.
A policy states what a company refuses. It is data rather than code, and it has a spec: docs/spec/policy-v1.md.
{
"version": "agentgate.policy/v1", "threshold": "high", "required": { "pinnedPackages": true, "measuredEvidence": ["packageManifest"] }, "forbidden": { "rules": ["AG-INSTALL-001"], "servers": ["internal/*"] } }
node bin/agentgate.mjs check --policy agentgate.policy.json --root . --index data/index.json
The policy above requires indexed evidence. Supply a real index matching the local npm package's exact name and version: missing evidence exits 2; an explicit missing, malformed or sample index exits 3. A local source scan does not substitute for the required package evidence.
With no policy file and no --policy, the check still runs. It reports what the checks found and says it used the built-in default, which refuses nothing extra; inventing obligations on your behalf would make the result mean less, not more. A policy you name explicitly and that cannot be read is an error, because that is a typo.
The same evaluation can go to a person instead of a terminal:
node bin/agentgate.mjs check --Nur der Anfang wird gezeigt; den Rest findest du im Repo