Skip to main content
Glama
acaranta

hexstrike-ai

by acaranta

HexStrike AI — Docker + リモートMCP

linuxserver.io の Kali ベースイメージ上で HexStrike AI を Docker 化し、新しいリモート対応の streamable-HTTP MCP サーバーを追加しました。これにより、ローカルの stdio クライアントからだけでなく、ネットワーク越し(例: Claude Code)からも HexStrike の全ツールセットを操作できます。

[!WARNING] これは、攻撃的セキュリティツールの自律実行をネットワークに公開します。 MCP エンドポイントに接続したクライアントは、コンテナ内のツール群を介して事実上リモートでコマンド実行を行うことができます。隔離されたラボ以外でこれを実行する前に、セキュリティのセクションをお読みください。常に HEXSTRIKE_MCP_TOKEN を設定し、信頼できる/隔離されたネットワークまたは VPN 上でのみ実行し、明示的にテストを許可されたシステムのみを対象にしてください。

[!NOTE] ビルド済みイメージは公開されていません。 Kali の完全なツールセットにより、イメージは巨大(>10 GB — ビルド時は約 ~17 GB)になるため、Docker Hub やいかなるレジストリにもプッシュされません。このリポジトリから自分でビルドしてください(クイックスタート参照)。Docker ホストに十分な空きディスクがあることを確認してください。

目次

Related MCP server: MCP Tools

機能

  • 完全なアップストリームの HexStrike AI ツールキット — Flask API を通じて操作される 150 以上のセキュリティツール — を Kali ベースのイメージにプリインストール。手動での環境構築は不要です。

  • 新機能: hexstrike_mcp_http.py — アップストリームのすべての @mcp.tool() 定義をポート 8889(パス /mcp)でネットワーク経由に公開する streamable-HTTP MCP サーバー。ローカルの stdio 経由だけでなく、リモートからも操作できます。

  • MCP エンドポイントを保護するオプションのベアラートークン認証。

  • 自動化されたツール実行と並行して対話的に作業できる、ブラウザからアクセス可能な KDE デスクトップ(Selkies/KasmVNC、ベースイメージから継承)。

  • s6-overlay v3 によるプロセス監視と明示的なサービス順序 — MCP サービスは HexStrike API サーバーを依存関係として待機します。

  • 永続的な /config ボリューム: ツールごとの virtualenv とファイルマネージャーの状態は、コンテナ再起動後も保持されます。

  • 再現可能なビルド: uv が Python 環境を管理し、アップストリームソースはベンダリングせず、ピン留めされた git コミットで取得されます。

概要

HexStrike AI のアップストリームは、2 つの Python エントリポイントを提供しています:

  • hexstrike_server.py — ポート 8888 で待ち受ける Flask API サーバー。subprocess 経由で 150 以上の外部セキュリティツールを実行し、その結果を HTTP で公開します(ツールの可用性を報告する /health エンドポイントを含む)。

  • hexstrike_mcp.py — MCP ツール呼び出しを上記の API サーバーへの HTTP 呼び出しに変換する FastMCP サーバー。アップストリームはこれを stdio トランスポートでのみ実行するため、コンテナと同じマシン上の MCP クライアントからしか操作できません。

このリポジトリは hexstrike_mcp_http.py を追加します。これはアップストリームの hexstrike_mcp.py モジュールをインポートし、setup_mcp_server() 関数を丸ごと再利用します — すべてのツール定義は変更されません — ただし、stdio の代わりに、MCP streamable-HTTP トランスポートでポート 8889、パス /mcp に提供します。機能的に異なるのはこれだけです: 同じツールサーフェスを、同一プロセス内だけでなく、リモート(例: 別のマシンで実行されている Claude Code)からも到達可能にします。

uv (Astral) が Python インタープリターと依存環境を管理し、コンテナ起動時に両方のプロセスを実行するために使用されます。

