Scanners and Coverage
Every scanner, what it detects, and how stage reliability is calculated.
Aevrin normalizes specialist scanners into one finding model. Each scanner contributes evidence to a specific stage.
| Stage | Scanner | Primary signal |
|---|---|---|
| Static analysis | Semgrep | Injection, traversal, SSRF, unsafe subprocess, and framework patterns |
| Static analysis | Bandit | Python security mistakes and dangerous APIs |
| Secrets | Gitleaks | High-confidence secret patterns |
| Secrets | TruffleHog | Secret detection with verification metadata when supported |
| Dependencies | OSV-Scanner | Known vulnerable packages across manifests and lockfiles |
| Dependencies | Trivy | Vulnerabilities, secret patterns, and configuration issues |
| Dependencies | OpenSSF Scorecard | Optional supply-chain posture when GITHUB_TOKEN is configured |
| Tool descriptions | mcp-shield | Hidden instructions and suspicious tool-description language |
| Tool descriptions | MCP SDK inspection | Safely enumerates tools from public remote endpoints |
| Tool descriptions | Aevrin rules | Weak auth, missing audit signals, excessive scope, and manifest concerns |
Stage outcomes
- Completed means at least one required tool ran and its output was parsed.
- Failed means the stage could not produce reliable evidence.
- Skipped means the check is not applicable, such as no discoverable safe MCP entrypoint.
- Incomplete scan means a required category has no reliable tool result. Its score reflects only checks that ran and cannot be treated as a clean pass.
Finding severities and locations come from scanner evidence, then map to a consistent OWASP MCP category and remediation field. Raw scanner data remains available for audit, while secrets and runtime errors are redacted before display or upload.
Deliberate limits
Static scanning cannot prove runtime authorization behavior, detect a future rug pull, or adversarially test prompt injection in live tool responses. Aevrin records these as limitations; it does not manufacture coverage for tests that did not run.