vulkro mcp serve
Runs Vulkro as a Model Context Protocol server, so an AI coding agent can scan your code, read the proof behind a finding and check a fix before applying it.
vulkro mcp serve # stdio (default)
vulkro mcp serve --port 9100 # SSE on http://127.0.0.1:9100/sse
Set up in Claude Code, Cursor and Codex
Claude Code: register the server once.
claude mcp add vulkro -- vulkro mcp serve
Cursor: add this to ~/.cursor/mcp.json, then restart Cursor.
{
"mcpServers": {
"vulkro": { "command": "vulkro", "args": ["mcp", "serve"] }
}
}
Codex uses the Vulkro skill instead of the server. The installer appends instructions to ~/.codex/AGENTS.md, and Codex runs the vulkro CLI directly:
curl -fsSL https://dist.vulkro.com/skill-install.sh | bash -s -- --agent codex
The same installer takes --agent claude-code or --agent cursor (see Claude Code skill).
VS Code agent mode: the VS Code extension registers the server for you.
Other MCP hosts
Claude Desktop, Windsurf and Continue use the same mcpServers JSON as Cursor, in their own config file:
| Host | Config file |
|---|---|
| Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json (macOS), ~/.config/Claude/claude_desktop_config.json (Linux), %APPDATA%\Claude\claude_desktop_config.json (Windows) |
| Windsurf | ~/.windsurf/mcp.json (older versions: ~/.codeium/windsurf/mcp_config.json) |
| Continue | ~/.continue/mcp.json |
| VS Code MCP client | ~/.vscode/mcp_settings.json |
Restart the host after editing.
Tools exposed
Every tool is deterministic, calls no model and never writes to your repository.
| Tool | What it does |
|---|---|
scan_project({path, format?}) | Full scan. Returns findings and a scan_id. Agents should pass format: "compact". |
scan_file({path}) | Findings for one file. |
scan_diff({path, base_ref?}) | Findings on the lines a git diff added or changed (default base HEAD~1). |
get_findings({scan_id, severity?, finding_ids?}) | Re-filter a prior scan without rescanning. |
prove({finding_id or file+line, scan_id or path}) | The hop-by-hop proof for one finding. An empty chain means unproven, never safe. |
explain({rule_id}) | Markdown explanation of a rule. |
list_rules() | The rule catalogue. |
suggest_fixes({scan_id, finding_id?, verify?}) | Fix patches, each re-scanned on a temporary copy: fixed, not-fixed or regressed. |
verify_fix({diff, scan_id or path, finding_id?}) | Apply your diff to a temporary copy, re-scan, return the same verdict. |
verify_sarif({sarif, path}) | Mark another scanner's SARIF results proven, not-provable or not-examined. |
inspect_repo({path}) | Review a just-cloned repo for malicious-code patterns. Never a "safe" verdict. |
read_code({path, target}) | Read FILE, FILE:NAME or FILE:START-END without reading a whole file. |
check_change({path, base?, fast?}) | After an edit: broken call sites, removed names still used, tests to run, findings on changed lines. |
assess_change({path, symbol?, base?}) | Blast radius before an edit, or dependents, tests and new findings after one. |
code_graph({path, mode?, ...}) | Scan-free code graph: file outline, usages of a name, one function's body, callers. |
from_trace({path, trace}) | Map a stack trace onto symbols and findings. |
evidence_graph({path}) | The evidence-graph/1.0 document for a project. |
aggregate({graphs}) | Link evidence graphs across repositories. |
Without an active trial or Pro, each tool call fails with JSON-RPC error -32001 and reason: "license_required". The server keeps running.
The server also exposes the local AI memory under .vulkro/ai/ as read-only resources (vulkro-ai-memory:///<id>).
AI-usable evidence-graph workflow
- Call
evidence_graph({path})once per repository. - Pass the documents to
aggregate({graphs}). - Read the returned cross-repo links, each with the callee's auth posture.
Vulkro supplies the evidence; the AI coding agent does the reasoning.
Flags
| Flag | Description |
|---|---|
--port <PORT> | Use SSE on 127.0.0.1:<PORT> (/sse and /messages) instead of stdio. |
--offline | Block every outbound network call. |
| Variable | Effect |
|---|---|
VULKRO_MCP_LOG=1 | Trace lines on stderr. |
VULKRO_OFFLINE=1 | Same as --offline. Other VULKRO_* scan variables also apply. |
Exit codes
0 clean shutdown. 1 a refused tool call the caller treated as fatal. 2 bind failure, IO error or bad argument.
See also: vulkro mcp-audit, vulkro-sf mcp serve.