アーキテクチャ

  • ベースイメージ: lscr.io/linuxserver/kali-linux:latest。ポート 3000 (HTTP) と 3001 (HTTPS) でブラウザからアクセス可能な KDE デスクトップ(Selkies/KasmVNC)、Kali-rolling の apt リポジトリ、s6-overlay v3 init を提供します。

  • 追加サービス: ベースイメージの init システムの上に 2 つの s6-overlaylongrun サービスが重ねられ、user サービスのバンドルに登録されています:

    • root/etc/s6-overlay/s6-rc.d/hexstrike-serverabc ユーザーとして uv run --no-sync python hexstrike_server.py --port 8888 を実行します。

    • root/etc/s6-overlay/s6-rc.d/hexstrike-mcpabc ユーザーとして uv run --no-sync python hexstrike_mcp_http.py --server http://127.0.0.1:8888 --host 0.0.0.0 --port 8889 を実行します。dependencies.d/hexstrike-server エントリにより、API サーバーの後で起動するよう順序付けられています。

  • アップストリームソースはベンダリングされません。 Dockerfile はビルド時に git clone0x4m4/hexstrike-ai を取得し、ピン留めされたコミット(ARG HEXSTRIKE_REF、デフォルト d689933ff579d839c676c82b231f8e98326c5f04)をチェックアウトして、hexstrike_server.pyhexstrike_mcp.pyhexstrike-ai-mcp.json のみを /app にコピーします。これにより、リポジトリを小さく保ち、アップストリームの更新を 1 行の変更で済ませられます。

  • Python 環境: uv 管理の CPython 3.12(.python-version でピン留め)。pyproject.toml の依存関係はビルド時に uv sync --no-dev/app/.venv にインストールされます。

  • 永続化のブートストラップ: root/custom-cont-init.d/10-hexstrike-persist は、longrun サービスが起動する前に root として実行されます(永続化を参照)。

ポート

Port

Protocol

Description

3000

HTTP

Web デスクトップ (Selkies/KasmVNC)、linuxserver の Kali ベースイメージから継承

3001

HTTPS

Web デスクトップ、TLS

8888

HTTP

HexStrike AI API サーバー (hexstrike_server.py)

8889

HTTP

HexStrike AI MCP サーバー、streamable-HTTP トランスポート、エンドポイントパス /mcp

クイックスタート

Docker Compose(推奨)

すべての設定は docker-compose.yml に直接記述されており、.env ファイルはありません。初回起動前に、environment: ブロックを編集して次を設定してください:

  • HEXSTRIKE_MCP_TOKEN — MCP エンドポイントのベアラートークン。openssl rand -hex 32 で強力な値を生成して貼り付けます(または空のままにしてエンドポイントを開放することもできます — 隔離されたネットワーク上のラボ/CTF のみ)。

  • CUSTOM_USER / PASSWORD — Web デスクトップの basic-auth ログイン。

次にビルドして起動します:

# generate a token to paste into docker-compose.yml:
openssl rand -hex 32

docker compose up -d --build

ビルドは大きくて遅く、プルできるビルド済みイメージはありません — 結果のイメージは >10 GB(~17 GB) になるため、レジストリには公開されておらず、ローカルでビルドする必要があります。kali-linux-headless メタパッケージに加えて多数の名前付きツールをインストールし、angr / pwntools のホイールをコンパイルし(そのためイメージに build-essential と開発用ヘッダーが含まれます)、3 つの Go ツールをソースからビルドし、rustscan のリリースパッケージをダウンロードします。初回ビルドにはかなりの時間と十分な空きディスクが必要です(約 ~20 GB+ の余裕を見積もり、反復中はさらに必要です)。

プレーンな 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--shm-size=1g が必要です — 理由は セキュリティdocker-compose.yml のコメントを参照してください。

Claude Code から接続する

コンテナが起動したら、Claude Code をポート 8889 の MCP エンドポイントに向けます。HEXSTRIKE_MCP_TOKEN が設定されている場合(強く推奨 — セキュリティを参照)、すべてのリクエストに一致する Authorization: Bearer <token> ヘッダーを含める必要があります。エンドポイントが未認証リクエストを受け入れるのは、トークンが未設定の場合のみです。

