
Produktionsreifer MCP-Server, der Claude 27 Security-Intelligence-Tools über 21 APIs bereitstellt — CVE-Suche, EPSS-Scoring, CISA KEV, MITRE ATT&CK, Shodan, VirusTotal und mehr.

KI-gestützte Security-Intelligence direkt zur Hand — 28 Tools + ein One-Call-triage_cve-Orchestrator, 24 Datenquellen, ein Protokoll.
Ein produktionsreifer Model-Context-Protocol-Server (MCP-Server), der Claude in einen Vollspektrum-Security-Analysten verwandelt. Statt mit 15+ Browser-Tabs zwischen NVD, EPSS, CISA KEV, Shodan, VirusTotal und GreyNoise zu jonglieren, stell Claude eine Frage und erhalte in Sekunden korrelierte Intelligence. Entwickelt mit Python, FastMCP, httpx, aiosqlite, Pydantic v2 und defusedxml.
Das Problem: Eine einzelne CVE zu triagieren bedeutet, NVD nach CVSS-Scores, EPSS nach Ausnutzungswahrscheinlichkeit, CISA KEV nach aktivem Ausnutzungsstatus, GitHub nach Patches und VirusTotal nach Malware-Zuordnungen abzufragen — und dann alles mental zu korrelieren. Bei 50 CVEs geht dafür ein ganzer Tag verloren.
Die Lösung: Der CVE-MCP-Server gibt Claude direkten Zugriff auf 28 Security-Tools über 24 APIs — mit dem triage_cve-One-Call-Orchestrator an der Spitze. Frag „Sollten wir CVE-2024-3400 patchen?", und Claude fragt parallel alle relevanten Quellen ab, berechnet einen Gesamtrisikoscore (mit einer harten Überschreibung durch CISA KEV) und liefert eine priorisierte Empfehlung mit Belegen.
Ich führe eine globale akademische Studie durch, die misst, wie bereit Sicherheitsexperten, Entwickler und Unternehmensteams tatsächlich für Agentic AI sind — MCP-Server, Tool-Calling, Governance und Human-in-the-Loop-Workflows.
Wenn du dieses Repository nutzt, wäre deine Antwort ein wirklich wertvoller Datenpunkt.
📋 Nimm an der Umfrage teil (10 Min.): Umfrage
┌─────────────────────────────────────────────────────────────────────┐ │ Claude Desktop / Claude Code │ │ (MCP Client via stdio) │ └──────────────────────────────┬──────────────────────────────────────┘ │ Model Context Protocol (stdio) ▼ ┌─────────────────────────────────────────────────────────────────────┐ │ CVE MCP Server (Python) │ │ ┌─────────────┐ ┌──────────────┐ ┌───────────────┐ │ │ │ 27 MCP │ │ Composite │ │ SQLite Cache │ │ │ │ Tools │ │ Risk Engine │ │ + Audit Log │ │ │ └──────┬──────┘ └──────┬───────┘ └───────┬───────┘ │ │ │ │ │ │ │ ┌──────┴────────────────┴───────────────────┴──────┐ │ │ │ Async HTTP Client (httpx) │ │ │ │ Rate Limiter · Response Cache │ │ │ └──────────────────────┬───────────────────────────┘ │ └─────────────────────────┼───────────────────────────────────────────┘ │ HTTPS (outbound only) ┌───────────────┼───────────────────────────┐ ▼ ▼ ▼ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ VULNERABILITY│ │ NETWORK │ │ THREAT │ │ INTELLIGENCE │ │ INTELLIGENCE │ │ INTELLIGENCE │ ├──────────────┤ ├──────────────┤ ├──────────────┤ │ NVD API 2.0 │ │ AbuseIPDB │ │ VirusTotal │ │ EPSS / FIRST │ │ GreyNoise v3 │ │ MalwareBazaar│ │ CISA KEV │ │ Shodan │ │ ThreatFox │ │ OSV.dev │ │ CIRCL PDNS │ │ Ransomwhere │ │ GitHub GHSA │ │ │ │ AlienVault │ │ MITRE ATT&CK │ │ │ │ URLScan.io │ └──────────────┘ └──────────────┘ └──────────────┘
Der gesamte Datenverkehr ist **ausschließlich ausgehendes HTTPS** — es werden keine eingehenden Ports geöffnet. API-Schlüssel werden aus Umgebungsvariablen geladen und niemals protokolliert. Private/interne IP-Adressen werden von allen Lookup-Tools blockiert.
---
## 🔍 Tool-Katalog (28 Tools)
### ⭐ Orchestrierung (v0.2.0) — hier beginnen
| Tool | Beschreibung | API-Schlüssel erforderlich | Beispielverwendung |
|------|-------------|-----------------|---------------|
| `triage_cve` | One-Call-Triage, das NVD + EPSS + CISA KEV (+ öffentlicher PoC für `depth != "quick"`) parallel ausführt, den zusammengesetzten Risikoscore mit einer harten KEV-Überschreibung berechnet, auf VulnCheck NVD++ zurückfällt, wenn NIST NVD gedrosselt ist, und bei `depth="deep"` die SSVC-v2-Gated-Entscheidung ausgibt | Kostenlos / Kein Schlüssel (Schlüssel empfohlen) | `triage_cve("CVE-2021-44228", depth="deep")` |
> **Auch über MCP-Primitive verfügbar** — Ressourcen: `kev://catalog`, `epss://scores/{cve_id}`, `manifest://tool-hash` (SHA-256 über die registrierte Tool-Oberfläche, zur Manipulationserkennung). Prompts: `patch_decision`, `compare_and_prioritize`, `dependency_triage`.
### Kern-Schwachstellen-Intelligence (8 Tools)
| Tool | Beschreibung | API-Schlüssel erforderlich | Beispielverwendung |
|------|-------------|-----------------|---------------|
| `lookup_cve` | Ruft detaillierten CVE-Datensatz von NVD ab, einschließlich CVSS-Scores, CWEs, betroffene Produkte, Referenzen und Zeitverlauf | Kostenlos / Kein Schlüssel (Schlüssel empfohlen) | `lookup_cve("CVE-2024-3400")` |
| `search_cves` | Durchsucht NVD nach CVEs anhand von Schlüsselwort, Produktname, Schweregrad oder Datumsbereich | Kostenlos / Kein Schlüssel (Schlüssel empfohlen) | `search_cves(keyword="Apache Log4j", severity="CRITICAL")` |
| `get_epss_score` | Ruft EPSS-Exploitation-Wahrscheinlichkeit (0–1) und Perzentil für eine oder mehrere CVEs ab | Kostenlos / Kein Schlüssel | `get_epss_score("CVE-2024-3400")` |
| `check_kev_status` | Prüft, ob eine CVE im Katalog der Known Exploited Vulnerabilities von CISA enthalten ist | Kostenlos / Kein Schlüssel | `check_kev_status("CVE-2021-44228")` |
| `get_cvss_details` | Analysiert und erklärt eine CVSS-v3.1-Vektorzeichenfolge mit Aufschlüsselung pro Metrik | Kostenlos / Kein Schlüssel | `get_cvss_details("CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H")` |
| `get_cwe_info` | Schlägt Details zur Common Weakness Enumeration anhand der CWE-ID in einer eingebetteten Datenbank nach | Kostenlos / Kein Schlüssel | `get_cwe_info("CWE-79")` |
| `get_cve_references` | Extrahiert und kategorisiert alle Referenzlinks für eine CVE (Patches, Advisories, Exploits) | Kostenlos / Kein Schlüssel (Schlüssel empfohlen) | `get_cve_references("CVE-2023-44487")` |
| `bulk_cve_lookup` | Ruft Details für bis zu 20 CVEs in einem einzigen Aufruf mit paralleler Anreicherung ab | Kostenlos / Kein Schlüssel (Schlüssel empfohlen) | `bulk_cve_lookup(["CVE-2024-3400", "CVE-2023-44487"])` |
### Exploit- & Angriffs-Intelligence (4 Tools)
| Tool | Beschreibung | API-Schlüssel erforderlich | Beispielverwendung |
|------|-------------|-----------------|---------------|
| `search_exploits` | Durchsucht GitHub nach öffentlichen Proof-of-Concept-Exploits und Exploit-Code-Repositorys | `GITHUB_TOKEN` (optional) | `search_exploits("CVE-2024-3400")` |
| `get_mitre_techniques` | Ordnet eine CVE oder CWE relevanten MITRE-ATT&CK-Techniken, Taktiken und Mitigationen zu | Kostenlos / Kein Schlüssel | `get_mitre_techniques("CVE-2021-44228")` |
| `check_poc_availability` | Ermittelt, ob bekannter Proof-of-Concept-Code für eine CVE in mehreren Quellen existiert | `GITHUB_TOKEN` (optional) | `check_poc_availability("CVE-2024-3400")` |
| `get_attack_patterns` | Ruft CAPEC-Angriffsmusterdetails ab, die mit einer CWE oder CVE verknüpft sind | Kostenlos / Kein Schlüssel | `get_attack_patterns("CWE-89")` |
### Phase 3: Erweitertes Risiko & Reporting (4 Tools)
| Tool | Beschreibung | API-Schlüssel erforderlich | Beispielverwendung |
|------|-------------|-----------------|---------------|
| `calculate_risk_score` | Berechnet einen zusammengesetzten Risikoscore von 0–100 anhand von CVSS, EPSS, KEV-Status und PoC-Verfügbarkeit | Kostenlos / Kein Schlüssel (Schlüssel empfohlen) | `calculate_risk_score("CVE-2024-3400")` |
| `generate_risk_report` | Erstellt einen formatierten Executive-Sicherheitsbericht für eine oder mehrere CVEs mit Empfehlungen | Kostenlos / Kein Schlüssel (Schlüssel empfohlen) | `generate_risk_report(["CVE-2024-3400", "CVE-2023-44487"])` |
| `prioritize_cves` | Sortiert eine Liste von CVEs nach zusammengesetztem Risikoscore für die Triage-Priorisierung | Kostenlos / Kein Schlüssel (Schlüssel empfohlen) | `prioritize_cves(["CVE-2024-3400", "CVE-2023-4966", "CVE-2023-44487"])` |
| `get_trending_cves` | Ruft aktuelle Trend-CVEs basierend auf hohen EPSS-Scores und kürzlichen KEV-Ergänzungen ab | Kostenlos / Kein Schlüssel | `get_trending_cves(days=7, min_epss=0.5)` |
### Netzwerk-Intelligence (4 Tools)
| Tool | Beschreibung | API-Schlüssel erforderlich | Beispielverwendung |
|------|-------------|-----------------|---------------|
| `lookup_ip_reputation` | Prüft Missbrauchshistorie und Konfidenz-Score einer IP-Adresse über AbuseIPDB | `ABUSEIPDB_API_KEY` | `lookup_ip_reputation("185.220.101.34")` |
| `check_ip_noise` | Fragt GreyNoise nach IP-Scan-/Angriffsaktivität, Klassifizierung und zugehörigen CVEs ab | `GREYNOISE_API_KEY` | `check_ip_noise("185.220.101.34")` |
| `shodan_host_lookup` | Ermittelt offene Ports, Dienste, Banner und Schwachstellen für eine IP über Shodan | `SHODAN_API_KEY` | `shodan_host_lookup("8.8.8.8")` |
| `passive_dns_lookup` | Ruft historische DNS-Auflösungsdaten für eine Domain von CIRCL Passive DNS ab | `CIRCL_PDNS_USER` + `CIRCL_PDNS_PASSWORD` | `passive_dns_lookup("example.com")` |
### Bedrohungs-Intelligence (4 Tools)
| Tool | Beschreibung | API-Schlüssel erforderlich | Beispielverwendung |
|------|-------------|-----------------|---------------|
| `virustotal_lookup` | Analysiert Datei-Hashes, URLs, Domains oder IPs gegen 70+ Antiviren-Engines | `VIRUSTOTAL_API_KEY` | `virustotal_lookup(hash="44d88612fea8a8f36de82e1278abb02f")` |
| `search_malware` | Durchsucht MalwareBazaar nach Malware-Proben anhand von Hash, Tag oder Signatur | `ABUSECH_AUTH_KEY` (optional) | `search_malware(tag="Emotet")` |
| `search_iocs` | Fragt ThreatFox nach Kompromittierungsindikatoren ab, die mit Malware-Familien verknüpft sind | `ABUSECH_AUTH_KEY` (optional) | `search_iocs(malware="CobaltStrike")` |
| `check_ransomware` | Schlägt Ransomware-Zahlungsadressen und Transaktionsdaten von Ransomwhere nach | Kostenlos / Kein Schlüssel | `check_ransomware(address="bc1q...")` |
### DevSecOps (3 Tools)
| Tool | Beschreibung | API-Schlüssel erforderlich | Beispielverwendung |
|------|-------------|-----------------|---------------|
| `scan_dependencies` | Scannt Paketnamen und -versionen gegen OSV.dev auf bekannte Schwachstellen | Kostenlos / Kein Schlüssel | `scan_dependencies(ecosystem="PyPI", packages={"requests": "2.28.0"})` |
| `scan_github_advisories` | Durchsucht GitHub Security Advisories nach Ökosystem, Paket oder Schweregrad | `GITHUB_TOKEN` (optional) | `scan_github_advisories(ecosystem="pip", package="django")` |
| `urlscan_check` | Sendet eine URL zum Scannen ein oder ruft frühere Scan-Ergebnisse von URLScan.io ab | `URLSCAN_API_KEY` | `urlscan_check("https://suspicious-site.com")` |
---
## 📦 Installation
### Voraussetzungen
- **Python 3.10+** (3.11 oder 3.12 empfohlen)
- **pip** oder **uv**-Paketmanager
- **Git** zum Klonen des Repositorys
- Ein Terminal mit Zugriff auf Umgebungsvariablen
### Schritt-für-Schritt-Einrichtung```bash
# 1. Clone the repository
git clone https://github.com/mukul975/cve-mcp-server.git
cd cve-mcp-server
# 2. Create and activate a virtual environment
python -m venv venv
# macOS / Linux:
source venv/bin/activate
# Windows (PowerShell):
.\venv\Scripts\Activate.ps1
# Windows (CMD):
venv\Scripts\activate.bat
# 3. Install dependencies
pip install -e .
# 4. Copy and configure environment variables
cp .env.example .env
# Edit .env with your API keys (see API Keys Setup section below)
# 5. Verify the server starts
python -m cve_mcp.server
git clone https://github.com/mukul975/cve-mcp-server.git cd cve-mcp-server uv venv source .venv/bin/activate # or .venv\Scripts\activate on Windows uv pip install -e . cp .env.example .env
### Mit Testabhängigkeiten```bash
pip install -e ".[test]"
API-Schlüssel sind nach Priorität geordnet — hol dir zuerst die Tier-1-Schlüssel für maximale Abdeckung mit kostenlosen Tools und füge danach schrittweise Tier 2 und Tier 3 hinzu, falls nötig.
⚡ Start ohne Schlüssel: Acht Tools funktionieren ohne jeglichen API-Schlüssel — EPSS, CISA KEV, OSV.dev, MITRE ATT&CK, CWE-Abfragen, CVSS-Parsing, Ransomwhere und NVD (mit reduzierter Rate). Du kannst den Server sofort nutzen und Schlüssel nach und nach hinzufügen.
NVD_API_KEY=
GITHUB_TOKEN=
ABUSEIPDB_KEY= # https://www.abuseipdb.com/account/api VIRUSTOTAL_KEY= # https://www.virustotal.com/gui/join-us URLSCAN_KEY= # https://urlscan.io/user/signup SHODAN_KEY= # https://account.shodan.io/register
GREYNOISE_API_KEY= # https://viz.greynoise.io/signup
CIRCL_PDNS_USER= CIRCL_PDNS_PASS=
CACHE_DB_PATH= # defaults to ~/.cve-mcp/cache.db AUDIT_LOG_PATH= # defaults to ~/.cve-mcp/audit.log REQUEST_TIMEOUT=30 # HTTP timeout in seconds MAX_RETRIES=3 # retries on transient errors
### Claude Desktop-Konfiguration
**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows:** `%APPDATA%\Claude\claude_desktop_config.json````json
{
"mcpServers": {
"cve-mcp": {
"command": "python",
"args": ["-m", "cve_mcp.server"],
"cwd": "/absolute/path/to/cve-mcp-server",
"env": {
"NVD_API_KEY": "your-key-here",
"GITHUB_TOKEN": "ghp_xxxxxxxxxxxxxxxxxxxx",
"ABUSEIPDB_KEY": "your-abuseipdb-key",
"GREYNOISE_API_KEY": "your-greynoise-key",
"SHODAN_KEY": "your-shodan-key"
}
}
}
}
⚠️ Wichtig: Verwende immer absolute Pfade. Beende Claude Desktop vollständig, nachdem du die Konfiguration geändert hast (Cmd+Q / Alt+F4) — Neuladen reicht nicht aus.
claude mcp add cve-mcp -- python -m cve_mcp.server
claude mcp add cve-mcp -e NVD_API_KEY=your_key -e VULNCHECK_TOKEN=your_token -- python -m cve_mcp.server
claude mcp list
---
## 🚀 Schnellstart
### Schritt 1: Installation (2 Minuten)```bash
git clone https://github.com/mukul975/cve-mcp-server.git
cd cve-mcp-server
python -m venv venv && source venv/bin/activate
pip install -e .
Keine .env-Datei erforderlich. Fügen Sie den Server zu Claude Desktop oder Claude Code hinzu und versuchen Sie:
"Was ist CVE-2021-44228? Wird es aktiv ausgenutzt?"
Claude verwendet lookup_cve (NVD), get_epss_score (EPSS) und check_kev (CISA KEV) — alle kostenlos, keine Schlüssel erforderlich.
"Scanne diese Python-Pakete auf Schwachstellen: requests 2.28.0, flask 2.2.0, django 3.2.0"
echo 'NVD_API_KEY=your-key-here' > .env
Fordere einen kostenlosen NVD-Schlüssel unter [nvd.nist.gov](https://nvd.nist.gov/developers/request-an-api-key) an — sofort per E-Mail, erhöht das Rate-Limit von **5 auf 50 Anfragen pro 30 Sekunden**.
### Schritt 4: Vollleistungsmodus
Sobald du Tier-1- und Tier-2-Schlüssel hinzugefügt hast:
> **„Berechne den Risikoscore für CVE-2024-3400 und sag mir, ob wir sofort patchen sollten."**
---
## 💬 Anwendungsbeispiele
### Szenario 1: „Sollten wir Log4Shell sofort patchen?"
> **Du:** Analysiere, ob CVE-2021-44228 (Log4Shell) sofort gepatcht werden muss. Gib mir den Risikoscore und deine Empfehlung.
Claude orchestriert im Hintergrund mehrere Tools:```
→ lookup_cve("CVE-2021-44228")
CVSS 3.1: 10.0 (CRITICAL) | AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
→ get_epss_score("CVE-2021-44228")
EPSS: 0.97531 (97.5%) | Percentile: 99.99%
→ check_kev("CVE-2021-44228")
✅ IN CISA KEV — Added 2021-12-10 | Known ransomware use: Yes
→ check_poc_exists("CVE-2021-44228")
✅ WEAPONIZED — 300+ public PoC repositories found
→ calculate_risk_score("CVE-2021-44228")
Risk Score: 97/100 (CRITICAL) | Urgency: PATCH IMMEDIATELY
Claudes Antwort: "CVE-2021-44228 erreicht 97/100 (KRITISCH). Remote-Codeausführung in Apache Log4j, CVSS 10.0, 97,5% EPSS-Wahrscheinlichkeit, bestätigte aktive Ausnutzung in CISA KEV einschließlich Ransomware-Kampagnen, 300+ öffentliche Exploits. Sofort patchen."
Du: Scanne diese Abhängigkeiten: requests==2.28.0, flask==2.2.0, django==3.2.0, pillow==9.0.0, cryptography==37.0.0``` → scan_dependencies(ecosystem="PyPI", packages={...}) Found 12 vulnerabilities across 4 packages
**Claudes Antwort:** "**12 Sicherheitslücken** in deinen Paketen gefunden. **Sofortmaßnahme:** Django 3.2.0 (3 kritische CVEs, einschließlich SQL-Injection), Pillow 9.0.0 (Heap-Überlauf), cryptography 37.0.0 (OpenSSL-Kette). Aktualisiere auf: django>=4.2.16, pillow>=10.3.0, cryptography>=42.0.0."
### Szenario 3: "Verdächtige IP untersuchen"
> **Du:** Untersuche verdächtige IP 185.220.101.34 — ist sie schädlich?```
→ check_ip_reputation("185.220.101.34")
AbuseIPDB Confidence: 100% | Reports: 4,832 | ISP: Tor Exit Node
→ check_ip_noise("185.220.101.34")
GreyNoise: MALICIOUS | Tags: [Tor Exit Node, Web Scanner]
CVEs targeted: CVE-2024-3400, CVE-2023-46805
→ shodan_host_lookup("185.220.101.34")
Open ports: 22, 80, 443, 9001 | OS: Linux
Claudes Antwort: "185.220.101.34 ist ein bekannter Tor-Ausgangsknoten und wird von AbuseIPDB mit 4.832 Missbrauchsmeldungen als 100 % bösartig eingestuft. GreyNoise bestätigt aktives Scannen nach CVE-2024-3400 (Palo Alto) und CVE-2023-46805 (Ivanti). Empfehlung: In der Firewall blockieren."
Du: Erstelle einen Executive Security Report für: CVE-2024-3400, CVE-2023-44487, CVE-2023-4966, CVE-2024-21887``` → compare_cves([...]) Compiles: NVD, EPSS, KEV, PoC availability, MITRE ATT&CK mapping Generates: Ranked risk table, remediation timeline, executive summary
---
## 📊 Risikobewertung erklärt
Das Tool `calculate_risk_score` erzeugt einen **zusammengesetzten Risikowert von 0 bis 100**, indem es vier unabhängige Signale gewichtet.
### Die Formel```
Risk Score = (CVSS × 0.20) + (EPSS × 0.35) + (KEV × 0.30) + (PoC × 0.15)
Der Score ist bei 100 gedeckelt.
Der numerische Bewerter ist scoring_version 1.0 (ausgegeben in triage_cve, calculate_risk_score und health_check). Die obige lineare gewichtete Summe ist der v1-Standard für den numerischen Score, mit einer harten Überschreibung:
Act / Attend / Track* / Track) ist über triage_cve(depth="deep") als qualitative, erklärbare Alternative zur 0–100-Zahl verfügbar.EPSS erhält die höchste Gewichtung (35%), weil es der beste einzelne Prädiktor für tatsächliche Ausnutzung ist – weit besser als CVSS allein. Ein CVSS 10.0 mit EPSS 0.01 ist theoretisch gefährlich, praktisch aber unwahrscheinlich. KEV mit 30% ist die Ground Truth: bestätigte Ausnutzung, keine Vorhersage. CVSS mit 20% erfasst den Schweregrad-Kontext für neue CVEs mit unzureichenden EPSS-Daten. PoC mit 15% spiegelt wider, dass öffentliche Exploits reale Angriffe erheblich beschleunigen.
triage_cve-Orchestrator — ein einziger Tool-Aufruf, der NVD + EPSS + CISA KEV (+ Suche nach öffentlichen PoCs für depth != "quick") parallel aufruft, den zusammengesetzten Risikoscore berechnet und einen sauberen Bericht zurückgibt. depth ist quick / standard (Standardwert) / deep; deep liefert zusätzlich die nach SSVC v2 gestufte Entscheidung.triage_cve verwendet wird, wenn das NIST-NVD nicht erreichbar oder gedrosselt ist), CIRCL hashlookup und die HIBP-Pwned-Passwords-Range-API.scoring_version — in der KEV gelistete CVEs sind immer CRITICAL (Score ≥ 76); die Scoring-Version wird in triage_cve und health_check ausgegeben.pytest tests/ -v
pytest tests/test_validators.py tests/test_risk_scorer.py -v
pytest tests/ -v --cov=src/cve_mcp --cov-report=term-missing
### Test mit dem MCP Inspector```bash
npx @modelcontextprotocol/inspector python -m cve_mcp.server
Öffnet unter http://localhost:6274 — interaktiv jedes Tool testen, Eingabeschemas anzeigen und Antwortformate prüfen.
src/cve_mcp/ ├── server.py # FastMCP server — all 27 @mcp.tool() definitions ├── config.py # Environment config and API base URLs ├── models.py # Pydantic models (CVERecord, KEVEntry, EPSSScore, ...) ├── audit.py # Rotating audit log (50MB, 5 backups) ├── api/ │ ├── nvd_client.py # NVD REST API v2.0 │ ├── osv_client.py # OSV.dev package vulnerability API │ ├── epss_client.py # FIRST EPSS API │ ├── kev_client.py # CISA KEV catalog │ ├── ip_intel.py # AbuseIPDB + GreyNoise │ ├── domain_intel.py # crt.sh + CIRCL passive DNS │ ├── shodan_client.py # Shodan host intelligence │ ├── hash_intel.py # MalwareBazaar + VirusTotal │ ├── url_safety.py # URLScan.io │ ├── malware_intel.py # ThreatFox IOC lookup │ ├── ransomware_intel.py# Ransomwhere Bitcoin address lookup │ ├── exploit_intel.py # GitHub PoC/exploit search │ ├── vendor_advisory.py # MSRC + Red Hat + Ubuntu advisories │ ├── attack_mapping.py # MITRE ATT&CK STIX mapping │ ├── cve_timeline.py # CVE event timeline builder │ ├── dependency_scan.py # OSV-based dependency scanning │ ├── poc_checker.py # GitHub + Exploit-DB + Nuclei PoC search │ ├── report_generator.py# Vuln report + CVE comparison matrix │ └── rate_limiter.py # Token bucket rate limiter for NVD ├── cache/ │ └── sqlite_cache.py # Async SQLite cache with per-key TTL └── utils/ ├── validators.py # CVE ID normalization, IP/hash validation └── risk_scorer.py # Composite risk score computation
### Caching-Strategie
| Ressource | TTL |
|----------|-----|
| CVE-Datensätze (NVD) | 1 Stunde |
| EPSS-Werte | 6 Stunden |
| KEV-Katalog | 1 Stunde |
| IP-/Domain-Informationen | 1 Stunde |
| Exploit-DB-CSV | 24 Stunden |
| ATT&CK-STIX-Daten | 24 Stunden |
| Ransomware-Informationen | 24 Stunden |
### Audit-Protokoll
Jeder Tool-Aufruf wird in `~/.cve-mcp/audit.log` protokolliert:```json
{
"timestamp": "2026-04-14T10:23:45.123Z",
"tool": "lookup_cve",
"parameters": {"cve_id": "CVE-2024-3400"},
"duration_ms": 342,
"cache_hit": false,
"status": "ok"
}
API-Schlüssel und Antwort-Payloads werden niemals in Audit-Logs geschrieben.
Alle Netzwerk-Intelligence-Tools blockieren private und reservierte IP-Bereiche vor jedem externen API-Aufruf:
10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 (RFC 1918)127.0.0.0/8 (Loopback), 169.254.0.0/16 (Link-Lokal)::1, fc00::/7 (IPv6 privat).env ist gitignoreddefusedxml wird für die gesamte XML-Analyse verwendet, um XML-Bombenangriffe (Billion Laughs, XXE-Injection) zu verhindern.
pip install -e . python --version # must be 3.10+
**Claude Desktop zeigt das Hammersymbol (🔨) nicht**
- Überprüfe deine Konfiguration auf JSON-Syntaxfehler (keine nachgestellten Kommas)
- Verwende **absolute Pfade** — relative Pfade schlagen still fehl
- Beende Claude Desktop vollständig (Cmd+Q / Alt+F4) und starte es neu
### NVD-Ratenlimit erreicht```bash
# Add your free NVD API key to .env
NVD_API_KEY=your-key-here
# https://nvd.nist.gov/developers/request-an-api-key
Der Server stellt überschüssige Anfragen automatisch in die Warteschlange, aber mit einem Schlüssel erhalten Sie den 10-fachen Durchsatz.
curl -H "key: YOUR_KEY" https://api.greynoise.io/v3/ip/8.8.8.8
### Windows-Codierungsprobleme```powershell
$env:PYTHONUTF8 = "1"
$env:PYTHONIOENCODING = "utf-8"
Beiträge sind willkommen.
Fügen Sie die Tool-Funktion in server.py mit dem Dekorator @mcp.tool() hinzu
Fügen Sie die Eingabevalidierung in utils/validators.py hinzu
Implementieren Sie den API-Client in api/
Fügen Sie Tests in tests/ hinzu
Aktualisieren Sie diese README```python @mcp.tool() async def my_new_tool(param: str, ctx: Context = None) -> str: """ One-line description for Claude to know when to use this tool.
Args: param: Description of the parameter """ app = _get_app(ctx)
### Testanforderungen
- Alle neuen Tools müssen mindestens einen Offline-Test mit gemockten Antworten haben
- Risikoscore-Änderungen müssen Testfälle zur Formelverifizierung enthalten
- Netzwerk-Tools müssen einen Test enthalten, der die Blockierung privater IP-Adressen verifiziert
- Alle Tests müssen bestehen: `pytest tests/ -v`
---
## 📄 Lizenz
MIT-Lizenz — siehe [LICENSE](https://github.com/mukul975/cve-mcp-server/blob/main/LICENSE) für Details.```
Copyright (c) 2025-2026 Mahipal Jangra (mukul975)
Erstellt mit 🔐 von Mahipal Jangra · Berlin, Deutschland
Sicherheitserkenntnisse in Gespräche verwandeln.
| ENV-Variable | Aktiviert | So erhältst du sie | Limits im kostenlosen Tarif | Erforderlich? |
|---|
NVD_API_KEY | 10× schnellere NVD-Abfragen (50 Abfragen/30 s statt 5) | Unter nvd.nist.gov anfordern | 50 Anfragen pro 30 Sekunden | Optional, aber dringend empfohlen |
GITHUB_TOKEN | GitHub-Advisory-Suche + Exploit-PoC-Suche | PAT unter github.com/settings/tokens erstellen | 5.000 Anfragen/Stunde | Optional (ohne Schlüssel: 60/Std.) |
| ENV-Variable | Aktiviert | So erhältst du sie | Limits im kostenlosen Tarif | Erforderlich? |
|---|
ABUSEIPDB_KEY | IP-Reputationsabfragen | Registrieren unter abuseipdb.com | 1.000 Prüfungen/Tag | Erforderlich für IP-Tools |
VIRUSTOTAL_KEY | Malware-Scanning von Dateien/URLs/Domains/IPs | Anmelden unter virustotal.com | 500 Abfragen/Tag, 4/Min. | Erforderlich für VT-Tools |
GREYNOISE_API_KEY | Intelligenz zu IP-Rauschen/Scan-Aktivitäten | Anmelden unter viz.greynoise.io | 50 Abfragen/Woche (Community) | Erforderlich für GreyNoise-Tools |
SHODAN_KEY | Aufklärung von Hosts/Ports/Diensten | Registrieren unter account.shodan.io | Basis-Host-Abfragen (kostenloser Tarif) | Erforderlich für Shodan-Tools |
| ENV-Variable | Aktiviert | So erhältst du sie | Limits im kostenlosen Tarif | Erforderlich? |
|---|
URLSCAN_KEY | URL-Scanning und Website-Analyse | Anmelden unter urlscan.io | 5.000 öffentliche Scans/Tag | Optional |
CIRCL_PDNS_USER | CIRCL Passive-DNS-Abfragen | Zugang unter circl.lu anfragen | Nur Partnerzugang | Optional |
CIRCL_PDNS_PASS | CIRCL Passive-DNS-Authentifizierung | Wird mit der CIRCL-Registrierung bereitgestellt | Nur Partnerzugang | Optional |
| Komponente | Gewicht | Was sie erfasst |
|---|
| CVSS v3.1 Base Score | 20% | Theoretische Schwere im schlechtesten Fall |
| EPSS Probability | 35% | Statistische Wahrscheinlichkeit der Ausnutzung in den nächsten 30 Tagen |
| CISA KEV Status | 30% | Bestätigte aktive Ausnutzung in freier Wildbahn |
| PoC Availability | 15% | Öffentlicher Exploit-Code senkt die Hürde für Angreifer |
| Score | Label | Empfohlene Maßnahme |
|---|
| 0 – 25 | LOW | Für das nächste Wartungsfenster einplanen |
| 26 – 50 | MEDIUM | Innerhalb von 30 Tagen gemäß SLA patchen |
| 51 – 75 | HIGH | Innerhalb von 7 Tagen patchen; an den Teamleiter eskalieren |
| 76 – 100 | CRITICAL | Innerhalb von 24–48 Stunden patchen. Notfall-Änderungsfenster. |
MCP_TRANSPORT=httpHOST:PORT0.0.0.0:8000Dockerfilekev://catalog, epss://scores/{cve_id} und manifest://tool-hash (SHA-256 über die registrierte Tool-Oberfläche); Prompts patch_decision, compare_and_prioritize und dependency_triage.sampling/createMessage (Unit-42-MCP-Sampling-Angriffsvektor); neue ausgehende Pfade sind per Scheme/Host-Allowlist zugelassen.| # | Quelle | Bereitgestellte Daten | Auth | Ratenlimit (Kostenlos) |
|---|
| 1 | NVD | CVE-Details, CVSS, CWEs, CPEs | apiKey-Header (optional) | 5 Anfragen/30s (50 mit Schlüssel) |
| 2 | EPSS | Ausnutzungswahrscheinlichkeit und Perzentile | Keine | 1.000 Anfragen/min |
| 3 | CISA KEV | Katalog aktiv ausgenutzter CVEs | Keine | Statische Datei |
| 4 | OSV.dev | Schwachstellen in Open-Source-Paketen | Keine | Kein veröffentlichtes Limit |
| 5 | GitHub Advisories | GHSA-Advisories, Patches, betroffene Versionen | Bearer-Token | 60/Std. (5.000 mit PAT) |
| 6 | MITRE ATT&CK | TTPs, Techniken, Gegenmaßnahmen | Keine | Kein veröffentlichtes Limit |
| 7 | AbuseIPDB | IP-Missbrauchs-Konfidenz, Meldungen, ISP, Geo | Key-Header | 1.000 Abfragen/Tag |
| 8 | GreyNoise | IP-Rauschen/Scan-Aktivität, Klassifizierung | key-Header | 50 Abfragen/Woche |
| 9 | Shodan | Offene Ports, Dienste, Banner, CVEs | key-Query-Parameter | Basis-Lookups |
| 10 | VirusTotal | Multi-AV-Scanergebnisse, Reputation | x-apikey-Header | 500/Tag, 4/min |
| 11 | MalwareBazaar | Malware-Samples, Hashes, Signaturen | Auth-Key-Header | Faire Nutzung |
| 12 | ThreatFox | IOCs, die mit Malware-Familien verknüpft sind | Auth-Key-Header | Faire Nutzung |
| 13 | Ransomwhere | Ransomware-BTC-Adressen und -Transaktionen | Keine | Kein veröffentlichtes Limit |
| 14 | URLScan.io | URL-Scans, Screenshots, DOM | API-Key-Header | 5.000 öffentliche Scans/Tag |
| 15 | CIRCL PDNS | Historische passive DNS-Einträge | HTTP-Basis-Auth | Partnerzugriff |
| 16 | GitHub Code Search | Suche nach Exploit-PoC-Repositories | Bearer-Token | Mit GHSA-Limits geteilt |
| 17 | Exploit-DB | CSV der öffentlichen Exploit-Datenbank | Keine | Kein veröffentlichtes Limit |
| 18 | Nuclei Templates | Community-Erkennungsvorlagen | Keine | Kein veröffentlichtes Limit |
| 19 | MSRC | Microsoft-Sicherheitsadvisories | Keine | Kein veröffentlichtes Limit |
| 20 | Red Hat Security | Red-Hat-CVE-Advisories | Keine | Kein veröffentlichtes Limit |
| 21 | Ubuntu Security | Ubuntu-CVE-Tracker | Keine | Kein veröffentlichtes Limit |
| 22 | VulnCheck NVD++ | CVE-Einträge im NVD-Schema (transparenter NVD-Fallback) | Bearer-Token (kostenlose Community) | Je nach VulnCheck-Community-Stufe |
| 23 | CIRCL hashlookup | Metadaten als vertrauenswürdig bekannter Dateien (NSRL + andere), hashlookup:trust | Keine | Best-Effort |
| 24 | HIBP Pwned Passwords | Anzahl kompromittierter Passwörter über die k-Anonymitäts-Range-API | Keine | Kein hartes Limit |