Kali MCP Server

Un servidor MCP de Kali Linux que proporciona a los asistentes de IA acceso a herramientas de seguridad.

Documentación

Kali MCP Server

Un servidor MCP (Model Context Protocol) listo para producción que se ejecuta en un contenedor Docker de Kali Linux, proporcionando a los asistentes de IA acceso a 35 herramientas de seguridad que cubren todo el ciclo de vida de la seguridad ofensiva.

Kali Linux Docker Python

Descripción general

Este proyecto proporciona un servidor MCP en contenedor Docker que se ejecuta en Kali Linux, dando a los asistentes de IA (como Claude) acceso a un conjunto completo de herramientas de seguridad y pruebas de penetración. El servidor se comunica mediante Server-Sent Events (SSE) o stdio y permite a la IA ejecutar comandos en un entorno controlado.

Inicio rápido

Construcción y ejecución del contenedor

# Quick start with the helper script
./run_docker.sh

# Or with Docker Compose
docker compose up --build -d

# Or manually:
docker build -t kali-mcp-server .
docker run -p 8000:8000 kali-mcp-server

Comprobaciones de desarrollo

# install dev dependencies
./run_tests.sh install

# individual checks
./run_tests.sh typecheck     # pyright
./run_tests.sh lint          # ruff check .
./run_tests.sh format        # ruff format .
./run_tests.sh test          # pytest
./run_tests.sh test-tools    # pytest tests/test_tools.py
./run_tests.sh test-session  # pytest -k "session"

# run install + typecheck + lint + tests
./run_tests.sh all

Conexión a Claude Desktop

  1. Edita tu archivo de configuración de Claude Desktop en ~/Library/Application Support/Claude/claude_desktop_config.json:
{
  "mcpServers": {
    "kali-mcp-server": {
      "transport": "sse",
      "url": "http://localhost:8000/sse",
      "command": "docker compose up -d"
    }
  }
}
  1. Reinicia Claude Desktop
  2. Prueba con: /run nmap -F localhost

Herramientas MCP disponibles (35)

Herramientas principales

HerramientaDescripción
runEjecuta comandos de shell en el entorno Kali Linux
fetchObtiene y analiza contenido web desde URLs
resourcesEnumera los recursos del sistema disponibles y ejemplos de comandos

Reconocimiento y escaneo

HerramientaDescripción
port_scanWrapper inteligente de nmap con ajustes predefinidos de escaneo (quick, full, stealth, udp, service, aggressive)
dns_enumEnumeración DNS exhaustiva con intentos de transferencia de zona
network_discoveryReconocimiento y descubrimiento de red en múltiples etapas
subdomain_enumEnumeración de subdominios mediante subfinder, amass, waybackurls
recon_autoPipeline de reconocimiento automatizado en múltiples etapas

Pruebas de aplicaciones web

HerramientaDescripción
vulnerability_scanEvaluación automatizada de vulnerabilidades con múltiples herramientas
web_enumerationDescubrimiento y enumeración de aplicaciones web
web_auditAuditoría exhaustiva de seguridad de aplicaciones web
spider_websiteRastreo y spidering web mediante gospider
form_analysisDescubre y analiza formularios web
header_analysisAnálisis de seguridad de cabeceras HTTP
ssl_analysisEvaluación de seguridad SSL/TLS mediante testssl.sh

Ataques de credenciales y fuerza bruta

HerramientaDescripción
hydra_attackPruebas de credenciales por fuerza bruta mediante hydra (SSH, FTP, HTTP, SMB, MySQL, RDP, etc.)
credential_storeAlmacena/recupera credenciales descubiertas vinculadas a sesiones

Herramientas de payloads y exploits

HerramientaDescripción
payload_generateGenera payloads con msfvenom (reverse shell, bind shell, meterpreter)
reverse_shellGenera one-liners de reverse shell para bash, python, php, perl, powershell, nc, ruby, java
exploit_searchBusca exploits mediante searchsploit

Herramientas de codificación y hashes

HerramientaDescripción
encode_decodeCodificación/decodificación en múltiples formatos (base64, URL, hex, HTML, ROT13)
hash_identifyIdentifica tipos de hash con modo Hashcat y búsqueda de formato John

Enumeración de recursos compartidos

HerramientaDescripción
enum_sharesEnumeración de recursos compartidos SMB/NFS (smbclient, enum4linux, showmount)

Análisis de salidas