プロジェクト/ユーザー MCP 設定(.mcp.json または Claude Code 設定):

{
  "mcpServers": {
    "hexstrike-ai": {
      "type": "http",
      "url": "http://<HOST>:8889/mcp",
      "headers": { "Authorization": "Bearer <HEXSTRIKE_MCP_TOKEN>" }
    }
  }
}

または CLI 経由:

claude mcp add --transport http hexstrike-ai http://<HOST>:8889/mcp \
  --header "Authorization: Bearer <TOKEN>"

<HOST> をコンテナホストのアドレス/ホスト名に、<HEXSTRIKE_MCP_TOKEN> / <TOKEN> を上記で生成した値に置き換えてください。意図的に HEXSTRIKE_MCP_TOKEN を未設定のままにした場合は、headers / --header 引数を省略してください — その場合エンドポイントはオープンです。

Invalid Host header / HTTP 421? MCP の streamable-HTTP トランスポートには DNS リバインディング保護が組み込まれており、デフォルトでは localhostHost ヘッダーのみを信頼します。このイメージはデフォルトでこのチェックを無効にしているため、LAN 上で IP またはホスト名を使ってエンドポイントに到達できます。逆にこのエラーが表示される場合は、このイメージにアップグレードするか(デフォルトで既に処理されています)、HEXSTRIKE_MCP_ALLOWED_HOSTS をクライアントが送信する正確な host:port 値に設定してください。

環境変数

変数

設定場所

デフォルト

説明

PUID

docker-compose.yml / -e

1000

linuxserver の慣例: コンテナ内で abc サービスユーザーが実行される UID。

PGID

docker-compose.yml / -e

1000

linuxserver の慣例: abc サービスユーザーが実行される GID。

TZ

docker-compose.yml / -e

Etc/UTC

コンテナのタイムゾーン。

CUSTOM_USER

docker-compose.yml

kali

Web デスクトップの Basic 認証ユーザー名 (linuxserver Kali ベースイメージ)。

PASSWORD

docker-compose.yml

changeme

Web デスクトップの Basic 認証パスワード。

HEXSTRIKE_MCP_TOKEN

docker-compose.yml

(空)

:8889/mcp エンドポイントで必須の Bearer トークン。openssl rand -hex 32 の出力値を設定してください。隔離された/オープンなラボ環境でのみ空のままにしてください。

HEXSTRIKE_SERVER_PORT

任意、docker-compose.yml 内のコメント付き例

8888

HexStrike API サーバーがバインドするポート。s6 の両 run スクリプトがこれを読み取ります。変更する場合は、公開ポートマッピングも更新する必要があります。

HEXSTRIKE_MCP_PORT

任意、docker-compose.yml 内のコメント付き例

8889

MCP streamable-HTTP サーバーがバインドするポート (上記と同じ注意事項)。

HEXSTRIKE_MCP_HOST

任意

0.0.0.0

MCP サーバーがバインドするインターフェース。hexstrike-mcp run スクリプトがそのまま渡し、hexstrike_mcp_http.py が環境変数のフォールバックとして読み取ります。

HEXSTRIKE_MCP_ALLOWED_HOSTS

任意、-e

(空)

トランスポートの DNS リバインディング保護用の、カンマ区切りの Host/Origin 許可リスト (例: hexstrike.lan:8889,10.0.0.5:8889)。空 (デフォルト) の場合、Host チェックは無効になり、エンドポイントは任意のアドレス/ホスト名から到達可能になります。特定のホスト名にロックするには設定してください。

HEXSTRIKE_MCP_TOOL_FILTER / _INCLUDE_ONLY / _EXCLUDE_TOOLS / _KEEP_TOOLS

任意、-e

auto / 空

公開する MCP ツールを制御します — MCP ツールフィルタリング を参照してください。

