Zennoxa Shield

MCP server · in the free CLI since v0.7.0 · scans run on your machine

Let your coding agent run the security scan.

shield mcp turns the Shield CLI into a Model Context Protocol server. Your agent scans the repository, reads findings in priority order with the flagged line and the fix guidance the engine has for it, and checks a gate, using the same 341-rule engine as shield scan. No account.

1. Install the CLI

curl -sSL https://zennoxa.com/install | sh

Or brew install zennoxa/tap/shield. More options on the CLI page.

2a. Claude Code

claude mcp add shield -- shield mcp

Then ask it to scan the repository with Shield. Add --root . after mcp to confine scans to the project directory.

2b. Other MCP clients (mcp.json)

{ "mcpServers": { "shield": { "command": "shield", "args": ["mcp"] } } }

Any client that starts a stdio server from a command and arguments.

Six tools

All six only read from disk; shield_scan with deps=true also makes outbound requests (see below). Scan results stay in memory for the server session (the last 8 scans), so the agent scans once and asks follow-up questions.

shield_scanScan a directory. Returns a scan id, severity counts and the top 25 findings by priority.
shield_findingsPage and filter the findings of a scan: severity, rule, file, minimum priority, reachable only.
shield_findingOne finding in full: file and line, the flagged snippet, the recommendation when the engine has one and, for catalogued SAST rules, the rule description plus a before/after example where the rule ships one.
shield_ruleLook up a catalogued SAST rule by id: what it detects, CWE, languages, fix hint.
shield_gatePass/fail on a scan with a severity, grade or score threshold. Same semantics as the CLI gate flags.
shield_sbomCycloneDX or SPDX components from the dependency manifests, paged.

What a scan returns

Trimmed from a real shield_scan response: the release binary against appsecco/dvna, a public deliberately-vulnerable Node app.

{
  "scan_id": "scan-65eaedf366de",
  "summary": { "total": 12, "critical": 3, "high": 5, "medium": 4, "low": 0, "info": 0 },
  "findings_preview": [
    { "id": "f001", "rule": "SHIELD-TAINT-SQL", "severity": "high", "priority": 41.4,
      "reachable": true, "file": "core/appHandler.js", "line": 11,
      "title": "SQL injection via tainted variable (cross-line data flow)", "cwe": "CWE-89" }
  ],
  "next": "Call shield_finding with a finding id for the flagged code and fix guidance before editing."
}

Each finding has a per-scan id and a fingerprint: a hash of the rule, file path and flagged line text, the same value the CLI writes to SARIF and uses for --baseline. It survives line-number shifts and changes when the file is renamed or that line is edited.

What touches the network

shield_scan (default)Nothing. No network access.
shield_scan with deps=truePackage names and versions go to OSV.dev; CVE ids go to FIRST EPSS; the CISA KEV feed is downloaded. Source code is not sent.
shield_findings, shield_finding, shield_rule, shield_gate, shield_sbomNothing. They read the scan held in memory or local manifests.
What the agent receivesFinding metadata and the flagged source line. Your agent forwards tool results to its model provider, as with any tool.

Limits, stated up front

Questions

Does my source code leave my machine?

The scan itself runs locally and uploads nothing. With deps=true, package names and versions are sent to OSV.dev, CVE ids to FIRST EPSS, and the CISA KEV feed is downloaded. The tool results (finding metadata and the flagged source line) are returned to your agent, which sends them to its model provider like any other tool output.

Are secrets shown to the agent?

For secret-class findings the snippet is masked before it is returned: quoted strings of 8 or more characters and tokens of 16 or more characters keep their first 4 characters and the rest is replaced. It is pattern-based, best effort, and applies to the MCP tools only.

Which agents does it work with?

It is a standard MCP server over stdio. We have run the scan and finding tools end to end with Claude Code 2.1 and with the official MCP Go SDK client. Any client that launches a stdio server with a command and arguments should work; we have not tested other clients ourselves.

Why do priority scores look low?

Code, secret and configuration findings have no CVE, so they top out at 45 out of 100 everywhere: CVSS gives up to 30 and reachability 15. Only dependency CVEs can score higher, through EPSS and CISA KEV with deps=true. The hosted dashboard keeps EPSS and KEV fresh for findings that have a CVE. Findings whose rule has no CVSS value (container-config and Terraform rules today) are not scored.

Does Shield fix the code?

No. Shield reports findings and fix guidance; your agent edits the code. After an edit, scan again and compare fingerprints (a hash of rule, file path and flagged line text) to see what was fixed.

Is it open source?

The CLI binary is free and MIT-licensed. The engine source is not public. Releases, checksums, docs and the issue tracker are on GitHub.

Zennoxa Shield MCP server: security scans as a tool for AI coding agents — Zennoxa Shield