HerramientaDescripción
parse_nmapAnaliza la salida de nmap en texto/XML y la convierte en hallazgos JSON estructurados
parse_tool_outputAnaliza la salida de nikto, gobuster, dirb, hydra o sqlmap

Evidencia e informes

HerramientaDescripción
save_outputGuarda contenido en archivos con marca de tiempo para la recopilación de evidencia
create_reportGenera informes estructurados (markdown, text, JSON)
file_analysisAnaliza archivos (detección de tipo, strings, hashes, metadatos)
download_fileDescarga archivos desde URLs con verificación de hash

Gestión de sesiones

HerramientaDescripción
session_createCrea una nueva sesión de pentest
session_listLista todas las sesiones con metadatos
session_switchCambia entre sesiones
session_statusMuestra el estado de la sesión actual
session_deleteElimina una sesión y su evidencia
session_historyMuestra el historial de comandos de la sesión actual

Detalles de las herramientas

port_scan - Wrapper inteligente de Nmap

Ejecuta nmap con ajustes predefinidos de escaneo, generando salida tanto en texto como en XML.

/port_scan target=192.168.1.1 scan_type=quick
/port_scan target=10.0.0.0/24 scan_type=aggressive ports=80,443,8080

Ajustes predefinidos de escaneo:

AjusteFlags de Nmap
quick-F -sV
full-sS -sV -p-
stealth-sS -T2 --max-retries 1
udp-sU --top-ports 100
service-sV --version-intensity 5 -sC
aggressive-A -T4

dns_enum - Enumeración DNS

Consulta todos los tipos de registros DNS e intenta transferencias de zona.

/dns_enum domain=example.com
/dns_enum domain=target.com record_types=a,mx,ns,txt

recon_auto - Pipeline de reconocimiento automatizado

Ejecuta un pipeline de reconocimiento en múltiples etapas con profundidad configurable.

/recon_auto target=example.com depth=quick
/recon_auto target=10.0.0.1 depth=standard
/recon_auto target=target.com depth=deep

Niveles de profundidad:

ProfundidadFases
quickEnumeración DNS, escaneo rápido de puertos, análisis de cabeceras
standard+ escaneo de servicios, análisis SSL, búsqueda de exploits
deep+ enumeración de subdominios, enumeración web, escaneo de vulnerabilidades

hydra_attack - Pruebas de fuerza bruta

/hydra_attack target=192.168.1.1 service=ssh username=admin passlist=/usr/share/wordlists/rockyou.txt
/hydra_attack target=10.0.0.1 service=ftp userlist=users.txt passlist=passwords.txt threads=32

Servicios compatibles: ssh, ftp, http-get, http-post-form, smb, mysql, rdp, telnet, vnc, pop3, imap, smtp

payload_generate - Payloads de Msfvenom

/payload_generate payload_type=reverse_shell platform=linux lhost=10.0.0.1 lport=4444 format=elf
/payload_generate payload_type=meterpreter platform=windows lhost=10.0.0.1 format=exe

Tipos de payload: reverse_shell, bind_shell, meterpreter Plataformas: linux, windows, osx, php, python Formatos: elf, exe, raw, python, php, war

reverse_shell - One-liners de Shell

Genera comandos de reverse shell listos para usar con sugerencias de listener.

/reverse_shell lhost=10.0.0.1 shell_type=bash lport=4444
/reverse_shell lhost=10.0.0.1 shell_type=python lport=9999

Tipos de shell: bash, python, php, perl, powershell, nc, ruby, java

encode_decode - Utilidad de codificación

/encode_decode data="hello world" operation=encode format=base64
/encode_decode data="aGVsbG8gd29ybGQ=" operation=decode format=base64
/encode_decode data="<script>alert(1)</script>" operation=encode format=html

Formatos: base64, url, hex, html, rot13

hash_identify - Identificación de hashes

Identifica tipos de hash mediante regex y devuelve números de modo Hashcat y nombres de formato John.

/hash_identify hash_value=5d41402abc4b2a76b9719d911017c592
/hash_identify hash_value=$2y$10$abcdefghijklmnopqrstuuABCDEFGHIJKLMNOPQRSTUVWXYZ012345

Tipos compatibles: MD5, SHA-1, SHA-256, SHA-512, bcrypt, SHA-512/256/MD5 Crypt, NTLM, Apache APR1, MySQL, Django

enum_shares - Enumeración de recursos compartidos

/enum_shares target=192.168.1.1 enum_type=all
/enum_shares target=10.0.0.1 enum_type=smb username=admin password=pass

