Skip to main content

aevrin

PyPI version Python versions License Downloads Publish status

Aevrin MCP Security Scanner CLI. Wraps the same open-source scanner binaries and normalization logic (aevrin-scanner-core) that the Aevrin backend uses, run locally against your own machine. Results save to your Aevrin dashboard automatically once you're logged in, pass --no-upload for a purely local, ephemeral scan.

Install

python3 -m pip install --upgrade aevrin

The same CLI is also available through npm:

npm install --global aevrin

Requires Docker using Linux containers (each scanner runs in its own disposable container). On Docker Desktop, assign at least 4 GB of memory and permit bind mounts from the system temporary directory. Scanner images are version-pinned and pulled automatically when missing.

Usage

aevrin scan ./my-mcp-server
aevrin scan github.com/owner/repo
aevrin scan https://my-live-server.example.com --json
aevrin scan ./my-mcp-server --fail-on high
aevrin scan ./my-mcp-server --no-upload   # skip saving to your dashboard (e.g. in CI)

Target type is auto-detected: a github.com URL scans the full pipeline (static analysis, secrets, dependencies, tool-description checks); another public https:// URL is treated as a live MCP server (runtime description checks only); anything that exists on disk is scanned as a local path (full pipeline, no cloning). Private, loopback, metadata, credential-bearing, and plain-HTTP live targets are rejected. Aevrin never executes submitted stdio MCP commands.

Flags

Flag Behavior
--json Machine-readable JSON on stdout instead of a formatted table.
--no-upload Skip saving the result to your Aevrin dashboard (on by default once logged in). Useful in CI, or for a purely local, ephemeral scan.
--fail-on <severity> Minimum severity that causes a non-zero exit code. One of critical, high, medium, low, info. Defaults to high (both critical and high findings fail the build).

Exit codes

Code Meaning
0 Clean: no findings at or above the --fail-on threshold.
1 Findings at or above the --fail-on threshold were found.
2 Couldn't start, authentication, quota, API, target, or flag error.
3 Incomplete: a required scanner category did not execute. This is never treated as a clean pass.

Results go to stdout; stage progress and diagnostics go to stderr, safe to pipe --json output without stage-progress noise mixed in.

Example output

[✓] static analysis
[✓] secrets
[✓] dependencies
[✓] tool description check
[✓] aggregating

Target: ./my-mcp-server
Score:  62/100  Significant risk; do not deploy as-is

┏━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┓
┃ Severity ┃ Title                ┃ OWASP category                      ┃ Tool    ┃
┡━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━┩
│ CRITICAL │ Hardcoded secret     │ MCP01: Token Mismanagement          │ trivy   │
│ HIGH     │ subprocess shell true│ MCP05: Command Injection, ...       │ semgrep │
└──────────┴──────────────────────┴──────────────────────────────────────┴─────────┘

Development

uv sync
uv run pytest tests -v
uv run ruff check .
uv run mypy src

Release files for aevrin 0.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aevrin 0.3.1
File Size Uploaded
aevrin-0.3.1.tar.gz 113.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aevrin 0.3.1
File Interpreter ABI Platform
aevrin-0.3.1-py3-none-any.whl Python 3 none any Details

Total release size: 135.1 kB

Release files / aevrin-0.3.1.tar.gz

Download URL aevrin-0.3.1.tar.gz
Size 113.1 kB
Tags Source
SHA-256 checksum
How to use checksums
946ae382532eb7efe92b3c97bf13795b591264907162e969207d65a3bae38de4
BLAKE2b-256 checksum
How to use checksums
c09c80dd163959664d83555d019cb1abd5c6747640f81f9dc8edbcb02eedc23a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 25, 2026.

Transparency log

Release files / aevrin-0.3.1-py3-none-any.whl

Download URL aevrin-0.3.1-py3-none-any.whl
Size 22.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e9e33c8369bf167a9fab459f2168e8112b51f394a29fe1fc998d161a87dcb42e
BLAKE2b-256 checksum
How to use checksums
acae004e07523066d209b0ce8ce890fabaaf6f46bbbb8ec2084e09d52a8d186a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 25, 2026.

Transparency log

Release history Release notifications | RSS feed

0.5.0

2 release files

0.4.0

2 release files

This release

0.3.1 This release

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.9

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page