# Vulnify

An MCP server that asks Vulnify before an agent reads, writes, deletes, exports or sends data. The answer comes back as ALLOW, REVIEW or BLOCK.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 2
- Author: vulnify
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/vulnify/vulnify-mcp
- Updated: 2026-10-23
- HTML: https://affpapa.org/en/nevibecode/mcp/vulnify

## What it does

Vulnify is a runtime authorization layer for AI agents. This server proxies `https://api.vulnify.io` and keeps neither events nor API keys on its side. The agent asks first, then acts.

Two ways in. The hosted endpoint `https://mcp.vulnify.io/mcp` speaks stateless Streamable HTTP and signs you in with OAuth 2.1: the client gets HTTP 401, then you pick an organization and approve the scopes it asks for. The local route is `npx -y @vulnify/mcp` with `VULNIFY_API_KEY` set; it needs Node.js 20 or newer and never opens a consent page.

The tools differ in what they leave behind. `check_action` is a dry run — no PII scan, nothing recorded. `decide_action` writes a real decision, and a REVIEW sits there until a person handles it; this server can neither approve nor deny one. OAuth exposes five tools, while `plan_policy_changes` and `check_mcp_tool_call` need an API key. A scope you did not grant comes back as a tool error naming that scope, and that error is not an ALLOW. Keys come as `vln_live_...` or `vln_test_...`; a test key writes sandbox events that stay out of the main dashboards.

## Requirements
- Needs: Node.js (commands run via npx)
- Remote server: `https://mcp.vulnify.io/mcp`
- Environment variables: `VULNIFY_API_KEY`, `VULNIFY_BASE_URL` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

1. **Platform CLI: remote server**
```bash
claude mcp add --transport http mcp https://mcp.vulnify.io/mcp
```

2. **Platform CLI**
```bash
claude mcp add --env VULNIFY_API_KEY=<VULNIFY_API_KEY> --env VULNIFY_BASE_URL=<VULNIFY_BASE_URL> --transport stdio vulnify -- npx -y @vulnify/mcp
```
Replace <…> with your own values

### Codex

1. **Platform CLI: remote server**
```bash
codex mcp add vulnify --url https://mcp.vulnify.io/mcp
```

2. **Platform CLI**
```bash
codex mcp add vulnify --env VULNIFY_API_KEY=<VULNIFY_API_KEY> --env VULNIFY_BASE_URL=<VULNIFY_BASE_URL> -- npx -y @vulnify/mcp
```
Replace <…> with your own values

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "vulnify": {
            "url": "https://mcp.vulnify.io/mcp"
        }
    }
}
```
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "vulnify": {
            "command": "npx",
            "args": [
                "-y",
                "@vulnify/mcp"
            ],
            "env": {
                "VULNIFY_API_KEY": "<VULNIFY_API_KEY>",
                "VULNIFY_BASE_URL": "<VULNIFY_BASE_URL>"
            }
        }
    }
}
```
Replace <…> with your own values

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "vulnify": {
            "type": "http",
            "url": "https://mcp.vulnify.io/mcp"
        }
    }
}
```
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "vulnify": {
            "type": "stdio",
            "command": "npx",
            "args": [
                "-y",
                "@vulnify/mcp"
            ],
            "env": {
                "VULNIFY_API_KEY": "<VULNIFY_API_KEY>",
                "VULNIFY_BASE_URL": "<VULNIFY_BASE_URL>"
            }
        }
    }
}
```
Replace <…> with your own values

### Gemini CLI

1. **Platform CLI: remote server**
```bash
gemini mcp add -t http vulnify https://mcp.vulnify.io/mcp
```

2. **Platform CLI**
```bash
gemini mcp add -e VULNIFY_API_KEY=<VULNIFY_API_KEY> -e VULNIFY_BASE_URL=<VULNIFY_BASE_URL> vulnify npx -y @vulnify/mcp
```
Replace <…> with your own values

## When to use it
- gate an agent action before it runs
- get an ALLOW, REVIEW or BLOCK verdict on reads, writes, deletes, exports and sends
- dry-run a policy without recording a decision
- record a real decision for an agent action
- route an action to a human for review

## Example prompts
- Ask Vulnify whether the agent may drop the `sessions` table — dry run only, record nothing.
- Get a Vulnify decision for exporting `users.csv` and show me the `finalDecision` value.
- List the Vulnify policies that cover sending data to external services.

## Similar
- [grantex](https://affpapa.org/en/nevibecode/mcp/grantex.md) — MCP server · ★ 33
- [access-control-rbac](https://affpapa.org/en/nevibecode/skills/access-control-rbac.md) — skill · 757 installs
- [delego](https://affpapa.org/en/nevibecode/mcp/delego.md) — MCP server · ★ 25
- [convex-authz](https://affpapa.org/en/nevibecode/skills/convex-authz.md) — skill · 36400 installs
- [api-authorization-and-bola](https://affpapa.org/en/nevibecode/skills/api-authorization-and-bola.md) — skill · 3700 installs
- [django-access-review](https://affpapa.org/en/nevibecode/skills/django-access-review.md) — skill · 2700 installs

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
