要約

Cloudflare Kitesurfは、AIエージェント向けに設計された軽量・ステートレスなブラウザであり、検索エンジンではない。CloudflareがBrowser Runの一部としてホスティングしているため、個人利用で試すだけならWorkerのデプロイは不要。Codexなどのエージェントは、ローカルMCPサーバーから認証付きCDP接続を行い、Cloudflare上のKitesurfを遠隔操作する。

キーワード検索から複数の記事を集めて要約するだけなら、Web Searchを第一選択にする。JavaScriptレンダリング、クリック、フォーム入力、無限スクロール、スクリーンショットなど、実際のブラウザ操作が必要なページに限ってKitesurfをフォールバックとして利用するのが効率的。

このセッションでは、CodexからKitesurfへ接続するMCPランチャーをローカルに作成し、グローバルMCPサーバー kitesurf として登録した。Cloudflare Account IDとBrowser Run APIトークンの入力、および実接続テストは未完了。

背景

CloudflareのKitesurf紹介記事をきっかけに、「エージェント専用ブラウザとは何か」「自分の環境でも構築できるか」を調査した。

検討した主な疑問は次のとおり。

  • ブラウザがWorkers上で動き、エージェントがそれを使うという理解でよいか
  • 自分でWorkerをデプロイする必要があるか
  • APIトークンを使う場合、公開範囲は制限されるか
  • Playgroundだけで試せるか
  • Kitesurfと通常のWeb Searchはどう使い分けるか
  • 費用、制限、セットアップ要件は何か

Kitesurfの位置づけ

Kitesurfは、通常のデスクトップ用Chromiumをそのままホスティングしたサービスではない。Cloudflare Workers上で動作する、AIエージェント向けの軽量ブラウザエンジンである。

人間向けブラウザに必要な次の機能を重視していない。

  • タブやテーマ
  • Chrome拡張
  • 動画やWebGL
  • ピクセル単位で完全なレンダリング
  • 長時間維持されるログインセッション

代わりに、エージェントの短時間タスクで重要になる次の要素を重視する。

  • DOMとHTMLの取得
  • JavaScriptを実行したページの調査
  • CDPによるクリック、入力、評価
  • スクリーンショットやPDF
  • 一時的に起動して破棄できる隔離環境
  • CPU・メモリ効率
  • バースト的な大量処理

アーキテクチャ

今回構築した利用経路は次のとおり。

flowchart LR
    A["Codex<br>AIエージェント"] --> B["chrome-devtools-mcp<br>ローカルプロセス"]
    B -->|"CDP / WebSocket<br>Bearer API Token"| C["Cloudflare Browser Run API"]
    C --> D["Kitesurf<br>Cloudflare管理のブラウザ"]
    D --> E["調査対象Webサイト"]

重要なのは、通常の個人利用ではKitesurfそのものを自分のWorkerとしてデプロイしない点である。KitesurfはCloudflareが管理するBrowser Runのブラウザ選択肢であり、CDPエンドポイントに browser=kitesurf を付けて利用する。

接続先の形式:

wss://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/browser-run/devtools/browser?browser=kitesurf

Workersへのデプロイが必要になるケース

単にCodexへブラウザ機能を与えるだけなら、Workerのデプロイは不要。ローカルMCPクライアントからCloudflareの管理APIへ接続すればよい。

独自Workerのデプロイを検討するのは次のケース。

  • URLや調査条件を受け取る独自APIを公開したい
  • 定期巡回、Webhook、Queueなどを組み合わせたい
  • Durable Objectsへエージェントの状態や記憶を保存したい
  • 複数ユーザーへブラウザ機能を提供したい
  • 独自認証、許可ルール、監査ログを実装したい
  • AIモデル、Browser Run、D1、R2などを1つのサービスに統合したい

公開範囲とセキュリティ

Cloudflare Browser RunのCDPエンドポイントはインターネット上に存在するが、接続にはCloudflare Account IDとBrowser Run権限を持つAPIトークンが必要。

