Skip to main content

vulkro mcp

The Model Context Protocol surface: run Vulkro as an MCP server that Claude Desktop, Cursor, Windsurf, Continue, and VS Code MCP clients can call.

Today the only action is serve. The command group leaves room for future sub-actions without breaking the CLI surface.

vulkro mcp <COMMAND>
CommandDescription
serveRun Vulkro as an MCP server over stdio (default) or SSE.

The sibling subcommand vulkro mcp-audit audits MCP host configs. It is not part of this group: it is kept at its original top-level path for backwards compatibility.

Tools exposed by vulkro mcp serve

Any JSON-RPC 2.0 MCP client can call these:

ToolDescription
scan_project({path, format?})Full project scan, returning the same JSON shape as vulkro scan -f json. Returns a scan_id for re-filtering without re-scanning. format is json (default) or summary.
scan_file({path})Scan and return only the findings whose source file matches the given path. Detects the containing project automatically.
explain({rule_id})Markdown explanation of a rule ID. Accepts OWASP-category slugs, MCP-001..MCP-006, EXT-001..EXT-003, and SUP-COMPROMISE-001..SUP-COMPROMISE-005.
list_rules()Enumerate every rule, as { id, title, owasp_category, description } from the canonical catalogue.
get_findings({scan_id, severity?})Re-read findings from a prior scan_project call, optionally filtered by severity.
suggest_fixes({scan_id})Git-apply-ready fix suggestions for a prior scan: finding_id, rule kind, file/line, prose explanation, and a unified diff. Vulkro never applies the diff itself. Coverage is intentionally narrow and high-confidence.
evidence_graph({path, repo_name?})The evidence-graph/1.0 document for a project: endpoints with route-shape and auth tier, outbound calls, taint flows, findings with reachability verdicts, dependency evidence. Deterministic, no model is called.
aggregate({graphs})Link two or more evidence-graph documents to surface cross-repo edges. Same linker as vulkro aggregate. Deterministic, no model is called.
inspect_repo({path})Vulkro Inspect as a pre-run check for a just-cloned repository. Surfaces malicious-capability shapes grouped by capability, with file and line per site, over the full unfiltered finding set.

inspect_repo is a human-review surface, not a gate. It never certifies code safe, clean, or trusted, and returns no proceed / allow / approve verdict. Every response carries a top-level disclaimer.

Transport

stdio by default: line-delimited JSON-RPC 2.0 over stdin / stdout, the transport every major MCP host uses. Pass --port N to expose an SSE transport on 127.0.0.1:N instead.

vulkro mcp serve # stdio (default)
vulkro mcp serve --port 9100 # SSE on http://127.0.0.1:9100/sse

Client configuration

Example Claude Desktop config (claude_desktop_config.json):

{
"mcpServers": {
"vulkro": {
"command": "vulkro",
"args": ["mcp", "serve"]
}
}
}

Environment variables

VariableEffect
VULKRO_MCP_LOG=1Emit per-request trace lines on stderr. Off by default so the stdio JSON-RPC stream stays clean.
VULKRO_OFFLINE=1Disable any outbound HTTP call during scans triggered through the MCP surface (same semantics as the top-level scan subcommand).

Exit codes

  • 0 clean shutdown (the host closed stdin, or Ctrl-C was hit in SSE mode).
  • 1 the server started but encountered a Pro-feature refusal on a tool call that the caller treated as fatal.
  • 2 operational error: bind failure, transport-level IO error, or a bad argument to mcp serve.

Command reference

Generated from vulkro help mcp on vulkro 0.26.0. This block is the authoritative flag, usage, and exit-code reference for this command; the prose above is the friendly explanation. Do not edit this block by hand; run npm run docs:cli after a release.

Run Vulkro as a tool server for AI assistants (Model Context Protocol).

Model Context Protocol surface: run Vulkro as an MCP server that Claude Desktop, Cursor, Windsurf, Continue, and VS Code MCP clients can call. The sibling `vulkro mcp-audit` subcommand audits MCP host configs (it is not part of this group: kept at its original top-level path for backwards compatibility).

Today the only action is `serve`. More sub-actions may be added in future releases.

Exit code: 0 on a clean shutdown, 2 on an operational error. See `vulkro mcp serve --help` for the full per-action contract.

Usage: vulkro mcp [OPTIONS] <COMMAND>

Commands:
serve Run Vulkro as an MCP server. Claude Desktop, Cursor, Windsurf, Continue, and any other JSON-RPC 2.0 MCP client can call the following tools:
help Print this message or the help of the given subcommand(s)

Options:
--offline
Hard-disable every outbound network call for this run (sets VULKRO_OFFLINE=1). Blocks the CVE feed, the license heartbeat, the update check, webhooks, and any cloud AI endpoint; a loopback model (http://127.0.0.1, http://localhost) is still allowed. Equivalent to exporting VULKRO_OFFLINE=1, and the flag wins when both are set

-h, --help
Print help (see a summary with '-h')

$ vulkro mcp serve --help
------------------------------------------------------------
Run Vulkro as an MCP server. Claude Desktop, Cursor, Windsurf, Continue, and any other JSON-RPC 2.0 MCP client can call the following tools:

* `scan_project({path, format?})` - full project scan * `scan_file({path})` - single-file scan * `explain({rule_id})` - per-rule markdown explainer * `list_rules()` - rule catalogue * `get_findings({scan_id})` - re-read prior scan findings

Transport: stdio by default (line-delimited JSON-RPC 2.0 over stdin / stdout, the transport every major MCP host uses). Pass `--port N` to expose an SSE transport on `127.0.0.1:N` instead.

Example Claude Desktop config (`claude_desktop_config.json`):

```json { "mcpServers": { "vulkro": { "command": "vulkro", "args": ["mcp", "serve"] } } } ```

Environment variables honoured by `mcp serve`: * `VULKRO_MCP_LOG=1` - emit per-request trace lines on stderr. Off by default so the stdio JSON-RPC stream stays clean. * `VULKRO_OFFLINE=1` - disable any outbound HTTP call during scans triggered through the MCP surface (same semantics as the top-level scan subcommand).

Pro capabilities (attack-path and impact maps, the release gate, evidence and compliance packs, heavy output formats, etc.) remain Pro capabilities: every language is Free, and a Free-tier user calling a Pro tool gets a JSON-RPC error with a clear upgrade message; the server keeps running.

Exit codes: `0` clean shutdown (the host closed stdin, or Ctrl-C was hit in the SSE mode). `1` the server started but encountered a Pro-feature refusal on a tool call that the caller treated as fatal. `2` operational error: bind failure, transport-level IO error, bad argument to `mcp serve`.

Usage: vulkro mcp serve [OPTIONS]

Options:
--offline
Hard-disable every outbound network call for this run (sets VULKRO_OFFLINE=1). Blocks the CVE feed, the license heartbeat, the update check, webhooks, and any cloud AI endpoint; a loopback model (http://127.0.0.1, http://localhost) is still allowed. Equivalent to exporting VULKRO_OFFLINE=1, and the flag wins when both are set

--port <PORT>
SSE port. When set, the server binds an HTTP listener on `127.0.0.1:<PORT>` and exposes `/sse` (event stream) and `/messages` (POST endpoint for JSON-RPC requests). When omitted, the default stdio transport is used

-h, --help
Print help (see a summary with '-h')