Skip to main content

mcpvet

Independent security scanner and reputation layer for MCP servers and agent skills.

Status: pre-launch. v0.1 = static CLI scanning. Reputation site/API and the GitHub Action follow per ROADMAP.md.

mcpvet discovers the MCP servers configured in your AI coding clients (Claude Code/Desktop, Cursor, Windsurf, Gemini CLI, OpenCode) and checks them for supply-chain risks: hardcoded secrets, download-and-execute launch commands, over-broad permissions, pinned-version drift, and (in later versions) tool-description poisoning, typosquats, and runtime rug-pulls. Findings map to the OWASP Top 10 for LLM and Agentic applications and can be exported as SARIF into GitHub code scanning.

Why another scanner?

Local scanning is covered by mcp-scan / Snyk Agent Scan. mcpvet's job is the layers around it:

  1. A public reputation database — continuously scanned public registry, per-server risk pages and change history.
  2. Org-level enforcementmcp-policy.yaml + GitHub Action that blocks risky MCP/skill changes in PRs.
  3. Compliance reporting — findings mapped to OWASP, EU AI Act, and (later) Australian ISM / Essential Eight / DISP controls.

Quickstart

# published on PyPI as "mcphound" (mcpvet and mcp-vet were both already
# taken/rejected) — mcphound is also installed as the "mcpvet" command,
# kept as a back-compat alias
uvx mcphound inspect   # inspect what you have (never executes a server)
uvx mcphound scan      # scan auto-discovered configs

# or install once:
# pip install mcphound / uv tool install mcphound

# CI: fail on high/critical findings, emit SARIF
mcphound scan .mcp.json --fail-on high --sarif -o mcphound.sarif

# opt-in: also run network-dependent checks (npm registry provenance) — slower,
# not fully deterministic offline, so it's off unless you ask for it
mcphound scan --deep

Development

uv sync --extra dev
uv run pytest -q          # tests
uv run ruff check .       # lint
make scan-self            # scan this repo's own agent configs (dogfood)

Safety

mcpvet static scanning never executes MCP servers. Dynamic analysis (post-v1) runs only inside the disposable, network-isolated sandbox in sandbox/. Every malicious test fixture carries the marker MCPVET-FIXTURE-CANARY and must never be referenced from agent configurations.

Authoring a detection rule

Every rule ships with four artifacts: YAML rule, malicious fixture, benign fixture, pytest. See .claude/skills/rule-authoring/SKILL.md (or the two worked examples under src/mcpvet/rules/ and tests/).

License

Apache-2.0

Download files

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

Source Distribution

mcphound-0.1.0.tar.gz (77.6 kB view details)

Uploaded Source

Built Distribution

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

mcphound-0.1.0-py3-none-any.whl (21.5 kB view details)

Uploaded Python 3

File details

Details for the file mcphound-0.1.0.tar.gz.

File metadata

  • Download URL: mcphound-0.1.0.tar.gz
  • Upload date:
  • Size: 77.6 kB
  • Tags: Source
  • Uploaded using 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}

File hashes

Hashes for mcphound-0.1.0.tar.gz
Algorithm Hash digest
SHA256 83965a7cc974c7d138b323da3244d9378db4da713386bbf9fcec7b76cdc1b05f
MD5 1c80e0442b0b758aeacb2c412ad4df30
BLAKE2b-256 e773027d7fd7ae634850b11a797d7b557d36bf4e215bebd6ee2f5ddc0eb36cf1

See more details on using hashes here.

File details

Details for the file mcphound-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: mcphound-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 21.5 kB
  • Tags: Python 3
  • Uploaded using 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}

File hashes

Hashes for mcphound-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 42d51f3a81202b6a7b8952397b3e41a6c0712f3cb129588dd7ba8aca2492516f
MD5 b716f693ccc4b0e4666863299bb0ea97
BLAKE2b-256 29a378201e057fbe20f5fe171d3d66a92fd1122b4b80e1e107c18cb66b456fb3

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page