CVE MCP Server
Provides access to EPSS (Exploit Prediction Scoring System) scores from FIRST, allowing retrieval of exploitation probability and percentile for one or more CVEs.
Integrates with GitHub to search for public proof-of-concept exploits and exploit code repositories, and to retrieve GitHub Security Advisories (GHSA) related to CVEs.
Integrates with VirusTotal to provide malware associations and threat intelligence related to CVEs, aiding in assessing exploitation and malware campaigns.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CVE MCP ServerShould we patch CVE-2024-3400?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Ask “Should we patch CVE-2024-3400?” — get a scored, evidence-backed verdict in seconds.
Quick start · Demos · Tools · Scoring · Configuration · Architecture
Real output of cve-mcp call triage_cve — exactly the text your MCP client receives.
CVE MCP Server is a Model Context Protocol server that turns Claude (or any MCP client) into a security analyst. Instead of juggling NVD, EPSS, CISA KEV, GitHub, Exploit-DB, Shodan and VirusTotal in fifteen browser tabs, you ask one question — the server fans out to every relevant source in parallel, correlates the evidence and answers with a prioritised recommendation.
It ships as one self-contained Rust binary: no Python, no Node, no runtime to install.
✨ Highlights
🎯 One-call triage
triage_cve queries NVD, EPSS, CISA KEV and public exploit sources concurrently and returns a verdict — with a VulnCheck fallback when NVD is down.
🧮 Evidence over severity A transparent 0–100 score weights exploitation (EPSS + KEV) above raw CVSS. KEV-listed CVEs are always CRITICAL. Optional SSVC decision.
🔍 29 tools · 23 sources CVE intel, exploits & PoCs, ATT&CK, vendor advisories, IP / domain / hash / URL reputation, ransomware wallets, known-good files.
📦 Dependency scanning
Paste a requirements.txt, package.json, pom.xml or OS package list — get the most severe CVEs per package with real severities.
🦀 Fast & lean Single ~11 MB binary, async Tokio core, SQLite cache, starts instantly. Runs over stdio or stateless streamable HTTP.
🔐 Secure by default Outbound host allowlist on every request and redirect, masked secrets, redacted audit log, private-IP blocking, XXE-safe XML.
Related MCP server: CVE Intelligence MCP Server
🚀 Quick start
1 — Install (needs Rust 1.88+ and a C compiler)
cargo install --git https://github.com/Liohtml/cve-mcp-server --locked
cve-mcp --versionPrefer a download? Tagged releases ship prebuilt binaries for Linux, macOS and Windows on the Releases page.
2 — Connect your MCP client
# Claude Code
claude mcp add cve-mcp -e NVD_API_KEY=your-key -- cve-mcpEdit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"cve-mcp": {
"command": "/absolute/path/to/cve-mcp",
"env": {
"NVD_API_KEY": "your-key",
"GITHUB_TOKEN": "ghp_..."
}
}
}
}Use the absolute path (e.g. ~/.cargo/bin/cve-mcp, expanded) — Claude Desktop does not inherit your shell PATH. Fully quit and restart Claude Desktop afterwards.
Register a stdio server whose command is cve-mcp (no arguments), or point an HTTP-capable client at a running instance: http://localhost:8000/mcp (see Docker / HTTP). To poke at it interactively:
npx @modelcontextprotocol/inspector cve-mcp3 — Ask
“Is CVE-2021-44228 actively exploited and how urgent is it?” “Scan this requirements.txt and tell me what to upgrade first.” “Compare CVE-2024-3400, CVE-2024-6387 and CVE-2023-38545 — what do we patch first?”
No API key is required to start. Adding a free NVD_API_KEY makes NVD lookups 10× faster.
🎬 See it in action
Every tool can also be run straight from the terminal with cve-mcp call <tool> key=value … — handy for scripting and CI. The recordings below are real output.
Scan dependencies — the five most severe vulnerabilities per package, with CVE aliases and severities computed from CVSS v2/v3/v4 vectors:
Prioritise a backlog — rank CVEs by composite risk to decide what gets patched first:
🧰 Tools
⭐ Start here
Tool | What it does |
| One-call verdict for a CVE: NVD (+ VulnCheck fallback), EPSS, CISA KEV and PoC discovery in parallel → risk score, urgency, recommendation; |
🛡️ Vulnerability intelligence
Tool | What it does | Key |
| Full NVD record: status, dates, CVSS score & vector, CWEs, description, KEV status | NVD (optional) |
| Keyword search of NVD with optional severity filter (1–50 results) | NVD (optional) |
| One-page summary: severity, EPSS, KEV, description, weaknesses, timeline | NVD (optional) |
| EPSS exploitation probability & percentile for one or many CVEs | — |
| CISA Known Exploited Vulnerabilities status, due date, ransomware use | — |
| Score & explain CVSS v2, v3.0/3.1 (base, temporal, environmental) and v4.0 vectors | — |
| Publication → EPSS → KEV timeline, patch lag, exploit window | — |
| Advisories from Microsoft MSRC, Red Hat and Ubuntu | — |
| MITRE ATT&CK techniques referencing the CVE and the groups using them | — |
| Known vulnerabilities of one package/version via OSV.dev | — |
💥 Exploits, risk & reporting
Tool | What it does | Key |
| PoC discovery across GitHub, Exploit-DB and Nuclei templates with a confidence ladder |
|
| Public PoC repositories on GitHub, sorted by stars |
|
| Composite 0–100 score with a per-component breakdown | NVD (optional) |
| Rank 2–10 CVEs into a patch-priority table | NVD (optional) |
| Executive, technical or full report, optionally with remediation guidance | NVD (optional) |
🌐 Network & threat intelligence
Tool | What it does | Key |
| Abuse score, ISP, country, Tor flag + GreyNoise classification |
|
| Open ports, services, OS, hostnames and CVEs of a host |
|
| Certificate transparency (crt.sh), subdomains, passive DNS | CIRCL (optional) |
| Historical DNS resolutions of an IP or domain |
|
| MalwareBazaar + VirusTotal verdicts, family, tags, detection rate |
|
| Known-good check via CIRCL hashlookup (NIST NSRL + distro packages) | — |
| URLScan.io verdicts, score, categories, screenshot |
|
| ThreatFox malware attribution for an IP, domain, URL or hash |
|
| Ransomwhere lookup of a Bitcoin address | — |
🧑💻 DevSecOps
Tool | What it does | Key |
| Bulk OSV scan of | — |
| Same for OS packages (Alpine, Debian, Ubuntu, …) | — |
| Search public GitHub code for potentially exposed secrets |
|
| Upstream connectivity, KEV catalog, cache, tool-manifest hash, configured keys (names only) | — |
Kind | Name | Purpose |
Resource |
| Summary of the in-memory CISA KEV catalog |
Resource template |
| EPSS score of one CVE |
Resource |
| SHA-256 over every tool's name, description and schema — pin and verify the tool surface |
Prompt |
| Patch-now-or-schedule decision for one CVE via |
Prompt |
| Rank a list of CVEs for patching |
Prompt |
| Scan dependencies, then triage the CVEs found |
🧮 How the verdict is made
Why these weights? EPSS is the best predictor of real-world exploitation, KEV is ground truth that exploitation happens, CVSS describes severity rather than likelihood (Allodi & Massacci, 2014), and a public PoC lowers the attacker's bar.
KEV hard override: a CISA KEV listing means confirmed in-the-wild exploitation — the label is always
CRITICALand the score at least 76, whatever CVSS and EPSS say.PoC confidence ladder:
WEAPONIZED15 ·PUBLIC_EXPLOIT_REMOTE12 ·PUBLIC_EXPLOIT10 ·PUBLIC_POC_HIGH_QUALITY7 ·PUBLIC_POC_LOW_QUALITY3.SSVC (deep mode): the CISA Deployer decision tree (Exploitation × Automatable × Technical Impact × Mission & Well-being) yields
Act,Attend,Track*orTrack— an explainable, non-numeric second opinion.
🏗️ Architecture
src/
├── main.rs CLI: serve (stdio / HTTP), call, --list-tools, --healthcheck
├── mcp/ JSON-RPC dispatcher · stdio transport · streamable-HTTP transport
├── tools/ tool registry + handlers (core, threat, vuln, devsecops, risk, triage)
├── api/ one client per upstream (NVD, EPSS, KEV, OSV, VulnCheck, …)
├── utils/ risk scorer · SSVC · CVSS v2/v3/v4 · fan-out · retry · source trust
├── http.rs reqwest + rustls, host allowlist, redirect checks, size limits
├── cache.rs SQLite cache (WAL, per-source TTLs)
├── audit.rs rotating JSON audit log
├── config.rs environment config, Secret type
├── validators.rs CVE / IP / hash validation, SSRF checks
├── resources.rs kev://catalog · epss://scores/{cve_id} · manifest://tool-hash
└── prompts.rs patch_decision · compare_and_prioritize · dependency_triage⚙️ Configuration
Configuration comes from environment variables; a .env file in the working directory is loaded automatically (see .env.example). Every key is optional — tools say which key they are missing.
Variable | Enables | Get it |
| 50 instead of 5 NVD requests / 30 s | |
| PoC, Nuclei & secret search (5,000 instead of 60 req/h) | |
| NVD++ fallback inside | |
| MalwareBazaar + ThreatFox (required by abuse.ch since 2025) | |
| IP abuse scores | |
| Internet-noise classification | |
| Multi-engine detection stats | |
| Host exposure lookups | |
| Higher URLScan.io limits | |
| Passive DNS |
Variable | Default | Meaning |
|
|
|
|
| HTTP bind address (endpoint |
| — | Extra browser origins allowed to call the HTTP endpoint ( |
|
| SQLite response cache |
|
| JSON-lines audit log (50 MB × 5 rotation) |
|
| Upstream HTTP timeout in seconds |
|
| Attempts for retrying clients (NVD, VulnCheck, HIBP) |
|
| Log filter — logs always go to stderr |
🐳 Docker / HTTP
docker build -t cve-mcp-server .
docker run --rm -p 8000:8000 --env-file .env cve-mcp-server
claude mcp add --transport http cve-mcp http://localhost:8000/mcpThe HTTP transport is stateless (one JSON-RPC message per POST /mcp, JSON response) and accepts browser requests only from local origins unless MCP_ALLOWED_ORIGINS says otherwise. Put it behind your own TLS / auth proxy before exposing it beyond a trusted network.
⌨️ Command line
cve-mcp # serve MCP (stdio, or HTTP with MCP_TRANSPORT=http)
cve-mcp call triage_cve cve_id=CVE-2024-3400 depth=deep
cve-mcp call scan_dependencies dependency_list=@requirements.txt # @file / @- for stdin
cve-mcp call compare_cves '{"cve_ids": ["CVE-2024-3400", "CVE-2024-6387"]}'
cve-mcp --list-tools | --healthcheck | --version | --help🔐 Security & privacy
Outbound only, allowlisted: every request and every redirect hop must target a known API host; no inbound ports with stdio.
No secrets in logs: keys live in a
Secrettype with masked output, error messages strip credentials from URLs, and the audit log redacts any parameter named*key*/*token*.Input hardening: CVE / IP / hash validation, private & reserved IP ranges blocked (including IPv4-mapped IPv6), size-limited response bodies,
pom.xmlparsed with DTDs disabled.No sampling: the server never sends
sampling/createMessageback to the client — all model interaction is client-driven.Local data: responses are cached in a local SQLite file; nothing is sent anywhere except the lookups themselves.
Found a vulnerability? Please follow SECURITY.md.
Source | Used for | Auth |
NIST NVD 2.0 | CVE records, CVSS, CWE, search | optional API key |
VulnCheck NVD++ | NVD fallback in | token |
FIRST EPSS | Exploitation probability | — |
CISA KEV (+ GitHub mirror) | Known exploited vulnerabilities | — |
OSV.dev | Package vulnerabilities, bulk scans, record details | — |
MITRE ATT&CK (STIX) | Technique & group mapping | — |
Microsoft MSRC · Red Hat · Ubuntu | Vendor advisories | — |
GitHub search | PoC repositories, secret exposure | optional token |
Exploit-DB | Public exploits | — |
Nuclei templates | Detection templates | optional token |
AbuseIPDB · GreyNoise | IP reputation | keys |
Shodan | Host exposure | key |
crt.sh · CIRCL Passive DNS | Certificates, subdomains, DNS history | CIRCL credentials |
VirusTotal · MalwareBazaar · ThreatFox | Malware verdicts & attribution | keys |
URLScan.io | URL verdicts | optional key |
Ransomwhere | Ransomware wallets | — |
CIRCL hashlookup | Known-good files (NSRL) | — |
🧪 Development
cargo build # debug build
cargo test # unit + integration tests (offline, no API keys)
cargo fmt --all --check && cargo clippy --all-targets -- -D warningsCI runs the tests on Linux, macOS and Windows, checks the MSRV (1.88), audits dependencies and builds the Docker image. See CONTRIBUTING.md for how to add a tool.
The banner and diagrams in assets/ are hand-written SVG. The terminal GIFs are rendered from real recordings in scripts/readme-assets/recordings with headless Chromium (Playwright) and Pillow:
cve-mcp call triage_cve cve_id=CVE-2021-44228 depth=deep > scripts/readme-assets/recordings/triage.txt
node scripts/readme-assets/render-terminal.cjs triage # also: scan, compareClient shows no tools — check the config JSON for trailing commas, use the absolute binary path, fully restart the client.
RUST_LOG=debug cve-mcpprints diagnostics to stderr.“NVD rate limit exceeded” — set
NVD_API_KEY;triage_cvealso falls back to VulnCheck whenVULNCHECK_TOKENis set.MalwareBazaar / ThreatFox return nothing — abuse.ch requires
ABUSECH_AUTH_KEYsince 2025.GitHub-based searches are empty — unauthenticated GitHub search allows only a handful of requests per minute; set
GITHUB_TOKEN. Rate-limited results are never cached, so a retry works once the limit resets.Corporate proxy / custom CA —
HTTPS_PROXY/NO_PROXYare honoured and TLS uses the OS certificate store (plusSSL_CERT_FILEon Linux).
🙏 Credits & license
Originally created in Python by Mahipal Jangra (mukul975); this fork is a full Rust rewrite with the same tool surface. Licensed under the Apache License 2.0.
This server cannot be deployed
Maintenance
Related MCP Connectors
CVE triage in one call: NVD, CVSS, CISA KEV, EPSS, public exploits and an explained risk score.
Threat intel + your scans/findings/Shield posture. CVE, EPSS, KEV, package vuln lookup, DAST.
Real-time CVE, exploit, and vulnerability intelligence for AI assistants (350K+ CVEs, 115K+ PoCs)
CVE intelligence: exploitation (KEV/EPSS), detection coverage, fixed versions, CPE configurations.
Related MCP Servers
- AlicenseBqualityCmaintenanceThis MCP server transforms Claude into a comprehensive security analyst by providing access to 27 security tools across 21 APIs for vulnerability intelligence. It enables users to query multiple sources like NVD, EPSS, CISA KEV, and threat intelligence platforms in parallel to get correlated security insights and risk assessments for CVEs.281,622Apache 2.0
- AlicenseNot gradedqualityDmaintenanceProvides multi-source vulnerability intelligence for AI-powered security operations, combining NVD CVSS, CISA KEV, and EPSS scores without requiring an API key.1MIT
- FlicenseNot gradedqualityCmaintenanceProvides Claude with live access to multiple vulnerability databases (NVD, OSV, GitHub Advisories, Snyk) for querying CVEs, package vulnerabilities, and remediation guidance.-
- AlicenseAqualityBmaintenanceEnables AI agents to search, correlate, and monitor real-time vulnerability intelligence from NVD, CISA KEV, EPSS, and MITRE ATT&CK, including CVE details, critical CVE tracking, known exploited vulnerabilities, and exploitation probability scores.52MIT