MCP server for codebase security scanning (secrets, SAST, SCA, IaC)
Project description
secscan-mcp
A portable MCP server for security scanning — works with any AI coding assistant that supports the Model Context Protocol: Cursor, VS Code, Claude Desktop, Windsurf, Zed, Continue, and more.
Scan codebases for hardcoded secrets, SAST issues, vulnerable dependencies, and IaC misconfigurations — one install, one normalized report format.
The built-in custom scanner works with no extra tools. Install optional CLIs for broader coverage (below).
Quick start
1. Install (Python 3.11+):
pip install secscan-mcp
Or run without installing (requires uv):
uvx secscan-mcp
For MCP config with uvx, use "command": "uvx" and "args": ["secscan-mcp"] — see setup guide.
Install from source
git clone https://github.com/openjkai/secscan_mcp.git
cd secscan_mcp && pip install .
2. Add to your IDE — pick your client:
| IDE / client | Config file | Guide |
|---|---|---|
| Cursor | ~/.cursor/mcp.json |
setup → |
| VS Code | .vscode/mcp.json |
setup → |
| Claude Desktop | OS-specific (see guide) | setup → |
| Claude Code | ~/.claude/settings.json |
setup → |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
setup → |
| Others | — | Full setup guide |
Minimal config (works in Cursor, Claude Desktop, Windsurf):
{
"mcpServers": {
"secscan": {
"command": "uvx",
"args": ["secscan-mcp"]
}
}
}
If you installed with pip install secscan-mcp, you can use "command": "secscan-mcp" instead.
3. Verify — ask your agent: "Call list_available_scanners and scan_secrets on this project."
MCP tools
| Tool | Purpose |
|---|---|
list_available_scanners |
Which engines are installed on this machine |
scan_secrets |
Hardcoded credentials and secrets (optionally scan git commit history) |
scan_code |
SAST (semgrep, bandit) |
scan_dependencies |
Vulnerable packages (osv-scanner) |
scan_iac |
IaC misconfigurations (checkov) |
scan_all |
All available scanners, one unified report |
explain_finding |
Remediation hints for a rule_id |
Most scan tools accept path (directory to scan) and optional severity_threshold (critical, high, medium, low, info).
scan_secrets also accepts include_git_history (boolean). When true, scans past git commits for secrets removed from the working tree but still present in history — no extra tools required beyond git.
Optional scanners
Install any of these to extend coverage. Missing CLIs are skipped — the server still runs.
| Engine | Category | Install (example) |
|---|---|---|
| gitleaks | secrets | brew install gitleaks |
| semgrep | SAST | pip install semgrep |
| bandit | SAST (Python) | pip install bandit |
| osv-scanner | dependencies | brew install osv-scanner |
| checkov | IaC | pip install checkov |
After installing, run list_available_scanners again to confirm.
Example prompts
- "Call
list_available_scannersand tell me what's installed." - "Run
scan_secretswith include_git_history on this repo — check if any secrets were ever committed." - "Run
scan_allwith severity_threshold high and summarize the findings." - "Explain the rule
internal-api-key."
Configuration
Environment variables (optional):
| Variable | Default | Description |
|---|---|---|
SECSCAN_DEFAULT_TIMEOUT_SECONDS |
300 |
Per-engine scan timeout |
SECSCAN_MAX_FINDINGS |
500 |
Max findings per report |
SECSCAN_GIT_MAX_COMMITS |
500 |
Max commits scanned in git history mode |
Pass via MCP config env block — see setup guide.
Development
make install-dev # editable install + dev tools
make check # lint + typecheck + test
See docs/CONTRIBUTING.md and PLAN.md.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file secscan_mcp-0.1.2.tar.gz.
File metadata
- Download URL: secscan_mcp-0.1.2.tar.gz
- Upload date:
- Size: 20.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0b476d0e3ea6d8a9994e1e9343d1c01f657c77b88fc0c1269fd0f1544aca000d
|
|
| MD5 |
75a735f0d3ec7dc0f8e004ddcb95823b
|
|
| BLAKE2b-256 |
69b6935efbf5412f664f5db7d23327995eea25be7e12af120622cfbc38ed21eb
|
Provenance
The following attestation bundles were made for secscan_mcp-0.1.2.tar.gz:
Publisher:
release.yml on openjkai/secscan_mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
secscan_mcp-0.1.2.tar.gz -
Subject digest:
0b476d0e3ea6d8a9994e1e9343d1c01f657c77b88fc0c1269fd0f1544aca000d - Sigstore transparency entry: 1843235674
- Sigstore integration time:
-
Permalink:
openjkai/secscan_mcp@8054634b1e737f38064f8c5799b2155b174cebb4 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/openjkai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@8054634b1e737f38064f8c5799b2155b174cebb4 -
Trigger Event:
release
-
Statement type:
File details
Details for the file secscan_mcp-0.1.2-py3-none-any.whl.
File metadata
- Download URL: secscan_mcp-0.1.2-py3-none-any.whl
- Upload date:
- Size: 23.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7785182fa188917d077a9e36bff4492680a5d1aa1e7c54088e3cb84dc15a29a2
|
|
| MD5 |
eed52512151659875ec575a11724be16
|
|
| BLAKE2b-256 |
68e48af9af8b265b5a5517d7f29f2f2dbba3d9663cbf959258064acd60833498
|
Provenance
The following attestation bundles were made for secscan_mcp-0.1.2-py3-none-any.whl:
Publisher:
release.yml on openjkai/secscan_mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
secscan_mcp-0.1.2-py3-none-any.whl -
Subject digest:
7785182fa188917d077a9e36bff4492680a5d1aa1e7c54088e3cb84dc15a29a2 - Sigstore transparency entry: 1843235757
- Sigstore integration time:
-
Permalink:
openjkai/secscan_mcp@8054634b1e737f38064f8c5799b2155b174cebb4 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/openjkai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@8054634b1e737f38064f8c5799b2155b174cebb4 -
Trigger Event:
release
-
Statement type: