CVE MCP Server

Um servidor MCP (Model Context Protocol) de nível de produção que transforma o Claude em um analista de segurança completo. Em vez de gerenciar mais de 15 abas do navegador em NVD, EPSS, CISA KEV, Shodan, VirusTotal e GreyNoise, faça uma pergunta ao Claude e obtenha inteligência correlacionada em segundos. Construído com Python, FastMCP, httpx, aiosqlite, Pydantic v2 e defusedxml.

Documentação

🛡️ CVE MCP Server

CVE MCP Server

Inteligência de segurança com IA ao seu alcance — 28 ferramentas + um orquestrador de chamada única triage_cve, 24 fontes de dados, um protocolo. GARS-2026 Survey Python 3.10+ License: MIT MCP Compatible Security Tool FastMCP

Um servidor Model Context Protocol (MCP) de nível de produção que transforma o Claude em um analista de segurança de espectro completo. Em vez de gerenciar 15+ abas do navegador em NVD, EPSS, CISA KEV, Shodan, VirusTotal e GreyNoise, faça uma pergunta ao Claude e obtenha inteligência correlacionada em segundos. Construído com Python, FastMCP, httpx, aiosqlite, Pydantic v2 e defusedxml.

O problema: Triar um único CVE significa consultar NVD para pontuações CVSS, EPSS para probabilidade de exploração, CISA KEV para status de exploração ativa, GitHub para patches e VirusTotal para associações de malware — e então correlacionar tudo mentalmente. Para 50 CVEs, isso é um dia inteiro perdido.

A solução: O CVE MCP Server dá ao Claude acesso direto a 28 ferramentas de segurança em 24 APIs — com o orquestrador de chamada única triage_cve na frente. Pergunte "Devemos corrigir o CVE-2024-3400?" e o Claude distribui para todas as fontes relevantes em paralelo, calcula uma pontuação de risco composta (com sobreposição rígida do CISA KEV) e entrega uma recomendação priorizada com evidências.


🌍 GARS-2026 — Pesquisa Global de Prontidão para IA Agêntica

Estou conduzindo um estudo acadêmico global medindo o quão prontos profissionais de segurança, desenvolvedores e equipes empresariais realmente estão para IA agêntica — servidores MCP, chamadas de ferramentas, governança e fluxos de trabalho com supervisão humana.

Se você usa este repositório, sua resposta seria um ponto de dados genuinamente valioso.

📋 Participe da pesquisa (10 min): Pesquisa

  • 60 perguntas · Anônima · Supervisionada pela SRH Berlin
  • Você recebe 50 Casky Tokens para acesso antecipado ao casky.ai
  • Resultados publicados em acesso aberto sob CC-BY 4.0

📑 Sumário


🏗️ Arquitetura

┌─────────────────────────────────────────────────────────────────────┐
│                        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 o tráfego é HTTPS somente de saída — nenhuma porta de entrada é aberta. As chaves de API são carregadas de variáveis de ambiente e nunca são registradas em logs. Endereços IP privados/internos são bloqueados em todas as ferramentas de consulta.


🔍 Catálogo de ferramentas (28 ferramentas)

⭐ Orquestração (v0.2.0) — comece aqui

FerramentaDescriçãoChave de API NecessáriaExemplo de Uso
triage_cveTriagem de chamada única que distribui NVD + EPSS + CISA KEV (+ PoC público para depth != "quick") simultaneamente, calcula a pontuação de risco composta com sobreposição rígida de KEV, usa fallback para VulnCheck NVD++ quando o NIST NVD está limitado e, em depth="deep", emite a decisão classificada SSVC v2Gratuita / Sem chave (chave recomendada)triage_cve("CVE-2021-44228", depth="deep")

Também exposta via primitivas MCP — Recursos: kev://catalog, epss://scores/{cve_id}, manifest://tool-hash (SHA-256 sobre a superfície de ferramentas registrada, para detecção de adulteração). Prompts: patch_decision, compare_and_prioritize, dependency_triage.

Inteligência Central de Vulnerabilidades (8 ferramentas)

