aevrin
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 mcp "npx -y @playwright/mcp" # scan a server by its launch command
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). |
--remote |
Scan a local folder on Aevrin's servers instead of this machine, so no Docker or scanner binary is needed locally. Local paths only. |
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 ┃ Rule ┃ Title ┃ Affected tools ┃
┡━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ CRITICAL │ AS-006 │ Arbitrary Code Execution│ browser_run_code_unsafe │
│ LOW │ AS-011 │ Missing Rate Limits x5 │ browser_navigate, browser_ta… │
└──────────┴──────────┴─────────────────────────┴────────────────────────────────┘
Other commands
aevrin login / logout # browser device-code login, credentials in ~/.aevrin
aevrin agent scan # what the AI coding agents on this machine may do
aevrin agent scan --json # versioned snapshot; never contains a credential value
aevrin hook setup # log in the Claude Code hook, print its settings snippet
aevrin hook allow <target> # short-lived override after a hook block
aevrin findings triage <id> <status> [--reason ...]
agent scan reads configuration only: no agent is started and nothing from a config file is
executed. Nothing leaves the machine without --upload. Full reference:
https://mcp.aevrin.net/docs/cli.
Development
uv sync
uv run pytest tests -v
uv run ruff check .
uv run mypy aevrin_cli
Release files for aevrin 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| aevrin-0.5.0.tar.gz | 134.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aevrin-0.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 173.6 kB
Release files / aevrin-0.5.0.tar.gz
| Download URL | aevrin-0.5.0.tar.gz |
|---|---|
| Size | 134.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0c0fcd30ab9cb48a76e220af7555115ef6730b8909254950d64a77ab14e384fd
|
|
BLAKE2b-256 checksum How to use checksums |
f71acc5824d24cc46036b21340e5a70fefec00ae72ebbe203d2aeb1ce59c1493
|
| 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 Sep 6, 2026.
Transparency logRelease files / aevrin-0.5.0-py3-none-any.whl
| Download URL | aevrin-0.5.0-py3-none-any.whl |
|---|---|
| Size | 38.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7121105c4a3282cf61190db4d424e22ab9133711212b582c0f14a22475eb1ca3
|
|
BLAKE2b-256 checksum How to use checksums |
76d3af88c4974244f83532d1f40c5705f705d170ad623932abe9fdf115c4f58e
|
| 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 Sep 6, 2026.
Transparency log