今回の構成では以下の方針を採用した。

  • 自分の公開Workerや公開Web APIは作らない
  • APIトークンをMCP登録コマンドの引数へ直接埋め込まない
  • Git管理対象外のローカル .env からトークンを読む
  • MCPランチャーが接続時にAuthorizationヘッダーを組み立てる
  • .env.example にはダミー値だけを置く

注意点:

  • APIトークンが漏れると、そのトークンの権限範囲で利用される可能性がある
  • 最小権限のトークンを使う
  • トークンをチャット、Git、スクリーンショットへ載せない
  • Kitesurfへ入力した情報やアクセス先はCloudflareのサービスを経由するため、機密情報の利用には別途判断が必要

PlaygroundとMCPの違い

Kitesurf Playgroundは、コードを書かずにKitesurfの互換性や動作を試す場所。

Playgroundで確認できるもの:

  • ページのレンダリング結果
  • DOM
  • Console
  • Network
  • WebAssemblyメモリ使用量
  • 対象サイトがKitesurfで動くか

使い分け:

  • Playground:人間が特定サイトを試す
  • MCP接続:CodexなどのAIエージェントに操作させる
  • 独自Worker:ブラウザ処理をアプリや業務フローとして提供する

最初にPlaygroundで対象サイトの互換性を確認し、問題なければMCPへ進むのがよい。

Web Searchとの違い

Kitesurfは検索エンジンではない。検索結果を探す機能と、ページをブラウザとして操作する機能は分けて考える。

キーワード調査に対する推奨構成

「特定KWで検索し、複数ページを調査して内容をまとめる」という用途では、Web Searchを第一選択にする。

flowchart TD
    A["キーワードを受け取る"] --> B["Web Searchで候補ページを発見"]
    B --> C["公式情報・信頼性・更新日で候補を選別"]
    C --> D["通常の方法で本文取得"]
    D --> E{"必要情報を取得できたか"}
    E -->|"Yes"| F["比較・要約・出典整理"]
    E -->|"No"| G["Kitesurfでレンダリング・操作"]
    G --> F

Kitesurfを最初からすべてのページに使わない理由:

  • ブラウザ起動と操作が増え、処理が遅くなる
  • ブラウザ利用時間を消費する
  • 検索サイトや対象サイトのBot対策に当たる可能性がある
  • 単純な記事本文ならWeb Searchの方が効率的
  • ブラウザ操作ログやDOMが増え、モデルのコンテキストを消費しやすい

Kitesurfが有効な調査例

  • JavaScript実行後に本文や表が表示される
  • 「もっと見る」を押さないと全文が出ない
  • 検索条件をフォームへ入力する
  • タブやアコーディオンを開く必要がある
  • 無限スクロールで結果を追加取得する
  • ダッシュボードのフィルターを操作する
  • 画面状態をスクリーンショットで保存する
  • 通常取得できないDOMやネットワーク状態を調査する
  • SPAの簡単な動作確認を行う

具体例:

  • 不動産サイトで地域・価格・間取りを入力し、物件を比較する
  • SaaS料金ページの月額・年額トグルを切り替える
  • JavaScriptで描画されるIRダッシュボードから数値を取得する
  • Webアプリでボタンを押した後の表示を確認する

Kitesurfを避けるケース

次の用途では、通常のCloudflare Browser Run(Chromium)または手元のChromeを検討する。

  • 動画やWebGLが必要
  • CAPTCHAや高度なBot対策がある
  • 実ブラウザ相当のTLSフィンガープリントが必要
  • 長時間のログイン状態を維持したい
  • Chrome拡張を利用したい
  • ピクセル単位の表示検証が必要
  • Gmailなど既存の個人ログインセッションを使いたい

性能上の特徴

Cloudflareが14 URLのコーパスで行った計測では、KitesurfはChromiumのwarm poolと比べて次の傾向が示されている。

  • スクリーンショットのCPU:約3.1倍少ない
  • HTML抽出のCPU:約3.8倍少ない
  • スクリーンショットのメモリ:約4.7倍少ない
  • HTML抽出のメモリ:約7倍少ない
  • スクリーンショットの実時間:約1.8倍遅い
  • HTML抽出の実時間:約1.7倍遅い