FerramentaDescriçãoChave de API NecessáriaExemplo de Uso
lookup_cveBuscar registro detalhado de CVE no NVD, incluindo pontuações CVSS, CWEs, produtos afetados, referências e cronogramaGratuita / Sem chave (chave recomendada)lookup_cve("CVE-2024-3400")
search_cvesPesquisar CVEs no NVD por palavra-chave, nome do produto, gravidade ou intervalo de datasGratuita / Sem chave (chave recomendada)search_cves(keyword="Apache Log4j", severity="CRITICAL")
get_epss_scoreObter probabilidade de exploração EPSS (0–1) e percentil para um ou mais CVEsGratuita / Sem chaveget_epss_score("CVE-2024-3400")
check_kev_statusVerificar se um CVE aparece no catálogo de Vulnerabilidades Exploradas Conhecidas da CISAGratuita / Sem chavecheck_kev_status("CVE-2021-44228")
get_cvss_detailsAnalisar e explicar uma string de vetor CVSS v3.1 com detalhamento por métricaGratuita / Sem chaveget_cvss_details("CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H")
get_cwe_infoConsultar detalhes da Enumeração de Fraquezas Comuns por ID de CWE no banco de dados incorporadoGratuita / Sem chaveget_cwe_info("CWE-79")
get_cve_referencesExtrair e categorizar todos os links de referência para um CVE (patches, avisos, exploits)Gratuita / Sem chave (chave recomendada)get_cve_references("CVE-2023-44487")
bulk_cve_lookupBuscar em lote detalhes de até 20 CVEs em uma única chamada com enriquecimento paraleloGratuita / Sem chave (chave recomendada)bulk_cve_lookup(["CVE-2024-3400", "CVE-2023-44487"])

Inteligência de Exploits e Ataques (4 ferramentas)

FerramentaDescriçãoChave de API NecessáriaExemplo de Uso
search_exploitsPesquisar no GitHub por exploits de prova de conceito públicos e repositórios de código de exploitGITHUB_TOKEN (opcional)search_exploits("CVE-2024-3400")
get_mitre_techniquesMapear um CVE ou CWE para técnicas, táticas e mitigações relevantes do MITRE ATT&CKGratuita / Sem chaveget_mitre_techniques("CVE-2021-44228")
check_poc_availabilityDeterminar se existe código de prova de conceito conhecido para um CVE em múltiplas fontesGITHUB_TOKEN (opcional)check_poc_availability("CVE-2024-3400")
get_attack_patternsRecuperar detalhes de padrões de ataque CAPEC associados a um CWE ou CVEGratuita / Sem chaveget_attack_patterns("CWE-89")

Fase 3: Risco Avançado e Relatórios (4 ferramentas)

FerramentaDescriçãoChave de API NecessáriaExemplo de Uso
calculate_risk_scoreCalcular pontuação de risco composta de 0–100 usando CVSS, EPSS, status KEV e disponibilidade de PoCGratuita / Sem chave (chave recomendada)calculate_risk_score("CVE-2024-3400")
generate_risk_reportGerar um relatório executivo de segurança formatado para um ou mais CVEs com recomendaçõesGratuita / Sem chave (chave recomendada)generate_risk_report(["CVE-2024-3400", "CVE-2023-44487"])
prioritize_cvesClassificar uma lista de CVEs por pontuação de risco composta para priorização de triagemGratuita / Sem chave (chave recomendada)prioritize_cves(["CVE-2024-3400", "CVE-2023-4966", "CVE-2023-44487"])
get_trending_cvesRecuperar CVEs em tendência com base em pontuações EPSS altas e adições recentes ao KEVGratuita / Sem chaveget_trending_cves(days=7, min_epss=0.5)

Inteligência de Rede (4 ferramentas)

FerramentaDescriçãoChave de API NecessáriaExemplo de Uso
lookup_ip_reputationVerificar histórico de abuso de endereço IP e pontuação de confiança via AbuseIPDBABUSEIPDB_API_KEYlookup_ip_reputation("185.220.101.34")
check_ip_noiseConsultar GreyNoise para atividade de varredura/ataque de IP, classificação e CVEs associadosGREYNOISE_API_KEYcheck_ip_noise("185.220.101.34")
shodan_host_lookupObter portas abertas, serviços, banners e vulnerabilidades para um IP via ShodanSHODAN_API_KEYshodan_host_lookup("8.8.8.8")
passive_dns_lookupRecuperar dados históricos de resolução DNS para um domínio do CIRCL Passive DNSCIRCL_PDNS_USER + CIRCL_PDNS_PASSWORDpassive_dns_lookup("example.com")

