mcpField
S
SentinelOne (Purple)

SentinelOne (Purple)

ローカル
github.comセキュリティ02 週間前に更新

SentinelOne (Purple) について

SentinelOne (Purple) は、リクエストごとに SentinelOne の認証情報を渡すマルチテナントゲートウェイ向けの purple-mcp ラッパーです。トークンとコンソール URL の組み合わせごとに子プロセスを起動し、HTTP ストリームを中継します。

主な機能

  1. 01テナントごとの子プロセス分離
  2. 02Streamable HTTP リクエストの中継
  3. 03サービス間 HMAC 認証
  4. 04アイドル子プロセスの破棄
  5. 05ヘルスチェックエンドポイント

活用シーン

  1. 01ゲートウェイ経由で複数の SentinelOne テナントに接続
  2. 02リクエストごとのテナントトークンとコンソール URL の転送
  3. 03サービス稼働状況の確認

MCP 対応

`/mcp` で Streamable HTTP の MCP エンドポイントを公開し、テナント認証情報で起動した purple-mcp の子プロセスへリクエストを中継します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"wyre-ai-sentinelone": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"PORT",
"-e",
"IDLE_EVICT_MS",
"-e",
"SPAWN_READY_TIMEOUT_MS",
"-e",
"LOG_LEVEL",
"ghcr.io/wyre-ai/sentinelone-mcp:v1.0.9"
],
"env": {
"PORT": "<PORT>",
"IDLE_EVICT_MS": "<IDLE_EVICT_MS>",
"SPAWN_READY_TIMEOUT_MS": "<SPAWN_READY_TIMEOUT_MS>",
"LOG_LEVEL": "<LOG_LEVEL>"
}
}
}
}
起動コマンドdocker run -i --rm -e PORT -e IDLE_EVICT_MS -e SPAWN_READY_TIMEOUT_MS -e LOG_LEVEL ghcr.io/wyre-ai/sentinelone-mcp:v1.0.9
設定が必要な環境変数
PORTPublic listen port for the proxy (POST /mcp, GET /health)
IDLE_EVICT_MSIdle tenant timeout before a purple-mcp child is evicted (ms)
SPAWN_READY_TIMEOUT_MSHow long to wait for a spawned child to start serving HTTP (ms)
LOG_LEVELFastify log level: debug, info, warn, error

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
ocighcr.io/wyre-ai/sentinelone-mcp:v1.0.9

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

sentinelone-mcp

wyre-technology MCP gateway がテナントごとの SentinelOne 認証情報を HTTP ヘッダーとして転送できるように構築された、sentinel-one/purple-mcp のマルチテナント対応 Streamable HTTP ラッパーです。

背景

purple-mcp は優れた公式 MCP サーバーですが、SentinelOne コンソールのトークンと URL をプロセス起動時に環境変数から読み取るため、コンテナごとに単一テナントしか扱えません。当社のゲートウェイはマルチテナント対応で、リクエストごとに呼び出し元組織の認証情報を HTTP ヘッダーで受け取ります。そのため、ベンダーコンテナはこれらのヘッダーをアップストリームが理解できる形式に変換する必要があります。

このイメージには、purple-mcp と小規模な Node/Fastify プロキシが含まれています。プロキシは次の処理を行います。

  1. :8080 で待ち受け、POST /mcp と GET /health を受け付けます。
  2. 有効な X-Gateway-S2S 証明情報を必須とし、その後、リクエストから X-S1-API-Token と X-S1-Console-URL を読み取ります(従来の x-purplemcp-token/x-purplemcp-base-url も引き続き受け付けます)。フィールドごとのフォールバック後もトークンまたはコンソール URL のいずれかが欠けているリクエストには 401 を返します。Conduit のベンダーモニターは、これを到達可能だが認証で制限されている状態として扱います。環境変数の PURPLEMCP_CONSOLE_* へのフォールバックはありません。
  3. (token, base-url) テナントごとに、適切な環境変数を設定して、プライベートなループバックポートで purple-mcp --mode streamable-http 子プロセスを遅延起動します。
  4. リクエスト本文をその子プロセスにプロキシし、レスポンスをストリーミングして返します。
  5. アイドル状態が60分続いた子プロセスを削除します(IDLE_EVICT_MS)。

これにより、ゲートウェイが他のベンダー MCP サーバーと同様に接続できる単一のコンテナが実現します。

設定

