hexstrike-ai
HexStrike AI — Docker + Remote MCP
Dockerisiertes HexStrike AI auf dem linuxserver.io Kali-Basisimage, mit einem neuen Remote-Streamable-HTTP-MCP-Server, sodass das gesamte HexStrike-Toolset über das Netzwerk gesteuert werden kann (z. B. von Claude Code) anstatt nur von einem lokalen stdio-Client.
[!WARNUNG] Dies setzt autonome Ausführung von Offensiv-Sicherheitstools über das Netzwerk frei. Ein Client, der mit dem MCP-Endpunkt verbunden ist, kann effektiv Remote-Befehlsausführung über das gesamte Tool-Arsenal des Containers durchführen. Lesen Sie den Abschnitt Sicherheit, bevor Sie dies irgendwo außerhalb eines isolierten Labors ausführen. Setzen Sie immer
HEXSTRIKE_MCP_TOKEN, führen Sie nur in einem vertrauenswürdigen/isolierten Netzwerk oder VPN aus und zielen Sie nur auf Systeme, die Sie ausdrücklich testen dürfen.
[!HINWEIS] Es wird kein vorgefertigtes Image veröffentlicht. Da das vollständige Kali-Toolset das Image groß macht (>10 GB — ungefähr ~17 GB gebaut), wird es nicht auf Docker Hub oder in eine Registry gepusht. Sie bauen es selbst aus diesem Repository (siehe Schnellstart); stellen Sie sicher, dass der Docker-Host genügend freien Speicherplatz hat.
Inhalt
Related MCP server: MCP Tools
Funktionen
Das vollständige Upstream-HexStrike-AI-Toolkit — 150+ Sicherheitstools, gesteuert über seine Flask-API — vorinstalliert auf einem Kali-basierten Image, ohne manuelle Umgebungseinrichtung.
Neu:
hexstrike_mcp_http.py, ein Streamable-HTTP-MCP-Server, der jede Upstream-@mcp.tool()-Definition über das Netzwerk auf Port8889(Pfad/mcp) bereitstellt, sodass er remote gesteuert werden kann, anstatt nur über lokales stdio.Optionale Bearer-Token-Authentifizierung, die den MCP-Endpunkt schützt.
Über den Browser erreichbarer KDE-Desktop (Selkies/KasmVNC, vom Basisimage geerbt) für interaktive Arbeit neben automatisierten Tool-Läufen.
s6-overlayv3-Prozessüberwachung mit expliziter Dienstreihenfolge — der MCP-Dienst wartet darauf, dass der HexStrike-API-Server als Abhängigkeit definiert ist.Persistenter
/config-Volume: Pro-Tool-virtualenvs und Dateimanager-Zustand überleben Container-Neustarts.Reproduzierbare Builds:
uvverwaltet die Python-Umgebung, und Upstream-Quellen werden bei einem festgepinnten Git-Commit gezogen, anstatt vendored zu werden.
Überblick
HexStrike AI Upstream liefert zwei Python-Einstiegspunkte:
hexstrike_server.py— ein Flask-API-Server, der auf Port8888lauscht und 150+ externe Sicherheitstools übersubprocessausführt und deren Ergebnisse über HTTP bereitstellt (einschließlich eines/health-Endpunkts, der die Tool-Verfügbarkeit meldet).hexstrike_mcp.py— ein FastMCP Server, der MCP-Toolaufrufe in HTTP-Aufrufe gegen den obigen API-Server übersetzt. Upstream führt ihn nur über den stdio-Transport aus, sodass er nur von einem MCP-Client auf demselben Rechner wie der Container gesteuert werden kann.
Dieses Repository fügt hexstrike_mcp_http.py hinzu, das das Upstream-Modul
hexstrike_mcp.py importiert und dessen setup_mcp_server()-Funktion
vollständig wiederverwendet — jede Tool-Definition, unverändert —, es aber über
den MCP-Streamable-HTTP-Transport auf Port 8889 unter dem Pfad /mcp
anstatt über stdio bereitstellt. Das ist der einzige funktionale Unterschied:
dieselbe Tool-Oberfläche, remote erreichbar (z. B. von Claude Code auf einem
anderen Rechner) anstatt nur von einem am selben Ort befindlichen Prozess.
uv (Astral) verwaltet den Python-Interpreter
und die Abhängigkeitsumgebung und wird verwendet, um beide Prozesse beim
Containerstart auszuführen.
Architektur
Basisimage:
lscr.io/linuxserver/kali-linux:latest, das einen über den Browser erreichbaren KDE-Desktop (Selkies/KasmVNC) auf den Ports3000(HTTP) und3001(HTTPS), Kali-rolling-apt-Repos unds6-overlayv3-Init bereitstellt.Hinzugefügte Dienste: Zwei
s6-overlay-longrun-Dienste werden auf das Init-System des Basisimages aufgesetzt und imuser-Dienstbundle registriert:root/etc/s6-overlay/s6-rc.d/hexstrike-server— führtuv run --no-sync python hexstrike_server.py --port 8888als Benutzerabcaus.root/etc/s6-overlay/s6-rc.d/hexstrike-mcp— führtuv run --no-sync python hexstrike_mcp_http.py --server http://127.0.0.1:8888 --host 0.0.0.0 --port 8889als Benutzerabcaus. Seindependencies.d/hexstrike-server-Eintrag ordnet an, dass er nach dem API-Server startet.
Upstream-Quellen werden nicht vendored. Das
Dockerfilegit clonet0x4m4/hexstrike-aizur Build-Zeit und checkt einen festgepinnten Commit aus (ARG HEXSTRIKE_REF, Standardd689933ff579d839c676c82b231f8e98326c5f04), wobei nurhexstrike_server.py,hexstrike_mcp.pyundhexstrike-ai-mcp.jsonnach/appkopiert werden. Das hält das Repository klein und den Upstream-Bump zu einer einzeiligen Änderung.Python-Umgebung: Ein
uv-verwaltetes CPython 3.12 (festgepinnt über.python-version), mit Abhängigkeiten auspyproject.toml, installiert in/app/.venvüberuv sync --no-devzur Build-Zeit.Persistenz-Bootstrap:
root/custom-cont-init.d/10-hexstrike-persistläuft als root, bevor die longrun-Dienste starten (siehe Persistenz).
Ports
Port | Protokoll | Beschreibung |
3000 | HTTP | Web-Desktop (Selkies/KasmVNC), vom linuxserver-Kali-Basisimage geerbt |
3001 | HTTPS | Web-Desktop, TLS |
8888 | HTTP | HexStrike-AI-API-Server ( |
8889 | HTTP | HexStrike-AI-MCP-Server, Streamable-HTTP-Transport, Endpunktpfad |
Schnellstart
Docker Compose (empfohlen)
Die gesamte Konfiguration befindet sich direkt in docker-compose.yml — es gibt
keine .env-Datei. Vor dem ersten Start bearbeiten Sie den Block environment:
und setzen:
HEXSTRIKE_MCP_TOKEN— das Bearer-Token für den MCP-Endpunkt. Generieren Sie einen starken Wert mitopenssl rand -hex 32und fügen Sie ihn ein (oder lassen Sie ihn leer für einen offenen Endpunkt — nur für Lab/CTF in einem isolierten Netzwerk).CUSTOM_USER/PASSWORD— die Basic-Auth-Anmeldung für den Web-Desktop.
Dann bauen und starten:
# generate a token to paste into docker-compose.yml:
openssl rand -hex 32
docker compose up -d --buildDer Build ist groß und langsam, und es gibt kein vorgefertigtes Image zum
Ziehen — das resultierende Image ist >10 GB (~17 GB), daher wird es nicht
in eine Registry veröffentlicht und muss lokal gebaut werden. Es installiert das
Metapaket kali-linux-headless plus eine lange Liste benannter Tools, kompiliert
angr / pwntools-Wheels (daher build-essential + Dev-Header im Image),
baut drei Go-Tools aus dem Quellcode und lädt ein rustscan-Release-Paket
herunter. Erwarten Sie, dass der erste Build eine erhebliche Zeit dauert und
reichlich freien Speicherplatz benötigt (planen Sie ~20 GB+ Puffer ein,
mehr beim Iterieren).
Einfaches Docker
docker build -t hexstrike-ai:local .
docker run -d \
--name hexstrike-ai \
--cap-add=NET_RAW --cap-add=NET_ADMIN \
--shm-size=1g \
-p 3000:3000 -p 3001:3001 -p 8888:8888 -p 8889:8889 \
-v "$(pwd)/config:/config" \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Etc/UTC \
-e CUSTOM_USER=kali \
-e PASSWORD=changeme \
-e HEXSTRIKE_MCP_TOKEN="$(openssl rand -hex 32)" \
hexstrike-ai:local--cap-add=NET_RAW --cap-add=NET_ADMIN und --shm-size=1g sind erforderlich —
siehe Sicherheit und die Kommentare in docker-compose.yml für
Gründe.
Verbindung von Claude Code
Sobald der Container läuft, richten Sie Claude Code auf den MCP-Endpunkt auf Port
8889 aus. Wenn HEXSTRIKE_MCP_TOKEN gesetzt ist (dringend empfohlen — siehe
Sicherheit), muss jede Anfrage einen passenden
Authorization: Bearer <token>-Header enthalten; der Endpunkt akzeptiert nur
unauthentifizierte Anfragen, wenn das Token nicht gesetzt ist.
Projekt-/Benutzer-MCP-Konfiguration (.mcp.json oder Claude-Code-Einstellungen):
{
"mcpServers": {
"hexstrike-ai": {
"type": "http",
"url": "http://<HOST>:8889/mcp",
"headers": { "Authorization": "Bearer <HEXSTRIKE_MCP_TOKEN>" }
}
}
}Oder über die CLI:
claude mcp add --transport http hexstrike-ai http://<HOST>:8889/mcp \
--header "Authorization: Bearer <TOKEN>"Ersetzen Sie <HOST> mit der Adresse/dem Hostnamen des Container-Hosts und
<HEXSTRIKE_MCP_TOKEN> / <TOKEN> mit dem oben generierten Wert. Wenn Sie
HEXSTRIKE_MCP_TOKEN absichtlich nicht gesetzt haben, lassen Sie das Argument
headers / --header weg — der Endpunkt ist in diesem Fall offen.
Invalid Host header/ HTTP 421? Der MCP-Streamable-HTTP-Transport hat einen eingebauten DNS-Rebinding-Schutz, der standardmäßig nur einenlocalhostHost-Header vertraut. Dieses Image deaktiviert diese Prüfung standardmäßig, damit Sie den Endpunkt über das LAN per IP oder Hostname erreichen können. Wenn Sie diesen Fehler dennoch sehen, aktualisieren Sie entweder auf dieses Image (der Standard behandelt es bereits) oder setzen SieHEXSTRIKE_MCP_ALLOWED_HOSTSauf die genauenhost:port-Werte, die Ihre Clients senden.
Umgebungsvariablen
Variable | Wo festgelegt | Standard | Beschreibung |
|
|
| linuxserver-Konvention: UID, mit dem der Dienstbenutzer |
|
|
| linuxserver-Konvention: GID, mit dem der Dienstbenutzer |
|
|
| Zeitzone des Containers. |
|
|
| Basic-Auth-Benutzername für den Web-Desktop (linuxserver-Kali-Basisimage). |
|
|
| Basic-Auth-Passwort für den Web-Desktop. |
|
| (leer) | Bearer-Token, das am Endpunkt |
| optional, kommentiertes Beispiel in |
| Port, an den der HexStrike-API-Server bindet. Beide |
| optional, kommentiertes Beispiel in |
| Port, an den der MCP-Streamable-HTTP-Server bindet (gleicher Hinweis wie oben). |
| optional |
| Schnittstelle, an die der MCP-Server bindet; wird vom |
| optional, | (leer) | Kommagetrennte |
| optional, |
| Steuern, welche MCP-Tools verfügbar gemacht werden – siehe MCP-Tool-Filterung. |
hexstrike_mcp_http.py akzeptiert auch --server / HEXSTRIKE_SERVER_URL, --path / HEXSTRIKE_MCP_PATH, --timeout / HEXSTRIKE_TIMEOUT und --allowed-hosts / HEXSTRIKE_MCP_ALLOWED_HOSTS-Überschreibungen. Das mitgelieferte s6-Run-Skript übergibt nur --server, --host und --port; der Rest wird aus ihren Umgebungs-Fallbacks gelesen (so funktioniert HEXSTRIKE_MCP_ALLOWED_HOSTS, wenn es am Container gesetzt ist) oder behält ihre eingebauten Standardwerte (/mcp, das Standard-Request-Timeout von upstream und die deaktivierte Host-Prüfung).
Persistenz
Das /config-Volume ist das Home-Verzeichnis nach linuxserver-Konvention und der einzige Pfad, der eine Neuerstellung des Containers übersteht. Das Cont-Init-Skript root/custom-cont-init.d/10-hexstrike-persist läuft als root, bevor die Longrun-Dienste starten, und:
Erstellt
/config/hexstrike/envs,/config/hexstrike/filesund/config/hexstrike/output.Ersetzt die hartcodierten Pfade
/tmp/hexstrike_envsund/tmp/hexstrike_filesvon upstream durch Symlinks in/config/hexstrike/envsbzw./config/hexstrike/files, sodass die pro Tool von HexStrike bei Bedarf erstellten Python-Virtualenvs und der Lese-/Schreibbereich des Dateimanagers Container-Neustarts überstehen.Führt
chownauf den persistenten Baum zuabc:abc(unter Beachtung vonPUID/PGID) überlsiownaus.
Dynamische /tmp/<tool>_output-Verzeichnisse, die von einzelnen Tool-Läufen erstellt werden, sind nicht verlinkt und bleiben ephemer – weisen Sie ein bestimmtes Tool explizit auf /config/hexstrike/output hin, wenn dessen Ausgabe einen Neustart überstehen soll.
Web-Desktop-Zugriff
Öffnen Sie https://<HOST>:3001/ in einem Browser und melden Sie sich mit den oben konfigurierten CUSTOM_USER- / PASSWORD-Anmeldedaten an (der HTTP-Desktop ist auch auf Port 3000 ohne TLS verfügbar).
Health Check
curl http://<HOST>:8888/healthGibt JSON vom HexStrike-API-Server zurück, das auflistet, welche seiner Tools als auf PATH im Container verfügbar erkannt wurden.
Sicherheit
[!WARNUNG] Der MCP-Endpunkt auf
8889ermöglicht einem verbundenen Client, die Ausführung von Offensiv-Sicherheitstools im Container autonom zu steuern – das ist effektiv Remote-Codeausführung per Design, nur durch das von Ihnen konfigurierte Bearer-Token abgesichert.
Setzen Sie immer
HEXSTRIKE_MCP_TOKEN. Generieren Sie es mitopenssl rand -hex 32und halten Sie es geheim. Wenn Sie es leer lassen, ist der MCP-Endpunkt unauthentifiziert.Setzen Sie dies nur in einem vertrauenswürdigen/isolierten Netzwerk oder VPN ein. Veröffentlichen Sie Port
8889(oder8888) nicht im offenen Internet.Zielen Sie nur auf Systeme, die Sie ausdrücklich testen dürfen. Der Container enthält echte Offensiv-Sicherheitstools, die aktives Scannen, Ausnutzung, Credential-Angriffe und mehr ermöglichen.
Dem Container werden
NET_RAW- undNET_ADMIN-Capabilities gewährt (siehedocker-compose.yml/ dasdocker run-Beispiel), da mehrere Tools –nmap-SYN-Scans,masscan,responderusw. – rohe Sockets benötigen. Diese sind enger gefasst als--privileged, aber dennoch deutlich erhöht; gewähren Sie sie nur, wenn Sie diese Scan-Typen benötigen.Die Authentifizierung ist als minimale ASGI-Middleware implementiert (
BearerTokenASGIMiddlewareinhexstrike_mcp_http.py), die denAuthorization-Header mit einem Konstantzeit-Vergleich prüft und unauthentifizierte Anfragen an den MCP-Pfad mit401ablehnt, bevor sie die MCP-App erreichen – sie puffert oder beeinträchtigt den Streamable-HTTP/SSE-Antwortstream nicht.
Tool-Abdeckung
Der Tool-Satz ist kuratiert, nicht erschöpfend:
Das Metapaket
kali-linux-headlessplus eine Liste von Tools, die explizit imDockerfilegenannt sind (die, die der/health-Endpunkt von HexStrike abfragt, sowie gängige Recon-/Web-/Exploitation-Dienstprogramme) – z. B.nmap,masscan,gobuster,feroxbuster,ffuf,dirb,dirsearch,nikto,sqlmap,wpscan,whatweb,wafw00f,hydra,john,hashcat,medusa,evil-winrm,amass,dnsenum,dnsrecon,fierce,theharvester,responder,nuclei,subfinder,httpx-toolkit,arjun,paramspider,hakrawler,getallurls(gau),netexec,enum4linux-ng,smbclient,seclists,wordlists,binwalk,foremost,steghide,exiftool,radare2undgdb.Drei in Go gebaute Tools, die zur Build-Zeit aus dem Quellcode kompiliert und dann von der Go-Toolchain befreit werden:
katana,dalfox,waybackurls.rustscan, installiert aus dem neuesten GitHub-Release (die.debwird in einemrustscan.deb.zip-Asset geliefert, das der Build vor der Installation entpackt; Best-Effort – der Build wird ohne es fortgesetzt, wenn das Asset nicht aufgelöst werden kann).
Einige schwere oder lizenzierte Tools, auf die upstream HexStrike verweist – Ghidra, IDA, Burp Suite Pro, Maltego, Nessus sowie verschiedene Cloud-/Forensik-Dienstprogramme – sind nicht in diesem Image installiert, um den Build handhabbar zu halten.
MCP-Tool-Filterung (weniger Tools für das Modell)
Upstream registriert ~150 MCP-Tools. Das überschreitet das Funktions-Tool-Limit einiger Modellanbieter (OpenAI begrenzt bei ~128) und zeigt Tools an, die nur scheitern können, weil ihre CLI-Binärdatei nicht installiert ist. Um dies zu vermeiden, versteckt der MCP-Server jedes Tool, dessen zugrunde liegende Binärdatei nicht vorhanden ist (beim Start mit which geprüft, da der MCP-Prozess im selben Container wie die Tools läuft). Ein typischer Build stellt ~115 Tools statt 150 bereit. Das Startprotokoll gibt die Anzahl und die versteckte Liste aus.
Steuern Sie es über Umgebungsvariablen am Container:
Variable | Standard | Wirkung |
|
|
|
| (leer) | Kommagetrennte Whitelist – stellen Sie nur diese Tools bereit (überschreibt auto). |
| (leer) | Kommagetrennte Tools, die immer versteckt werden sollen. |
| (leer) | Kommagetrennte Tools, die immer behalten werden sollen (schützt sie vor automatischem Entfernen). |
Aktualisieren des Upstream-Pins
Upstream-Quellen werden zur Build-Zeit bei dem Commit in
ARG HEXSTRIKE_REF (Dockerfile) geklont. Um neuere Upstream-Änderungen zu übernehmen, erhöhe
diesen Pin und baue neu:
docker build -t hexstrike-ai:local --build-arg HEXSTRIKE_REF=<new-sha> .oder, mit Compose, kommentiere den Eintrag args: HEXSTRIKE_REF: unter
dem Schlüssel build: in docker-compose.yml aus und setze ihn, und führe docker compose up -d --build aus.
Credits & Lizenz
HexStrike AI von 0x4m4 — die Sicherheitsautomatisierungsplattform, die dieses Image paketiert, veröffentlicht unter der MIT-Lizenz. Die vollständigen Bedingungen finden Sie in der
LICENSE-Datei des Upstreams.linuxserver.io
kali-linux-Image — das Basis-Image, das die Kali-Umgebung und den Web-Desktop bereitstellt.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceAn MCP server that integrates various penetration testing tools, enabling security professionals to perform reconnaissance, vulnerability scanning, and API testing through natural language commands in compatible LLM clients like Claude Desktop.7
- AlicenseNot gradedqualityAmaintenanceA passive MCP server that exposes a toolbox of executable tools (shell, network, HTTP, AI search, SSH, S3 file operations) to autonomous agents via Streamable HTTP, with strong security features including Docker sandboxing and WAF.2Apache 2.0
- AlicenseNot gradedqualityBmaintenanceAI-driven penetration testing MCP server that equips Claude with 13 tools for automated reconnaissance, analysis, vulnerability validation, and exploitation.2GPL 3.0
- AlicenseNot gradedqualityBmaintenanceConfig-driven MCP server that exposes Kali Linux penetration testing tools to AI agents, with automatic tool discovery, man page integration, and local/remote execution modes.MIT
Related MCP Connectors
MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.
AI Reasoning Cache & Consensus Layer with 11 MCP tools via Streamable HTTP.
A paid remote MCP for CLI tool MCP, built to return verdicts, receipts, usage logs, and audit-ready
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/acaranta/hexstrike-docker-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server