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

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. GARS-2026 Survey Python 3.10+ License: MIT MCP Compatible Security Tool FastMCP

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

┌─────────────────────────────────────────────────────────────────────┐
│                        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í

HerramientaDescripciónClave API requeridaEjemplo de uso
triage_cveClasificació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 v2Gratis / 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)

HerramientaDescripciónClave API requeridaEjemplo de uso
lookup_cveObtener registro detallado de CVE desde NVD incluyendo puntuaciones CVSS, CWEs, productos afectados, referencias y cronologíaGratis / Sin clave (clave recomendada)lookup_cve("CVE-2024-3400")
search_cvesBuscar CVEs en NVD por palabra clave, nombre de producto, severidad o rango de fechasGratis / Sin clave (clave recomendada)search_cves(keyword="Apache Log4j", severity="CRITICAL")
get_epss_scoreObtener probabilidad de explotación EPSS (0–1) y percentil para uno o más CVEsGratis / Sin claveget_epss_score("CVE-2024-3400")
check_kev_statusVerificar si un CVE aparece en el catálogo de Vulnerabilidades Explotadas Conocidas de CISAGratis / Sin clavecheck_kev_status("CVE-2021-44228")
get_cvss_detailsAnalizar y explicar una cadena de vector CVSS v3.1 con desglose por métricaGratis / Sin claveget_cvss_details("CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H")
get_cwe_infoConsultar detalles de Common Weakness Enumeration por ID de CWE desde la base de datos integradaGratis / Sin claveget_cwe_info("CWE-79")
get_cve_referencesExtraer 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_lookupObtener detalles por lotes para hasta 20 CVEs en una sola llamada con enriquecimiento paraleloGratis / Sin clave (clave recomendada)bulk_cve_lookup(["CVE-2024-3400", "CVE-2023-44487"])

Inteligencia de Exploits y Ataques (4 herramientas)

HerramientaDescripciónClave API requeridaEjemplo de uso
search_exploitsBuscar en GitHub exploits de prueba de concepto públicos y repositorios de código de exploitsGITHUB_TOKEN (opcional)search_exploits("CVE-2024-3400")
get_mitre_techniquesMapear un CVE o CWE a técnicas, tácticas y mitigaciones relevantes de MITRE ATT&CKGratis / Sin claveget_mitre_techniques("CVE-2021-44228")
check_poc_availabilityDeterminar si existe código de prueba de concepto conocido para un CVE en múltiples fuentesGITHUB_TOKEN (opcional)check_poc_availability("CVE-2024-3400")
get_attack_patternsRecuperar detalles de patrones de ataque CAPEC asociados con un CWE o CVEGratis / Sin claveget_attack_patterns("CWE-89")

Fase 3: Riesgo Avanzado y Reportes (4 herramientas)

HerramientaDescripciónClave API requeridaEjemplo de uso
calculate_risk_scoreCalcular puntuación de riesgo compuesta de 0–100 usando CVSS, EPSS, estado KEV y disponibilidad de PoCGratis / Sin clave (clave recomendada)calculate_risk_score("CVE-2024-3400")
generate_risk_reportGenerar un informe de seguridad ejecutivo formateado para uno o más CVEs con recomendacionesGratis / Sin clave (clave recomendada)generate_risk_report(["CVE-2024-3400", "CVE-2023-44487"])
prioritize_cvesClasificar una lista de CVEs por puntuación de riesgo compuesta para priorización de clasificaciónGratis / Sin clave (clave recomendada)prioritize_cves(["CVE-2024-3400", "CVE-2023-4966", "CVE-2023-44487"])
get_trending_cvesRecuperar CVEs en tendencia basados en puntuaciones EPSS altas y adiciones recientes a KEVGratis / Sin claveget_trending_cves(days=7, min_epss=0.5)

Inteligencia de Red (4 herramientas)

HerramientaDescripciónClave API requeridaEjemplo de uso
lookup_ip_reputationVerificar historial de abuso de dirección IP y puntuación de confianza mediante AbuseIPDBABUSEIPDB_API_KEYlookup_ip_reputation("185.220.101.34")
check_ip_noiseConsultar GreyNoise para actividad de escaneo/ataque de IP, clasificación y CVEs asociadosGREYNOISE_API_KEYcheck_ip_noise("185.220.101.34")
shodan_host_lookupObtener puertos abiertos, servicios, banners y vulnerabilidades para una IP mediante ShodanSHODAN_API_KEYshodan_host_lookup("8.8.8.8")
passive_dns_lookupRecuperar datos históricos de resolución DNS para un dominio desde CIRCL Passive DNSCIRCL_PDNS_USER + CIRCL_PDNS_PASSWORDpassive_dns_lookup("example.com")

