Reimplementei o kali-mcp existente em Go.
(github.com/found-cake)Olá. Sou um universitário que está cursando Segurança da Informação.
Eu costumava usar bastante o kali-mcp para trabalhos de pentest / testes de tráfego / automação de CTF, mas acabei enfrentando gargalos em um ambiente com vários agentes conectados ao mesmo tempo e resolvi reimplementá-lo eu mesmo em Go.
GitHub: https://github.com/found-cake/kali-mcp-go
Estrutura e limitações do kali-mcp original
O original foi implementado em Flask + Python, e a classe CommandExecutor cria um subprocess.Popen a cada requisição e depois sobe mais 2 daemon threads para ler stdout/stderr separadamente.
Para um único agente isso é suficiente, mas quando muitas requisições chegam ao mesmo tempo em um ambiente multi-agent, surgem problemas como estes:
- Worker único padrão do Flask — os agentes acabam bloqueando uns aos outros
- Overhead de criar processo + thread a cada requisição
- O agente confunde atraso na resposta com timeout e tenta repetir a mesma tarefa
Principais mudanças
Servidor
- Antes: Flask (worker único padrão)
- Mudança: Fiber v3 / fasthttp — concorrência total
Coleta de saída
- Antes: loop de
readlinecom 2 daemon threads - Mudança: 2 goroutines +
WaitGrouppara sincronização, alinhando claramente o momento da coleta de stdout/stderr e processando sem perda de saída
timeout/cancel
- Antes:
process.wait(timeout=...)+ kill forçado - Mudança: baseado em context — até os pipes são fechados corretamente
Arquivo temporário do Metasploit
- Antes:
/tmp/mks_msf_resource.rcfixo no código — possibilidade de race condition em requisições simultâneas - Mudança:
os.CreateTemp— tratamento seguro com nome de arquivo único para cada requisição
Suporte a tshark
- Antes: não havia
- Mudança: adição de um endpoint dedicado
Arquitetura
Mantive a mesma estrutura em 2 camadas do original, mas troquei a implementação interna.
[AI Client] →(MCP stdio)→ [mcp-client] →(HTTP + Bearer token)→ [kali-server] →(exec)→ [nmap, tshark, ...]
Ainda não há comentários.