Install
$ agentstack add mcp-skyrxin-sast-mcp-server ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.8.1 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ● Shell / process execution Used
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.8.1. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
SAST MCP Server
[](https://pypi.org/project/sast-mcp-server/) [](https://glama.ai/mcp/servers/Skyrxin/sast-mcp-server) [](https://python.org) [](LICENSE) [](https://github.com/Skyrxin/sast-mcp-server/actions) [](https://codecov.io/gh/Skyrxin/sast-mcp-server)
Static Application Security Testing (SAST) for AI agents. A production-ready MCP server that gives any AI agent the ability to scan code for security vulnerabilities.
Supports 11 industry-standard scanners:
| Scanner | Languages / Scope | Type | |---------|-------------------|------| | Bandit | Python | Security linter | | njsscan | JavaScript, Node.js | Static analysis | | Bearer | Python, JS, Ruby, Java, Go, PHP | Data-flow SAST | | Semgrep | 30+ languages | Rule-based SAST | | Trivy | All (CVEs, Secrets, IaC, images) | Multi-scanner | | CodeQL | Python, JS, Java, Go, C/C++, C#, Ruby, Swift | Semantic SAST | | Checkov | Terraform, K8s, Docker, CloudFormation | IaC policy scanner | | Gitleaks | All (.git history) | Deep secret scanning | | OSV-Scanner| Multiple (lockfiles, sboms) | SCA | | Grype | Containers, OS packages, lockfiles, SBOMs | SCA / image scanning | | OWASP ZAP | RUNTIME | Dynamic (DAST) via Docker |
Works with any MCP-compatible agent: Gemini CLI, Claude Desktop, OpenAI Agents, Cursor, Windsurf, and more.
Features
- 🔍 11 SAST/SCA/DAST scanners with a unified output format
- 🌳 AST-aware context — shows the full enclosing function, not just a line number
- 📊 Severity & confidence filtering — focus on what matters
- 🔀 Git diff mode — scan only modified files for incremental reviews
- 🙈 Ignore management — suppress false positives with audit trail
- 📄 Pagination — handle large codebases without overwhelming the agent
- 🌐 Dual transport — stdio (local) or Streamable HTTP (remote deployments)
- 🔐 JWT & API key authentication — secure remote deployments
- 📦 One command install —
pip install sast-mcp-server - 🚀 Multi-scanner mode — run all installed scanners in parallel with deduplication
- 📋 SARIF export — CI/CD integration with GitHub, GitLab, Azure DevOps
- 🏗️ IaC scanning — Terraform, Kubernetes, Docker security policies
- 🔑 Secret detection — find hardcoded API keys, tokens, and passwords in code and git history
- 📦 SCA / dependency CVEs — scan lock files for known vulnerabilities against the OSV database
- 🕷️ DAST — dynamic baseline scans of running apps via OWASP ZAP + Docker
- 📈 Baselines & trend tracking — cache scans and diff against a saved baseline
- 🤖 MCP Prompts & Resources — pre-built security workflows and live dashboards for agents
- 📤 Dashboard integrations — push SARIF results to DefectDojo or GitHub Code Scanning
- 🩹 AI-assisted remediation — generate fix prompts and apply agent-written patches via
git apply
Quick Start
The server is only as useful as the scanners installed alongside it. Pick the install path that matches how much of the toolset you want out of the box.
Option 1 — Full container (recommended: 9 scanners, zero setup)
docker pull ghcr.io/skyrxin/sast-mcp-server:full
Bundles bandit, njsscan, bearer, semgrep, trivy, checkov, gitleaks, osv-scanner, and grype so scan_all works immediately. Or bring up an HTTP server with one command:
docker compose up # serves http://localhost:8080/mcp + /health /ready /metrics
Option 2 — pip extra (4 pip-installable scanners)
pip install "sast-mcp-server[scanners]" # adds bandit, njsscan, semgrep, checkov
Option 3 — minimal / custom
pip install sast-mcp-server # server only — bring your own scanners
uvx sast-mcp-server # run without installing
Then install whichever scanners you need (binary scanners aren't pip packages):
pip install bandit njsscan semgrep checkov # pip-installable
# trivy: https://aquasecurity.github.io/trivy/latest/getting-started/installation/
# grype: https://github.com/anchore/grype#installation
# gitleaks: https://github.com/gitleaks/gitleaks#installing
# osv-scanner: https://google.github.io/osv-scanner/installation/
# bearer: https://docs.bearer.com/installation/
# codeql: https://github.com/github/codeql-cli-binaries/releases
What ships where
| Scanner | :full image | [scanners] extra | Notes | |---------|:---:|:---:|-------| | Bandit | ✅ | ✅ | pip | | njsscan | ✅ | ✅ | pip | | Semgrep | ✅ | ✅ | pip | | Checkov | ✅ | ✅ | pip | | Bearer | ✅ | — | install script | | Trivy | ✅ | — | binary | | Gitleaks | ✅ | — | binary | | OSV-Scanner | ✅ | — | binary | | Grype | ✅ | — | binary | | CodeQL | — | — | multi-GB bundle — mount at runtime | | OWASP ZAP | — | — | runs via Docker on the host (run_active_scan) |
> At startup the server logs how many scanners it can actually see (e.g. > Scanners available: 9/11 (...)), and the list_scanners tool / /ready > endpoint report the same — so it's always obvious what you have.
[](https://glama.ai/mcp/servers/Skyrxin/sast-mcp-server)
Usage with AI Agents
Gemini CLI
Install as an extension:
gemini extensions install https://github.com/Skyrxin/sast-mcp-server
Or add to your ~/.gemini/settings.json:
{
"mcpServers": {
"sast": {
"command": "uvx",
"args": ["sast-mcp-server"]
}
}
}
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"sast": {
"command": "uvx",
"args": ["sast-mcp-server"]
}
}
}
See [full Claude Desktop guide](docs/claude-desktop.md).
Cursor IDE
Add to Cursor Settings → MCP Servers:
{
"mcpServers": {
"sast": {
"command": "uvx",
"args": ["sast-mcp-server"]
}
}
}
See [full Cursor guide](docs/cursor.md).
OpenAI Agents SDK
from agents.mcp import MCPServerStdio
sast_server = MCPServerStdio(command="uvx", args=["sast-mcp-server"])
See [full OpenAI guide](docs/openai.md).
Available MCP Tools
scan_vulnerabilities
Scan a directory for security vulnerabilities using a specific scanner.
| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | target_path | string | required | Path to scan | | scanner_name | string | "bearer" | Scanner: bandit, njsscan, bearer, semgrep, trivy, codeql, checkov | | min_severity | string | "LOW" | Minimum severity: LOW, MEDIUM, HIGH, CRITICAL | | min_confidence | string | "LOW" | Minimum confidence: LOW, MEDIUM, HIGH | | git_diff_only | bool | false | Only scan git-modified files | | limit | int | 50 | Max findings to return | | offset | int | 0 | Pagination offset |
scan_all
Run ALL installed scanners in parallel with automatic deduplication. Recommended for comprehensive security scanning.
| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | target_path | string | required | Path to scan | | min_severity | string | "MEDIUM" | Minimum severity (higher default to reduce noise) | | min_confidence | string | "LOW" | Minimum confidence | | git_diff_only | bool | false | Only scan git-modified files | | limit | int | 50 | Max findings to return | | offset | int | 0 | Pagination offset |
scan_git_history
Scan the entire .git history for leaked secrets and credentials using Gitleaks.
| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | target_path | string | "." | Path to the repository root (must contain .git) | | min_severity | string | "LOW" | Minimum severity to report |
run_active_scan
Run a dynamic (DAST) baseline scan with OWASP ZAP by orchestrating a Docker Compose stack.
| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | target_path | string | required | Directory containing the docker-compose file | | docker_compose_file | string | required | Name of the docker-compose file (e.g. docker-compose.yml) | | target_url | string | required | URL of the running app once it's up (e.g. http://localhost:8080) |
export_sarif
Export scan results in SARIF 2.1.0 format for CI/CD integration.
| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | target_path | string | required | Path to scan | | scanner_name | string | "bearer" | Scanner to use | | min_severity | string | "LOW" | Minimum severity | | min_confidence | string | "LOW" | Minimum confidence | | output_path | string | "" | File path to write SARIF (empty = return as string) |
list_scanners
List available scanners, their installation status, and supported languages.
ignore_vulnerability
Suppress a finding from future scans (with audit trail).
unignore_vulnerability
Re-enable a previously suppressed finding.
list_ignored_vulnerabilities
Show all currently suppressed findings for a project.
save_baseline
Run a scan and cache the results as a named baseline for future trend comparison.
| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | target_path | string | required | Path to scan | | tag | string | "latest" | Name for this baseline (e.g. main, pre-release) | | scanner_name | string | "bearer" | Scanner to use | | min_severity | string | "LOW" | Minimum severity to include | | min_confidence | string | "LOW" | Minimum confidence to include |
compare_baseline
Compare a fresh scan against a saved baseline to highlight new and fixed findings.
| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | target_path | string | required | Path to scan | | tag | string | "latest" | Baseline tag to compare against | | scanner_name | string | "bearer" | Scanner to use | | min_severity | string | "LOW" | Minimum severity to include | | min_confidence | string | "LOW" | Minimum confidence to include |
upload_to_defectdojo
Import a SARIF export into a DefectDojo engagement. Requires DEFECTDOJO_URL and DEFECTDOJO_API_KEY environment variables.
| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | sarif_path | string | required | Path to a SARIF file from export_sarif | | engagement_id | int | required | Target DefectDojo engagement ID | | active | bool | true | Mark imported findings active | | verified | bool | false | Mark imported findings verified |
upload_to_github
Upload a SARIF report to GitHub Code Scanning. Requires a GITHUB_TOKEN with security_events: write scope.
| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | sarif_path | string | required | Path to a SARIF file from export_sarif | | repo | string | required | Repository in owner/name form | | commit_sha | string | required | Full commit SHA the results apply to | | ref | string | required | Fully qualified ref, e.g. refs/heads/main |
generate_fix_prompt
Package a cached finding's vulnerable code and context into an LLM-ready prompt that asks for a strict unified diff fix.
| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | target_path | string | required | Scanned project root (with .sast-mcp-cache) | | finding_hash | string | required | Hash of the finding to fix (from scan output) | | context_window | int | 15 | Source lines to include before/after the finding |
apply_patch
Apply an agent-generated unified diff to disk via git apply (paths that escape the target directory are rejected).
| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | target_path | string | required | Directory the patch paths are relative to | | patch | string | required | The unified diff text to apply | | check_only | bool | false | Validate without modifying files |
evaluate_policy
Run all scanners and return an explicit PASS/FAIL verdict for CI gating.
| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | target_path | string | required | Path to scan | | max_critical | int | 0 | Max allowed CRITICAL (−1 = unlimited) | | max_high | int | -1 | Max allowed HIGH (−1 = unlimited) | | max_medium | int | -1 | Max allowed MEDIUM (−1 = unlimited) | | fail_on_new | bool | false | Fail if findings are new vs. a scan_all baseline | | baseline_tag | string | "latest" | Baseline tag used when fail_on_new | | output_format | string | "markdown" | markdown or json |
export_sbom
Run all scanners and export an SBOM / vulnerability report. In CycloneDX mode, if Syft is installed the component inventory is the full dependency list (not just vulnerable packages).
| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | target_path | string | required | Path to scan | | output_path | string | "" | File to write (empty = return inline) | | min_severity | string | "LOW" | Minimum severity to include | | sca_only | bool | true | Only dependency (SCA) findings; false = all | | format | string | "cyclonedx" | cyclonedx or spdx (SPDX 2.3) |
generate_report
Run all scanners and render an executive security report.
| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | target_path | string | required | Path to scan | | output_path | string | "" | File to write (empty = return inline HTML; required for PDF) | | min_severity | string | "LOW" | Minimum severity to include | | format | string | "html" | html or pdf (needs the [pdf] extra) |
compliance_report
Map findings to a compliance framework and report the posture.
| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | target_path | string | required | Path to scan | | framework | string | "owasp" | owasp, sans, pci, or cis | | output_path | string | "" | Optional file to write the markdown report | | min_severity | string | "LOW" | Minimum severity to include |
scan_image
Scan a container image reference for vulnerabilities and secrets (Trivy or Grype).
| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | image_ref | string | required | Image reference, e.g. nginx:1.25 | | scanner_name | string | "trivy" | trivy or grype | | min_severity | string | "MEDIUM" | Minimum severity to report | | output_format | string | "markdown" | markdown or json |
remediate_and_verify
Closed-loop remediation: dry-run a patch, apply it, re-scan, and confirm the finding is gone (rolling the patch back on failure).
| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | target_path | string | required | Project root (with a .sast-mcp-cache) | | finding_hash | string | required | Hash of the finding to fix | | patch | string | required | Unified diff to apply | | scanner_name | string | "" | Re-scan scanner (default: the finding's scanner) | | auto_rollback | bool | true | Revert the patch if verification fails |
import_sarif
Ingest a
…
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: Skyrxin
- Source: Skyrxin/sast-mcp-server
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.8.1 Imported from the upstream source.