Inteligência de Ameaças (4 ferramentas)

FerramentaDescriçãoChave de API NecessáriaExemplo de Uso
virustotal_lookupAnalisar hashes de arquivos, URLs, domínios ou IPs contra 70+ mecanismos antivírusVIRUSTOTAL_API_KEYvirustotal_lookup(hash="44d88612fea8a8f36de82e1278abb02f")
search_malwarePesquisar MalwareBazaar por amostras de malware por hash, tag ou assinaturaABUSECH_AUTH_KEY (opcional)search_malware(tag="Emotet")
search_iocsConsultar ThreatFox por Indicadores de Comprometimento vinculados a famílias de malwareABUSECH_AUTH_KEY (opcional)search_iocs(malware="CobaltStrike")
check_ransomwareConsultar endereços de pagamento de ransomware e dados de transação do RansomwhereGratuita / Sem chavecheck_ransomware(address="bc1q...")

DevSecOps (3 ferramentas)

FerramentaDescriçãoChave de API NecessáriaExemplo de Uso
scan_dependenciesEscanear nomes e versões de pacotes contra OSV.dev para vulnerabilidades conhecidasGratuita / Sem chavescan_dependencies(ecosystem="PyPI", packages={"requests": "2.28.0"})
scan_github_advisoriesPesquisar Avisos de Segurança do GitHub por ecossistema, pacote ou gravidadeGITHUB_TOKEN (opcional)scan_github_advisories(ecosystem="pip", package="django")
urlscan_checkEnviar uma URL para escaneamento ou recuperar resultados anteriores de escaneamento do URLScan.ioURLSCAN_API_KEYurlscan_check("https://suspicious-site.com")

📦 Instalação

Pré-requisitos

  • Python 3.10+ (3.11 ou 3.12 recomendado)
  • Gerenciador de pacotes pip ou uv
  • Git para clonar o repositório
  • Um terminal com acesso a variáveis de ambiente

Configuração passo a passo

# 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 mais 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

Com dependências de teste

pip install -e ".[test]"

🔑 Configuração de chaves de API

As chaves de API são organizadas por prioridade — obtenha primeiro as chaves do Nível 1 para máxima cobertura com ferramentas gratuitas e adicione progressivamente os Níveis 2 e 3 conforme necessário.

Nível 1: Alta prioridade (gratuitas, acesso instantâneo, cobertura máxima)

Variável de AmbienteHabilitaComo ObterLimites do Nível GratuitoNecessária?
NVD_API_KEYConsultas NVD 10× mais rápidas (50 req/30s vs 5)Solicitar em nvd.nist.gov50 solicitações por 30 segundosOpcional, mas fortemente recomendada
GITHUB_TOKENPesquisa de Avisos do GitHub + pesquisa de PoC de exploitCriar PAT em github.com/settings/tokens5.000 solicitações/horaOpcional (60/h sem)

Nível 2: Recomendadas (contas gratuitas, valor significativo)

Variável de AmbienteHabilitaComo ObterLimites do Nível GratuitoNecessária?
ABUSEIPDB_KEYConsultas de reputação de IPRegistrar em abuseipdb.com1.000 verificações/diaNecessária para ferramentas de IP
VIRUSTOTAL_KEYEscaneamento de malware de arquivo/URL/domínio/IPCadastrar em virustotal.com500 consultas/dia, 4/minNecessária para ferramentas VT
GREYNOISE_API_KEYInteligência de ruído/atividade de varredura de IPCadastrar em viz.greynoise.io50 consultas/semana (comunidade)Necessária para ferramentas GreyNoise
SHODAN_KEYReconhecimento de host/porta/serviçoRegistrar em account.shodan.ioConsultas básicas de host (nível gratuito)Necessária para ferramentas Shodan

Nível 3: Opcionais (inteligência estendida)

