Jet Browser Verifier について
Jet Browser Verifierは、固定された隔離型WPE WebKitランタイムを検証するローカルMCPサーバーです。汎用ブラウジングではなくランタイム検証向けで、ネイティブ入力、DOM確認、PNGスクリーンショットの証拠を返します。
主な機能
- 01時間制限付きブラウザー検証
- 02ネイティブ入力による文字入力
- 03期待されるDOM状態の確認
- 04最新のPNGスクリーンショット取得
- 05起動とネットワークの証拠を返却
- 06隔離コンテナのクリーンアップ
活用シーン
- 01ローカルでのWPE WebKitランタイム検証
- 02ネイティブ文字入力とページ状態の確認
- 03テスト用スクリーンショット証拠の取得
MCP 対応
stdio経由でMCPクライアントに `jet_browser_capabilities` と `jet_browser_verify` を提供します。検証時はブラウザネットワークを無効にした隔離Dockerランタイムを起動します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm ghcr.io/masakaai/jet-browser-mcp:0.9.0ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/masakaai/jet-browser-mcp:0.9.0stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Jet Browser MCP 検証ツール
このローカルの stdio サーバーは、MCP クライアントに Jet Browser を検証するための限定的な手段を提供します。マルチプラットフォーム対応パッケージは、ネイティブの linux/amd64 または linux/arm64 イメージを選択し、ブラウザーのネットワーク接続を無効にして、イメージ内のローカルフィクスチャを開き、ネイティブ入力で文字を入力し、DOM を確認して、新しい PNG をキャプチャし、後片付けを行います。
これは実行時の検証ツールであり、汎用のブラウジングサーバーではありません。パブリックウェブへのナビゲーション、CDP、個人用ブラウザープロファイル、認証情報、ホステッドサービス、テレメトリーは公開しません。
要件
- Node.js 24+
- Docker
- x86_64 または ARM64 の Linux ホスト
最初の検証時には、GHCR からパブリックイメージをプルする場合があります。ブラウザーの実行には、Docker の --network=none 境界を使用します。イメージは server.mjs 内でダイジェストにより固定されています。
OCI パッケージからインストールする
バージョン指定された MCP イメージは、stdio サーバーを直接起動します。Docker ソケットが必要になるのは、jet_browser_verify が個別に隔離された WPE WebKit ランタイムを起動するときだけです。
{
"mcpServers": {
"jet-browser": {
"command": "docker",
"args": [
"run", "--rm", "-i", "--network=none",
"--mount", "type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock",
"ghcr.io/masakaai/jet-browser-mcp:0.9.0"
]
}
}
}
Docker ソケットを使うと、ホストレベルの制御が可能になります。このローカルサーバーは、信頼できる MCP クライアントに対してのみ設定してください。外側の MCP コンテナではネットワークが無効になっており、起動するブラウザーコンテナも独立して --network=none、リソース制限、ケイパビリティの削減、確実な後片付けを適用します。
公式 MCP Registry 用のパッケージメタデータは server.json です。OCI イメージには、一致する io.modelcontextprotocol.server.name 所有権アノテーションが含まれています。
ソースからインストールする
git clone https://github.com/masakaai/jet-browser.git
cd jet-browser
npm ci
絶対パスでチェックアウト先を指定して、サーバーを MCP クライアントに追加します。
{
"mcpServers": {
"jet-browser": {
"command": "node",
"args": ["/absolute/path/to/jet-browser/integrations/mcp/server.mjs"]
}
}
}
プロセスは stdout で MCP を使用し、運用上のエラーのみを stderr に書き込みます。クライアントが stdin を閉じると終了します。
ツール
| ツール | 動作 |
|---|---|
jet_browser_capabilities | Docker を起動せずに、固定されたイメージ、プラットフォーム、エビデンスの仕様、明示的に対応していない機能を返します。 |
jet_browser_verify | 1 回の制限付き検証を実行し、起動、ネイティブ入力、DOM、スクリーンショット、ネットワーク、イメージのエビデンスを返します。 |
一度に実行できる検証は 1 件のみです。クライアント側でキャンセルすると、子プロセスが中断されます。サーバーは子プロセスの出力と実行時間の上限を設定しています。失敗はプロトコルエラーではなく、MCP ツールエラーとして返されます。
成功時には、次のような構造化コンテンツが返されます。
{
"status": "passed",
"network": "disabled",
"title": "Jet Browser Ready",
"input": "open-source runtime",
"screenshotBytes": 2048,
"image": "ghcr.io/masakaai/jet-browser@sha256:5884204e128a3e5bb17634078affdf28d1933d2745752cee3bc74235ed316cec"
}
スクリーンショットのバイト数は変動します。合格には、デコードされた PNG が 1,000 バイト以上であることに加え、期待されるページタイトル、ネイティブのテキスト入力、DOM の状態が完全に一致する必要があります。
インテグレーションを検証する
プロトコルテストでは、実際の stdio サーバーを起動し、MCP ハンドシェイクを実行してツール一覧を取得したうえで、Docker を必要とせずにケイパビリティツールを呼び出します。
node --test test/mcp-server.test.mjs
リポジトリのスタンドアロン CI は、引き続きエンドツーエンドのランタイム検証として機能します。同じ Docker の受け入れテストをローカルで実行するには、次のコマンドを使います。
JET_BROWSER_IMAGE=ghcr.io/masakaai/jet-browser@sha256:5884204e128a3e5bb17634078affdf28d1933d2745752cee3bc74235ed316cec \
npm run standalone:smoke
セキュリティ境界
- MCP 呼び出しでは、コマンド、URL、イメージ、プロファイル、パスの引数を受け付けません。
- 子プロセスには、必要な Docker 接続用の環境変数のみが渡されます。アプリケーションのシークレットは転送されません。
- コンテナではブラウザーのネットワーク接続が無効になっており、CPU、メモリ、PID、共有メモリ、ケイパビリティに上限が設定されています。また、チェック後に削除されます。
- 検証ツールが、実行中の個人用ブラウザーに接続することはありません。
- Docker へのアクセスは、ホストへの特権アクセスとして扱ってください。このサーバーは、信頼できるローカルの MCP クライアントに対してのみ設定してください。
より広範な組み込み境界が必要な場合は、Jet Browser のバージョン指定されたツール宣言である sdk/tools.mjs を使用し、独自のハーネスから各隔離コンテナを管理してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。