aevrin
This package has moved to npm. 0.9.2 is the last Python release of the
aevrinCLI. It still works, and prints a notice on every run. Install the new CLI withnpm install -g aevrin(Node.js 22 or later), then remove this one withpip uninstall aevrin aevrin-scanner.
Aevrin MCP Security Scanner CLI. Wraps the same open-source scanner binaries and normalization logic (aevrin-scanner) 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: a scan starts the MCP server inside one disposable,
version-pinned engine image, which is pulled automatically when missing. On Docker Desktop,
assign at least 4 GB of memory and permit bind mounts from the system temporary directory.
There is no non-Docker fallback - an unavailable sandbox is an unavailable scan, never a scan
performed without one - so use --remote for a local folder if you would rather not run Docker.
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, another public https:// URL as a live MCP
server, or anything that exists on disk as a local path. The same checks run either way - one
engine over the tools a live server actually returns, in five stages (resolving, launching,
enumerating, analyzing, grading) - and the target type only changes how resolving works
out what to start. 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 (ScanStatus.INCOMPLETE): a stage that had to run did not. 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.
Aevrin prints one grade letter and a risk score, then each finding as its own block rather than
a table row, because a table forced every finding down to a title. Stage progress is listed
above it. Run aevrin scan --help, or see the full reference for the exact shape:
https://docs.mcp.aevrin.net/cli.
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 findings triage <id> <status> [--reason ...]
aevrin mcp-server # local stdio MCP server with one tool, scan_mcp_server
aevrin mcp-header # print the Authorization header for Aevrin MCP
aevrin registry publish <dir> # Aevrin administrators only
mcp-server needs the MCP extra: pip install "aevrin[mcp]", and
registry publish the YAML extra: pip install "aevrin[registry]".
Aevrin MCP (https://api.mcp.aevrin.net/mcp) needs your Aevrin API key. mcp-header prints
{"Authorization":"Bearer <key>"} from the key aevrin login stored, so Claude Code can read it
without the key being written into its config:
claude mcp add-json --scope user aevrin '{"type":"http","url":"https://api.mcp.aevrin.net/mcp","headersHelper":"aevrin mcp-header"}'
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 -p aevrin.cli
Metadata
Release files for aevrin 0.9.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| aevrin-0.9.2.tar.gz | 192.3 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aevrin-0.9.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 260.6 kB
Release files / aevrin-0.9.2.tar.gz
| Download URL | aevrin-0.9.2.tar.gz |
|---|---|
| Size | 192.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4759bbc7eadfce9757fa7c32d0631aadb173586af34a969de1c54d011a47f89b
|
|
BLAKE2b-256 checksum How to use checksums |
9f6afbfbb3c5d98c514a0f81738a5eb6fad71f2837868cfc051226437aa6c394
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / aevrin-0.9.2-py3-none-any.whl
| Download URL | aevrin-0.9.2-py3-none-any.whl |
|---|---|
| Size | 68.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
26bbdfdae4982e5f246e8e3eb3aeec29058f354c22ff75884d733807a7ddfff8
|
|
BLAKE2b-256 checksum How to use checksums |
73f6168e998b67c4e7760404591694fa5ee9493f94ab0bc7f4b36b96d8b2df98
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for aevrin 0.9.2
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.