hexstrike_mcp_http.py--server / HEXSTRIKE_SERVER_URL--path / HEXSTRIKE_MCP_PATH--timeout / HEXSTRIKE_TIMEOUT--allowed-hosts / HEXSTRIKE_MCP_ALLOWED_HOSTS のオーバーライドも受け付けます。同梱の s6 run スクリプトは --server--host--port のみを渡します。残りは 環境変数のフォールバックから読み取られるか (そのため HEXSTRIKE_MCP_ALLOWED_HOSTS は コンテナに設定すれば機能します)、組み込みのデフォルト値 (/mcp、上流の デフォルトリクエストタイムアウト、Host チェック無効) が維持されます。

永続化

/config ボリュームは linuxserver の慣例によるホームディレクトリであり、 コンテナ再作成後も生存する唯一のパスです。cont-init スクリプト root/custom-cont-init.d/10-hexstrike-persist は longrun サービスが起動する前に root として実行され、以下を行います:

  1. /config/hexstrike/envs/config/hexstrike/files/config/hexstrike/output を作成します。

  2. 上流のハードコードされた /tmp/hexstrike_envs/tmp/hexstrike_files のパスを、それぞれ /config/hexstrike/envs/config/hexstrike/files へのシンボリックリンクに置き換えます。これにより、HexStrike がオンデマンドで構築するツールごとの Python 仮想環境と、ファイルマネージャーの読み書き領域がコンテナ再起動後も生存します。

  3. lsiown を使用して、永続ツリーの所有者を abc:abc に変更します (PUID/PGID を尊重)。

個々のツール実行によって作成される動的な /tmp/<tool>_output ディレクトリは シンボリックリンクされず、一時的なままです — 再起動後も出力を保持する必要がある場合は、 特定のツールを明示的に /config/hexstrike/output に向けてください。

Web デスクトップへのアクセス

ブラウザで https://<HOST>:3001/ を開き、上記で設定した CUSTOM_USER / PASSWORD の認証情報でログインします (HTTP デスクトップも TLS なしで ポート 3000 で利用可能です)。

ヘルスチェック

curl http://<HOST>:8888/health

HexStrike API サーバーから JSON を返し、コンテナ内の PATH 上で どのツールが利用可能として検出されたかを一覧表示します。

セキュリティ

[!WARNING] 8889 の MCP エンドポイントは、接続されたクライアントがコンテナ内で 攻撃的セキュリティツールの実行を自律的に駆動できるようにします — これは事実上 設計上リモートコード実行であり、設定した Bearer トークンによってのみ ゲートされます。

  • 常に HEXSTRIKE_MCP_TOKEN を設定してください。 openssl rand -hex 32 で 生成し、秘密に保ってください。空のままにすると MCP エンドポイントは 認証なしになります。

  • 信頼できる/隔離されたネットワークまたは VPN 上でのみ公開してください。 ポート 8889 (または 8888) をオープンなインターネットに公開しないでください。

  • 明示的にテストを許可されたシステムのみを対象にしてください。 この コンテナには、アクティブスキャン、エクスプロイト、認証情報攻撃などが可能な 実際の攻撃的セキュリティツールが同梱されています。

  • コンテナには NET_RAWNET_ADMIN ケーパビリティが付与されています (docker-compose.yml / docker run の例を参照)。これは nmap SYN スキャン、 masscanresponder などの複数のツールが raw ソケットを必要とするためです。 これらは --privileged よりは狭いものの、依然として実質的に昇格されています。 それらのスキャンタイプが必要な場合にのみ付与してください。

  • 認証は最小限の ASGI ミドルウェア (hexstrike_mcp_http.py 内の BearerTokenASGIMiddleware) として実装されており、Authorization ヘッダーを定数時間比較で検査し、MCP アプリに到達する前に MCP パスへの 未認証リクエストを 401 で拒否します — streamable-HTTP/SSE レスポンス ストリームをバッファリングしたり、その他の方法で妨害したりしません。

ツールカバレッジ