Inteligencia de Amenazas (4 herramientas)

HerramientaDescripciónClave API requeridaEjemplo de uso
virustotal_lookupAnalizar hashes de archivos, URLs, dominios o IPs contra más de 70 motores antivirusVIRUSTOTAL_API_KEYvirustotal_lookup(hash="44d88612fea8a8f36de82e1278abb02f")
search_malwareBuscar en MalwareBazaar muestras de malware por hash, etiqueta o firmaABUSECH_AUTH_KEY (opcional)search_malware(tag="Emotet")
search_iocsConsultar ThreatFox para Indicadores de Compromiso vinculados a familias de malwareABUSECH_AUTH_KEY (opcional)search_iocs(malware="CobaltStrike")
check_ransomwareConsultar direcciones de pago de ransomware y datos de transacciones desde RansomwhereGratis / Sin clavecheck_ransomware(address="bc1q...")

DevSecOps (3 herramientas)

HerramientaDescripciónClave API requeridaEjemplo de uso
scan_dependenciesEscanear nombres de paquetes y versiones contra OSV.dev para vulnerabilidades conocidasGratis / Sin clavescan_dependencies(ecosystem="PyPI", packages={"requests": "2.28.0"})
scan_github_advisoriesBuscar Avisos de Seguridad de GitHub por ecosistema, paquete o severidadGITHUB_TOKEN (opcional)scan_github_advisories(ecosystem="pip", package="django")
urlscan_checkEnviar una URL para escaneo o recuperar resultados de escaneo anteriores desde URLScan.ioURLSCAN_API_KEYurlscan_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 entornoHabilitaCómo obtenerlaLímites del nivel gratuito¿Requerida?
NVD_API_KEYBúsquedas NVD 10× más rápidas (50 solicitudes/30s vs 5)Solicitar en nvd.nist.gov50 solicitudes por 30 segundosOpcional pero muy recomendada
GITHUB_TOKENBúsqueda de Avisos de GitHub + búsqueda de exploits PoCCrear PAT en github.com/settings/tokens5,000 solicitudes/horaOpcional (60/hora sin ella)

Nivel 2: Recomendada (cuentas gratuitas, valor significativo)

Variable de entornoHabilitaCómo obtenerlaLímites del nivel gratuito¿Requerida?
ABUSEIPDB_KEYBúsquedas de reputación de IPRegistrarse en abuseipdb.com1,000 verificaciones/díaRequerida para herramientas de IP
VIRUSTOTAL_KEYEscaneo de malware de archivos/URLs/dominios/IPsRegistrarse en virustotal.com500 búsquedas/día, 4/minRequerida para herramientas VT
GREYNOISE_API_KEYInteligencia de ruido/actividad de escaneo de IPRegistrarse en viz.greynoise.io50 consultas/semana (comunidad)Requerida para herramientas GreyNoise
SHODAN_KEYReconocimiento de hosts/puertos/serviciosRegistrarse en account.shodan.ioBúsquedas básicas de hosts (nivel gratuito)Requerida para herramientas Shodan

Nivel 3: Opcional (inteligencia extendida)

Variable de entornoHabilitaCómo obtenerlaLímites del nivel gratuito¿Requerida?
URLSCAN_KEYEscaneo de URLs y análisis de sitios webRegistrarse en urlscan.io5,000 escaneos públicos/díaOpcional
CIRCL_PDNS_USERBúsquedas CIRCL Passive DNSSolicitar acceso en circl.luSolo acceso de sociosOpcional
CIRCL_PDNS_PASSAutenticación CIRCL Passive DNSProporcionada con el registro de CIRCLSolo acceso de sociosOpcional

