cloak-browser-mcp について
cloak-browser-mcpは、CloakBrowser Chromiumを基盤とするPlaywright互換のMCPサーバーです。ステルス機能や永続プロファイル、任意のネットワーク・ストレージ・ビジョン・テストツールを求めるMCPクライアント向けです。
主な機能
- 01Playwright互換のブラウザー操作
- 02ステルス検査と監査ツール
- 03永続プロファイルの管理
- 04プロキシ、地域、タイムゾーン、指紋の設定
- 05ネットワーク、ストレージ、ビジョン、テスト機能
活用シーン
- 01ボット検知のあるサイトでのブラウザー自動化
- 02ブラウザーのネットワーク動作の検査とテスト
- 03ブラウザープロファイルとストレージ状態の再利用
- 04ロケーター生成とページ要素の検証
MCP 対応
MCPクライアントにブラウザー自動化とCloakBrowser固有のツールを公開し、機能フラグで追加のツール群を有効にできます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
35掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| url | string | はい | 読み込む絶対 URL。--allowed-domains / --blocked-domains の制限を受けます。 |
| timeoutMs | number | いいえ | |
| waitUntil | enum | いいえ | load | domcontentloaded | networkidle | commit |
詳細
cloak-browser-mcp
CloakHQ/CloakBrowser を基盤とする Model Context Protocol(MCP)サーバーです。Cloudflare Turnstile、reCAPTCHA v3、FingerprintJS、BrowserScan、その他30以上のボット検出サービスを、実行時の JS インジェクションなしで通過する、ソースコードにパッチを適用した Chromium を使用します。
@playwright/mcp のドロップイン代替で、86 個のツールを備えています。browser_annotate(未実装を参照)以外の Playwright MCP の全ツールに加え、Cloak 専用のステルス/プロファイル/監査レイヤーを利用できます。
Claude Code、Cursor、VS Code、Codex、Gemini CLI、Windsurf、その他あらゆる MCP クライアントで動作します。
目次
- 標準の Playwright ではなく CloakBrowser を選ぶ理由
- クイックスタート
- 機能(
--caps) - CloakBrowser 専用ツール
- CLI フラグ
- ツール一覧
- 操作ツールのターゲット構文
- 使用例
- セキュリティモデル
- 変更履歴
- ライセンス
標準の Playwright ではなく CloakBrowser を選ぶ理由
@playwright/mcp | cloak-browser-mcp | |
|---|---|---|
| Chromium | 標準版 | ソースコードにパッチを適用(C++ パッチ58件) |
navigator.webdriver | true(漏洩する) | 存在しない |
| Cloudflare Turnstile | 失敗 | 自動通過 |
| reCAPTCHA v3 のスコア | ~0.1 | ~0.9 |
| 人間らしいマウス/キーボード操作 | なし | ベジェ曲線、タイプミスの修正 |
| 永続プロファイル | 手動 | CLI フラグと管理ツールを標準搭載 |
| GeoIP 対応のエミュレーション | なし | プロキシの出口 IP からタイムゾーン/ロケールを自動設定 |
| ステルス監査/検出プローブ | なし | cloak_stealth_audit と cloak_detection_test を内蔵 |
ステルス機能が不要な場合は、@playwright/mcp のほうが高速で軽量なので、そちらをお使いください。サイトが何らかのボット検出(Cloudflare、DataDome、PerimeterX、FingerprintJS)を導入している場合は、こちらをお使いください。
クイックスタート
1. 一度だけインストール
ラッパーは npm からインストールします。CloakBrowser の Chromium バイナリ(約200 MB)は、初回使用時に ~/.cloakbrowser/ へダウンロードされます。
Node.js ^20.19.0 || >=22.12.0 が必要です(CloakBrowser 自体が必要とする最小バージョンです)。
バイナリには2つのティアがあります。キーがない場合は無料のバイナリを利用できます。CloakBrowser Pro ライセンスを利用するには、MCP サーバーの環境に CLOAKBROWSER_LICENSE_KEY を設定してください。CloakBrowser ライブラリは CLOAKBROWSER_RELEASE_CHANNEL(stable または preview)と CLOAKBROWSER_VERSION も読み込みます。各ティアに含まれる内容については、cloakbrowser.dev をご覧ください。現在有効なティアは cloak_binary_info で確認できます。
npm install -g @devinwangd/cloak-browser-mcp
インストールせず、必要なときに実行することもできます。
npx @devinwangd/cloak-browser-mcp --caps all
インストール後、PATH 上のバイナリ名は cloak-browser-mcp(スコープなし)です。以下の MCP クライアント設定では、この名前を指定します。
2. MCP クライアントに接続
Claude Code(~/.claude.json またはプロジェクトの .mcp.json)
{
"mcpServers": {
"cloak-browser": {
"command": "cloak-browser-mcp",
"args": ["--caps", "all"]
}
}
}
Cursor/VS Code(.cursor/mcp.json または .vscode/mcp.json)
{
"servers": {
"cloak-browser": {
"command": "cloak-browser-mcp",
"args": ["--caps", "all"]
}
}
}
永続プロファイル+プロキシ+人間らしい入力
{
"mcpServers": {
"cloak-browser": {
"command": "cloak-browser-mcp",
"args": [
"--caps", "all",
"--profile-dir", "/Users/me/.cloak-browser-mcp/profiles/work",
"--proxy", "http://user:[email protected]:8080",
"--timezone", "Europe/London",
"--locale", "en-GB",
"--geoip",
"--humanize",
"--viewport", "1920x1080",
"--allowed-domains", "*.example.com,*.cloudflare.com"
]
}
}
}
3. 使用する
Claude Code で:
「example.com を開いて、検索ボックスをクリックし、「hello」を検索して、スクリーンショットを撮ってください。」
エージェントは browser_navigate → browser_snapshot → browser_click → browser_type → browser_take_screenshot を呼び出します。
機能(--caps)
| 機能 | ツール | 使用する場面 |
|---|---|---|
| (常時有効) | ナビゲーション、操作、ページ状態 | 通常のブラウジング |
network | リクエストの検査、ルートのモック、オフラインのシミュレーション | API のデバッグ、障害モードのテスト |
storage | Cookie、localStorage、sessionStorage、ストレージ状態のエクスポート/インポート | 認証状態の永続化、セッションの再生 |
vision | ピクセル座標によるマウス操作 | キャンバス/SVG アプリでアクセシビリティツリーを介さずに操作する場合 |
pdf | browser_pdf_save | ページを PDF としてスナップショット保存する場合 |
testing | verify_* + generate_locator | Playwright テストのコード生成 |
devtools | ハイライト、トレース、動画、再開 | エージェントの判断のデバッグ |
config | get_config、close、run_code_unsafe | 内部情報の確認 + 任意の JS(--enable-unsafe-eval が必要) |
humanize | cloak_humanize_set | 人間らしい入力パラメーターの調整 |
--caps all を指定すると、すべての機能が有効になります(ただし、run_code_unsafe の使用には追加で --enable-unsafe-eval が必要です)。
CloakBrowser 専用ツール(常時有効)
| ツール | 目的 |
|---|---|
cloak_set_fingerprint | Canvas シード、GPU ベンダー/レンダラー、画面サイズ、ハードウェア並列数、デバイスメモリ、UA ブランド、プラットフォーム、ストレージクォータを上書きします |
cloak_set_timezone | CDP 経由でタイムゾーンを即時変更します(再起動不要) |
cloak_set_locale | navigator.language と Accept-Language を上書きします |
cloak_set_geolocation | 座標を設定するか、プロキシの出口 IP から自動解決します |
cloak_set_proxy | セッション中にプロキシを切り替えます |
cloak_detection_test | 既知のプローブ(CreepJS、FingerprintJS、BrowserScan、SannySoft、Cloudflare Turnstile)を読み込み、結果を出力します |
cloak_stealth_audit | プログラムによるチェック:navigator.webdriver、プラグイン数、WebGL ベンダー、言語、UA、chrome.runtime、Canvas ハッシュ、$cdc_* CDP シグナル |
cloak_request_signal_inspect | 単一 URL のリクエストごとの TLS/ヘッダーシグナルを取得します |
cloak_persistent_profile_create / list / delete | ~/.cloak-browser-mcp/profiles/ を管理します |
cloak_binary_info / cloak_binary_update | CloakBrowser の Chromium バイナリーを検査/更新します |
CLI フラグ
| フラグ | 値 | デフォルト | 備考 |
|---|---|---|---|
--caps <csv> | all または任意のサブセット | (なし) | 機能によって有効化されるツールを有効にします |
--profile-dir <path> | 絶対パス | (一時的) | 永続的なユーザーデータディレクトリ |
--headless / --headed | (ブール値) | headed(表示) | 一括実行/CI 実行では --headless を指定します。 |
--proxy <url> | 認証情報を含む http(s)/socks5 | なし | |
--timezone <tz> | IANA タイムゾーン | システム | 例:America/New_York |
--locale <bcp47> | BCP-47 | システム | 例:en-US |
--user-agent <ua> | 文字列 | (cloak のデフォルト) | |
--viewport <WxH> | 例:1920x1080 | 1280×720 | |
--geoip | ブール値 | オフ | プロキシ IP から位置情報を自動解決します |
--humanize | ブール値 | オフ | ベジェ曲線のマウス操作 + 誤字を修正するキーボード入力を有効にします |
--fingerprint-seed <int> | 整数 | ランダム | Canvas/WebGL のノイズを決定論的にします |
--allowed-domains <csv> | ホストパターン | (すべて許可) | browser_navigate の許可リスト |
--blocked-domains <csv> | ホストパターン | (なし) | browser_navigate のブロックリスト |
--enable-unsafe-eval | ブール値 | オフ | browser_run_code_unsafe に必要です |
--upload-allow-dir <path> | パス | (なし) | ファイルアップロード元のパスを制限します |
--download-dir <path> | パス | (現在の作業ディレクトリ) | ダウンロードしたファイルの保存先 |
--max-pages <n> | 整数 | 20 | 同時に開けるタブの上限 |
--self-test | ブール値 | オフ | ツール一覧を表示して終了します |
ツール一覧
ツールは機能ごとに分類されています。「常時有効」のセクションは --caps の指定にかかわらず公開されます。機能によって有効化されるセクションを使用するには、該当する --caps エントリーが必要です。
常時有効
ナビゲーション
| ツール | 必須 | 任意 | 備考 |
|---|---|---|---|
browser_navigate | url | waitUntil, timeoutMs | --allowed-domains / --blocked-domains の設定に従います。新しい [eN] スナップショットを返します。 |
browser_navigate_back | — | — | アクティブなタブの履歴を戻ります。 |
browser_tabs | action (list/new/switch/close) | index, id, url | ID(t1 など)または 0 始まりのインデックスでタブを管理します。 |
操作
| ツール | 必須 | 任意 | 備考 |
|---|---|---|---|
browser_click | target | element, doubleClick, button, modifiers | target は eN の参照、または Playwright セレクターです。 |
browser_type | target, text | element, submit, slowly | slowly:true を指定すると、1 文字ずつ入力します。--humanize と組み合わせてください。 |
browser_hover | target | element | |
browser_drag | startTarget, endTarget | startElement, endElement | |
browser_drop | target | paths, data | ファイルパスには setInputFiles を使用します。任意の MIME データには合成 DataTransfer を使用します。 |
browser_select_option | target, values | element | |
browser_press_key | key | — | ページレベルでキーを押します(例:Control+A、ArrowDown)。 |
browser_handle_dialog | accept | promptText | 最後に取得したダイアログに応答します。 |
browser_file_upload | paths | — | --upload-allow-dir が設定されている場合、パスは指定ディレクトリ内に制限されます。 |
browser_fill_form | fields | — | 各フィールドには target と value(および任意の kind)を指定します。 |
browser_scroll | — | target, direction, amount | 要素単位、またはページ単位でスクロールします。 |
ページの状態
| ツール | 必須 | 任意 | 備考 |
|---|---|---|---|
browser_snapshot | — | — | 操作可能なノードの [eN] 参照を含むアクセシビリティツリーです。 |
browser_find | text または regex | filename | スナップショット全体を返す代わりに、スナップショット内を検索します。各一致箇所は、ルートからのパスと前後数行のコンテキストとともに表示されます。一致箇所は最大 20 件です。regex は /pattern/i と記述しない限り、大文字と小文字を区別します。 |
browser_emulate_media | — | colorScheme, reducedMotion, forcedColors, contrast, media | 省略されたパラメーターは変更されません。null を指定すると、オーバーライドが解除され、システム設定に戻ります。 |
browser_take_screenshot | — | element, target, type, fullPage, quality, saveAs | 画像はインラインで返され、必要に応じてディスクに保存できます。 |
browser_console_messages | — | level, limit | バッファー内のコンソールメッセージと pageerror を返します。 |
browser_wait_for | — | timeMs, text, textGone, selector, state, timeoutMs | |
browser_resize | width, height | — | |
browser_evaluate | function | element, target | 関数のソースには、アロー関数または関数式を指定する必要があります。 |
CloakBrowser 専用
| ツール | 必須 | 任意 | 備考 |
|---|---|---|---|
cloak_set_fingerprint | — | seed, gpuVendor, gpuRenderer, screenWidth, screenHeight, hardwareConcurrency, deviceMemoryGB, uaBrand, uaBrandVersion, platform, storageQuotaMB | 一部のフラグは次回起動時にのみ反映されます。browser_close を呼び出してから任意のツールを呼び出すと、再起動します。 |
cloak_set_timezone | timezone | — | CDP 経由で即時反映されます。 |
cloak_set_locale | locale | — | navigator.language と Accept-Language ヘッダーを設定します。 |
cloak_set_geolocation | — | latitude, longitude, accuracy, fromProxyIp | fromProxyIp は現在のプロキシ経由で ipapi.co/json/ を呼び出します。 |
cloak_set_proxy | proxy | — | コンテキストを再作成します。 |
cloak_detection_test | — | suite, customUrl | スイート:creepjs、fingerprintjs、browserscan、sannysoft、cloudflare-turnstile。 |
cloak_stealth_audit | — | — | プログラムによる監査です。 |
cloak_request_signal_inspect | url | — | TLS の詳細、レスポンスステータス、リクエストヘッダー、レスポンスヘッダーを返します。 |
cloak_persistent_profile_create | name | — | ~/.cloak-browser-mcp/profiles/<name> を作成します。 |
cloak_persistent_profile_list | — | — | |
cloak_persistent_profile_delete | name, confirm=true | — | |
cloak_binary_info | — | — | |
cloak_binary_update | — | — |
機能による制御
--caps network — browser_network_requests、browser_network_request、browser_route、browser_route_list、browser_unroute、browser_network_state_set。
--caps storage — browser_cookie_set/get/list/delete/clear、browser_localstorage_*、browser_sessionstorage_*、browser_storage_state、browser_set_storage_state。
--caps vision — browser_mouse_click_xy、browser_mouse_move_xy、browser_mouse_drag_xy、browser_mouse_down、browser_mouse_up、browser_mouse_wheel。
--caps pdf — browser_pdf_save。
--caps testing — browser_verify_element_visible、browser_verify_text_visible、browser_verify_list_visible、browser_verify_value、browser_generate_locator。
--caps devtools — browser_highlight、browser_hide_highlight、browser_start_tracing、browser_stop_tracing、browser_start_video、browser_stop_video、browser_video_chapter、browser_resume、browser_video_show_actions、browser_video_hide_actions、browser_start_recording、browser_stop_recording。
--caps config — browser_get_config、browser_close、browser_run_code_unsafe(--enable-unsafe-eval も必要です)。
--caps humanize — cloak_humanize_set。
未実装
Playwright MCP の browser_annotate は提供されていません。このツールは Playwright のダッシュボードウィンドウを開き、ページ上に人が描画するのを待機します。Playwright はこれを内部プロセスとして実行しますが、このサーバーはそのプロセスを起動しません。
インタラクションツールのターゲット構文
target 引数では、次の値を指定できます。
- 前回の
browser_snapshotで取得したeNref — 例:e7。最も確実です。 - CSS セレクター — 例:
button.primary。 xpath=…— 例:xpath=//button[contains(., "Submit")]。text=…— 例:text=Sign in。role=…[name="…"]— 例:role=button[name="Submit"]。
ページ遷移または DOM に大きな変更があった後は、browser_snapshot を再度呼び出して ref を更新してください。
使用例
1. Cloudflare で保護されたページのスクリーンショットを撮る
You: Open https://example-cloudflare-protected.com, wait for the page to settle, take a full-page screenshot.
Agent calls:
browser_navigate(url="https://...")
browser_wait_for(textGone="Checking your browser")
browser_take_screenshot(fullPage=true)
標準の @playwright/mcp は Turnstile チェックに失敗しますが、cloak-browser-mcp はステルスパッチが JS レイヤーより下位にあるため、自動的に通過します。
2. SaaS ダッシュボードにサインインし、認証情報を保持して後で再度開く
フェーズ 1 — 新しいプロファイルで初回サインイン:
// .mcp.json
{
"mcpServers": {
"cloak": {
"command": "cloak-browser-mcp",
"args": [
"--caps", "all",
"--profile-dir", "/Users/me/.cloak-browser-mcp/profiles/saas-prod",
"--humanize"
]
}
}
}
You: Open https://saas.example.com, sign in as [email protected] / <password>, then confirm I'm on the dashboard.
フェーズ 2 — 後で再度開くと、すべての Cookie が保持されています。
You: Open https://saas.example.com — you should already be signed in from yesterday's session.
3. ステルスの状態を確認する
You: Run a stealth audit and then load the SannySoft bot detection test.
Agent:
cloak_stealth_audit()
cloak_detection_test(suite="sannysoft")
ステルスが維持されていれば、すべて緑色で表示されます。
4. プロキシ経由でセッション中に位置情報/タイムゾーンを切り替える
You: Switch to a UK proxy, align my timezone/locale/geo to match, then load a country-specific landing page.
Agent:
cloak_set_proxy(proxy="http://uk-proxy.example.com:8080")
cloak_set_timezone(timezone="Europe/London")
cloak_set_locale(locale="en-GB")
cloak_set_geolocation(fromProxyIp=true)
browser_navigate(url="https://example.com/uk")
5. フロントエンドのテスト中に API レスポンスをモックする
You: While loading example.com, return a fake 500 to /api/orders so I can verify the error state.
Agent:
browser_route(pattern="**/api/orders", status=500, body='{"error":"simulated"}', contentType="application/json")
browser_navigate(url="https://example.com")
browser_take_screenshot()
browser_unroute(pattern="**/api/orders")
6. ストレージ状態をエクスポートし、新しいセッションで再生する
Agent:
browser_storage_state(filename="/tmp/saas-state.json")
# …later, in a new ephemeral session…
browser_set_storage_state(filename="/tmp/saas-state.json")
browser_navigate(url="https://saas.example.com")
7. 人による確認用に Playwright のトレースを実行する
You: Trace this whole flow so I can replay it in Playwright Trace Viewer.
Agent:
browser_start_tracing(filename="/tmp/trace.zip", screenshots=true, snapshots=true)
# …agent runs the flow…
browser_stop_tracing()
You: open /tmp/trace.zip in Playwright Trace Viewer (https://trace.playwright.dev)
セキュリティモデル
本番環境の認証情報があるマシンにデプロイする前に、これをお読みください。
要約
| アセット | 信頼境界 |
|---|---|
cloak-browser-mcp のソース(このリポジトリ) | MIT ライセンス、公開済み、ソースを読んで監査できます。 |
cloakbrowser npm パッケージ | CloakHQ のメンテナーと npm レジストリを信頼してください。 |
| CloakBrowser の Chromium バイナリ | 初回使用時に cloakbrowser.dev からダウンロードされます。上流のラッパーによって SHA-256 が検証されます。ライセンス上、このバイナリはクローズドソースです。 |
| 環境変数/Keychain/シェルの履歴 | MCP サーバーはプロセスの環境変数を継承します。サプライチェーンを信頼できない限り、本番環境の認証情報が有効な状態で実行しないでください。 |
このパッケージがもたらす脅威
1. サプライチェーンの侵害
インストール時または実行時に、@modelcontextprotocol/sdk、playwright-core、cloakbrowser の 3 つのパッケージと、ダウンロードされる Chromium バイナリが取得されます。CloakHQ の npm 公開トークンまたは cloakbrowser.dev が侵害された場合、攻撃者がユーザーアカウントで実行される悪意のあるバイナリを公開する可能性があります。
緩和策:
- 信頼できる
cloakbrowserのバージョンを固定してください。 CLOAKBROWSER_BINARY_PATHに監査済みのバイナリを指定してください。CLOAKBROWSER_SKIP_CHECKSUMはデフォルト(false)のままにしてください。~/.cloakbrowser/と、使用する--profile-dirを監査してください。
2. エージェントによるブラウザーのナビゲーション
デフォルトでは、browser_navigate は任意の URL を受け付けます。LLM エージェントがプロンプトインジェクションを受け、悪意のある場所に移動させられる可能性があります。
緩和策:
--allowed-domains <csv>(*.example.comに対応)。--blocked-domains <csv>(先にチェックされます)。- 実際のブラウザープロファイルではなく、専用の一時的な
--profile-dirを使用してください。 --max-pages <n>でタブが際限なく増えるのを制限してください。
3. 任意の JS 実行
browser_evaluate— ページのサンドボックス内で JS を実行します。ローカルファイルシステムは読み取れません。常に利用できます。browser_run_code_unsafe— この Node.js サーバープロセス内で JS を実行します。Node で可能なあらゆる操作を実行できます。二重の明示的な許可が必要です:--caps configと--enable-unsafe-evalの両方が必要です。
緩和策: 環境変数に本番環境の認証情報があるマシンで、--enable-unsafe-eval を決して併用しないでください。
4. ファイルシステムへのアクセス範囲
browser_file_upload と browser_drop は、読み取りアクセス権のある任意のファイルを添付できます。制限するには --upload-allow-dir <path> を使用してください。
書き込み側:browser_take_screenshot --saveAs、browser_pdf_save、browser_storage_state、browser_start_tracing は、エージェントが指定したパスにファイルを書き込みます。これを避けたい場合は、--caps pdf/storage/devtools を指定しないでください。
5. 永続プロファイルからの情報漏えい
--profile-dir には Cookie/localStorage/IndexedDB が蓄積されます。クラウドストレージに同期されている場合、エージェント経由でサインインしたすべてのサイトに、その同期トークンを持つ誰もがアクセスできるようになります。デフォルトのパス ~/.cloak-browser-mcp/profiles/<name> は、一般的なクラウド同期対象のルートディレクトリの外にあります。
6. プロンプトインジェクションによる情報流出
悪意のあるページがエージェントにプロンプトインジェクションを仕掛け、盗んだ状態情報を使って別の場所に移動させたり、DOM 内の秘密情報を POST で外部に送信させたりする可能性があります。これは MCP の問題ではなく、LLM の問題です。
- タスクごとに別のセッションを使用してください。関係のない作業の合間には
browser_closeを実行してください。 - 機密性の高いフローでは、永続プロファイルより一時プロファイルを優先してください。
- 認証済みの操作を含むタスクでは、エージェントのツール呼び出しを確認してください。
7. ネットワークへの送信
| 呼び出し | 接続先 | タイミング |
|---|---|---|
| CloakBrowser バイナリのダウンロード | cloakbrowser.dev(CLOAKBROWSER_DOWNLOAD_URL で変更可能) | インストール後の初回使用時 |
| ブラウザーの通信 | エージェントが移動する先 | 常時 |
cloak_set_geolocation --fromProxyIp | ipapi.co/json/ | 明示的に呼び出した場合のみ |
このラッパーはホームに通信せず、テレメトリーも収集しません。
推奨されるデプロイプロファイル
「Tight」(機密性の高いマシン — 本番環境の認証情報を保持):
--caps network,storage,pdf
--profile-dir /Users/me/.cloak-browser-mcp/profiles/scoped
--allowed-domains *.target.com
--upload-allow-dir /tmp/cloak-uploads
--max-pages 5
--enable-unsafe-eval は使用しません。vision 機能も有効にしません(xy クリックは許可リストのチェックを回避します)。
「Open」(研究/個人でのブラウジング):
--caps all
--humanize
--max-pages 20
「Untrusted」(上流のバイナリをまだ完全には信頼していない場合)— Docker コンテナ内、または Keychain にアクセスできず、.env ファイルもマウントされていない、新しい macOS ユーザーアカウントで実行してください。
脆弱性の報告
cloak-browser-mcp(上流の cloakbrowser パッケージやそのバイナリではなく)にセキュリティ上の問題を見つけた場合は、https://github.com/devinwang/cloak-browser-mcp/security/advisories/new で非公開のセキュリティアドバイザリを作成してください。
上流の CloakBrowser に関する問題については、https://github.com/CloakHQ/CloakBrowser/security/advisories/new をご覧ください。
変更履歴
[0.2.0] - 2026-10-21
cloakbrowserを 0.3.x から 0.6.3 にアップグレードしました。 新しいリリースでは、Pro ライセンス、リリースチャネル、署名付きダウンロードの検証が追加されています。サーバーが使用していた機能は削除されていません。新しい MCP ツールはなく、ツール数は 80 のままです。- 修正:ライブラリのログ行によって stdio ストリームが破損する可能性がありました。
cloakbrowserは、プロキシ認証情報内の特殊文字の自動エンコードなど、一部のイベントをconsole.infoで報告します。Node はこれを stdout に書き込みますが、MCP クライアントはそこに JSON-RPC のみが出力されることを想定しています。サーバーの実行中は、console.log、console.info、console.debugが stderr に出力されるようになりました。 - Node の要件が
^20.19.0 || >=22.12.0になりました(以前は>=18と宣言されていました)。CloakBrowser 0.3.30 ではすでに Node 20 以降が必要で、0.6.x では 20.19 以降が必要です。CI で Node 18 のテストを行わなくなりました。 - Playwright MCP 0.0.83 との機能差を埋めるため、6 つのツールを追加しました(80 → 86):
browser_find— スナップショット内のテキストまたは正規表現を検索します。browser_emulate_media— カラースキーム、視差効果の低減、強制カラー、コントラスト、メディアタイプを設定します。nullを指定すると上書き設定が解除されます。browser_video_show_actions/browser_video_hide_actions(devtools)— 録画中またはスクリーンキャスト中に、ページ上で操作を注釈表示します。browser_start_recording/browser_stop_recording(devtools)— ブラウザーでユーザーが行った操作を記録し、Playwright コードとして返します。
browser_annotateは提供されません。Playwright の内部ダッシュボードプロセスを起動し、ページ上に描画する人が必要になるためです。playwright-coreの最小バージョンを^1.61.0に引き上げました。これはpage.screencast.showActions()を初めて含むリリースです。解決されるバージョンは 1.60.0 から 1.64.1 に変わりました。- 入力スキーマで、null を許容するパラメーターが
{ oneOf: [<type>, null] }として示されるようになりました(以前は変換処理で null が削除されていました)。これはbrowser_emulate_mediaに必要です。 package.jsonにmcpNameを追加し、公式 MCP Registry 用のserver.jsonを追加しました。これには省略可能なCLOAKBROWSER_LICENSE_KEY変数も含まれます。
[0.1.4] - 2026-08-23
- 修正:
targetを指定せずにbrowser_evaluateを実行すると、常に失敗していました。 関数が文字列式として Playwright に渡されていたため、結果ではなく関数オブジェクトが返され、それがundefinedにシリアライズされて MCP の結果検証に失敗していました。現在は関数が呼び出され、正当にundefinedを返す関数は文字列"undefined"を報告します。
[0.1.3] - 2026-08-23
- 修正:失敗したブラウザーの起動を再試行できませんでした。 拒否された起動 Promise がキャッシュされ、永久に再度待機されていたため、一時的なエラーが 1 回発生するとプロセスを再起動する必要がありました。失敗時にキャッシュがクリアされるようになりました。
- エラーメッセージを明確化しました。 プロファイルディレクトリを使用中の古い CloakBrowser プロセスがある場合、以前は「No active page」と表示されていました。現在は、根本の起動エラーと古いプロセスを見つけるコマンドを含む
NO_BROWSERエラー(BrowserNotLaunchedError)と、不明なタブ ID に対するTAB_NOT_FOUNDエラーが用意されています。NoActivePageErrorは、失敗しているその呼び出しを実行するよう呼び出し元に指示しなくなりました。
[0.1.2] - 2026-08-03
- 動作変更はありません。リリースパイプラインのみの変更です。
NPM_TOKENシークレットの代わりに、**npm の信頼されたパブリッシング(OIDC)**を使用して公開します。長期間有効なトークンは予告なく期限切れになり、npm は認証されていない公開リクエストに対して404 Not Found - PUTを返します。これは認証エラーではなく、パッケージが存在しないように見えてしまいます。OIDC に有効期限はありません。 actions/setup-nodeからregistry-urlを削除しました。このオプションは_authToken=${NODE_AUTH_TOKEN}を含む.npmrcを書き込み、トークンを指定しない場合には NODE_AUTH_TOKEN をプレースホルダーそのもののXXXXX-XXXXX-XXXXX-XXXXXとして設定します。その結果、npm は OIDC にフォールバックせず、無効なトークンで認証しようとします。- 公開前に、リリースジョブで npm を
11.x系に固定します。OIDC にはバージョン 11.5.1 以上が必要ですが、Node 22 にバンドルされているのは 10.x です。信頼されたパブリッシングでは来歴情報が自動的に付与されるため、明示的な--provenanceフラグを削除しました。アテステーションの適用範囲に変更はありません。
[0.1.1] - 2026-05-24
- 破壊的変更(UX):デフォルトをヘッドレスではなく、**ヘッドあり(ブラウザーを表示)**にしました。対話型の MCP サーバーでは、エージェントの作業をユーザーが見られるようにする必要があります。バッチ処理や CI で使用する場合は、明示的に
--headlessを指定してください。これに合わせて、Smithery のデフォルトも変更しました。
[0.1.0] - 2026-05-24
- 初回リリース。CloakHQ/CloakBrowser を基盤とする約 62 個の MCP ツールを提供します。Playwright-MCP と同等の機能一式に加え、Cloak 独自のステルス、プロファイル、監査、バイナリ管理機能を備えています。
- CLI:
--caps、--profile-dir、--headless/--headed、--proxy、--timezone、--locale、--user-agent、--viewport、--geoip、--humanize、--fingerprint-seed、--allowed-domains、--blocked-domains、--enable-unsafe-eval、--upload-allow-dir、--download-dir、--max-pages、--self-test。 - ワンクリックで統合できる Smithery YAML。
- ラッパーは MIT ライセンスです。上流の CloakBrowser Chromium バイナリはプロプライエタリで、無料での再配布は禁止されています。
ライセンス
- ラッパーコード:MIT(本パッケージ)。
- CloakBrowser Chromium バイナリ:プロプライエタリです。無料で使用できますが、再配布は禁止されています。https://github.com/CloakHQ/CloakBrowser/blob/main/BINARY-LICENSE.md を参照してください。
謝辞
- CloakHQ/CloakBrowser — 実際の処理を担う、パッチ適用済みの Chromium。
- @playwright/mcp — ツールの命名とアクセシビリティツリーを優先する設計が、このサーバーの着想となりました。
- @modelcontextprotocol/sdk — MCP の基盤となる仕組み。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。