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. Results save to your Aevrin dashboard automatically once you're logged in — pass --no-upload for a purely local, ephemeral scan.

Install

pip install 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

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.7.tar.gz (101.1 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.7-py3-none-any.whl (20.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: aevrin-0.1.7.tar.gz
  • Upload date:
  • Size: 101.1 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.7.tar.gz
Algorithm Hash digest
SHA256 a1544331dd9e7c0192472974580989692bc71aeeb4476310ba575231fd951295
MD5 57c4f42d0040f84ca7177da35c08f715
BLAKE2b-256 d091145e99e844f272900b1cebcc9acbf071ec252eb231edf006145d10e2ce7e

See more details on using hashes here.

Provenance

The following attestation bundles were made for aevrin-0.1.7.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.7-py3-none-any.whl.

File metadata

  • Download URL: aevrin-0.1.7-py3-none-any.whl
  • Upload date:
  • Size: 20.2 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.7-py3-none-any.whl
Algorithm Hash digest
SHA256 dd83d53a43967b0d076385b9bb0e9589bd9d47093aa5a979e5244ef75d61e311
MD5 9aac981061eac223da40e3c075fb09fd
BLAKE2b-256 45778be57240d4ac47f8a0afc0c9f8cec70eeb26e106f77260f4eb50dc07113b

See more details on using hashes here.

Provenance

The following attestation bundles were made for aevrin-0.1.7-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