Tipos de enumeración: smb (smbclient + enum4linux), nfs (showmount), all

credential_store - Gestión de credenciales

Almacena credenciales descubiertas como JSON vinculadas a la sesión activa.

/credential_store action=add username=admin password=pass123 service=ssh target=10.0.0.1
/credential_store action=list
/credential_store action=search username=admin

parse_nmap - Analizador de salida de Nmap

Analiza la salida de nmap en texto y XML convirtiéndola a JSON estructurado con hosts, puertos abiertos, servicios, detección de SO y salida de scripts.

/parse_nmap filepath=port_scan_10_0_0_1_quick_20240101_120000.txt
/parse_nmap filepath=scan_results.xml

parse_tool_output - Analizador de salida genérico

Detecta y analiza automáticamente la salida de nikto, gobuster, dirb, hydra o sqlmap.

/parse_tool_output filepath=nikto_results.txt
/parse_tool_output filepath=gobuster_output.txt tool_type=gobuster

vulnerability_scan

/vulnerability_scan target=127.0.0.1 scan_type=quick
/vulnerability_scan target=example.com scan_type=comprehensive

Tipos de escaneo: quick, comprehensive, web, network

web_enumeration

/web_enumeration target=http://example.com enumeration_type=full

Tipos: basic, full, aggressive

network_discovery

/network_discovery target=192.168.1.0/24 discovery_type=comprehensive

Tipos: quick, comprehensive, stealth


Herramientas preinstaladas

El contenedor Docker incluye las siguientes herramientas, todas habilitadas para su uso a través del comando run:

CategoríaHerramientas
Escaneo de rednmap, masscan, netcat, tcpdump, tshark
Pruebas webnikto, gobuster, dirb, sqlmap, wfuzz, ffuf, feroxbuster, whatweb, wafw00f
Explotaciónmetasploit-framework (msfconsole, msfvenom), searchsploit
Ataques de credencialeshydra, hashcat, john
Recopilación de informaciónwhois, dig, nslookup, amass, subfinder, theharvester, recon-ng, fierce, dnsenum, dnsrecon
Rastreo webgospider, waybackurls
Enumeración de recursos compartidossmbclient, enum4linux, showmount (nfs-common)
SSL/TLStestssl.sh, openssl
Sondeo HTTPhttpx-toolkit, curl, wget
Análisis de archivosfile, strings, binwalk, exiftool, xxd, hexdump
Utilidadespython3, perl, ruby, php, git, base64, jq

Todos los comandos están permitidos por defecto dentro del contenedor. El propio contenedor es el límite de seguridad.

Consideraciones de seguridad

  • Aislamiento del contenedor: El servidor se ejecuta dentro de un contenedor Docker aislado. Se utiliza root dentro del contenedor porque muchas herramientas de seguridad (escaneos SYN de nmap, tcpdump, etc.) requieren acceso a sockets raw
  • Saneamiento de entrada: Los metacaracteres de shell (;, &, |) se eliminan de todas las entradas de comandos
  • Sin acceso al host: El contenedor no tiene acceso al sistema de archivos ni a la pila de red del host (salvo que se monten volúmenes explícitamente)
  • Autorización requerida: Úsalo solo para pruebas de seguridad legítimas con la autorización adecuada
  • Solo local: El contenedor no debe estar expuesto a internet

Requisitos

  • Docker
  • Claude Desktop u otro cliente MCP (SSE o stdio)
  • Puerto 8000 disponible en tu máquina host

Desarrollo

Configuración

git clone https://github.com/yourusername/kali-mcp-server.git
cd kali-mcp-server

python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

Ejecución de comprobaciones

# All checks
./run_tests.sh

# Individual
pyright                          # Type checking
ruff check .                     # Linting
ruff format .                    # Formatting
pytest                           # All tests
pytest tests/test_tools.py       # Single file
pytest -k "session"              # Pattern match

Arquitectura

Añadir una nueva herramienta requiere cambios en tres lugares:

  1. kali_mcp_server/tools.py - Implementa la función asíncrona
  2. kali_mcp_server/server.py - Añade el despacho en handle_tool_request() y el esquema en list_available_tools()
  3. tests/ - Añade pruebas tanto en test_tools.py como en test_server.py

Agradecimientos

  • Kali Linux por su distribución centrada en seguridad
  • Anthropic por Claude y el protocolo MCP
  • La comunidad de herramientas de seguridad de código abierto

Construido para profesionales de la seguridad y asistentes de IA