Variável de AmbienteHabilitaComo ObterLimites do Nível GratuitoNecessária?
URLSCAN_KEYEscaneamento de URL e análise de sitesCadastrar em urlscan.io5.000 escaneamentos públicos/diaOpcional
CIRCL_PDNS_USERConsultas CIRCL Passive DNSSolicitar acesso em circl.luSomente acesso de parceiroOpcional
CIRCL_PDNS_PASSAutenticação CIRCL Passive DNSFornecida com registro CIRCLSomente acesso de parceiroOpcional

⚡ Início sem chave: Oito ferramentas funcionam sem nenhuma chave de API — EPSS, CISA KEV, OSV.dev, MITRE ATT&CK, consultas CWE, análise CVSS, Ransomwhere e NVD (em taxa reduzida). Você pode começar a usar o servidor imediatamente e adicionar chaves progressivamente.


⚙️ Configuração

Variáveis de ambiente (.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

Configuração do 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: Sempre use caminhos absolutos. Saia completamente do Claude Desktop (Cmd+Q / Alt+F4) após alterar a configuração — recarregar não é suficiente.

Configuração do 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

🚀 Início rápido

Passo 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 .

Passo 2: Testar com ferramentas gratuitas primeiro

Nenhum arquivo .env necessário. Adicione o servidor ao Claude Desktop ou Claude Code e tente:

"O que é o CVE-2021-44228? Ele está sendo explorado ativamente?" Claude usará lookup_cve (NVD), get_epss_score (EPSS) e check_kev (CISA KEV) — todos gratuitos, sem necessidade de chaves.

"Analise estes pacotes Python em busca de vulnerabilidades: requests 2.28.0, flask 2.2.0, django 3.2.0"

Etapa 3: Adicione sua primeira chave para desempenho 10× maior

echo 'NVD_API_KEY=your-key-here' > .env

Solicite uma chave NVD gratuita em nvd.nist.gov — instantânea por e-mail, aumenta o limite de taxa de 5 para 50 solicitações por 30 segundos.

Etapa 4: Modo de potência total

Depois de adicionar as chaves de Nível 1 e Nível 2:

"Calcule a pontuação de risco para CVE-2024-3400 e me diga se devemos aplicar o patch imediatamente."


💬 Exemplos de uso

Cenário 1: "Devemos aplicar o patch do Log4Shell imediatamente?"

Você: Analise se CVE-2021-44228 (Log4Shell) precisa de patch imediato. Dê-me a pontuação de risco e sua recomendação.

Claude orquestra múltiplas ferramentas nos bastidores:

→ 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

Resposta do Claude: "CVE-2021-44228 pontua 97/100 (CRÍTICO). Execução remota de código no Apache Log4j, CVSS 10.0, 97,5% de probabilidade EPSS, exploração ativa confirmada no CISA KEV incluindo campanhas de ransomware, mais de 300 exploits públicos. Aplique o patch imediatamente."

Cenário 2: "Analise meu requirements.txt do Python"

Você: Analise estas dependências: 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

Resposta do Claude: "Encontrei 12 vulnerabilidades em seus pacotes. Ação imediata: Django 3.2.0 (3 CVEs críticos incluindo injeção de SQL), Pillow 9.0.0 (estouro de heap), cryptography 37.0.0 (cadeia OpenSSL). Atualize para: django>=4.2.16, pillow>=10.3.0, cryptography>=42.0.0."

Cenário 3: "Investigue um IP suspeito"

Você: Investigue o IP suspeito 185.220.101.34 — ele é malicioso?

→ 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

Resposta do Claude: "185.220.101.34 é um nó de saída Tor conhecido classificado como 100% malicioso pelo AbuseIPDB com 4.832 relatos de abuso. GreyNoise confirma varredura ativa para CVE-2024-3400 (Palo Alto) e CVE-2023-46805 (Ivanti). Recomendação: Bloquear no firewall."

Cenário 4: "Gere um relatório executivo de segurança"

Você: Gere um relatório executivo de segurança 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

📊 Explicação da pontuação de risco

A ferramenta calculate_risk_score produz uma pontuação de risco composta de 0 a 100 ponderando quatro sinais independentes.

A fórmula

Risk Score = (CVSS × 0.20) + (EPSS × 0.35) + (KEV × 0.30) + (PoC × 0.15)
ComponentePesoO que captura
Pontuação Base CVSS v3.120%Gravidade teórica do pior caso
Probabilidade EPSS35%Probabilidade estatística de exploração nos próximos 30 dias
Status CISA KEV30%Exploração ativa confirmada no mundo real
Disponibilidade de PoC15%Código de exploit público reduz a barreira para atacantes

Multiplicadores de impulso

  • KEV + PoC ativo → ×1,15
  • CVSS ≥ 9,0 + EPSS > 0,7 → ×1,10
  • Publicado há menos de 7 dias → ×1,05

A pontuação é limitada a 100.

Pontuação de Risco — v1 (2026-06)

O classificador numérico é scoring_version 1.0 (exposto em triage_cve, calculate_risk_score e health_check). A soma linear ponderada acima é o padrão v1 para a pontuação numérica, com uma substituição rígida:

  • Substituição rígida do CISA KEV: um CVE listado no KEV é confirmadamente explorado no mundo real, o sinal de exploração mais forte. Seu rótulo nunca pode ser inferior a CRÍTICO e sua pontuação é fixada em ≥ 76, independentemente de CVSS/EPSS. (Um CVE KEV com CVSS baixo e EPSS baixo ainda retorna CRÍTICO / 76.)
  • O CVSS é tratado como um sinal de gravidade, não de probabilidade de exploração (conforme Allodi & Massacci 2014); EPSS e KEV carregam o sinal de exploração.
  • Uma decisão experimental SSVC v2 com portão (modelo CISA Deployer → Act / Attend / Track* / Track) está disponível via triage_cve(depth="deep") como uma alternativa qualitativa e explicável ao número de 0–100.
PontuaçãoRótuloAção Recomendada
0 – 25BAIXOAgendar para a próxima janela de manutenção
26 – 50MÉDIOAplicar patch em até 30 dias conforme SLA
51 – 75ALTOAplicar patch em até 7 dias; escalar para o líder da equipe
76 – 100CRÍTICOAplicar patch em 24–48 horas. Janela de mudança de emergência.

Por que esses pesos?

O EPSS recebe o maior peso (35%) porque é o melhor preditor individual de exploração real — muito melhor que o CVSS isoladamente. Um CVSS 10.0 com EPSS 0,01 é teoricamente perigoso, mas praticamente improvável. KEV com 30% é a verdade fundamental: exploração confirmada, não uma previsão. CVSS com 20% captura o contexto de gravidade para novos CVEs com dados EPSS insuficientes. PoC com 15% reflete que exploits públicos aceleram dramaticamente os ataques no mundo real.


🆕 Novidades na v0.2.0

  • Orquestrador triage_cve — uma única chamada de ferramenta que distribui NVD + EPSS + CISA KEV (+ descoberta pública de PoC para depth != "quick") simultaneamente, calcula a pontuação de risco composta e retorna um relatório limpo. depth é quick / standard (padrão) / deep; deep adicionalmente emite a decisão com portão SSVC v2.
  • Novas fontes upstream — VulnCheck NVD++ (um fallback NVD transparente usado automaticamente dentro de triage_cve quando o NIST NVD está inacessível/limitado), CIRCL hashlookup e a API de intervalo Pwned Passwords do HIBP.
  • Pontuação com substituição rígida KEV + scoring_version — CVEs listados no KEV são sempre CRÍTICOS (pontuação ≥ 76); a versão da pontuação é relatada em triage_cve e health_check.
  • Transporte HTTP — defina MCP_TRANSPORT=http para servir HTTP transmissível em HOST:PORT (padrão 0.0.0.0:8000, sem estado) em vez de stdio. Acompanha um Dockerfile.
  • Recursos e prompts — recursos kev://catalog, epss://scores/{cve_id} e manifest://tool-hash (SHA-256 sobre a superfície de ferramentas registrada); prompts patch_decision, compare_and_prioritize e dependency_triage.
  • Postura de segurança — o servidor nunca registra um manipulador de amostragem / nunca emite sampling/createMessage (vetor de ataque de amostragem MCP da Unit 42); novos caminhos de saída são permitidos por esquema/host.

🌐 Fontes de dados

#FonteDados FornecidosAutenticaçãoLimite de Taxa (Grátis)
1NVDDetalhes de CVE, CVSS, CWEs, CPEsCabeçalho apiKey (opcional)5 req/30s (50 com chave)
2EPSSProbabilidade de exploração e percentisNenhuma1.000 req/min
3CISA KEVCatálogo de CVEs explorados ativamenteNenhumaArquivo estático
4OSV.devVulnerabilidades de pacotes de código abertoNenhumaSem limite publicado
5GitHub AdvisoriesAvisos GHSA, patches, versões afetadasToken Bearer60/h (5.000 com PAT)
6MITRE ATT&CKTTPs, técnicas, mitigaçõesNenhumaSem limite publicado
7AbuseIPDBConfiança de abuso de IP, relatos, ISP, geoCabeçalho Key1.000 verificações/dia
8GreyNoiseAtividade de ruído/varredura de IP, classificaçãoCabeçalho key50 consultas/semana
9ShodanPortas abertas, serviços, banners, CVEsParâmetro de consulta keyConsultas básicas
10VirusTotalResultados de varredura multi-AV, reputaçãoCabeçalho x-apikey500/dia, 4/min
11MalwareBazaarAmostras de malware, hashes, assinaturasCabeçalho Auth-KeyUso justo
12ThreatFoxIOCs vinculados a famílias de malwareCabeçalho Auth-KeyUso justo
13RansomwhereEndereços BTC de ransomware e transaçõesNenhumaSem limite publicado
14URLScan.ioVarredura de URL, capturas de tela, DOMCabeçalho API-Key5.000 varreduras públicas/dia
15CIRCL PDNSRegistros DNS passivos históricosAutenticação Básica HTTPAcesso para parceiros
16GitHub Code SearchPesquisa de repositórios de PoC de exploitsToken BearerCompartilhado com limites do GHSA
17Exploit-DBBanco de dados público de exploits em CSVNenhumaSem limite publicado
18Nuclei TemplatesModelos de detecção da comunidadeNenhumaSem limite publicado
19MSRCAvisos de segurança da MicrosoftNenhumaSem limite publicado
20Red Hat SecurityAvisos de CVE da Red HatNenhumaSem limite publicado
21Ubuntu SecurityRastreador de CVE do UbuntuNenhumaSem limite publicado
22VulnCheck NVD++Registros de CVE no esquema NVD (fallback NVD transparente)Token Bearer (Community gratuito)Conforme nível Community do VulnCheck
23CIRCL hashlookupMetadados de arquivos conhecidos como bons (NSRL + outros), hashlookup:trustNenhumaMelhor esforço
24HIBP Pwned PasswordsContagens de senhas violadas via API de intervalo k-anonimatoNenhumaSem limite rígido

🧪 Executando testes

# 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

Teste com o MCP Inspector

npx @modelcontextprotocol/inspector python -m cve_mcp.server

Abre em http://localhost:6274 — teste interativamente cada ferramenta, visualize esquemas de entrada e inspecione formatos de resposta.

O que os testes cobrem

  • Testes de unidade: Cálculo de pontuação de risco, análise de vetor CVSS, validação de entrada
  • Testes de integração: Registro de ferramentas, validação de parâmetros, tratamento de erros para chaves ausentes
  • Testes de cache: Gravações de cache SQLite, expiração de TTL, acerto/erro de cache
  • Testes de segurança: Bloqueio de IP privado, proteção contra bombas XML (defusedxml), sanitização de entrada

🏛️ Análise aprofundada da arquitetura

Estrutura de arquivos

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

Estratégia de cache

RecursoTTL
Registros de CVE (NVD)1 hora
Pontuações EPSS6 horas
Catálogo KEV1 hora
Inteligência de IP / domínio1 hora
CSV do Exploit-DB24 horas
Dados STIX do ATT&CK24 horas
Inteligência de ransomware24 horas

Log de auditoria

Cada invocação de ferramenta é registrada em ~/.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"
}