⚡ 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) y check_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)
ComponentePesoQué captura
Puntuación base CVSS v3.120%Gravedad teórica en el peor caso
Probabilidad EPSS35%Probabilidad estadística de explotación en los próximos 30 días
Estado CISA KEV30%Explotación activa confirmada en el mundo real
Disponibilidad de PoC15%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 de triage_cve(depth="deep") como una alternativa cualitativa y explicable al número de 0–100.
PuntuaciónEtiquetaAcción recomendada
0 – 25BAJOProgramar para la próxima ventana de mantenimiento
26 – 50MEDIOParchear dentro de 30 días según SLA
51 – 75ALTOParchear dentro de 7 días; escalar al líder del equipo
76 – 100CRÍTICOParchear 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 para depth != "quick") de forma concurrente, calcula la puntuación de riesgo compuesta y devuelve un informe limpio. depth es quick / standard (predeterminado) / deep; deep además emite la decisión SSVC v2.
  • Nuevas fuentes upstream — VulnCheck NVD++ (un respaldo NVD transparente utilizado automáticamente dentro de triage_cve cuando 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 en triage_cve y health_check.
  • Transporte HTTP — establece MCP_TRANSPORT=http para servir HTTP transmisible en HOST:PORT (predeterminado 0.0.0.0:8000, sin estado) en lugar de stdio. Incluye un Dockerfile.
  • Recursos y prompts — recursos kev://catalog, epss://scores/{cve_id} y manifest://tool-hash (SHA-256 sobre la superficie de herramientas registrada); prompts patch_decision, compare_and_prioritize y dependency_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

#FuenteDatos proporcionadosAutenticaciónLímite de velocidad (Gratis)
1NVDDetalles de CVE, CVSS, CWEs, CPEsapiKey header (opcional)5 solicitudes/30s (50 con clave)
2EPSSProbabilidad de explotación y percentilesNinguna1,000 solicitudes/min
3CISA KEVCatálogo de CVEs explotados activamenteNingunaArchivo estático
4OSV.devVulnerabilidades de paquetes de código abiertoNingunaSin límite publicado
5GitHub AdvisoriesAvisos GHSA, parches, versiones afectadasBearer token60/hora (5,000 con PAT)
6MITRE ATT&CKTTPs, técnicas, mitigacionesNingunaSin límite publicado
7AbuseIPDBConfianza de abuso de IP, informes, ISP, geoKey header1,000 verificaciones/día
8GreyNoiseActividad de ruido/escaneo de IP, clasificaciónkey header50 consultas/semana
9ShodanPuertos abiertos, servicios, banners, CVEskey query paramBúsquedas básicas
10VirusTotalResultados de escaneo multi-AV, reputaciónx-apikey header500/día, 4/min
11MalwareBazaarMuestras de malware, hashes, firmasAuth-Key headerUso justo
12ThreatFoxIOCs vinculados a familias de malwareAuth-Key headerUso justo
13RansomwhereDirecciones BTC de ransomware y transaccionesNingunaSin límite publicado
14URLScan.ioEscaneo de URL, capturas de pantalla, DOMAPI-Key header5,000 escaneos públicos/día
15CIRCL PDNSRegistros DNS pasivos históricosAutenticación básica HTTPAcceso para socios
16GitHub Code SearchBúsqueda de repositorios de exploits PoCBearer tokenCompartido con límites de GHSA
17Exploit-DBBase de datos CSV de exploits públicosNingunaSin límite publicado
18Nuclei TemplatesPlantillas de detección de la comunidadNingunaSin límite publicado
19MSRCAvisos de seguridad de MicrosoftNingunaSin límite publicado
20Red Hat SecurityAvisos de CVE de Red HatNingunaSin límite publicado
21Ubuntu SecurityRastreador de CVE de UbuntuNingunaSin límite publicado
22VulnCheck NVD++Registros de CVE con esquema NVD (respaldo NVD transparente)Bearer token (Comunidad gratuita)Según nivel de Comunidad VulnCheck
23CIRCL hashlookupMetadatos de archivos conocidos como buenos (NSRL + otros), hashlookup:trustNingunaMejor esfuerzo
24HIBP Pwned PasswordsConteos de contraseñas filtradas mediante API de rango k-anonimatoNingunaSin 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é

RecursoTTL
Registros de CVE (NVD)1 hora
Puntuaciones EPSS6 horas
Catálogo KEV1 hora
Inteligencia de IP / dominio1 hora
CSV de Exploit-DB24 horas
Datos STIX de ATT&CK24 horas
Inteligencia de ransomware24 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
  • .env está 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

  1. Añade la función de la herramienta en server.py con el decorador @mcp.tool()
  2. Añade la validación de entrada en utils/validators.py
  3. Implementa el cliente de API en api/
  4. Añade pruebas en tests/
  5. 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.