Local-first AppSec MCP server for AI agents. Scans code offline, no LLM calls.
170
Local-first security scanning for AI coding agents.
AI agents ship code faster than security can review it. AppSecGate is an MCP server that scans files, diffs, and whole projects right inside Claude Code, Cursor, Cline, or Continue — offline, without sending your code anywhere.
Findings are normalized, deduplicated by fingerprint, tracked between scans, and returned to the agent as fix contexts. The server itself never calls an LLM.
shown_findings.db — so CI can later distinguish "new" from "ignored".get_fix_context and verifies fixes via verify_fix. The server only ships data, never prompts.--network=none, no outbound calls, ever.Pull the image:
docker pull moondoom/appsecgate-mcp:0.1.0
Add to ~/.cline/data/settings/cline_mcp_settings.json:
{
"mcpServers": {
"appsecgate": {
"type": "stdio",
"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", "/absolute/path/to/your/project:/workspace:ro",
"-v", "appsecgate-cache:/home/appsecgate/.cache",
"-v", "appsecgate-data:/home/appsecgate/.appsecgate-mcp",
"moondoom/appsecgate-mcp:0.1.0",
"--transport", "stdio", "--project", "/workspace"
],
"disabled": false,
"timeout": 600
}
}
}
Add to <project>/.cursor/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", ".:/workspace:ro",
"-v", "appsecgate-cache:/home/appsecgate/.cache",
"-v", "appsecgate-data:/home/appsecgate/.appsecgate-mcp",
"moondoom/appsecgate-mcp:0.1.0",
"--transport", "stdio", "--project", "/workspace"
]
}
}
}
claude mcp add appsecgate -- docker run --rm -i --network=none --read-only \
--tmpfs=/tmp:size=100M,mode=1777 --cap-drop=ALL \
--security-opt=no-new-privileges:true \
-v .:/workspace:ro \
-v appsecgate-cache:/home/appsecgate/.cache \
-v appsecgate-data:/home/appsecgate/.appsecgate-mcp \
moondoom/appsecgate-mcp:0.1.0 --transport stdio --project /workspace
Full configs for all four clients (including Continue) and troubleshooting: https://github.com/moondoom/appsecgate-mcp/blob/main/docs/deploy-agents.md
Restart your client, then call get_config or scan_file on any file. Tools appear with the mcp__appsecgate__ prefix.
scan_file — scan a single file and return normalized findings.scan_diff — scan staged + unstaged + untracked changes in the current git repository.scan_project — scan the entire project or a specific directory inside it.get_fix_context — return the ContextPack for a finding (finding + code window + rule doc).get_fix_context_batch — return ContextPacks for multiple findings (limit 20).verify_fix — verify a single finding: rescan the file and match by logical ID.verify_fix_batch — verify up to 20 findings; each file is rescanned once.query_findings_db — read-only SELECT on public views (v_findings, v_summary, v_projects).export_snapshot — export a snapshot of findings in ndjson format (parquet — Phase 2).get_config — return the active (merged) session configuration.update_config — deep-merge updates into .appsecgate-mcp/config.yaml and reload the session.submit_feedback — submit feedback on a finding (FALSE_POSITIVE / CONFIRMED / WONT_FIX).get_scan_history — return the shown findings log (shown_findings.db) with verification attempts.suppress_finding — create a local suppression (does not affect CI gate in Phase 1).Every scanner runs as a separate subprocess (no shell). Planned for later phases: Bandit, ESLint (SAST); OSV-Scanner, Dependency-Track (SCA); Checkov, KICS (IaC); OWASP ZAP (DAST).
:ro, the server never writes to source files.--network=none, no outbound calls, ever.cap-drop=ALL, no-new-privileges.Per-project settings live in .appsecgate-mcp/config.yaml and are deep-merged over the image defaults:
version: 1
stack:
languages: [python, typescript]
frameworks: [fastapi, react]
scanners:
sast:
enabled: true
tool: semgrep
secrets:
enabled: true
tool: gitleaks
sca:
enabled: true
tool: trivy
severity_threshold: HIGH
gates:
block_on: [CRITICAL, HIGH]
warn_on: [MEDIUM]
The image is large (~3 GB) because it bundles the Semgrep rules, Trivy vulnerability DB, Gitleaks, and TruffleHog for fully offline operation. The first pull will take a while; subsequent runs are fast.
Phase 1 MVP — local, warn-only, no CI gate yet (that's Phase 2). See the product vision and roadmap:
0.1.0 — Phase 1 MVP, immutable.latest — points to the most recent stable release.MIT. Bundled scanner rules are third-party — see the third-party notices in the repository: https://github.com/moondoom/appsecgate-mcp/blob/main/mcp-server/rules/THIRD_PARTY_NOTICES.md
Content type
Image
Digest
sha256:2af1624fd…
Size
405.1 MB
Last updated
about 12 hours ago
docker pull moondoom/appsecgate-mcp