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.