CVE MCP Server
Un servidor de protocolo de contexto de modelo (MCP) de grado de producción que convierte a Claude en un analista de seguridad de espectro completo. En lugar de manejar más de 15 pestañas del navegador en NVD, EPSS, CISA KEV, Shodan, VirusTotal y GreyNoise, pregúntale a Claude una pregunta y obtén inteligencia correlacionada en segundos. Construido con Python, FastMCP, httpx, aiosqlite, Pydantic v2 y defusedxml.
Documentación
🛡️ CVE MCP Server

Inteligencia de seguridad impulsada por IA a tu alcance: 28 herramientas + un orquestador de una sola llamada triage_cve, 24 fuentes de datos, un protocolo.
Un servidor de Protocolo de Contexto de Modelo (MCP) de nivel de producción que convierte a Claude en un analista de seguridad de espectro completo. En lugar de manejar más de 15 pestañas del navegador entre NVD, EPSS, CISA KEV, Shodan, VirusTotal y GreyNoise, hazle una pregunta a Claude y obtén inteligencia correlacionada en segundos. Construido con Python, FastMCP, httpx, aiosqlite, Pydantic v2 y defusedxml.
El problema: Clasificar un solo CVE significa consultar NVD para puntuaciones CVSS, EPSS para probabilidad de explotación, CISA KEV para estado de explotación activa, GitHub para parches y VirusTotal para asociaciones de malware — y luego correlacionar todo mentalmente. Para 50 CVEs, eso es un día entero perdido.
La solución: CVE MCP Server le da a Claude acceso directo a 28 herramientas de seguridad en 24 APIs — con el orquestador de una sola llamada triage_cve al frente. Pregunta "¿Deberíamos parchear CVE-2024-3400?" y Claude se despliega a cada fuente relevante en paralelo, calcula una puntuación de riesgo compuesta (con anulación estricta de CISA KEV) y entrega una recomendación priorizada con evidencia.
🌍 GARS-2026 — Encuesta Global de Preparación para IA Agéntica
Estoy realizando un estudio académico global que mide qué tan preparados están realmente los profesionales de seguridad, desarrolladores y equipos empresariales para la IA agéntica — servidores MCP, llamadas a herramientas, gobernanza y flujos de trabajo con supervisión humana.
Si usas este repositorio, tu respuesta sería un punto de datos genuinamente valioso.
📋 Realiza la encuesta (10 min): Encuesta
- 60 preguntas · Anónima · Supervisada por SRH Berlin
- Recibes 50 Casky Tokens para acceso anticipado a casky.ai
- Resultados publicados en acceso abierto bajo CC-BY 4.0
📑 Tabla de contenidos
- Arquitectura
- Catálogo de herramientas
- Instalación
- Configuración de claves API
- Configuración
- Inicio rápido
- Ejemplos de uso
- Explicación de la puntuación de riesgo
- Fuentes de datos
- Ejecución de pruebas
- Análisis profundo de la arquitectura
- Seguridad y privacidad
- Solución de problemas
- Hoja de ruta y limitaciones conocidas
- Contribuciones
- Licencia
🏗️ Arquitectura
┌─────────────────────────────────────────────────────────────────────┐
│ 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 │
└──────────────┘ └──────────────┘ └──────────────┘
Todo el tráfico es HTTPS saliente únicamente — no se abren puertos de entrada. Las claves API se cargan desde variables de entorno y nunca se registran. Las direcciones IP privadas/internas están bloqueadas de todas las herramientas de búsqueda.
🔍 Catálogo de herramientas (28 herramientas)
⭐ Orquestación (v0.2.0) — comienza aquí
| Herramienta | Descripción | Clave API requerida | Ejemplo de uso |
|---|---|---|---|
triage_cve | Clasificación de una sola llamada que despliega NVD + EPSS + CISA KEV (+ PoC público para depth != "quick") concurrentemente, calcula la puntuación de riesgo compuesta con anulación estricta de KEV, recurre a VulnCheck NVD++ cuando NIST NVD está limitado, y en depth="deep" emite la decisión filtrada de SSVC v2 | Gratis / Sin clave (clave recomendada) | triage_cve("CVE-2021-44228", depth="deep") |
También expuesto mediante primitivas MCP — Recursos:
kev://catalog,epss://scores/{cve_id},manifest://tool-hash(SHA-256 sobre la superficie de herramientas registrada, para detección de manipulación). Prompts:patch_decision,compare_and_prioritize,dependency_triage.
Inteligencia de Vulnerabilidades Principal (8 herramientas)
| Herramienta | Descripción | Clave API requerida | Ejemplo de uso |
|---|---|---|---|
lookup_cve | Obtener registro detallado de CVE desde NVD incluyendo puntuaciones CVSS, CWEs, productos afectados, referencias y cronología | Gratis / Sin clave (clave recomendada) | lookup_cve("CVE-2024-3400") |
search_cves | Buscar CVEs en NVD por palabra clave, nombre de producto, severidad o rango de fechas | Gratis / Sin clave (clave recomendada) | search_cves(keyword="Apache Log4j", severity="CRITICAL") |
get_epss_score | Obtener probabilidad de explotación EPSS (0–1) y percentil para uno o más CVEs | Gratis / Sin clave | get_epss_score("CVE-2024-3400") |
check_kev_status | Verificar si un CVE aparece en el catálogo de Vulnerabilidades Explotadas Conocidas de CISA | Gratis / Sin clave | check_kev_status("CVE-2021-44228") |
get_cvss_details | Analizar y explicar una cadena de vector CVSS v3.1 con desglose por métrica | Gratis / Sin clave | 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 | Consultar detalles de Common Weakness Enumeration por ID de CWE desde la base de datos integrada | Gratis / Sin clave | get_cwe_info("CWE-79") |
get_cve_references | Extraer y categorizar todos los enlaces de referencia para un CVE (parches, avisos, exploits) | Gratis / Sin clave (clave recomendada) | get_cve_references("CVE-2023-44487") |
bulk_cve_lookup | Obtener detalles por lotes para hasta 20 CVEs en una sola llamada con enriquecimiento paralelo | Gratis / Sin clave (clave recomendada) | bulk_cve_lookup(["CVE-2024-3400", "CVE-2023-44487"]) |
Inteligencia de Exploits y Ataques (4 herramientas)
| Herramienta | Descripción | Clave API requerida | Ejemplo de uso |
|---|---|---|---|
search_exploits | Buscar en GitHub exploits de prueba de concepto públicos y repositorios de código de exploits | GITHUB_TOKEN (opcional) | search_exploits("CVE-2024-3400") |
get_mitre_techniques | Mapear un CVE o CWE a técnicas, tácticas y mitigaciones relevantes de MITRE ATT&CK | Gratis / Sin clave | get_mitre_techniques("CVE-2021-44228") |
check_poc_availability | Determinar si existe código de prueba de concepto conocido para un CVE en múltiples fuentes | GITHUB_TOKEN (opcional) | check_poc_availability("CVE-2024-3400") |
get_attack_patterns | Recuperar detalles de patrones de ataque CAPEC asociados con un CWE o CVE | Gratis / Sin clave | get_attack_patterns("CWE-89") |
Fase 3: Riesgo Avanzado y Reportes (4 herramientas)
| Herramienta | Descripción | Clave API requerida | Ejemplo de uso |
|---|---|---|---|
calculate_risk_score | Calcular puntuación de riesgo compuesta de 0–100 usando CVSS, EPSS, estado KEV y disponibilidad de PoC | Gratis / Sin clave (clave recomendada) | calculate_risk_score("CVE-2024-3400") |
generate_risk_report | Generar un informe de seguridad ejecutivo formateado para uno o más CVEs con recomendaciones | Gratis / Sin clave (clave recomendada) | generate_risk_report(["CVE-2024-3400", "CVE-2023-44487"]) |
prioritize_cves | Clasificar una lista de CVEs por puntuación de riesgo compuesta para priorización de clasificación | Gratis / Sin clave (clave recomendada) | prioritize_cves(["CVE-2024-3400", "CVE-2023-4966", "CVE-2023-44487"]) |
get_trending_cves | Recuperar CVEs en tendencia basados en puntuaciones EPSS altas y adiciones recientes a KEV | Gratis / Sin clave | get_trending_cves(days=7, min_epss=0.5) |
Inteligencia de Red (4 herramientas)
| Herramienta | Descripción | Clave API requerida | Ejemplo de uso |
|---|---|---|---|
lookup_ip_reputation | Verificar historial de abuso de dirección IP y puntuación de confianza mediante AbuseIPDB | ABUSEIPDB_API_KEY | lookup_ip_reputation("185.220.101.34") |
check_ip_noise | Consultar GreyNoise para actividad de escaneo/ataque de IP, clasificación y CVEs asociados | GREYNOISE_API_KEY | check_ip_noise("185.220.101.34") |
shodan_host_lookup | Obtener puertos abiertos, servicios, banners y vulnerabilidades para una IP mediante Shodan | SHODAN_API_KEY | shodan_host_lookup("8.8.8.8") |
passive_dns_lookup | Recuperar datos históricos de resolución DNS para un dominio desde CIRCL Passive DNS | CIRCL_PDNS_USER + CIRCL_PDNS_PASSWORD | passive_dns_lookup("example.com") |
Inteligencia de Amenazas (4 herramientas)
| Herramienta | Descripción | Clave API requerida | Ejemplo de uso |
|---|---|---|---|
virustotal_lookup | Analizar hashes de archivos, URLs, dominios o IPs contra más de 70 motores antivirus | VIRUSTOTAL_API_KEY | virustotal_lookup(hash="44d88612fea8a8f36de82e1278abb02f") |
search_malware | Buscar en MalwareBazaar muestras de malware por hash, etiqueta o firma | ABUSECH_AUTH_KEY (opcional) | search_malware(tag="Emotet") |
search_iocs | Consultar ThreatFox para Indicadores de Compromiso vinculados a familias de malware | ABUSECH_AUTH_KEY (opcional) | search_iocs(malware="CobaltStrike") |
check_ransomware | Consultar direcciones de pago de ransomware y datos de transacciones desde Ransomwhere | Gratis / Sin clave | check_ransomware(address="bc1q...") |
DevSecOps (3 herramientas)
| Herramienta | Descripción | Clave API requerida | Ejemplo de uso |
|---|---|---|---|
scan_dependencies | Escanear nombres de paquetes y versiones contra OSV.dev para vulnerabilidades conocidas | Gratis / Sin clave | scan_dependencies(ecosystem="PyPI", packages={"requests": "2.28.0"}) |
scan_github_advisories | Buscar Avisos de Seguridad de GitHub por ecosistema, paquete o severidad | GITHUB_TOKEN (opcional) | scan_github_advisories(ecosystem="pip", package="django") |
urlscan_check | Enviar una URL para escaneo o recuperar resultados de escaneo anteriores desde URLScan.io | URLSCAN_API_KEY | urlscan_check("https://suspicious-site.com") |
📦 Instalación
Requisitos previos
- Python 3.10+ (se recomienda 3.11 o 3.12)
- pip o gestor de paquetes uv
- Git para clonar el repositorio
- Una terminal con acceso a variables de entorno
Configuración paso a paso
# 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
Usando uv (alternativa más rápida)
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
Con dependencias de prueba
pip install -e ".[test]"
🔑 Configuración de claves API
Las claves API están organizadas por prioridad — obtén primero las claves de Nivel 1 para máxima cobertura con herramientas gratuitas, luego agrega progresivamente Nivel 2 y Nivel 3 según sea necesario.
Nivel 1: Alta prioridad (gratis, acceso instantáneo, máxima cobertura)
| Variable de entorno | Habilita | Cómo obtenerla | Límites del nivel gratuito | ¿Requerida? |
|---|---|---|---|---|
NVD_API_KEY | Búsquedas NVD 10× más rápidas (50 solicitudes/30s vs 5) | Solicitar en nvd.nist.gov | 50 solicitudes por 30 segundos | Opcional pero muy recomendada |
GITHUB_TOKEN | Búsqueda de Avisos de GitHub + búsqueda de exploits PoC | Crear PAT en github.com/settings/tokens | 5,000 solicitudes/hora | Opcional (60/hora sin ella) |
Nivel 2: Recomendada (cuentas gratuitas, valor significativo)
| Variable de entorno | Habilita | Cómo obtenerla | Límites del nivel gratuito | ¿Requerida? |
|---|---|---|---|---|
ABUSEIPDB_KEY | Búsquedas de reputación de IP | Registrarse en abuseipdb.com | 1,000 verificaciones/día | Requerida para herramientas de IP |
VIRUSTOTAL_KEY | Escaneo de malware de archivos/URLs/dominios/IPs | Registrarse en virustotal.com | 500 búsquedas/día, 4/min | Requerida para herramientas VT |
GREYNOISE_API_KEY | Inteligencia de ruido/actividad de escaneo de IP | Registrarse en viz.greynoise.io | 50 consultas/semana (comunidad) | Requerida para herramientas GreyNoise |
SHODAN_KEY | Reconocimiento de hosts/puertos/servicios | Registrarse en account.shodan.io | Búsquedas básicas de hosts (nivel gratuito) | Requerida para herramientas Shodan |
Nivel 3: Opcional (inteligencia extendida)
| Variable de entorno | Habilita | Cómo obtenerla | Límites del nivel gratuito | ¿Requerida? |
|---|---|---|---|---|
URLSCAN_KEY | Escaneo de URLs y análisis de sitios web | Registrarse en urlscan.io | 5,000 escaneos públicos/día | Opcional |
CIRCL_PDNS_USER | Búsquedas CIRCL Passive DNS | Solicitar acceso en circl.lu | Solo acceso de socios | Opcional |
CIRCL_PDNS_PASS | Autenticación CIRCL Passive DNS | Proporcionada con el registro de CIRCL | Solo acceso de socios | Opcional |
⚡ Inicio sin claves: Ocho herramientas funcionan sin ninguna clave API — EPSS, CISA KEV, OSV.dev, MITRE ATT&CK, búsquedas CWE, análisis CVSS, Ransomwhere y NVD (a tasa reducida). Puedes comenzar a usar el servidor inmediatamente y agregar claves progresivamente.
⚙️ Configuración
Variables de entorno (.env.example)
# NVD API key — free at https://nvd.nist.gov/developers/request-an-api-key
# Without key: 5 req/30s | With key: 50 req/30s
NVD_API_KEY=
# GitHub token — increases rate limit from 60/hr to 5000/hr (no scopes needed)
GITHUB_TOKEN=
# Threat intelligence keys (all optional — tools degrade gracefully without them)
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 — uses /v3/ip/{ip} endpoint (NOT the deprecated /v3/community)
GREYNOISE_API_KEY= # https://viz.greynoise.io/signup
# CIRCL Passive DNS — requires partner registration
CIRCL_PDNS_USER=
CIRCL_PDNS_PASS=
# Optional overrides
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
Configuración de Claude Desktop
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.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"
}
}
}
}
⚠️ Importante: Usa siempre rutas absolutas. Cierra completamente Claude Desktop (Cmd+Q / Alt+F4) después de cambiar la configuración — recargar no es suficiente.
Configuración de Claude Code
# Basic setup
claude mcp add cve-mcp -- python -m cve_mcp.server
# With environment variables (repeat -e for each key)
claude mcp add cve-mcp -e NVD_API_KEY=your_key -e VULNCHECK_TOKEN=your_token -- python -m cve_mcp.server
# Or just run from the project directory — python-dotenv auto-loads .env on startup
# Verify it's connected
claude mcp list
🚀 Inicio rápido
Paso 1: Instalar (2 minutos)
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 .
Paso 2: Probar primero con herramientas gratuitas
No se necesita archivo .env. Agrega el servidor a Claude Desktop o Claude Code y prueba:
"¿Qué es CVE-2021-44228? ¿Está explotado activamente?" Claude utilizará
lookup_cve(NVD),get_epss_score(EPSS) ycheck_kev(CISA KEV) — todos gratuitos, sin necesidad de claves.
"Escanea estos paquetes de Python en busca de vulnerabilidades: requests 2.28.0, flask 2.2.0, django 3.2.0"
Paso 3: Añade tu primera clave para un rendimiento 10× superior
echo 'NVD_API_KEY=your-key-here' > .env
Solicita una clave NVD gratuita en nvd.nist.gov — instantánea por correo electrónico, aumenta el límite de velocidad de 5 a 50 solicitudes por 30 segundos.
Paso 4: Modo de máxima potencia
Una vez que hayas añadido las claves de Nivel 1 y Nivel 2:
"Calcula la puntuación de riesgo para CVE-2024-3400 y dime si deberíamos aplicar el parche inmediatamente."
💬 Ejemplos de uso
Escenario 1: "¿Deberíamos parchear Log4Shell inmediatamente?"
Tú: Analiza si CVE-2021-44228 (Log4Shell) necesita parcheo inmediato. Dame la puntuación de riesgo y tu recomendación.
Claude orquesta múltiples herramientas en segundo plano:
→ 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
Respuesta de Claude: "CVE-2021-44228 obtiene 97/100 (CRÍTICO). Ejecución remota de código en Apache Log4j, CVSS 10.0, 97.5% de probabilidad EPSS, explotación activa confirmada en CISA KEV incluyendo campañas de ransomware, más de 300 exploits públicos. Aplica el parche inmediatamente."
Escenario 2: "Escanea mi requirements.txt de Python"
Tú: Escanea estas dependencias: 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
Respuesta de Claude: "Se encontraron 12 vulnerabilidades en tus paquetes. Acción inmediata: Django 3.2.0 (3 CVEs críticos incluyendo inyección SQL), Pillow 9.0.0 (desbordamiento de heap), cryptography 37.0.0 (cadena OpenSSL). Actualiza a: django>=4.2.16, pillow>=10.3.0, cryptography>=42.0.0."
Escenario 3: "Investiga una IP sospechosa"
Tú: Investiga la IP sospechosa 185.220.101.34 — ¿es maliciosa?
→ 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
Respuesta de Claude: "185.220.101.34 es un nodo de salida Tor conocido calificado como 100% malicioso por AbuseIPDB con 4,832 informes de abuso. GreyNoise confirma escaneo activo de CVE-2024-3400 (Palo Alto) y CVE-2023-46805 (Ivanti). Recomendación: Bloquear en el firewall."
Escenario 4: "Genera un informe ejecutivo de seguridad"
Tú: Genera un informe ejecutivo de seguridad para: 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
📊 Explicación de la puntuación de riesgo
La herramienta calculate_risk_score produce una puntuación de riesgo compuesta de 0 a 100 ponderando cuatro señales independientes.
La fórmula
Risk Score = (CVSS × 0.20) + (EPSS × 0.35) + (KEV × 0.30) + (PoC × 0.15)
| Componente | Peso | Qué captura |
|---|---|---|
| Puntuación base CVSS v3.1 | 20% | Gravedad teórica en el peor caso |
| Probabilidad EPSS | 35% | Probabilidad estadística de explotación en los próximos 30 días |
| Estado CISA KEV | 30% | Explotación activa confirmada en el mundo real |
| Disponibilidad de PoC | 15% | El código de exploit público reduce la barrera para los atacantes |
Multiplicadores de impulso
- KEV + PoC activo → ×1.15
- CVSS ≥ 9.0 + EPSS > 0.7 → ×1.10
- Publicado hace < 7 días → ×1.05
La puntuación está limitada a 100.
Puntuación de riesgo — v1 (2026-06)
El puntuador numérico es scoring_version 1.0 (visible en triage_cve, calculate_risk_score y health_check). La suma ponderada lineal anterior es el valor predeterminado v1 para la puntuación numérica, con una anulación estricta:
- Anulación estricta de CISA KEV: un CVE listado en KEV está confirmado como explotado en el mundo real, la señal de explotación más fuerte. Su etiqueta nunca puede ser inferior a CRÍTICO y su puntuación se fija en ≥ 76, independientemente de CVSS/EPSS. (Un CVE KEV con CVSS bajo y EPSS bajo aún devuelve CRÍTICO / 76.)
- CVSS se trata como una señal de gravedad, no de probabilidad de explotación (según Allodi & Massacci 2014); EPSS y KEV llevan la señal de explotación.
- Una decisión experimental SSVC v2 (modelo CISA Deployer →
Act/Attend/Track*/Track) está disponible a través detriage_cve(depth="deep")como una alternativa cualitativa y explicable al número de 0–100.
| Puntuación | Etiqueta | Acción recomendada |
|---|---|---|
| 0 – 25 | BAJO | Programar para la próxima ventana de mantenimiento |
| 26 – 50 | MEDIO | Parchear dentro de 30 días según SLA |
| 51 – 75 | ALTO | Parchear dentro de 7 días; escalar al líder del equipo |
| 76 – 100 | CRÍTICO | Parchear dentro de 24–48 horas. Ventana de cambio de emergencia. |
¿Por qué estos pesos?
EPSS recibe el peso más alto (35%) porque es el mejor predictor individual de explotación real — mucho mejor que CVSS solo. Un CVSS 10.0 con EPSS 0.01 es teóricamente peligroso pero prácticamente improbable. KEV al 30% es la verdad fundamental: explotación confirmada, no una predicción. CVSS al 20% captura el contexto de gravedad para CVEs nuevos con datos EPSS insuficientes. PoC al 15% refleja que los exploits públicos aceleran drásticamente los ataques en el mundo real.
🆕 Novedades en v0.2.0
- Orquestador
triage_cve— una sola llamada de herramienta que distribuye NVD + EPSS + CISA KEV (+ descubrimiento público de PoC paradepth != "quick") de forma concurrente, calcula la puntuación de riesgo compuesta y devuelve un informe limpio.depthesquick/standard(predeterminado) /deep;deepademás emite la decisión SSVC v2. - Nuevas fuentes upstream — VulnCheck NVD++ (un respaldo NVD transparente utilizado automáticamente dentro de
triage_cvecuando NIST NVD no está disponible/limitado), CIRCL hashlookup y la API de rango Pwned Passwords de HIBP. - Puntuación con anulación estricta KEV +
scoring_version— los CVEs listados en KEV son siempre CRÍTICOS (puntuación ≥ 76); la versión de puntuación se informa entriage_cveyhealth_check. - Transporte HTTP — establece
MCP_TRANSPORT=httppara servir HTTP transmisible enHOST:PORT(predeterminado0.0.0.0:8000, sin estado) en lugar de stdio. Incluye unDockerfile. - Recursos y prompts — recursos
kev://catalog,epss://scores/{cve_id}ymanifest://tool-hash(SHA-256 sobre la superficie de herramientas registrada); promptspatch_decision,compare_and_prioritizeydependency_triage. - Postura de seguridad — el servidor nunca registra un manejador de muestreo / nunca emite
sampling/createMessage(vector de ataque de muestreo MCP de Unit 42); las nuevas rutas de salida están en la lista blanca de esquema/host.
🌐 Fuentes de datos
| # | Fuente | Datos proporcionados | Autenticación | Límite de velocidad (Gratis) |
|---|---|---|---|---|
| 1 | NVD | Detalles de CVE, CVSS, CWEs, CPEs | apiKey header (opcional) | 5 solicitudes/30s (50 con clave) |
| 2 | EPSS | Probabilidad de explotación y percentiles | Ninguna | 1,000 solicitudes/min |
| 3 | CISA KEV | Catálogo de CVEs explotados activamente | Ninguna | Archivo estático |
| 4 | OSV.dev | Vulnerabilidades de paquetes de código abierto | Ninguna | Sin límite publicado |
| 5 | GitHub Advisories | Avisos GHSA, parches, versiones afectadas | Bearer token | 60/hora (5,000 con PAT) |
| 6 | MITRE ATT&CK | TTPs, técnicas, mitigaciones | Ninguna | Sin límite publicado |
| 7 | AbuseIPDB | Confianza de abuso de IP, informes, ISP, geo | Key header | 1,000 verificaciones/día |
| 8 | GreyNoise | Actividad de ruido/escaneo de IP, clasificación | key header | 50 consultas/semana |
| 9 | Shodan | Puertos abiertos, servicios, banners, CVEs | key query param | Búsquedas básicas |
| 10 | VirusTotal | Resultados de escaneo multi-AV, reputación | x-apikey header | 500/día, 4/min |
| 11 | MalwareBazaar | Muestras de malware, hashes, firmas | Auth-Key header | Uso justo |
| 12 | ThreatFox | IOCs vinculados a familias de malware | Auth-Key header | Uso justo |
| 13 | Ransomwhere | Direcciones BTC de ransomware y transacciones | Ninguna | Sin límite publicado |
| 14 | URLScan.io | Escaneo de URL, capturas de pantalla, DOM | API-Key header | 5,000 escaneos públicos/día |
| 15 | CIRCL PDNS | Registros DNS pasivos históricos | Autenticación básica HTTP | Acceso para socios |
| 16 | GitHub Code Search | Búsqueda de repositorios de exploits PoC | Bearer token | Compartido con límites de GHSA |
| 17 | Exploit-DB | Base de datos CSV de exploits públicos | Ninguna | Sin límite publicado |
| 18 | Nuclei Templates | Plantillas de detección de la comunidad | Ninguna | Sin límite publicado |
| 19 | MSRC | Avisos de seguridad de Microsoft | Ninguna | Sin límite publicado |
| 20 | Red Hat Security | Avisos de CVE de Red Hat | Ninguna | Sin límite publicado |
| 21 | Ubuntu Security | Rastreador de CVE de Ubuntu | Ninguna | Sin límite publicado |
| 22 | VulnCheck NVD++ | Registros de CVE con esquema NVD (respaldo NVD transparente) | Bearer token (Comunidad gratuita) | Según nivel de Comunidad VulnCheck |
| 23 | CIRCL hashlookup | Metadatos de archivos conocidos como buenos (NSRL + otros), hashlookup:trust | Ninguna | Mejor esfuerzo |
| 24 | HIBP Pwned Passwords | Conteos de contraseñas filtradas mediante API de rango k-anonimato | Ninguna | Sin límite estricto |
🧪 Ejecución de pruebas
# Run the full test suite
pytest tests/ -v
# Run specific test files
pytest tests/test_validators.py tests/test_risk_scorer.py -v
# Run with coverage
pytest tests/ -v --cov=src/cve_mcp --cov-report=term-missing
Prueba con el MCP Inspector
npx @modelcontextprotocol/inspector python -m cve_mcp.server
Se abre en http://localhost:6274 — prueba interactivamente cada herramienta, visualiza esquemas de entrada e inspecciona formatos de respuesta.
Qué cubren las pruebas
- Pruebas unitarias: Cálculo de puntuación de riesgo, análisis de vectores CVSS, validación de entrada
- Pruebas de integración: Registro de herramientas, validación de parámetros, manejo de errores para claves faltantes
- Pruebas de caché: Escrituras de caché SQLite, expiración de TTL, aciertos/fallos de caché
- Pruebas de seguridad: Bloqueo de IP privadas, protección contra bombas XML (defusedxml), saneamiento de entrada
🏛️ Análisis profundo de la arquitectura
Estructura de archivos
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
Estrategia de caché
| Recurso | TTL |
|---|---|
| Registros de CVE (NVD) | 1 hora |
| Puntuaciones EPSS | 6 horas |
| Catálogo KEV | 1 hora |
| Inteligencia de IP / dominio | 1 hora |
| CSV de Exploit-DB | 24 horas |
| Datos STIX de ATT&CK | 24 horas |
| Inteligencia de ransomware | 24 horas |
Registro de auditoría
Cada invocación de herramienta se registra en ~/.cve-mcp/audit.log:
{
"timestamp": "2026-04-14T10:23:45.123Z",
"tool": "lookup_cve",
"parameters": {"cve_id": "CVE-2024-3400"},
"duration_ms": 342,
"cache_hit": false,
"status": "ok"
}
Las claves API y los payloads de respuesta nunca se escriben en los registros de auditoría.
🔐 Seguridad y privacidad
Qué datos salen de tu máquina
- Solo HTTPS saliente — sin puertos de entrada abiertos, sin telemetría
- Los IDs de CVE, IPs, hashes, dominios y nombres de paquetes se envían a las respectivas APIs para su consulta
- Las respuestas de API se almacenan en caché localmente en SQLite — los datos en caché permanecen en tu máquina
Bloqueo de IP privadas
Todas las herramientas de inteligencia de red bloquean rangos de IP privados y reservados antes de cualquier llamada API externa:
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(enlace local)::1,fc00::/7(IPv6 privada)
Protección de claves API
- Las claves se cargan solo desde variables de entorno — nunca codificadas
.envestá en gitignore- Las claves nunca se registran, almacenan en caché ni se incluyen en entradas de auditoría
Seguridad XML
defusedxml se utiliza para todo el análisis XML para prevenir ataques de bombas XML (billion laughs, inyección XXE).
🔧 Solución de problemas
El servidor no se inicia
# Ensure virtual environment is activated and package is installed
pip install -e .
python --version # must be 3.10+
Claude Desktop no muestra el icono de martillo (🔨)
- Verifica errores de sintaxis JSON (sin comas finales) en tu configuración
- Usa rutas absolutas — las rutas relativas fallan silenciosamente
- Cierra completamente Claude Desktop (Cmd+Q / Alt+F4) y reinicia
Límite de velocidad de NVD alcanzado
# Add your free NVD API key to .env
NVD_API_KEY=your-key-here
# https://nvd.nist.gov/developers/request-an-api-key
El servidor pone en cola las solicitudes excesivas automáticamente, pero con una clave obtienes 10× más rendimiento.
GreyNoise 401 No autorizado
# Verify your key works:
curl -H "key: YOUR_KEY" https://api.greynoise.io/v3/ip/8.8.8.8
# The server uses /v3/ip/{ip} — NOT the deprecated /v3/community endpoint
Problemas de codificación en Windows
$env:PYTHONUTF8 = "1"
$env:PYTHONIOENCODING = "utf-8"
🗺️ Hoja de ruta y limitaciones conocidas
Lo que el servidor NO hace
- Sin escaneo activo — solo inteligencia/consulta, no sondea tu infraestructura
- Sin operaciones de escritura — solo lectura de APIs externas (excepto envíos de URLScan)
- Sin puntuación CVSS v4.0 — la calculadora integrada maneja solo v3.1; las puntuaciones v4.0 proporcionadas por NVD se muestran pero no se recalculan
Limitaciones conocidas de la API
- NVD devuelve un máximo de 2,000 resultados por consulta
- Las puntuaciones EPSS para CVEs recién publicados (menos de 24 horas) pueden no existir aún
- CISA KEV se actualiza solo en días hábiles de EE. UU.
- Nivel comunitario de GreyNoise: 50 consultas/semana
- Nivel gratuito de VirusTotal: 4 solicitudes/minuto
- CIRCL PDNS requiere registro y aprobación manuales
- Ransomwhere tiene un embargo de 90 días sobre nuevas direcciones
Mejoras planificadas
- Calculadora local de CVSS v4.0
- Webhook/alertas para adiciones a KEV y cambios en puntuaciones EPSS en una lista de vigilancia de CVEs
- Exportación STIX 2.1 para integración con SIEM
- Contenedor Docker con implementación sin instalación
- Transporte HTTP transmisible (MCP SSE)
- Fuentes adicionales: Censys, SecurityTrails, VulnCheck
🤝 Contribuciones
Las contribuciones son bienvenidas.
Añadir una nueva herramienta
- Añade la función de la herramienta en
server.pycon el decorador@mcp.tool() - Añade la validación de entrada en
utils/validators.py - Implementa el cliente de API en
api/ - Añade pruebas en
tests/ - Actualiza este README
@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)
# validate → cache check → API call → cache write → audit → return
Requisitos de prueba
- Todas las herramientas nuevas deben tener al menos una prueba sin conexión con respuestas simuladas
- Los cambios en la puntuación de riesgo deben incluir casos de prueba de verificación de fórmulas
- Las herramientas de red deben incluir una prueba que verifique el bloqueo de IP privadas
- Todas las pruebas deben pasar:
pytest tests/ -v
📄 Licencia
Licencia MIT — consulta LICENSE para más detalles.
Copyright (c) 2025-2026 Mahipal Jangra (mukul975)
Construido con 🔐 por Mahipal Jangra · Berlín, Alemania
Convirtiendo la inteligencia de seguridad en conversación.