Skip to main content

mcp-cve-watch

Continuous CVE intelligence for your MCP servers' runtime dependencies.

MCP servers run real code — npm packages, PyPI packages, system daemons with network access. A vulnerability in one of those dependencies is a vulnerability in everything that server can touch. Public CVE disclosures against MCP ecosystem packages are rising, and most MCP users never check: the server was installed once, npx cached it, and nobody looked at it again.

mcp-cve-watch subscribes you to that feed. Point it at the dependency manifests your MCP servers run on, and watch checks OSV.dev (which aggregates CVE and GitHub Advisory data across PyPI, npm, and more) for every pinned dependency. The first run records a baseline; every later run alerts only on new CVEs — with severity mapped from CVSS scores — so it works as a quiet cron job or a CI gate.

Zero dependencies. Python standard library only.

Install

pip install mcp-cve-watch
# or with pipx:
pipx install mcp-cve-watch

Requires Python 3.9+. No other packages.

Usage

Check your MCP servers' dependencies — pass the manifest files the servers run on (requirements.txt pins for Python-based servers, package.json for Node-based ones):

$ mcp-cve-watch watch ./mcp-servers/requirements.txt ./mcp-servers/package.json
checked 14 pinned dependencies at 2026-10-11 08:52 UTC

*** 2 NEW CVE(s) since last check ***

SEVERITY  SCORE  ID              PACKAGE     VERSION  SUMMARY
--------  -----  --------------  ----------  -------  ----------------------------------------
CRITICAL  9.8    CVE-2024-0001   some-lib    1.2.3    Remote code execution via crafted input...
HIGH      7.5    CVE-2024-0002   other-lib   4.5.6    Denial of service in parser...

Run it again tomorrow: if nothing new appeared, it just says so.

$ mcp-cve-watch watch ./mcp-servers/requirements.txt
checked 8 pinned dependencies at 2026-10-12 09:00 UTC
no new CVEs since last check

Use it as a CI gate — fail the build when a new high-or-worse CVE shows up:

mcp-cve-watch watch requirements.txt --fail-on high   # exits 3 on new HIGH/CRITICAL

Print the full report of everything the last run found:

$ mcp-cve-watch report --format markdown
mcp-cve-watch report (last check: 2026-10-11T08:52:11+00:00) — 2 finding(s)

| Severity | Score | ID | Package | Version | Summary |
|---|---|---|---|---|---|
| critical | 9.8 | CVE-2024-0001 | some-lib | 1.2.3 | Remote code execution via crafted input... |

Options worth knowing:

  • --severity high — only record HIGH and above (default is low)
  • --include-dev — also scan devDependencies in package.json
  • --format json — machine-readable output for both watch alerts and report
  • --min-severity on report — filter the printed report
  • State lives in ~/.config/mcp-cve-watch/state.json (MCP_CVE_WATCH_DIR or --state-dir overrides it)

Cron example — a daily check that emails you only when something is new:

0 9 * * * mcp-cve-watch watch ~/mcp-servers/requirements.txt --fail-on high --severity medium

Differentiation

  • vs mcp-audit — mcp-audit is a point-in-time runtime audit: it handshakes each MCP server once and reports what it sees right now (tool counts, schema cost, failures). mcp-cve-watch is a continuous vulnerability-intelligence subscription: it keeps a baseline of every known CVE on your servers' dependencies and alerts only on what's new since the last check. Run the audit when you install a server; run the watch every day after.
  • vs Dependabot / Renovate — those watch the dependencies of a GitHub repository. mcp-cve-watch watches the dependencies of your MCP servers at runtime — the pinned npx/uvx packages actually executing on your machine, which often don't live in any repository Dependabot can see.

How it works

  1. Parses each manifest into pinned (name, version, ecosystem) triples (PyPI from requirements.txt, npm from package.json).
  2. Sends one batched query to the OSV.dev API — no API key needed.
  3. Maps CVSS scores to severity (≥9.0 critical, ≥7.0 high, ≥4.0 medium).
  4. Diffs against the previous run's state and alerts only on new findings.

Only pinned versions (==, exact npm versions) can be checked against a CVE feed — unpinned lines are skipped with a warning. Pin your MCP server deps.

License

MIT — see LICENSE.

Metadata

Release files for mcp-cve-watch 0.1.0

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-cve-watch 0.1.0
File Size Uploaded
mcp_cve_watch-0.1.0.tar.gz 13.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mcp-cve-watch 0.1.0
File Interpreter ABI Platform
mcp_cve_watch-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 26.2 kB

Release files / mcp_cve_watch-0.1.0.tar.gz

Download URL mcp_cve_watch-0.1.0.tar.gz
Size 13.9 kB
Tags Source
SHA-256 checksum
How to use checksums
3bb79624d09e4956b598632f8ca0a954f38ba1cca56a3ca1b86530a1c3388d2c
BLAKE2b-256 checksum
How to use checksums
ab465a91e996cb4d5330ab2446e4540c8aa9b00030d1ebe1a885bde4236e0993
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / mcp_cve_watch-0.1.0-py3-none-any.whl

Download URL mcp_cve_watch-0.1.0-py3-none-any.whl
Size 12.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
32eeb0e6d22ff86fd184ba0aedce7963c650b4607884042a0bd1bdc8613a4c42
BLAKE2b-256 checksum
How to use checksums
81dbbaa12835a2872970515aae89269ca68837e30dd9ca3dbf512b62830db170
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release 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