NmapMCP

Integra a ferramenta de varredura de rede Nmap com o MCP, permitindo capacidades de varredura de rede em ambientes compatíveis com MCP.

Documentação

NmapMCP

Um servidor MCP (Model Context Protocol) Nmap de nível de produção — não um wrapper simples.

A maioria dos servidores MCP Nmap envia a saída do nmap diretamente para uma IA como texto bruto e pronto. O NmapMCP analisa a saída XML do nmap em JSON estruturado, oferece 35 ferramentas especializadas em vez de um único nmap_scan genérico, e adiciona as proteções de segurança que uma ferramenta que executa varreduras de rede arbitrárias realmente precisa.

⚠️ Apenas para uso educacional. Varredura apenas hosts e redes que você possui ou tem autorização explícita para testar. Consulte Uso Responsável abaixo.


Por que este é diferente

Saída estruturada, não texto bruto. A saída XML do nmap é totalmente analisada em JSON limpo — impressões digitais de SO, consultas de fornecedor MAC, strings CPE, resultados de scripts NSE por porta, saltos de traceroute, tempo de atividade — para que um assistente de IA possa raciocinar sobre campos em vez de usar regex em uma parede de stdout.

35 ferramentas especializadas, não uma varredura genérica. Em vez de forçar a IA a lembrar nomes corretos de scripts NSE e combinações de flags, há uma ferramenta específica por caso de uso: ssl_scan, smb_vuln_scan, database_scan, dns_enum, rdp_scan, ftp_scan, ssh_audit, e mais — cada uma pré-configurada com os scripts e flags corretos.

Histórico de varreduras e comparação. list_scan_history, get_scan_result, e diff_scans permitem executar uma varredura, executá-la novamente mais tarde e perguntar "o que mudou?" — produzindo uma comparação estruturada de portas que abriram, fecharam ou mudaram de versão. A maioria dos servidores MCP Nmap não rastreia histórico.

Proteções de segurança incorporadas.

  • Lista de permissões de flags — cada flag do nmap é verificada contra uma lista de permissões explícita antes de chegar ao shell; nada arbitrário passa
  • Validação de alvos — entrada verificada por regex e com limite de comprimento
  • Proteção de faixa privada — IPs públicos são bloqueados por padrão; escaneá-los requer definir explicitamente NMAP_ALLOW_PUBLIC=1
  • Limitação de concorrência — um semáforo limita varreduras paralelas a 3, para que uma IA não sature acidentalmente a rede com varreduras simultâneas de todas as portas
  • Tempo limite rígido — toda varredura é encerrada após 1800s se travar

Inventário de rede em duas fases. network_inventory executa primeiro uma varredura de ping e depois executa detecção de serviços apenas contra hosts que responderam — muito mais eficiente do que lançar cegamente uma varredura de serviços em um /24 inteiro.

Resumos legíveis por humanos. get_host_summary retorna um relatório de texto formatado (hostname, palpite de SO, portas abertas, destaques de scripts, traceroute) projetado para ser lido diretamente por uma pessoa, não apenas analisado por um modelo.


Referência de ferramentas

CategoriaFerramentas
Varredura geralnmap_scan, structured_scan, quick_scan, top_ports_scan, full_port_scan, check_single_port
Descoberta de hostsping_sweep, arp_scan, network_inventory
Técnicas de varredurasyn_stealth_scan, udp_scan, ipv6_scan
Serviços / SOservice_scan, os_detection, aggressive_scan, banner_grab
Vulnerabilidadesvuln_scan, safe_vuln_scan, smb_vuln_scan
Auditorias de protocolossl_scan, http_enum, dns_enum, smb_enum, ftp_scan, ssh_audit, rdp_scan, database_scan
Análise de redefirewall_detection, traceroute_scan
Scriptsscript_scan (executa qualquer script/categoria NSE pelo nome)
Histórico e relatórioslist_scan, list_scan_history, get_scan_result, diff_scans, get_host_summary

Exemplos de prompts uma vez conectado ao Claude:

run a quick_scan on 192.168.1.100
get_host_summary on 192.168.1.1
run a vuln_scan on 192.168.1.50
network_inventory of 192.168.1.0/24
diff_scans between scan_id_a and scan_id_b

