AppSecGate MCP

Local-first security scanner for AI coding agents

✦ Offline · No code leaves your machine

When to use AppSecGate

✅ Use when

  • You’re using AI coding agents (Claude Code, Cursor, Cline, Continue) that generate or modify code on your machine
  • You want security scanning to happen before commit, not after
  • The project is sensitive and code must never leave your machine (offline-first)
  • You need an auditable trail of findings shown to the developer and their fix attempts
  • You want deterministic deduplication across scans — same finding, same fingerprint, no noise

❌ NOT when

  • You need a CI/CD gate that blocks builds — that’s Phase 2 (coming)
  • You want the server to auto-fix findings — AppSecGate finds, the LLM fixes
  • You need a cloud dashboard with team management — that’s Phase 3
  • Your project has zero code (docs-only, design files) — there’s nothing to scan

14 MCP tools

ToolWhat it does
scan_fileScan a single file and return normalized findings.
scan_diffScan staged + unstaged + untracked changes in the current git repository.
scan_projectScan the entire project or a specific directory inside it.
get_fix_contextReturn the ContextPack for a finding (finding + code window + rule doc).
get_fix_context_batchReturn ContextPacks for multiple findings (limit 20).
verify_fixVerify a single finding: rescan the file and match by logical ID.
verify_fix_batchVerify up to 20 findings in one operation; each file is rescanned once.
query_findings_dbRead-only SELECT on public views (v_findings, v_summary, v_projects).
export_snapshotExport a snapshot of findings in ndjson format (parquet in Phase 2).
get_config / update_configRead and update the active session configuration.
submit_feedbackSubmit feedback on a finding: FALSE_POSITIVE / CONFIRMED / WONT_FIX.
get_scan_historyReturn the shown findings log with verification attempts.
suppress_findingCreate a local suppression (does not affect CI gate in Phase 1).

Quick Install

Claude Code

Add to ~/.claude/claude_dotfiles/claude.json:

{ "mcpServers": { "appsecgate": { "command": "docker", "args": ["run","--rm","-i","--network=none", "--read-only","--tmpfs=/tmp:size=100M,mode=1777", "--cap-drop=ALL", "--security-opt=no-new-privileges:true", "-v","/path/to/project:/workspace:ro", "-v","appsecgate-cache:/home/appsecgate/.cache", "-v","appsecgate-data:/home/appsecgate/.appsecgate-mcp", "moondoom/appsecgate-mcp:0.1.0"], "env": {} } } }

Cursor

.cursor/mcp.json:

{ "mcpServers": { "appsecgate": { "type": "docker", "command": "moondoom/appsecgate-mcp:0.1.0", "args": ["--transport","stdio","--project","/workspace"], "volumes": [ {"host":"/path/to/project", "container":"/workspace","mode":"ro"}, {"host":"appsecgate-cache", "container":"/home/appsecgate/.cache"}, {"host":"appsecgate-data", "container":"/home/appsecgate/.appsecgate-mcp"} ] } } }

Cline

.cline/mcp.json:

{ "mcpServers": { "appsecgate": { "command": "docker", "args": ["run","--rm","-i","--network=none", "--read-only","--tmpfs=/tmp:size=100M,mode=1777", "--cap-drop=ALL", "--security-opt=no-new-privileges:true", "-v","/path/to/project:/workspace:ro", "-v","appsecgate-cache:/home/appsecgate/.cache", "-v","appsecgate-data:/home/appsecgate/.appsecgate-mcp", "moondoom/appsecgate-mcp:0.1.0"], "env": {} } } }

Continue

.continue/mcpServers/appsecgate.yaml:

mcpServers: appsecgate: command: docker args: - run - --rm - -i - --network=none - --read-only - --tmpfs=/tmp:size=100M,mode=1777 - --cap-drop=ALL - --security-opt=no-new-privileges:true - -v - /path/to/project:/workspace:ro - -v - appsecgate-cache:/home/appsecgate/.cache - -v - appsecgate-data:/home/appsecgate/.appsecgate-mcp - moondoom/appsecgate-mcp:0.1.0

How it works

1

Scan

Agent calls scan_file, scan_diff, or scan_project. Semgrep (SAST), Gitleaks/TruffleHog (secrets), Trivy (SCA) run in isolated subprocesses.

2

Fingerprint

Each finding gets a deterministic logical ID. Repeated scans never create duplicates. Suppressions and escalations stay attached across the finding's lifecycle.

3

Context

Agent requests get_fix_context — receives the code window, rule docs, and raw finding. No LLM calls on the server — just structured data.

4

Verify

After fixing, verify_fix rescans and matches by logical ID. Results logged in shown_findings.db for audit.

Reference