Skip to main content

Aevrin MCP Security Scanner CLI — scan a GitHub repo, local path, or live MCP server.

Project description

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 — no network call required unless you pass --upload.

Install

pip install aevrin

Requires Docker (each scanner runs in its own disposable container — see the main repo README for why).

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 --upload   # requires AEVRIN_API_KEY env var

Target type is auto-detected: a github.com URL scans the full pipeline (static analysis, secrets, dependencies, tool-description checks); any other http(s):// URL is treated as a live MCP server (manifest-level checks only); anything that exists on disk is scanned as a local path (full pipeline, no cloning).

Flags

Flag Behavior
--json Machine-readable JSON on stdout instead of a formatted table.
--upload Pushes the result to your Aevrin account. Requires AEVRIN_API_KEY, set from your account's API keys settings page — never required for a local-only 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 Misuse — bad arguments, a target that couldn't be resolved, every scan stage failed to run, or --upload failed.

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aevrin-0.1.2.tar.gz (43.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aevrin-0.1.2-py3-none-any.whl (13.1 kB view details)

Uploaded Python 3

File details

Details for the file aevrin-0.1.2.tar.gz.

File metadata

  • Download URL: aevrin-0.1.2.tar.gz
  • Upload date:
  • Size: 43.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for aevrin-0.1.2.tar.gz
Algorithm Hash digest
SHA256 a58f19742b446eac1c7f8877ca5ddf4e3ed440919d51850779126f6a6b15c54b
MD5 e06f1e8a0b6cefd7f5bb1e8d8a05d6b5
BLAKE2b-256 ca6d8edb4c5ac418091dd504e1848a58ced4e36b44fec35e03454bf90d01a82d

See more details on using hashes here.

Provenance

The following attestation bundles were made for aevrin-0.1.2.tar.gz:

Publisher: publish.yml on aevrin-projects/aevrin-mcp-scanner

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aevrin-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: aevrin-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 13.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for aevrin-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 232cd31078a380554a40b2157c3a874062a0c27b06ad8dbea5a2d9e895ed4a9c
MD5 3f1403bbfbb0faf29bff974e00007160
BLAKE2b-256 cb4deab7fc1277d20e6266f8be88556e63d735955ad706a86a6ba29c1eb69614

See more details on using hashes here.

Provenance

The following attestation bundles were made for aevrin-0.1.2-py3-none-any.whl:

Publisher: publish.yml on aevrin-projects/aevrin-mcp-scanner

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page