Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Beschreibung vom Entwickler (englisches Original)
Ask Vulnify before an AI agent acts. Check, record, and read policy decisions.
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.
VULNIFY_API_KEY, VULNIFY_BASE_URL, AuthorizationAls geheim markierte Werte sind Schlüssel zu deinem Konto. Gib sie nie weiter und füge sie nie in einen Chat ein.
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.
Diese Adresse braucht einen Schlüssel in einem Header der Anfrage, und das Menü zum Hinzufügen von Connectors kann ihn nicht setzen. Nutze stattdessen Claude Code, Cursor oder VS Code.
Öffne Claude Desktop → Settings → Developer → Edit Config und füge dies in claude_desktop_config.json ein
{
"mcpServers": {
"vulnify": {
"command": "npx",
"args": [
"-y",
"@vulnify/mcp"
],
"env": {
"VULNIFY_API_KEY": "your-value",
"VULNIFY_BASE_URL": "your-value"
}
}
}
}Führe das in deinem Terminal aus
claude mcp add --transport http vulnify https://mcp.vulnify.io/mcp --header 'Authorization: Bearer {api_key}'claude mcp add vulnify --env VULNIFY_API_KEY=your-value --env VULNIFY_BASE_URL=your-value -- npx -y @vulnify/mcpTrag die leeren Werte ein, bevor du ihn startest.
In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen
{
"mcpServers": {
"vulnify": {
"url": "https://mcp.vulnify.io/mcp",
"headers": {
"Authorization": "Bearer {api_key}"
}
}
}
}In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen
{
"mcpServers": {
"vulnify": {
"command": "npx",
"args": [
"-y",
"@vulnify/mcp"
],
"env": {
"VULNIFY_API_KEY": "your-value",
"VULNIFY_BASE_URL": "your-value"
}
}
}
}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": {
"vulnify": {
"type": "http",
"url": "https://mcp.vulnify.io/mcp",
"headers": {
"Authorization": "Bearer {api_key}"
}
}
}
}In .vscode/mcp.json in deinem Projekt einfügen
{
"servers": {
"vulnify": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@vulnify/mcp"
],
"env": {
"VULNIFY_API_KEY": "your-value",
"VULNIFY_BASE_URL": "your-value"
}
}
}
}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.
Diese Adresse braucht einen Schlüssel in einem Header der Anfrage, und das Menü zum Hinzufügen von Connectors kann ihn nicht setzen. Nutze stattdessen Claude Code, Cursor oder VS Code.
Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.
VULNIFY_BASE_URL envAuthorization geheim HTTP headerDiese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.
Die Tool-Liste dieses Servers haben wir noch nicht gelesen; wir prüfen die Endpunkte reihum.
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 6. Nov. 2026
Der Registry-Name wurde über die Domain vulnify.io bestätigt (die Registry prüft, wem die Domain gehört)
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieses Repo haben wir noch nicht von GitHub gelesen
Noch nicht geprüft; wir prüfen die Endpunkte reihum
Noch nicht geprüft; wir prüfen die Endpunkte reihum
Noch nicht geprüft; wir lesen die Tool-Liste, wenn wir den Endpunkt prüfen
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.
Das musst du eintragen: VULNIFY_API_KEY, Authorization
Beides geht: Installiere ihn auf deinem Computer oder verbinde dich mit der Cloud-Version.
Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (0.1.4) kam vor 26 Tagen in die Registry.
Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Er verbindet sich per URL, also funktionieren auch Apps, die Remote-MCP-Server akzeptieren, zum Beispiel ChatGPT im Entwicklermodus.
In derselben Kategorie: Spec Driven Development, Remote Desktop Commander, topo^alpin
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.
Avalanche bulletins and mountain weather forecasts for any place in the Alps.
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.
Vulnify MCP
Ask Vulnify before an AI agent reads, writes, deletes, exports, or sends data.
finalDecision is the authoritative result: ALLOW , REVIEW , or BLOCK .
Connect to Claude · Docs · MCP · Changelog · Node SDK
@vulnify/mcp is the MCP server for Vulnify, a runtime authorization layer for AI agents. The agent asks first. This process proxies https://api.vulnify.io. It does not store events or API keys.
Sign in with Vulnify (OAuth 2.1) at https://mcp.vulnify.io/mcp. That hosted server speaks stateless Streamable HTTP. The local path is npx -y @vulnify/mcp with VULNIFY_API_KEY.
check_action is a dry run. It skips the PII scan and records nothing. decide_action records a real decision. A REVIEW waits for a person. This server cannot approve or deny one.
Application code that should decide inside your own process uses the Node SDK (@vulnify/sdk). This package does not depend on the SDK. The SDK turns some transport failures into a fail-closed decision. This server returns those failures as MCP tool errors, so a model does not read them as ALLOW.
The source of truth is docs.vulnify.io/mcp. The same steps are in docs/clients.md.
Connect to https://mcp.vulnify.io/mcp. Leave API-key and OAuth client fields empty. The client receives HTTP 401 and:
WWW-Authenticate: Bearer realm="https://mcp.vulnify.io/mcp", resource_metadata="https://mcp.vulnify.io/.well-known/oauth-protected-resource/mcp", scope="decisions:read decisions:write policies:read policies:test"
The body is {"error":"unauthorized","message":"Sign in with Vulnify, or send an API key as Authorization: Bearer or X-Vulnify-Key:."}. Protected-resource metadata lists the authorization server https://api.vulnify.io.
You choose an organization and allow the scopes the client requests:
| Scope | Tools |
|---|---|
decisions:read | get_decision |
decisions:write | decide_action |
policies:read | list_policies |
policies:test | check_action, test_policies |
After you allow access, the hosted server offers those five tools. plan_policy_changes and check_mcp_tool_call are not in that list. They need an API key. A missing scope comes back as a tool error that names the scope. That error is not an ALLOW. Revoke the connection under Settings > Connected apps: app.vulnify.io/settings/connected-apps.
Vulnify is available in Claude's connector directory: [Connect to Claude](https://claude.ai/directory/vulnify). Select Connect on the listing, then sign in with Vulnify. Walkthrough: human approval for Claude actions.
To add it by URL instead, open Settings > Connectors > Add custom connector. Set the URL to https://mcp.vulnify.io/mcp. Do not paste an API key. Add Vulnify in Claude opens that dialog with the name and URL filled in. Claude then starts Sign in with Vulnify.
Install in Cursor adds the hosted server and starts sign-in.
The same server in .cursor/mcp.json, or in ~/.cursor/mcp.json, is the URL with no header:
{
"mcpServers": { "vulnify": { "url": "https://mcp.vulnify.io/mcp" } } }
Open grok.com/connectors, then New Connector > Custom. Name it Vulnify. Set the URL to https://mcp.vulnify.io/mcp. Leave the OAuth fields empty. Grok starts Sign in with Vulnify.
Add the Vulnify marketplace, then install the plugin. It connects to https://mcp.vulnify.io/mcp and signs in with Vulnify. A PreToolUse hook checks risky tool calls before they run. Claude Code asks for an API key for that hook when you enable the plugin. The hosted tools still use sign-in, not that key.
claude plugin marketplace add vulnify/vulnify-mcp
claude plugin install vulnify@vulnify-mcp
Inside a session:
/plugin marketplace add vulnify/vulnify-mcp
/plugin install vulnify@vulnify-mcp
To add only the hosted server, without the hook:
claude mcp add --transport http vulnify https://mcp.vulnify.io/mcp
Claude Code then signs in. Do not pass an API key on this command.
Use an API key when you need plan_policy_changes or check_mcp_tool_call, when the client cannot open a browser, or when the key has an IP allowlist. The local process needs Node.js 20 or newer and reads VULNIFY_API_KEY. It does not open the OAuth consent page.
npx -y @vulnify/mcp
VULNIFY_API_KEY=vln_live_... npx -y @vulnify/mcp
The key is vln_live_... or vln_test_.... A TEST key stores sandbox events. Those stay out of the main dashboards.
On the hosted server, both headers still work. Send the key on every request:
Authorization: Bearer <key>
X-Vulnify-Key:
An API-key session lists all seven tools.
Cursor, hosted:
{
"mcpServers": { "vulnify": { "url": "https://mcp.vulnify.io/mcp", "headers": { "Authorization": "Bearer vln_live_..." } } } }
Cursor, local:
{
"mcpServers": { "vulnify": { "command": "npx", "args": ["-y", "@vulnify/mcp"], "env": { "VULNIFY_API_KEY": "vln_live_..." } } } }
X-Vulnify-Key works in place of Authorization on the hosted server.
Claude Code with an API key:
claude mcp add --transport http vulnify https://mcp.vulnify.io/mcp --header "Authorization: Bearer vln_test_your_key"
Prefer an environment variable over a key written into the shell history. For sign-in, use the Claude Code command with no header. The plugin hook asks for its own API key when you enable it. Do not put that key on claude mcp add.
Claude Desktop can run the local process. On macOS the file is ~/Library/Application Support/Claude/claude_desktop_config.json. On Windows it is %APPDATA%\Claude\claude_desktop_config.json. Restart the app after saving.
{
"mcpServers": { "vulnify": { "command": "npx", "args": ["-y", "@vulnify/mcp"], "env": { "VULNIFY_API_KEY": "vln_live_..." } } } }
VS Code, .vscode/mcp.json, hosted:
{
"servers": { "vulnify": { "type": "http", "url": "https://mcp.vulnify.io/mcp", "headers": { "Authorization": "Bearer ${input:vulnify-api-key}" } } } }
VS Code, local:
{
"servers": { "vulnify": { "type": "stdio", "command": "npx", "args": ["-y", "@vulnify/mcp"], "env": { "VULNIFY_API_KEY": "${input:vulnify-api-key}" } } } }
The finalDecision field is the authoritative result. A tool error is not an ALLOW.
Every tool has a title and readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. Hints tell the client how to present the tool. They do not change what the tool does.
| Tool | API | Records? | readOnlyHint | Notes |
|---|---|---|---|---|
check_action | POST /v1/policies/test (one case) | No | true | Skips the PII scan and records nothing. No event id. |
decide_action | POST /v1/events | Yes | false | Writes a security event and an audit entry. finalDecision is the authoritative result. |
get_decision | GET /v1/events/{id} | No | true | Reads a decision. Optional wait polls a REVIEW until ALLOW or BLOCK (30 seconds max). |
list_policies | GET /v1/policies | No | true | Policies as code, sorted by name. |
test_policies | POST /v1/policies/test | No | true | Up to 200 cases. Skips the PII scan. Proposed policies are not saved. |
plan_policy_changes | POST /v1/policies/apply | No | true | dryRun is forced to true. Needs an org-wide LIVE key. |
check_mcp_tool_call | POST /v1/gateway/mcp | Yes | false | Maps a tool name to an action and records the decision. Does not run the tool. |
destructiveHint is false on every tool. openWorldHint is false on every tool, because each call stays inside the caller's own Vulnify organization. idempotentHint is true for the read-only tools and false for decide_action and check_mcp_tool_call. An idempotencyKey makes a retry of a recorded decision return the same event.
Policy list, test, and plan calls are limited to 60 requests per minute per key. Batch dry runs with test_policies. POST /v1/events has its own limit. The OpenAPI text says only that the limit was exceeded.
This server cannot change a review and cannot save a policy.
REVIEW in Vulnify.plan_policy_changes calls POST /v1/policies/apply with dryRun: true on every request. The tool input has no dryRun field. The server sets dryRun last, so a caller cannot turn the dry run off. The tool returns the diff.POST /v1/gateway/http is not a tool. On ALLOW, that API endpoint forwards the HTTP call. This server does not.plan_policy_changes needs an org-wide LIVE key. A TEST key or an agent-bound key gets 403. An OAuth session does not list plan_policy_changes or check_mcp_tool_call.
User login is the hosted HTTP server. The local stdio process still uses an API key. The hosted server maps tools to scopes:
| Tool | Scope | OAuth route |
|---|---|---|
check_action | policies:test | POST /v1/mcp/policies/test |
test_policies | policies:test | POST /v1/mcp/policies/test |
decide_action | decisions:write | POST /v1/mcp/events |
get_decision | decisions:read | GET /v1/mcp/events/{id} |
list_policies | policies:read | GET /v1/mcp/policies |
plan_policy_changes | API key and stdio only |
Nur der Anfang wird gezeigt; den Rest findest du im Repo