Configuração

Requisitos

RequisitoVersãoNotas
Python3.13+
Nmap7.9+O binário real do scanner
uvMais recenteGerenciador de pacotes Python
Claude DesktopMais recenteOu qualquer cliente compatível com MCP

1. Instale Python 3.13+

Baixe de python.org. No Windows, marque "Add Python to PATH" durante a instalação. Verifique:

python --version

2. Instale Nmap

Baixe de nmap.org. Mantenha Npcap marcado durante a instalação (Windows). Verifique:

nmap --version

3. Instale uv

pip install uv

4. Obtenha o projeto

git clone https://github.com/<your-username>/NmapMCP.git
cd NmapMCP

5. Aponte o servidor para o seu binário Nmap

Por padrão, o servidor procura Nmap via a variável de ambiente NMAP_PATH (com fallback para um padrão do Windows). Defina-a para o caminho real do seu nmap — no macOS/Linux geralmente é apenas nmap ou /usr/bin/nmap; no Windows, precisa do caminho curto 8.3 com barras normais, ex.: C:/PROGRA~1/Nmap/nmap.exe (encontre o seu com where nmap, depois converta para caminho curto se contiver espaços).

Defina-a como uma variável de ambiente em vez de editar o código-fonte:

export NMAP_PATH=/usr/bin/nmap   # macOS/Linux
set NMAP_PATH=C:/PROGRA~1/Nmap/nmap.exe   # Windows

6. Instale as dependências

uv venv
uv pip install -e .

7. Configure seu cliente MCP

Adicione à configuração do seu Claude Desktop (%APPDATA%\Claude\claude_desktop_config.json no Windows, ~/Library/Application Support/Claude/claude_desktop_config.json no macOS):

{
  "mcpServers": {
    "NmapMCP": {
      "command": "uv",
      "args": ["--directory", "/absolute/path/to/NmapMCP", "run", "main.py"]
    }
  }
}

Reinicie o Claude Desktop e procure o ícone de ferramentas para confirmar que carregou.

Docker

Um Dockerfile está incluído para implantação em contêiner; veja-o para detalhes.


Uso Responsável

Este projeto é publicado apenas para fins educacionais e de testes autorizados. Ferramentas de varredura de rede como Nmap podem ser mal utilizadas para sondar sistemas sem autorização, o que é ilegal na maioria das jurisdições.

  • Execute varreduras apenas contra hosts, redes ou serviços que você possui ou para os quais tem permissão escrita explícita para testar
  • A varredura de IPs públicos está desabilitada por padrão (NMAP_ALLOW_PUBLIC=1 necessário para substituir) — deixe desativado a menos que precise especificamente e tenha autorização
  • O(s) mantenedor(es) deste repositório não são responsáveis por uso indevido

Solução de problemas

"nmap not found" — Confirme que nmap --version funciona no seu terminal e que NMAP_PATH aponta para o binário correto.

"0 hosts up" em tudo (Windows) — Geralmente é um problema de permissões do Npcap. Use quick_scan ou get_host_summary (baseado em conexão TCP, sem necessidade de admin) em vez de ping_sweep/arp_scan, ou execute seu terminal/Claude Desktop como Administrador.

O ícone de ferramentas não aparece no Claude Desktop — Valide seu JSON de configuração, confirme que o caminho está correto e absoluto, depois feche e reabra completamente o Claude Desktop.

Algumas varreduras precisam de privilégios elevados — syn_stealth_scan, udp_scan, arp_scan, e os_detection geralmente exigem admin/root.


Roadmap / Limitações conhecidas

Sendo transparente sobre onde isso está:

  • Sem suíte de testes automatizados ainda
  • Arquitetura de arquivo único (main.py) — funciona bem, mas uma futura divisão em módulos runner/parser/validator/tools melhoraria a manutenibilidade
  • O histórico de varreduras é apenas em memória e não persiste entre reinicializações; sem log de auditoria persistente ainda
  • Sem limite de taxa por alvo (apenas o paralelismo global é limitado)

Licença

MIT — veja LICENSE.