Chaves de API e cargas de resposta nunca são gravadas nos logs de auditoria.


🔐 Segurança e privacidade

Quais dados saem da sua máquina

  • Apenas HTTPS de saída — nenhuma porta de entrada aberta, nenhuma telemetria
  • IDs de CVE, IPs, hashes, domínios e nomes de pacotes são enviados às respectivas APIs para consulta
  • As respostas da API são armazenadas em cache localmente no SQLite — os dados em cache permanecem na sua máquina

Bloqueio de IP privado

Todas as ferramentas de inteligência de rede bloqueiam faixas de IP privadas e reservadas antes de qualquer chamada de 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 (link-local)
  • ::1, fc00::/7 (IPv6 privado)

Proteção de chaves de API

  • Chaves carregadas apenas de variáveis de ambiente — nunca codificadas
  • .env está no gitignore
  • Chaves nunca são registradas, armazenadas em cache ou incluídas em entradas de auditoria

Segurança XML

defusedxml é usado para toda a análise XML para prevenir ataques de bomba XML (billion laughs, injeção XXE).


🔧 Solução de problemas

O servidor não inicia

# Ensure virtual environment is activated and package is installed
pip install -e .
python --version  # must be 3.10+

O Claude Desktop não mostra o ícone de martelo (🔨)

  • Verifique se há erros de sintaxe JSON (sem vírgulas finais) na sua configuração
  • Use caminhos absolutos — caminhos relativos falham silenciosamente
  • Saia completamente do Claude Desktop (Cmd+Q / Alt+F4) e reinicie

