Skip to main content

vuln-triage-mcp

Tells your AI agent which vulnerabilities to fix first, using OSV.dev, FIRST EPSS, and CISA KEV.

[badges: PyPI version, Python versions, license, tests]

Why this exists

Two or three sentences. CVSS alone ranks by severity, not by likelihood of exploitation. This server adds exploit probability (EPSS) and known exploitation (KEV), and shows its reasoning. Example: a CVSS 9.8 nobody exploits ranks below a CVSS 8.8 that is being exploited in the wild.

Quick start

Claude Code

claude mcp add vuln-triage -- uvx vuln-triage-mcp

Claude Desktop / other clients

JSON config snippet using uvx. Requires: Python 3.12+, no API keys.

Try it

Three example prompts and what to expect:

  • "Which is most urgent: CVE-2021-44228, CVE-2023-4863, CVE-2019-10744?"
  • "Is lodash 4.17.15 vulnerable? What should I upgrade to?"
  • "Is CVE-XXXX actively exploited?"

Tools

Tool Args Use it when Prefer another when
lookup_vulnerability vuln_id raw advisory details for one CVE/GHSA user wants prioritization -> triage_vulnerability
find_vulns_for_package name, ecosystem, version="" "what vulns affect package X (version Y)" user already has an ID
get_epss_score cve_id exploit-probability only user wants overall priority -> triage_vulnerability
check_known_exploited cve_id "is this exploited in the wild" (CISA KEV) same
triage_vulnerability vuln_id any "how urgent / what should I fix first" question raw details only -> lookup_vulnerability

How scoring works

  • Formula: CVSS (base) x 40 + EPSS x 35 + KEV +25; KEV-listed floors at 80
  • Buckets: see the table below
  • Missing data: component omitted, named in reasoning, lowers confidence
  • Link to docs/scoring-spec.md
Bucket When
critical score >= 80, or listed in CISA KEV (always floored to 80, whatever the confidence)
high score 60-79
medium score 40-59
low score < 40
unknown not KEV-listed, and either no CVSS severity or low confidence (0-1 of 3 signals). Too little data to classify; the score is still returned, and reasoning names what is missing. Not a low-risk verdict.

unknown takes precedence over high, medium, and low; it never applies to a KEV-listed vulnerability.

Reliability and limits

  • Partial results: if EPSS or KEV fails, the result names the missing source
  • Truncation: truncated, found_count vs returned_count, ranking_note
  • Stale KEV cache: stale and catalog_fetched_at
  • Timeouts and retry policy (one line)
  • Package queries return at most 50 advisories, sorted by severity

Security

  • Advisory text is untrusted third-party content (prompt injection vector): sanitized, length-capped, returned under untrusted_text, and flagged to the model in the server instructions
  • Input validation on all IDs and ecosystems
  • No credentials required or stored; read-only calls to three public APIs
  • Reporting vulnerabilities in this project: SECURITY.md or email

Evaluation

Golden set: 17 entries (16 CVEs, 1 GHSA) with expected buckets, confidence, and ordering, recorded 10/21/2026. Result: 17/17 match on the recorded fixtures (uv run pytest tests/test_golden.py), and 17/17 against the live APIs on 10/21/2026 (uv run pytest -m live tests/test_golden.py). EPSS drifts daily, so the live run can diverge over time; re-record the fixtures with uv run python scripts/record_golden_fixtures.py when the golden set or scoring spec changes.

Data sources and attribution

OSV.dev, FIRST EPSS (cite per their usage terms), CISA KEV. Not affiliated with any of them.

Development

uv sync, uv run pytest, running the Inspector, live-test marker.

License

MIT

Metadata

Release files for vuln-triage-mcp 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 vuln-triage-mcp 0.1.0
File Size Uploaded Provenance
vuln_triage_mcp-0.1.0.tar.gz 23.2 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for vuln-triage-mcp 0.1.0
File Interpreter ABI Platform
vuln_triage_mcp-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 51.6 kB

Release files / vuln_triage_mcp-0.1.0.tar.gz

Download URL vuln_triage_mcp-0.1.0.tar.gz
Size 23.2 kB
Tags Source
SHA-256 checksum
How to use checksums
a6f2688d85ff00695085b0632372f9aec2553fcabb311a6896f8f89e295e4c19
BLAKE2b-256 checksum
How to use checksums
e7a6086913a9ed296ff4a9afbe648a3d048c1cdd7dab03a25b0cff3e25e756a7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

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

Download URL vuln_triage_mcp-0.1.0-py3-none-any.whl
Size 28.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3482ac2249c34ea43559c1207d84daf0bb95e33f3727432898bb2d65bb38e5f2
BLAKE2b-256 checksum
How to use checksums
4e94d4b4faa5bc3a202ef8c3fc30ca8de7600506af1c7ec34cfceb4b4315b987
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for vuln-triage-mcp 0.1.0

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.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

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