A previous release had provenance metadata, but this release does not. View details.
aevrin
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.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Loss of provenance
These files do not have provenance metadata, despite files in a prior release including this data.
We recommend further investigation before installing these files. View details.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| aevrin-0.9.1.tar.gz | 191.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aevrin-0.9.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 259.0 kB
Release files / aevrin-0.9.1.tar.gz
Loss of provenance
This file belongs to a release without provenance metadata, despite a prior release including this data.
We recommend further investigation before installing this file. View details.
| Download URL | aevrin-0.9.1.tar.gz |
|---|---|
| Size | 191.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
51dbc5e276df6fc7f9ee72e1e31e25cf62086cc0bcd5e0c68b77cea02dad463b
|
|
BLAKE2b-256 checksum How to use checksums |
57a8ceae53c75de830e68985befaa1685130a1f6caad8b05b6ee6de8f06b1734
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aevrin-0.9.1-py3-none-any.whl
Loss of provenance
This file belongs to a release without provenance metadata, despite a prior release including this data.
We recommend further investigation before installing this file. View details.
| Download URL | aevrin-0.9.1-py3-none-any.whl |
|---|---|
| Size | 67.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
014cf1f3f31b5afe7f5588a220e29f797ae84d4a770d21a7a2931161b0316941
|
|
BLAKE2b-256 checksum How to use checksums |
5c8c77e56a0dbef84cb2054130896bee264bf3fc34ffdaa774f77ef1130bd36f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Security for aevrin 0.9.1
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.
Loss of provenance
A previous release of these files had provenance metadata, but this release does not.
While this could reflect a routine change by the project maintainers, it may also indicate that the release files have been compromised.
Release comparison
- Removed 0.7.0 2 files With provenance
- Added 0.9.1 2 files Without provenance
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.