Limite de taxa do NVD atingido

# Add your free NVD API key to .env
NVD_API_KEY=your-key-here
# https://nvd.nist.gov/developers/request-an-api-key

O servidor enfileira solicitações excedentes automaticamente, mas com uma chave você obtém 10× mais taxa de transferência.

GreyNoise 401 Não 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 codificação no Windows

$env:PYTHONUTF8 = "1"
$env:PYTHONIOENCODING = "utf-8"

🗺️ Roteiro e limitações conhecidas

O que o servidor NÃO faz

  • Sem varredura ativa — apenas inteligência/consulta, não sonda sua infraestrutura
  • Sem operações de gravação — apenas leituras de APIs externas (exceto envios ao URLScan)
  • Sem pontuação CVSS v4.0 — a calculadora integrada trata apenas v3.1; pontuações v4.0 fornecidas pelo NVD são exibidas, mas não recalculadas

Limitações conhecidas da API

  • A NVD retorna no máximo 2.000 resultados por consulta
  • As pontuações EPSS para CVEs recém-publicadas (com menos de 24 horas) podem ainda não existir
  • O CISA KEV é atualizado apenas em dias úteis nos EUA
  • Nível gratuito do GreyNoise: 50 consultas/semana
  • Nível gratuito do VirusTotal: 4 solicitações/minuto
  • O CIRCL PDNS exige registro manual e aprovação
  • O Ransomwhere tem um embargo de 90 dias para novos endereços