Env varDefaultNotes
PORT8080外部向け待ち受けポートです。
MCP_HTTP_HOST実際のシークレットが設定されている場合は 0.0.0.0バインドアドレスです。CONDUIT_S2S_SECRET が設定されている場合は、0.0.0.0 を含め、この値が適用されます。未設定の場合は、従来どおりのバインドが維持されます。イメージと Compose はコンテナ内で 0.0.0.0 を設定し、ホスト上で 127.0.0.1:8080:8080 を公開します。
CONDUIT_S2S_SECRET—必須です。サービス間シークレットです。空の場合、または既知のプレースホルダー(changeme、secret、replace-me、replace-with-a-real-secret などの例示値)の場合、プロセスはエラーをログに出力してゼロ以外の終了コードで終了します。openssl rand -hex 32 で生成してください。Compose はこの値がないと起動しません。この値がログに記録されることはありません。
MCP_ALLOW_INSECURE_DEV未設定CONDUIT_S2S_SECRET なしで起動する場合に限り、ローカル開発用として正確に 1 を設定します。プロセスは警告をログに出力し、X-Gateway-S2S の検証を行わず、127.0.0.1 のみでバインドします。ループバック以外の MCP_HTTP_HOST が指定されている場合は起動を拒否します。既知のプレースホルダーシークレットが指定されている場合も起動を拒否します。
PURPLE_MCP_DIR/opt/purple-mcppurple-mcp のソースと仮想環境の場所です。
PURPLE_MCP_PYTHON/opt/purple-mcp/.venv/bin/pythonアップストリームの仮想環境にある Python インタープリターです。
IDLE_EVICT_MS3600000テナントがアイドル状態になってから削除するまでの時間(60分)です。長くすると子プロセスを起動状態に保てるため、コールドスタートの繰り返しを回避できます。
SPAWN_READY_TIMEOUT_MS30000子プロセスが HTTP サービスを開始するまで待機する時間です。
MAX_CHILDREN50同時に実行できる異なるテナントの子プロセス数の上限です。上限を超えて新しいテナントの子プロセスを起動しようとすると、既存の子プロセスを削除せずに拒否されます(502)。
LOG_LEVELinfoFastify のログレベルです。起動拒否と安全でない開発モードの警告は stderr に出力され、このレベルによるフィルタリングの対象になりません。

.env.example をコピーしてください。このファイルの CONDUIT_S2S_SECRET は空のままにし、実際の値はコミット対象外の .env またはプロセス環境にのみ設定してください。

リクエストヘッダー

このサーバーはゲートウェイモードです。受信リクエストに対して、環境変数から PURPLEMCP_CONSOLE_TOKEN や PURPLEMCP_CONSOLE_BASE_URL を読み取りません。ゲートウェイは、すべての /mcp リクエストにこれらのヘッダーを転送する必要があります。ヘッダー名では大文字と小文字が区別されません。両方のペアが指定されている場合、フィールドごとに X-S1-* の値が優先されます。

ヘッダーSentinelOne の認証情報
X-Gateway-S2Sサービス間の証明です。CONDUIT_S2S_SECRET が設定されている場合、/mcp で必須です。SentinelOne の認証情報ではありません。
X-S1-API-Tokenそのリクエストの子プロセスに渡される PURPLEMCP_CONSOLE_TOKEN(Account レベルまたは Site レベルのサービスユーザートークン)です。カタログの headerMapping 名です。
X-S1-Console-URLそのリクエストの子プロセスに渡される PURPLEMCP_CONSOLE_BASE_URL(例:https://yourtenant.sentinelone.net)です。カタログの headerMapping 名です。
x-purplemcp-tokenAPI トークンのレガシーエイリアスです。
x-purplemcp-base-urlコンソール URL のレガシーエイリアスです。
X-Gateway-S2S

CONDUIT_S2S_SECRET が設定されている場合、すべての POST /mcp に X-Gateway-S2S を含める必要があります。チェックは src/s2s-verify.ts の verifyS2sHeader で行われます。ヘッダー値は t=<unix seconds>,v1=<hex> であり、hex は CONDUIT_S2S_SECRET を鍵として、リテラル文字列 t=<unix seconds> を HMAC-SHA256 でハッシュした値(小文字の 16 進数 64 文字)です。タイムスタンプはサーバーの時計から 300 秒以内でなければなりません。ヘッダーがないか無効な場合、テナントの認証情報を読み取る前に HTTP 401 が返され、シークレットはログに記録されません。

X-Gateway-S2S: t=1710000000,v1=<hmac-sha256 hex of "t=1710000000">

ゲートウェイモードでは、/mcp に X-S1-API-Token と X-S1-Console-URL(または、混在したペアを含むレガシーの x-purplemcp-* ペア)も必要です。いずれかの認証情報が不足しているリクエストは HTTP 401(JSON-RPC -32001)を返し、プロセス環境の PURPLEMCP_CONSOLE_* にはフォールバックしません。Vendor-monitor の認証情報なしの initialize プローブはこれを利用します。401/403 はサイドカーが稼働中だが認証で保護されていることを示し、400 はスラッグが DOWN であることを示します。

GET /health は引き続き認証不要で、認証情報を読み取りません。

ビルド

docker build -t ghcr.io/wyre-ai/sentinelone-mcp:latest .

イメージはコンテナ内の 0.0.0.0(MCP_HTTP_HOST)でリッスンし、CONDUIT_S2S_SECRET が設定されるまで起動を拒否します。ポートはループバックで公開してください。SentinelOne の認証情報は各リクエストのヘッダーで渡され、環境変数からは読み取られません。

docker run --rm \
  -e CONDUIT_S2S_SECRET="$(openssl rand -hex 32)" \
  -p 127.0.0.1:8080:8080 \
  ghcr.io/wyre-ai/sentinelone-mcp:latest

CONDUIT_S2S_SECRET が未設定の場合、Compose は起動を拒否します。127.0.0.1:8080:8080 を公開し、PURPLEMCP_CONSOLE_TOKEN や PURPLEMCP_CONSOLE_BASE_URL は注入しません。

CONDUIT_S2S_SECRET="$(openssl rand -hex 32)" docker compose up --build

シークレットを使わないローカル HTTP は、開発用途に限られます。127.0.0.1 にバインドし、警告をログに記録します。ループバック以外の MCP_HTTP_HOST(0.0.0.0 を含む)を指定すると、起動時に終了します。

npm run build
MCP_ALLOW_INSECURE_DEV=1 npm start

ライセンス

Apache-2.0。バンドルされている purple-mcp は SentinelOne による MIT ライセンスです。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。