Labsco
MCP SERVER

Navi MCP Server

by packetchaos

Query your Tenable Vulnerability Management data through the navi CLI — read-only until you deliberately open the write gate.

Vulnerability Scanning & Application Security
Summary
Tenable data in chat, with the destructive half locked behind three switches.

The read surface is large enough to be genuinely useful on day one — assets, vulns, exports, tag queries — and it is the whole surface until you open a gate on purpose, so it is safe to point at production while you learn what it can do. The maintainer is explicit that the checks are argv-level and the server has not been exercised against a live tenant, so make your first call a single live read and check navi://workdir before you trust the numbers.

What it is

A Python MCP server that shells out to the Tenable `navi` binary and reads the local navi.db, exposing 20 tools plus navi:// resources. It does not manage API keys — you set those out of band with `navi config keys` first.

What you get
  • 20 registered tools; with no environment variables set beyond the workdir and binary path, everything exposed is a read
  • Three independent gates in front of anything that changes your tenant: the master switch `NAVI_MCP_ALLOW_WRITES`, then a capability gate, then `confirm=True` on the individual call
  • Separate opt-ins for the two dangerous capabilities — `NAVI_EMAIL` for sending mail as you, `NAVI_REMOTE_CODE_EXECUTION` for running shell commands on remote hosts
  • `navi://workdir` — the resolved workdir, whether navi.db is present and how fresh it is, all three gate states, and the call budget
  • `navi://schema/{table}` for live column definitions, and `navi://skill/{name}` to load one of the 17 bundled skills
  • A call budget near 220s: an export that would outlive it fails with the exact CLI command to run instead, scoped the same way
Requirements

`pip install navi-mcp`, or `pipx install "navi-mcp[navi]"` for an install that other packages in the interpreter cannot disturb. The mcp SDK must be at least 1.9 and below 2 — 2.x renamed the module and fails at import before any tool registers, which the client reports only as "Server disconnected". Set `NAVI_WORKDIR` to the folder that actually holds navi.db: it defaults to ~/.navi-mcp, and pointing at the wrong folder makes every read come back empty.

Setup effort

One command plus a key — pip install navi-mcp, then supply credentials