Melhorias planejadas

  • Calculadora local CVSS v4.0
  • Webhook/alertas para adições ao KEV e mudanças nas pontuações EPSS em uma lista de vigilância de CVEs
  • Exportação STIX 2.1 para integração com SIEM
  • Contêiner Docker com implantação sem instalação
  • Transporte HTTP streamable (MCP SSE)
  • Fontes adicionais: Censys, SecurityTrails, VulnCheck

🤝 Contribuindo

Contribuições são bem-vindas.

Adicionando uma nova ferramenta

  1. Adicione a função da ferramenta em server.py com o decorador @mcp.tool()
  2. Adicione a validação de entrada em utils/validators.py
  3. Implemente o cliente da API em api/
  4. Adicione testes em tests/
  5. Atualize 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 teste

  • Todas as novas ferramentas devem ter pelo menos um teste offline com respostas simuladas
  • Mudanças na pontuação de risco devem incluir casos de teste de verificação de fórmula
  • Ferramentas de rede devem incluir um teste que verifique o bloqueio de IP privado
  • Todos os testes devem passar: pytest tests/ -v

📄 Licença

Licença MIT — consulte LICENSE para obter detalhes.

Copyright (c) 2025-2026 Mahipal Jangra (mukul975)

Construído com 🔐 por Mahipal Jangra · Berlim, Alemanha
Transformando inteligência de segurança em conversa.