Reimplementé el kali-mcp original en Go.
(github.com/found-cake)Hola. Soy un estudiante universitario de la carrera de seguridad de la información.
Había usado con frecuencia kali-mcp para trabajos de pentesting / pruebas de tráfico / automatización de CTF, pero al trabajar en un entorno con varios agentes conectados al mismo tiempo empecé a tener cuellos de botella, así que decidí reimplementarlo yo mismo en Go.
GitHub: https://github.com/found-cake/kali-mcp-go
Estructura y limitaciones del kali-mcp original
La versión original está implementada con Flask + Python, y la clase CommandExecutor crea un subprocess.Popen por cada solicitud y luego lanza además 2 daemon threads para leer stdout/stderr por separado.
Para un solo agente es suficiente, pero cuando se acumulan solicitudes simultáneas en un entorno multi-agent aparecen problemas como los siguientes.
- Worker único por defecto de Flask — los agentes se bloquean entre sí
- Sobrecarga por crear un proceso + threads en cada solicitud
- Los agentes confunden la demora en la respuesta con un timeout y reintentan la misma tarea
Cambios principales
Servidor
- Antes: Flask (worker único por defecto)
- Cambio: Fiber v3 / fasthttp — concurrencia completa
Recolección de salida
- Antes: bucle de
readlinecon 2 daemon threads - Cambio: 2 goroutines +
WaitGrouppara sincronización, alineando claramente el momento de recolección de stdout/stderr y evitando pérdida de salida
timeout/cancel
- Antes:
process.wait(timeout=...)+ kill forzado - Cambio: basado en context — cerrando correctamente incluso los pipes
Archivo temporal de Metasploit
- Antes:
/tmp/mks_msf_resource.rchardcodeado — posible race condition con solicitudes concurrentes - Cambio:
os.CreateTemp— manejo seguro con nombre de archivo único por solicitud
Soporte para tshark
- Antes: no había
- Cambio: se agregó un endpoint dedicado
Arquitectura
Se mantuvo la misma estructura de 2 capas que la original, pero reemplazando el interior.
[AI Client] →(MCP stdio)→ [mcp-client] →(HTTP + Bearer token)→ [kali-server] →(exec)→ [nmap, tshark, ...]
Aún no hay comentarios.