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 islow)--include-dev— also scandevDependenciesinpackage.json--format json— machine-readable output for bothwatchalerts andreport--min-severityonreport— filter the printed report- State lives in
~/.config/mcp-cve-watch/state.json(MCP_CVE_WATCH_DIRor--state-diroverrides 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/uvxpackages actually executing on your machine, which often don't live in any repository Dependabot can see.
How it works
- Parses each manifest into pinned
(name, version, ecosystem)triples (PyPI fromrequirements.txt, npm frompackage.json). - Sends one batched query to the OSV.dev API — no API key needed.
- Maps CVSS scores to severity (≥9.0 critical, ≥7.0 high, ≥4.0 medium).
- 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)
| File | Size | Uploaded | |
|---|---|---|---|
| mcp_cve_watch-0.1.0.tar.gz | 13.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|