Security scanner for Model Context Protocol servers
Sentinel scans MCP server configurations, live endpoints, and Docker containers for security misconfigurations β surfacing findings with severity ratings, remediation guidance, and CI/CD integration.
Sentinel detects misconfigurations. For 360Β° enterprise runtime protection, see Helixar.
- π Config scanner β static analysis of MCP server config files (10 checks)
- π Probe scanner β live endpoint security analysis (8 checks)
- π³ Container scanner β Docker container/image inspection (8 checks)
- π 26 detection rules across all modules
- π¨ 4 output formats β terminal (Rich), HTML, JSON, SARIF 2.1
- βοΈ GitHub Action β drop-in CI integration with SARIF upload support
- π¦ Fail-on threshold β block PRs on HIGH/CRITICAL findings
pip install helixar-sentinelOr from source:
git clone https://github.com/Helixar-AI/sentinel
cd sentinel
pip install -e ".[dev]"# Scan a config file
sentinel config mcp.json
# Probe a live endpoint
sentinel probe https://your-mcp-server.example.com
# Inspect a Docker container
sentinel container my-mcp-image:latest
# Run all scanners in one pass
sentinel scan --config mcp.json --endpoint https://mcp.example.com --container my-image:latest
# Output as SARIF for GitHub Code Scanning
sentinel config mcp.json --format sarif --output sentinel.sarif.json- uses: Helixar-AI/sentinel@v1
with:
config: ./mcp.json
endpoint: ${{ secrets.MCP_ENDPOINT }}
container: my-mcp-image:latest
fail-on: high
format: sarif
output: sentinel.sarif.json
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: sentinel.sarif.json| Input | Required | Default | Description |
|---|---|---|---|
config |
No | β | Path to MCP server config file |
endpoint |
No | β | Live MCP endpoint URL to probe |
container |
No | β | Docker container name or image |
fail-on |
No | high |
Minimum severity to fail the build |
format |
No | sarif |
Output format (terminal/json/sarif/html) |
output |
No | sentinel.sarif.json |
Report output path |
| Format | Flag | Use case |
|---|---|---|
| Terminal | --format terminal (default) |
Local development |
| JSON | --format json |
Custom tooling |
| SARIF | --format sarif |
GitHub Code Scanning |
| HTML | --format html |
Stakeholder reports |
| ID | Severity | Check |
|---|---|---|
| CFG-001 | π΄ CRITICAL | No authentication configured |
| CFG-002 | π΄ CRITICAL | Plaintext secrets in config |
| CFG-003 | π HIGH | Wildcard tool permissions |
| CFG-004 | π HIGH | No rate limiting |
| CFG-005 | π‘ MEDIUM | Debug mode enabled |
| CFG-006 | π HIGH | No TLS configuration |
| CFG-007 | π HIGH | Wildcard CORS origin |
| CFG-008 | π‘ MEDIUM | No input validation |
| CFG-009 | π‘ MEDIUM | Sensitive data logging |
| CFG-010 | π΅ LOW | No request timeout |
| ID | Severity | Check |
|---|---|---|
| PRB-001 | π΄ CRITICAL | TLS certificate invalid/expired |
| PRB-002 | π HIGH | Weak TLS version (< TLS 1.2) |
| PRB-003 | π΄ CRITICAL | No authentication required |
| PRB-004 | π‘ MEDIUM | Server version disclosed in headers |
| PRB-005 | π‘ MEDIUM | Missing security headers |
| PRB-006 | π HIGH | Tool listing publicly exposed |
| PRB-007 | π΅ LOW | Verbose error messages |
| PRB-008 | π HIGH | No rate limiting detected |
| ID | Severity | Check |
|---|---|---|
| CTR-001 | π HIGH | Container running as root |
| CTR-002 | π΄ CRITICAL | Privileged container mode |
| CTR-003 | π‘ MEDIUM | No CPU/memory resource limits |
| CTR-004 | π HIGH | Sensitive env vars exposed |
| CTR-005 | π‘ MEDIUM | Writable root filesystem |
| CTR-006 | π΅ LOW | No health check configured |
| CTR-007 | π‘ MEDIUM | Outdated base image |
| CTR-008 | π HIGH | Dangerous ports exposed |
sentinel config mcp.json --fail-on critical # exit 1 on CRITICAL only
sentinel config mcp.json --fail-on high # exit 1 on HIGH+ (default)
sentinel config mcp.json --fail-on medium # exit 1 on MEDIUM+
sentinel config mcp.json --fail-on low # exit 1 on any findingRules are data, not code β adding one takes three steps:
1. Add to sentinel/rules/rules.yaml
2. Add a _check_<key> method in the relevant module scanner
3. Add tests
See CONTRIBUTING.md for the full workflow.
python -m pytest tests/unit/ -v
python -m pytest tests/ --cov=sentinel --cov-report=html-
sentinel watchβ continuous monitoring mode - Kubernetes manifest scanning
- JWT algorithm confusion + replay attack probe checks
-
--diffflag for regression detection across runs - Additional output: JUnit XML for legacy CI systems
MIT β see LICENSE
Built by Helixar Security Research β’ Runtime protection: helixar.ai
β Star this repo if sentinel is useful to you β it helps others find it.