Consumes output from multiple MCP/A2A security scanners (Cisco MCP Scanner, Cisco A2A Scanner, mcp-scan, MCPwn, SARIF) and presents a consolidated view of your security posture via a web dashboard, REST API, and CLI.
pip install -e .
# Generate demo data and explore
mcpscope seed
mcpscope serve
# Run a scan directly against a server
mcpscope scan mcp-scan https://mcp-server.example.com/mcp
# Import results from different scanners
mcpscope import cisco-mcp results.json
mcpscope import cisco-a2a results.json
mcpscope import mcpwn results.json
mcpscope import sarif report.sarif
# Export a compliance report
mcpscope report --format csv --output report.csv
# Backup/Restore
mcpscope backup backup.db
mcpscope restore backup.db| Command | Description |
|---|---|
serve |
Start the FastAPI web dashboard |
scan |
Run a scanner directly against a target |
import |
Import scanner JSON/SARIF results into SQLite |
report |
Export JSON, CSV, or PDF compliance report |
seed |
Generate demo scan data |
prune |
Delete scans older than N days |
backup |
Backup the SQLite database |
restore |
Restore the SQLite database from backup |
config |
View or set configuration options |
| Endpoint | Description |
|---|---|
GET / |
Dashboard UI with filters and tabs |
GET /findings/{id} |
Finding detail page |
GET /docs |
Swagger UI |
GET /api/health |
Health check |
GET /api/scans |
List scans (paginated) |
GET /api/scans/{id} |
Scan details with findings |
GET /api/scans/{a}/diff/{b} |
Compare two scans |
GET /api/findings |
Query findings (paginated, filterable) |
GET /api/findings/{id} |
Single finding |
GET /api/stats/summary |
Aggregated statistics |
GET /api/stats/top-tools |
Most vulnerable tools |
GET /api/stats/severity-trend |
Findings over time |
GET /api/stats/duplicates |
Deduplicated findings |
GET /api/report/json |
Full JSON report |
GET /api/report/csv |
CSV export |
# Health check
curl http://localhost:8080/api/health
# List scans (paginated)
curl "http://localhost:8080/api/scans?page=1&page_size=10"
# Get scan with findings
curl http://localhost:8080/api/scans/scan-id-here
# Query findings with filters
curl "http://localhost:8080/api/findings?severity=critical&page=1"
# Search findings
curl "http://localhost:8080/api/findings?search=command"
# Compare two scans
curl "http://localhost:8080/api/scans/scan-a/diff/scan-b"
# Get stats summary
curl http://localhost:8080/api/stats/summary
# Get duplicates
curl http://localhost:8080/api/stats/duplicates
# Export as CSV
curl http://localhost:8080/api/report/csv -o report.csv
# Full JSON report
curl http://localhost:8080/api/report/json
# With API key authentication
curl -H "X-API-Key: your-key" http://localhost:8080/api/scans
# Swagger docs
open http://localhost:8080/docs- Overview tab — Severity pie chart, top tools bar chart, severity trend over time
- Findings tab — Filterable table with severity/scanner/tool/search, pagination, clickable rows for detail view
- Duplicates tab — Grouped findings by tool + title + severity across scans
- Diff tab — Side-by-side comparison between any two scans
- Scans tab — Historical scan table with severity counts
- Auto-refresh — Configurable auto-refresh interval
- Finding detail page — Full details including raw JSON data
| Scanner | CLI Name | Format |
|---|---|---|
| Cisco MCP Scanner | cisco-mcp |
scan_results with analyzer-grouped findings |
| Cisco A2A Scanner | cisco-a2a |
findings with AI Security Taxonomy metadata |
| mcp-scan (Invariant Labs) | mcp-scan / mcpscan |
issues array with severity codes |
| MCPwn (ressl) | mcpwn |
Standard findings with MCP-XXX IDs |
| MCPwn (Teycir legacy) | mcpwn |
Legacy test-based format |
| SARIF | sarif |
Standard SARIF 2.1 format |
| Dashboard Overview | Findings Table |
|---|---|
| Scan Diff | Finding Detail |
Run mcpscope seed && mcpscope serve and open http://localhost:8080 to see the live dashboard.
Secure the API with an API key:
mcpscope config set api_key "your-secret-key"
mcpscope serve
# All /api/* endpoints now require: X-API-Key: your-secret-keyA GitHub Actions workflow is included for automated scanning.
Slack alerts for critical/high findings:
mcpscope config set slack_webhook_url "https://hooks.slack.com/services/..."Webhook URLs for custom integrations:
mcpscope config set webhook_urls '["https://your-server.com/webhook"]'Config file at ~/.mcpscope/config.json:
mcpscope config show
mcpscope config set port 9090
mcpscope config set auto_refresh_seconds 60
mcpscope config set max_upload_mb 100docker build -t mcpscope .
docker run -p 8080:8080 -v mcpscope-data:/root/.mcpscope mcpscopepip install -e ".[dev]"
pytest