つまり、単発処理の応答速度ではChromiumが有利な場合がある一方、大量・一時的・並列なエージェント処理では、KitesurfのCPUとメモリ効率が利点になる。

料金と制限

2026年8月8日時点で、KitesurfはBetaとして無料提供されている。ただしアカウント単位の利用制限がある。

Browser Run全体のWorkers Freeプランの主な標準制限:

  • ブラウザ時間:1日10分
  • Browser Sessionsの同時ブラウザ:アカウントあたり3
  • 新規Browser Session:20秒に1回
  • ブラウザの非アクティブタイムアウト:標準60秒
  • Quick Actions:10秒に1リクエスト
  • Crawl:1日5ジョブ、1クロール最大100ページ

Browser RunのWorkers Paidプラン:

  • 月10ブラウザ時間を含み、超過は1時間あたり$0.09
  • Browser Sessionsの月平均同時ブラウザ10個まで含む
  • 超過する月平均同時ブラウザは1個あたり月$2.00
  • 標準の同時実行上限はアカウントあたり120
  • Quick Actionsは秒間10リクエスト

Kitesurf Beta固有の無料条件や制限は今後変更される可能性があるため、利用前に公式ドキュメントを再確認する。

セットアップ要件

  • Cloudflareアカウント
  • Cloudflare Account ID
  • Browser RunへアクセスできるAPIトークン
  • Node.jsとnpx
  • MCP対応クライアント(今回はCodex)
  • chrome-devtools-mcp

このセッションで実施したセットアップ

ローカルディレクトリ:

/Users/meg/work/memo/tools/kitesurf-mcp/

作成したファイル:

  • README.md:用途、必要条件、設定、確認方法
  • .env.example:必要な環境変数の雛形
  • .gitignore:秘密を含む.envを除外
  • start.mjs:環境変数を読み、Kitesurf CDPへ接続するMCPランチャー

Codexへ登録したMCP:

Name: kitesurf
Status: enabled
Transport: stdio
Command: node
Args: /Users/meg/work/memo/tools/kitesurf-mcp/start.mjs

ランチャーのJavaScript構文チェックと、認証情報未設定時に明確なエラーを返すことを確認済み。

残りのセットアップ手順

  1. Cloudflare Dashboardへログインする。
  2. Account homeでAccount IDを確認する。
  3. API Tokens画面でBrowser Runを利用できるAPIトークンを作成する。
  4. ローカルで次を実行する。
cd /Users/meg/work/memo/tools/kitesurf-mcp
cp .env.example .env
  1. .envへ次の値を設定する。
CLOUDFLARE_ACCOUNT_ID=実際のAccount ID
CLOUDFLARE_API_TOKEN=発行したAPIトークン
  1. Codexを再起動するか、新しいタスクを開始する。
  2. 次のような依頼で接続を確認する。
Kitesurfを使って https://example.com を開き、
ページタイトルと主要リンクを取得してください。

決定・学び

  • Kitesurfは検索エンジンではなく、ブラウザ操作ツールとして扱う。
  • 一般的なキーワード調査はWeb Searchを優先する。
  • Kitesurfは動的ページや操作が必要なページへのフォールバックにする。
  • 個人利用の試行ではWorkerをデプロイしない。
  • 互換性確認はまずPlaygroundで行う。
  • APIトークンはローカル.envに置き、GitとMCP設定引数へ埋め込まない。
  • 長時間認証、動画、WebGL、強いBot対策にはKitesurfを選ばない。

成果物・参照先

  • ローカルREADME:/Users/meg/work/memo/tools/kitesurf-mcp/README.md
  • MCPランチャー:/Users/meg/work/memo/tools/kitesurf-mcp/start.mjs
  • 環境変数雛形:/Users/meg/work/memo/tools/kitesurf-mcp/.env.example
  • Kitesurf Playground
  • Cloudflare Dashboard

未解決事項

  • Cloudflare Account IDは未設定。
  • Browser Run APIトークンは未発行または未設定。
  • Kitesurfへの実接続テストは未実施。
  • 実際に調査したい対象サイトでの互換性は未確認。
  • Kitesurf Betaの料金と制限は今後変更される可能性がある。

出典