Skip to main content

mcp-vet

A trust-scan framework for MCP servers: evidence-backed verdicts before you install — usable from any harness.

uvx --from mcp-vetting mcp-vet @modelcontextprotocol/server-fetch   # one command
uvx --from mcp-vetting mcp-vet ./my-server --harness hermes          # verdict + config for YOUR harness
uvx --from mcp-vetting mcp-vet pypi:fastmcp --json --gate            # machine-readable, CI-friendly

Verdicts: SAFE_TO_INSTALL · REVIEW_BEFORE_INSTALL · DO_NOT_INSTALL — every finding carries file:line and plain-English evidence. A verdict is a gate for humans, never a black box.


The flow

  1. Vet any target: npm / PyPI / GitHub / local directory.
  2. Read the verdict + findings (evidence, not vibes).
  3. Configure: pick your harness, paste the emitted config block.
  4. Gate it in CI with --gate (exit 1 on DO_NOT_INSTALL).

Three surfaces, one engine

Surface Use
Library from mcp_vet import vet, Policy → VetResult (verdict, findings, provenance)
CLI mcp-vet <target> [--json] [--gate] [--strict] [--harness ...]
MCP server mcp-vet-server — tools: vet_server, vet_directory, get_verdict, list_scanners, list_harnesses, get_config

Targets

npm:pkg            npm registry + tarball        (bare names default to npm)
pypi:pkg           PyPI JSON + sdist/wheel
gh:owner/repo      GitHub metadata + source
./path             local source directory (offline)

Bare names that fail to resolve on npm (e.g. PyPI-only servers like
`mcp-server-time`) automatically fall back to PyPI before reporting failure.

Harness adapters (any harness, paste-ready)

--harness emits the exact config block for your tool:

harness output
generic universal mcpServers block
claude-code claude mcp add <name> -- <cmd> <args>
cursor .cursor/mcp.json
vscode .vscode/mcp.json (VS Code servers schema)
hermes ~/.hermes/config.yaml mcp_servers block

--harness all prints every adapter. Programmatic: config_for(harness, ServerSpec(...)).

Policy (calibrated defaults, --strict to disable)

Static analysis must not cry wolf. Defaults, learned by vetting the real ecosystem:

  • Examples/tests/docs are informational — examples/, tests/, docs/ code can't block a package on its own (strict restores raw findings).
  • Fake secrets don't count — sk-test-…, example, xxxx literals are placeholders, not exfiltration.
  • Trusted-host auth is normal — credentials sent to a host named in the file (constant or literal) is client auth; HIGH only when the destination host appears nowhere in the code.
  • Host interpolation → REVIEW — https://${host}/… is a strong signal, but static analysis can't prove the host is user-controlled; a human decides. Strict mode blocks on it.

JSON schema (stable)

{
  "target": "npm:some-server", "kind": "npm", "version": "1.2.3",
  "verdict": {
    "level": "REVIEW_BEFORE_INSTALL",
    "summary": "3 finding(s); 0 high, 1 medium.",
    "findings": [
      {"scanner": "ssrf", "severity": "medium", "message": "...",
       "file": "dist/index.js", "line": 41, "evidence": "fetch(url)"}
    ]
  },
  "provenance": {"version": "1.2.3", "license": "MIT",
                 "source_url": "git+https://...", "source": "npm"},
  "files_scanned": 214, "duration_s": 1.7
}

Scanners

ssrf · exec · secrets · auth · provenance · deps — static, local-first (no telemetry, no cloud round-trips; the cache is a local SQLite file under ~/.cache/mcp-vet).

Verification

python3 -m unittest discover -s tests    # 48 checks: golden corpus is the quality bar

The golden corpus is the contract: known-good fixtures must never carry HIGH findings; malicious fixtures must always block. The ecosystem scan (scripts/ecosystem_scan.py) keeps the tool honest against real packages.

Honest limits

Static analysis has false positives and negatives. A verdict is a gate for humans, not a replacement for them — read the evidence. Sandboxed execution, egress audit-trail, and live CVE lookups are planned for v2.

Metadata

Release files for mcp-vetting 0.2.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mcp-vetting 0.2.2
File Size Uploaded Provenance Actions
mcp_vetting-0.2.2.tar.gz 25.0 kB Without provenance Details for mcp_vetting-0.2.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for mcp-vetting 0.2.2
File Interpreter ABI Platform Actions
mcp_vetting-0.2.2-py3-none-any.whl Python 3 none any Details for mcp_vetting-0.2.2-py3-none-any.whl

Total release size: 51.9 kB

Release files / mcp_vetting-0.2.2.tar.gz

Download URL mcp_vetting-0.2.2.tar.gz
Size 25.0 kB
Tags Source
SHA-256 checksum
How to use checksums
fd7671bdc9dd5421672abbb18fff91d79c1406d5a78cb3c2357525c82d446e78
BLAKE2b-256 checksum
How to use checksums
3339467e859a49e0650458eec82cb54314f4857ae939cb6c71fbef06c0b74170
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Release files / mcp_vetting-0.2.2-py3-none-any.whl

Download URL mcp_vetting-0.2.2-py3-none-any.whl
Size 26.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4ca0e807e11fa2189d4bc9819a26149b9c7cade4023db4d16648e9646dc2306e
BLAKE2b-256 checksum
How to use checksums
359a6db5bb9ceae1f23060852617fcd7b19a6c66c3d1c1acfc01d7744d07eaea
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Security for mcp-vetting 0.2.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.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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