J’ai réimplémenté kali-mcp existant en Go.
(github.com/found-cake)Bonjour. Je suis étudiant à l’université, en filière sécurité de l’information.
J’utilisais souvent kali-mcp pour des tâches d’automatisation de pentest, de tests de trafic et de CTF, mais j’ai rencontré des goulots d’étranglement dans un environnement où plusieurs agents sont connectés en même temps, donc je l’ai réimplémenté moi-même en Go.
GitHub: https://github.com/found-cake/kali-mcp-go
Structure et limites du kali-mcp existant
La version d’origine est implémentée en Flask + Python, et la classe CommandExecutor crée un subprocess.Popen à chaque requête, puis lance en plus deux daemon threads pour lire respectivement stdout/stderr.
C’est suffisant avec un agent unique, mais lorsque les requêtes simultanées affluent dans un environnement multi-agent, les problèmes suivants apparaissent.
- Worker unique par défaut de Flask — les agents se bloquent mutuellement
- Surcoût de création d’un processus + de threads à chaque requête
- Les agents confondent le retard de réponse avec un timeout et relancent la même tâche
Principales modifications
Serveur
- Avant : Flask (worker unique par défaut)
- Après : Fiber v3 / fasthttp — concurrence complète
Collecte des sorties
- Avant : boucle
readlineavec 2 daemon threads - Après : 2 goroutines +
WaitGrouppour la synchronisation, avec un alignement clair du moment de collecte de stdout/stderr afin d’éviter toute perte de sortie
timeout/cancel
- Avant :
process.wait(timeout=...)+ kill forcé - Après : basé sur
context— fermeture correcte jusqu’aux pipes
Fichiers temporaires Metasploit
- Avant :
/tmp/mks_msf_resource.rccodé en dur — risque de race condition en cas de requêtes concurrentes - Après :
os.CreateTemp— traitement sûr avec un nom de fichier unique pour chaque requête
Support de tshark
- Avant : absent
- Après : ajout d’un endpoint dédié
Architecture
J’ai conservé la même structure à 2 niveaux que l’original, tout en remplaçant l’intérieur.
[AI Client] →(MCP stdio)→ [mcp-client] →(HTTP + Bearer token)→ [kali-server] →(exec)→ [nmap, tshark, ...]
Aucun commentaire pour le moment.