ツールセットは厳選されたものであり、網羅的ではありません:

  • kali-linux-headless メタパッケージに加え、Dockerfile で明示的に 指定されたツール群 (HexStrike の /health エンドポイントがプローブするもの、 および一般的な偵察/Web/エクスプロイトユーティリティ) — 例: nmapmasscangobusterferoxbusterffufdirbdirsearchniktosqlmapwpscanwhatwebwafw00fhydrajohnhashcatmedusaevil-winrmamassdnsenumdnsreconfiercetheharvesterrespondernucleisubfinderhttpx-toolkitarjunparamspiderhakrawlergetallurls (gau)、netexecenum4linux-ngsmbclientseclistswordlistsbinwalkforemoststeghideexiftoolradare2gdb

  • ビルド時にソースからコンパイルされ、その後 Go ツールチェーンが 除去された 3 つの Go 製ツール: katanadalfoxwaybackurls

  • rustscan。最新の GitHub リリースからインストールされます (.debrustscan.deb.zip アセット内に同梱されており、ビルドはインストール前に それを解凍します。ベストエフォート方式 — アセットを解決できない場合は ビルドはそれを含めずに続行します)。

上流の HexStrike が参照する一部の重量級またはライセンス付きツール — Ghidra、 IDA、Burp Suite Pro、Maltego、Nessus、および各種クラウド/フォレンジック ユーティリティ — は、ビルドを扱いやすく保つためにこのイメージには インストールされていません

MCP ツールフィルタリング (モデル向けのツールを減らす)

上流は 約 150 個の MCP ツールを登録します。これは一部のモデルプロバイダーの 関数ツール上限 (OpenAI は約 128 個で上限) を超え、また CLI バイナリが インストールされていないために失敗するしかないツールも表面化させます。 これを回避するため、MCP サーバーはバッキングバイナリが存在しないツールを 非表示にします (MCP プロセスはツールと同じコンテナ内で実行されるため、 起動時に which でチェックされます)。一般的なビルドでは 150 個ではなく 約 115 個のツールが公開されます。起動ログには件数と非表示リストが出力されます。

コンテナの環境変数で制御します:

変数

デフォルト

効果

HEXSTRIKE_MCP_TOOL_FILTER

auto

auto はバイナリが欠落しているツールを非表示にします。off は全約 150 個を公開します。

HEXSTRIKE_MCP_INCLUDE_ONLY

(空)

カンマ区切りのホワイトリスト — これらのツールのみを公開します (auto を上書き)。

HEXSTRIKE_MCP_EXCLUDE_TOOLS

(空)

常に非表示にするカンマ区切りのツール。

HEXSTRIKE_MCP_KEEP_TOOLS

(空)

常に保持するカンマ区切りのツール (auto による削除から保護)。

上流ピンの更新

アップストリームのソースは、ビルド時に ARG HEXSTRIKE_REFDockerfile)で指定されたコミットでクローンされます。新しいアップストリームの変更を取り込むには、そのピンを更新して再ビルドしてください:

docker build -t hexstrike-ai:local --build-arg HEXSTRIKE_REF=<new-sha> .

または、Compose を使用する場合は、docker-compose.ymlbuild: キーの下にある args: HEXSTRIKE_REF: エントリのコメントを解除して設定し、docker compose up -d --build を実行してください。

クレジットとライセンス

  • HexStrike AI0x4m4 作)— このイメージがパッケージ化するセキュリティ自動化プラットフォーム。MIT License の下でリリースされています。完全な条件については、アップストリームの LICENSE ファイルを参照してください。

  • linuxserver.iokali-linux イメージ — Kali 環境と Web デスクトップを提供するベースイメージ。

F
license - not found
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • F
    license
    Not graded
    quality
    F
    maintenance
    An 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
  • A
    license
    Not graded
    quality
    A
    maintenance
    A 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.
    2
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Config-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

View all related MCP servers

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

View all MCP Connectors

Latest Blog Posts

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