nodriver — Chrome browser automation について
nodriver-mcp-server は nodriver で Chrome を自動化し、ページ操作、データ抽出、ネットワーク確認を行うエージェント向けの MCP サーバーです。分離されたブラウザーセッションや永続プロファイルに加え、ネットワーク分析ツールを備えています。
主な機能
- 0170 個のブラウザー自動化ツール
- 02分離されたブラウザーセッションとプロファイル
- 03アクセシビリティスナップショットとページ内容の読み取り
- 04ネットワークリクエストの確認とレスポンス保存
- 05タブ復元とログイン状態の保持
- 06CDP による Chrome 制御
活用シーン
- 01Web フォームへの入力とページ内容の抽出
- 02状態を共有しない並列ブラウザータスク
- 03ページの API 通信とレスポンスの確認
- 04実行間でログイン状態を再利用
MCP 対応
MCP クライアントに Chrome のブラウズと自動化を行う 70 個のツールを公開し、複数クライアントへのコマンドによるインストールに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx nodriver-mcpNODRIVER_HEADLESSRun Chrome headless (true/false). Default false.NODRIVER_USER_DATA_DIRExplicit persistent Chrome profile directory. Default: an ephemeral temp profile, auto-deleted per session.NODRIVER_BROWSER_PATHPath to the Chrome/Chromium executable. Auto-detected when unset.NODRIVER_PROXYProxy server address passed to Chrome as --proxy-server.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
70掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| browser | string | いいえ | 操作するブラウザーです。各名前は独立した Chrome に対応し、初回使用時に作成されます。省略すると共有のデフォルトが使われます。並列エージェントにはそれぞれ別の名前が必要です。 |
詳細
nodriver-mcp-server
AI エージェントに Chrome の作業環境をまるごと提供します。 nodriver を活用した 70 種類の MCP ツールで、ブラウジング、フォーム入力、データ抽出、ページの背後にあるリクエストの調査ができます。ログイン状態を維持し、分離されたブラウザーを並行して実行でき、自動タブ復元機能で前回の続きから作業を再開できます。Claude、Claude Code、Cursor、Windsurf、Codex などの Model Context Protocol クライアントを、1 つのコマンドでセットアップできます。
キーワード: MCP サーバー · ブラウザー自動化 · undetected chromedriver · アンチボット · Cloudflare の回避 · ウェブスクレイピング · Claude · Cursor · nodriver · chrome-devtools-mcp の代替 · Playwright/Puppeteer の代替 · AI エージェントツール。
セットアップを減らして、ブラウジングを増やしましょう
- 一度ログインすれば、次回もすぐ使えます。 永続プロファイルにより、セッション間で Cookie とログイン状態が保持されます。
- 好みの方法で開始できます。 新しいタブ、お気に入り URL のセット、または前回開いていたタブを開けます。設定はプロファイルごとに MCP 経由で行えます。
- タスクごとに専用のブラウザーを用意できます。 タブ、Cookie、選択中のページを共有せずに、最大 12 個の分離されたブラウザーセッションを実行できます。
- ページの背後にあるデータを取得できます。 アクセシビリティスナップショットの読み取り、API 通信の調査、後で検索できるようにレスポンス本文の保存ができます。
- 実際の Chrome を直接自動化できます。
undetected-chromedriverの後継である nodriver は、Selenium や ChromeDriver バイナリを使わずに CDP を使用し、一般的な自動化シグナルを減らすよう設計されています。
70 種類のツールのリファレンスをご覧いただくか、uvx nodriver-mcp で使い始めてください。
実際に検出を回避できるのでしょうか? その証拠をご覧ください
「検出されない」と主張するのは簡単です。そこで、このサーバー自身がページを操作したときに、標準的なフィンガープリントテストが報告する結果をご紹介します。1 行で再現できます。エージェントから https://bot.sannysoft.com にアクセスして、スナップショットを取得してください。
| チェック項目 | 結果 |
|---|---|
bot.sannysoft.com — Intoli + フィンガープリントテスト | 58 項目中、失敗 0 件 |
navigator.webdriver | false — 通常のブラウザーとまったく同じく、Navigator.prototype 上のブール値であり、独自のプロパティではありません |
window.chrome | 存在 |
navigator.plugins | 5 |
navigator.languages | 4 件 |
| ユーザーエージェント | Headless トークンなし |
Chrome 151/Windows 11、ヘッドフルモード、デフォルトプロファイルで測定しています。現在の機能テストスイートでは、Chrome 155 と nodriver 0.50.6 を使用しています。フィンガープリントの結果の解釈については、対象範囲と制限事項をご覧ください。
機能
- 🕵️ CDP を直接操作する自動化 — nodriver は Selenium と ChromeDriver バイナリを使用せず、一般的な自動化の兆候を減らすように設計されています。
- ☁️ Cloudflare チェックボックスヘルパー(
cf_verify、[cf]エクストラが必要)。成功するかどうかは、チャレンジとブラウザーの設定によって異なります。 - 🖼️ フレームも見落としません —
list_framesと、読み取りツールで指定できるframe引数を使えます。また、take_snapshotは各 iframe のツリーを、その iframe をホストする要素の下に挿入します。そのため、iframe 内の支払い欄や同意画面にも uid が割り当てられ、ほかの要素と同じようにクリックや入力ができます。 - 🔍 何が起きたかを示すネットワークログ — ステータス、レスポンスヘッダー、DevTools 形式のタイミング内訳(DNS、接続、TLS、最初のバイトまでの時間、ダウンロード)、各リクエストを開始したスクリプトと行、転送サイズ、リダイレクトの経路と失敗に加え、WebSocket フレームとサーバー送信イベントも記録します。500、404、リダイレクト、DNS エラーは、それぞれ別の行で表示されます。
- 💾 レスポンスをディスクにキャプチャ —
capture_bodiesは、一致するタブ、ワーカー、サービスワーカーからのレスポンスをキャプチャします。後のナビゲーションやバッファの消去によって破棄される前に保存できます。JSON インデックスには URL、POST データ、ステータス、ヘッダーが記録されます。search_bodiesで保存したトラフィックを検索できます。キャプチャのステータスには、保存した本文、スキップ、エラーが表示されます。 - 🛡️ パッシブなセキュリティレビューを標準搭載 —
audit_securityは、セキュリティヘッダー(nonce、strict-dynamic、複数のポリシーを扱う実際の CSP 分析を含む)、CORS、すべてのオリジンの TLS と証明書、Cookie フラグ、CDN が誤ったユーザーに配信する可能性のあるレスポンス、ページが通信するすべてのファーストパーティとサードパーティを検査します。また、Chrome の Issues パネルに表示される CSP 違反、混在コンテンツ、拒否された Cookie も一覧表示します。inspect_storageは localStorage、sessionStorage、IndexedDB、Cache Storage、サービスワーカーを一覧化し、そこで見つかったトークンをデコードします。export_harは Burp、ZAP、DevTools で使える HAR ファイルを書き出します。ワイヤーヘッダー、Cookie、Set-Cookie も含まれます。 - 👥 複数のブラウザーを同時に分離して実行 — 任意のツールに
browser: "agent-a"を渡すと、その名前専用の Chrome が独立したプロセスで起動し、Cookie、タブ、uid も個別に管理されます。複数のエージェントを並列実行しても、選択中のタブを互いに奪い合うことはありません。省略した場合は何も変わらず、これまでどおり、デフォルトのブラウザーがサーバープロセス内で動作します。仕組み - 🧩 ナビゲーション、入力、スナップショット、スクリーンショット、コンテンツ/PDF のエクスポート、ネットワークとコンソールの検査、デバイスエミュレーション、Cookie/ストレージ、セッション、プロファイル、パフォーマンストレースに対応する 70 個のツール。
- 🧠 コンパイラーだけでなく、エージェント向けに書かれたスキーマ — すべてのパラメーターに説明があり、固定値のオプションは実際の列挙型で定義され、各ツールには読み取り専用/破壊的操作のヒントが設定されています。重要な理由をご覧ください。
- 📄 コンパクトなアクセシビリティツリーのスナップショット(
take_snapshot)— 要素ごとの uid を含む、検索可能なページテキストです。Hacker News のトップページで測定した結果、フィルターなしの 97 KB に対して 27 KB と 72% 小さく、すべてのリンク、URL、テキストを保持しています。 同一オリジンの URL はページからの相対パスで表示されますが、ルートノードに絶対 URL が保持されるため、情報は失われません。この節約は、エージェントのすべてのステップで得られます。 - 🔗 すでにサインインしているブラウザーに接続(
use_running_browser)— 新しいブラウザーでログインをやり直す代わりに、デバッグポート経由で実際の Chrome プロファイルを操作します。 - 📱 正しい UA/クライアントヒントに対応した デバイスエミュレーション(Pixel 7、iPad)。
- ✅ 操作結果を検証するアクション —
fillは値を読み戻し、set_checkedはチェック状態を読み戻します。また、click、press_key、type_textは、入力イベントがページに届かなかった場合にその旨を報告します。実行した操作を確認できないツールは、成功を報告せず、その旨を伝えます。 - 💾 セッションの保存と復元 — 実行間でログイン状態を保持します。
- 🧬 デフォルトでは一時的、必要に応じて永続化 — 各セッションには専用の一時 Chrome プロファイルが割り当てられます。名前付きの永続プロファイルはログイン状態を保持し、起動方法を設定できます。新しいタブ(デフォルト)、指定した URL、または復元ボタンをクリックせずに前回のタブを開く方法から選べます。
- ⚡ ワンコマンドでセットアップ — 15 以上の MCP クライアントに対応しています。
インストール
# Recommended: isolated install, won't touch your global Python environment
uv tool install nodriver-mcp
# or with pip
pip install nodriver-mcp
# or run it without installing anything
uvx nodriver-mcp
1つ目と3つ目の方法では、uv が必要です。リリースではなく開発ブランチを使用するには、次のようにします。
uv tool install "nodriver-mcp @ git+https://github.com/andresolbach/nodriver-mcp-server.git@main"
公式 MCP Registry にも io.github.andresolbach/nodriver-mcp-server として登録されているため、レジストリを参照するクライアントやマーケットプレイスから直接検索してインストールできます。
上流の
nodriver>=0.50.6を使用しており、Chrome 155 でテスト済みです。uv tool installを使うと、依存関係はグローバルの Python 環境から分離されます。
ローカルに Google Chrome もインストールされている必要があります(自動検出されます)。
アップグレード
uv tool upgrade nodriver-mcp
要件とテスト済みバージョン
自動テストでは、スキーマ、ドキュメント、動作の検証に加えて、実ブラウザーでの統合テストを実行します。現在の Windows ブラウザーテスト環境は Chrome 155 / nodriver 0.50.6 / Python 3.12.11 です。CI では、macOS と Linux でもブラウザーを使わないテストを実行します。今後の Chrome または nodriver のリリースに伴い、互換性の更新が必要になる場合があります。
| コンポーネント | 要件 | 確認済みバージョン |
|---|---|---|
| Python | 3.12+ | 3.12.11 |
| Google Chrome | 最近の安定版 | 155.0.8059.79 |
| オペレーティングシステム | Windows / macOS / Linux | Windows 11 |
nodriver | >= 0.50.6 | 0.50.6 |
mcp(MCP SDK) | >= 1.26.0, < 2 | 1.26.0 |
pillow | >= 12.1.1 | 12.1.1 |
tomli-w | >= 1.0.0 | 1.2.0 |
実行時の依存関係の範囲とテスト済みバージョンは、requirements.txt に記載されています。uv tool install は分離された環境にインストールします。このリポジトリでコントリビューターがコミット済みの依存関係一式を再現するには、uv sync --locked --group dev を使用できます。
1コマンドでの MCP クライアント設定
# Interactive client selector (terminal TUI)
nodriver-mcp install
# Install to specific clients
nodriver-mcp install claude,cursor,kiro
# Uninstall
nodriver-mcp uninstall claude
# List all supported clients
nodriver-mcp --list-clients
# Print MCP config JSON (for manual setup)
nodriver-mcp --config
# Project-level config (writes to .cursor/mcp.json, .mcp.json, etc.)
nodriver-mcp install --scope project
対応クライアント: Claude Desktop、Claude Code、Cursor、Windsurf、Codex、Gemini CLI、Copilot CLI、Kiro、VS Code、Cline、Roo Code、Amazon Q、Warp、Opencode、Trae。
Claude Code の VS Code 拡張機能は Claude Code の設定(
~/.claude.json)を共有しているため、claude-codeにインストールすれば CLI と拡張機能の両方で利用できます。
手動設定
自分で貼り付ける場合は、次の設定をどの MCP クライアントでも使用できます(claude_desktop_config.json、~/.claude.json、.cursor/mcp.json、.mcp.json、…)。
{
"mcpServers": {
"nodriver": {
"command": "uvx",
"args": ["nodriver-mcp"]
}
}
}
環境変数
| 変数 | 説明 | デフォルト |
|---|---|---|
NODRIVER_HEADLESS | ヘッドレスモード(true/false) | false |
NODRIVER_USER_DATA_DIR | 明示的に指定する永続 Chrome プロファイルディレクトリ(デフォルトを上書き) | 一時プロファイル。セッションごとに自動削除 |
NODRIVER_BROWSER_PATH | Chrome 実行ファイルのパス | 自動検出 |
NODRIVER_PROXY | プロキシサーバーのアドレス | なし |
NODRIVER_BROWSER_URL | Chrome を起動する代わりに、このアドレス(例:http://127.0.0.1:9222)ですでに実行中の Chrome に接続 | 独自に起動 |
NODRIVER_ENABLE_TRANSLATE | Chrome の Google 翻訳ポップアップを再度有効にするには true を設定 | 無効 |
NODRIVER_ENABLE_EXTENSIONS | 外部からインストールされた Chrome 拡張機能(およびそのプロンプト)を許可するには true を設定 | 無効 |
デフォルトでは、自動化を開始する際にブラウザーをクリーンな状態にします。Google 翻訳のポップアップは抑制され、外部からインストールされた Chrome 拡張機能はブロックされます(「拡張機能が対応を求めています」というプロンプトが表示されません)。上記の環境変数、または実行時に set_browser_flags ツールを使って、いずれかを再度有効にできます。このツールでは、extra_args パラメーターを使って ほかの Chrome 起動フラグも設定できます(例:--lang=de-DE、--window-size=1280,800)。Chrome が呼び出しの間に閉じられたりクラッシュしたりした場合も、ブラウザーは自動で復旧します。ツールは失敗せずに再起動します。
一時ブラウザーは about:blank で起動するため、新しいタブページの通信がネットワークログに記録されません。永続プロファイルはデフォルトで新しいタブを開きますが、指定した URL を開いたり、前回のタブを復元したりすることもできます。詳しくはプロファイルを参照してください。new_page は起動時に開いた空のタブを再利用します。
拡張機能
manage_extensions は実行時に拡張機能を管理します。
manage_extensions("list")— アクティブなプロファイルにインストールされている拡張機能(名前、バージョン、ID)と現在の状態manage_extensions("on")/("off")— マスタースイッチ(--disable-extensions)を切り替えます。Chrome を再起動します。展開済みの拡張機能も対象となるため、「off」は本当に無効を意味しますmanage_extensions("load", path)/("unload", path)— フォルダーから展開済みの拡張機能を読み込み/アンロードします
拡張機能を恒久的に使うには、永続プロファイルに切り替え、そのブラウザーで Chrome ウェブストアから一度インストールして、拡張機能を有効にします。以降は起動のたびに読み込まれます。
展開済みの拡張機能には Chromium または Chrome for Testing が必要です。 公式の Chrome ビルドでは v137 で
--load-extensionが削除され、Chrome 151 の時点では--enable-unsafe-extension-debuggingもDisableLoadExtensionCommandLineSwitchの無効化も、機能を復活させません。このフラグは受け付けられますが、拡張機能は登録されないままになります。manage_extensionsはブランド付きビルドを検出し、動作したかのように装うのではなく、その旨を通知します。展開済み拡張機能を読み込む必要がある場合は、NODRIVER_BROWSER_PATHを Chromium または Chrome for Testing に設定してください。
複数のエージェント、複数のブラウザー
単独で作業するエージェントは、このセクションを読み飛ばしてもかまいません。browser 引数がなければ、従来どおりすべての処理が単一の共有ブラウザーで実行されます。
ただし、2 つのエージェントを 1 つのブラウザーに接続すると、互いに衝突します。選択中のタブを共有するため、一方が select_page を実行したりページを移動したりすると、もう一方に何も通知されないまま表示内容が変わり、もう一方が保持しているすべての uid が古くなります。エラーは発生しません。2 つ目のエージェントは、単に誤ったページに対して操作します。
そのため、すべてのツールで browser 引数は省略可能であり、まだ存在しない名前を指定すると、その場で新しいブラウザーが作成されます。
{ "url": "https://example.com", "browser": "agent-a" }
各名前は、独自のプロファイル、Cookie、タブ、スナップショットの UID、コンソール/ネットワークのキャプチャを持つ、個別のプロセスで動作する別々の Chrome を指します。分離は慎重な運用に頼るのではなく、構造によって実現されます。共有状態が残らないため衝突することはなく、Chrome がハングしたりクラッシュしたりしても、影響を受けるのはそのブラウザーだけです。
デフォルトでは追加コストはかかりません。"default" はサーバープロセス内で動作するため、2 つ目のブラウザーを開かないセッションは、従来どおり同じ単一プロセス、同じコードパスで実行されます。追加の名前を指定した場合にのみ、新たなプロセスが起動します。
| ツール | |
|---|---|
list_browsers | 開いているブラウザーを確認します。名前、Chrome の実行状態、プロファイル、タブとその URL が表示されます。何も起動せずに情報を返します。 |
shutdown_browser | 1 つのブラウザーの Chrome を終了し、その名前を解放します。close_browser は Chrome のみを終了し、次回に備えてブラウザーのプロファイルとフラグを保持します。 |
追加のブラウザーごとに、Python プロセスとフル版の Chrome が起動します。メモリ使用量はおよそ 200 MB、起動には約 1 秒かかります。デフォルトを含め、同時に最大 12 個まで開けます。同じ 名前 を共有する 2 つの呼び出し元は、同じ Chrome を共有します。分離されるのは呼び出し元ごとではなくブラウザーごとなので、並列で動作するエージェントにはそれぞれ専用のブラウザーが必要です。
プロファイル
デフォルトでは、ブラウザーを起動するたびに、作成と削除が自動で行われる新しい一時プロファイルを使って Chrome が起動します。そのため、Claude Desktop、Claude Code、VS Code 拡張機能から同時に nodriver を実行することもできます。それぞれが独立した Chrome を使うため、共有プロファイルを取り合うことはありません。設定も検出ロジックも不要で、後片付けもありません。
セッションをまたいでログイン状態を再利用する場合は、名前付きの永続プロファイルを作成して切り替えます。
list_profiles— 永続プロファイルを一覧表示し、アクティブなプロファイルを表示しますcreate_profile(name, activate=false, restore_tabs=false)— 再利用可能なプロファイルを作成します。デフォルトでは新しいタブで開始しますuse_profile(name)— 永続プロファイルに切り替えます(""/"temp"を指定すると一時プロファイルに戻ります)use_temp_profile— 新しい一時プロファイルに切り替えますdelete_profile(name)— 永続プロファイルを削除します
永続プロファイルは ~/.nodriver-mcp/profiles/<name> に保存されます。起動時はデフォルトで新しいタブが開きます。use_profile(name) でプロファイルを選択した後、MCP を通じて起動時の動作を選択します。
set_browser_flags(startup_mode="new_tab", restart=False)
set_browser_flags(startup_mode="urls", startup_urls=["https://example.com", "https://example.org"], restart=False)
set_browser_flags(startup_mode="restore", restart=False)
set_browser_flags() # read the saved choice without changing anything
各設定はそのプロファイルの nodriver-startup.json に保存され、MCP の再起動後も保持され、Chrome の起動設定より優先されます。restart=False にすると現在のタブを開いたままにして、次回のブラウザー起動時に選択内容を適用します。デフォルトの restart=True にすると Chrome をすぐに閉じるため、次の操作で新しい設定が使われます。restore を指定すると、復元確認をクリックしたり、余分な空白タブを追加したりせずに、最後に開いていたタブを再開します。MCP の選択内容が保存されていない場合は、明示的に設定された Chrome の起動設定が適用されます。一時プロファイルは引き続き空白の状態で起動し、これらの起動設定を保存できません。MCP サーバー自体を再起動した後は、use_profile(name) で同じプロファイルを再度選択してください。プロファイルの選択はサーバーセッションごとに行われます。NODRIVER_USER_DATA_DIR 環境変数を使えば、グローバルに固定プロファイルを指定することもできます。
すでにログインしているブラウザーを操作する
Chrome はユーザーデータディレクトリをロックするため、実際のログイン情報が保存されたプロファイルを二度開くことはできません。すでにそのプロファイルを開いているブラウザーに接続すれば、自動化ですべてのログイン状態を再構築する必要がありません。
最初に、Chrome を手動で起動します。
# Windows
chrome.exe --remote-debugging-port=9222 --user-data-dir="%LOCALAPPDATA%\agent-profile"
# macOS / Linux
google-chrome --remote-debugging-port=9222 --user-data-dir=~/.config/agent-profile
その後、実行時に use_running_browser(port=9222) を使って接続するか、あらかじめ NODRIVER_BROWSER_URL=http://127.0.0.1:9222 を設定しておきます。以降のすべてのツールは、そのブラウザーと実際のタブを操作します。
接続中、このサーバーが自分で起動していないブラウザーを閉じることは決してありません。close_browser とプロファイルの切り替えでは、接続を解除するだけです。自分で起動したブラウザーに戻るには、use_temp_profile または use_profile を使います。
⚠️ そのプロファイルにより、エージェントがアクセスできる範囲が広がります。 メール、銀行、会社のシステムなど、ログインしているものにはここからアクセスできます。Cookie はすべて利用可能になるためです。普段使っているプロファイルではなく、公開しても問題のないプロファイルを指定してください。
ツール(70)
ネットワークの収集は各タブで自動的に有効になります。コンソールの収集はオプトインです。list_console_messages/get_console_messageでイベントの収集を開始する場合は、enable_console_collectionを呼び出してください。これにより、デバッガーの接続を検出するサイトに対して、Runtime.enable()がデフォルトで無効のままになります。
モバイル専用サイトでは、new_page(...)またはnavigate_page(...)にdeviceを直接渡すことで、最初の実際のリクエストからモバイルのシグナルが含まれるようになります。
clickは実際のCDP入力イベントを送信するため、ページにはisTrusted=trueと認識されます。座標でイベントが配信されるため、要素を表示範囲にスクロールしてから、要素内の複数の点でヒットテストを行います。固定ヘッダーやCookieバナーが中央のピクセルを占有していることがあるためです。docs.pypi.orgでは、これが表示されているリンク54件中43件に影響します。どの点でも要素に到達できない場合は、if_coveredで動作が決まります。"report"(デフォルト)は操作を拒否して妨げとなっている要素を示し、ページには変更を加えず、セッションも検出されない状態に保ちます。"synthetic_click"は要素を直接クリックします。何に遮られていても動作しますが、ページにはisTrusted=falseと認識されます。どちらの場合も、レスポンスにはどちらの経路が実行されたかが示されるため、検出可能なクリックが通知されないまま実行されることはありません。
| カテゴリ | ツール |
|---|---|
| 複数のブラウザー(2) | list_browsers · shutdown_browser |
| 入力の自動化(12) | click · click_at · hover · fill · fill_form · set_checked · select_option · type_text · press_key · drag · upload_file · handle_dialog |
| ナビゲーション(10) | navigate_page · new_page · close_page · close_browser · list_pages · select_page · wait_for · wait_for_selector · scroll_page · scroll_to_selector |
| スナップショットとデバッグ(12) | take_screenshot · take_snapshot · get_page_content · query_selector · list_frames · evaluate_script · get_computed_styles · save_pdf · enable_console_collection · disable_console_collection · list_console_messages · get_console_message |
| ネットワークの監視(6) | list_network_requests · get_network_request · capture_bodies · search_bodies · export_har · block_resources |
| セキュリティ監査(2) | audit_security · inspect_storage |
| デバイスのエミュレーション(4) | emulate · emulate_device · reset_emulation · resize_page |
| パフォーマンス(3) | performance_start_trace · performance_stop_trace · take_memory_snapshot |
| Cookieとストレージ(5) | get_cookies · set_cookie · clear_cookies · get_local_storage · set_local_storage |
| セッション管理(3) | save_session · load_session · list_sessions |
| プロファイルとブラウザー(9) | list_profiles · create_profile · use_profile · use_temp_profile · use_running_browser · delete_profile · set_browser_flags · set_proxy · manage_extensions |
| 検出回避ヘルパー(2) | cf_verify · bypass_insecure_warning |
📖 ツールの全リファレンス → — 各ツールの正確なパラメーター、型、デフォルト値、列挙値を、稼働中のスキーマから直接生成しています。
呼び出すエージェントのために構築
MCP ツールの性能は、モデルがそのツールについて把握できる情報に左右されます。ほとんどのサーバーが渡すのは、名前と一文の説明、型指定のないパラメーターだけです。そのため、エージェントは type="url" なのか type="goto" なのかを推測し、失敗する呼び出しを試して初めて正解を知ることになります。
このプロジェクトでは、スキーマがその役割を担います。
- すべてのパラメーターに、スキーマ内で説明が付いています。クライアントに表示されるとは限らない説明文の塊に埋もれていません。70 個すべてのツールのすべてのパラメーターが対象で、例外はありません(これを確認するテストもあります)。
- 固定値を取るパラメーターは、実際の列挙型です。
navigate_page(type=…)で指定できる値は、url、back、forward、reloadに限定されています。誤った値は Chrome に届く前に検証で拒否されるため、エージェントが解釈しなければならないエラーが返ることもありません。 - 数値と配列の範囲が宣言されています。
qualityは 0~100、wait_for(text=…)には少なくとも 1 つの項目が必要です。 - 構造化パラメーターには型が指定されています。
fill_formでは、不透明なlist[dict]ではなく、{uid, value}を公開します。 - すべてのツールで動作に関するヒントが宣言されています(
readOnlyHint、destructiveHint、idempotentHint)。クライアントはこれを使って権限を分類できるため、take_snapshotは自動承認しつつ、delete_profileでは確認を求めることができます。 - 説明には、そのツールを使わないほうがよい状況が記載され、より適切なツールも示されています。
take_screenshotではtake_snapshotを優先するよう伝え、click_atではclickを案内します。
chrome-devtools-mcp との関係
このプロジェクトは nodriver と Python を使用しています。chrome-devtools-mcp は、独自に進化するツール API を持つ別の実装です。サーバーを選ぶ際は、それぞれの最新のツールリファレンスを比較してください。名前が一致していても、引数や動作が同一とは限りません。
このサーバーは performance_analyze_insight、lighthouse_audit、screencast_start/stop を実装していません。拡張機能の管理は manage_extensions から利用できますが、上記で説明した Chrome ビルドの制限を受けます。
ユースケース
- 実際の Chrome セッションを使った、構造化コンテンツの閲覧と抽出。データが API 由来の場合は、ネットワークとレスポンス本文の確認もできます。
- AI エージェントによる実際のウェブ閲覧。Claude、Cursor、Windsurf などの LLM エージェントで、ログイン、フォーム入力、クリック、ページの読み取り、スクリーンショットの撮影ができます。
- 認証が必要なワークフローの自動化と、永続プロファイルを使ったセッション間でのログイン状態の再利用。
- 脆弱なスクリーンショットの代わりに、コンパクトなアクセシビリティツリーのスナップショットを使った、LLM 主導のウェブ調査とデータ抽出。
- デバイスエミュレーション、ネットワークとコンソールの確認、パフォーマンストレースを使った、エンドツーエンド/QA テスト。
- エージェントによるブラウジングに適した、Playwright、Puppeteer、Selenium に対する検出されにくい代替手段。
FAQ
chrome-devtools-mcpの検出されない代替ツールですか? nodriverをベースに構築された代替ツールで、使い慣れたブラウザツールに加え、プロファイル機能やネットワーク機能も備えています。APIを完全に置き換えるものではなく、サイトに自動化を検出されないことを保証するものでもありません。
Cloudflareを回避できますか?
オプションのcf_verifyヘルパーは、サポート対象のCloudflareチェックボックスチャレンジへの対応を試みます。成功は保証されず、画像やテキストのCAPTCHAパズルには対応していません。
すでにchrome-devtools-mcpやplaywright-mcpを使っていますが、ブロックされ続けます。どうすれば切り替えられますか?
手動設定の下にサーバーエントリーを追加し、ツールリファレンスを確認して、ツール固有のプロンプトやスクリプトを適宜調整してください。両方のサーバーを並行して実行できます。
通常のブラウザではサイトが動作するのに、自動化環境では動作しないのはなぜですか? プロファイルやCookieの違い、自動化のシグナル、IPレピュテーション、リクエスト頻度、アプリケーションのエラーなどが原因として考えられます。ドライバーが原因だと決めつける前に、ネットワークログとブラウザーの状態を比較してください。
CAPTCHAに対応できますか?
オプションのcf_verifyヘルパーは、一部のCloudflareチェックボックスチャレンジに対応しています。画像グリッド、テキストCAPTCHA、hCaptchaのパズルには対応していません。
どのクライアントがサポートされていますか? 1つのコマンドで、15以上のMCPクライアントにインストールできます:Claude Desktop、Claude Code、Cursor、Windsurf、Codex、Gemini CLI、Copilot CLI、Kiro、VS Code、Cline、Roo Code、Amazon Q、Warp、Opencode、Trae。
複数のクライアントで同時に実行できますか? はい。デフォルトでは各インスタンスがそれぞれ一時的なChromeプロファイルを使用するため、Claude Desktop、Claude Code、VS Code拡張機能は、互いに干渉することなく同時にnodriverを使用できます。
ヘッドレスと表示ブラウザーのどちらを使えますか?
デフォルトでは実際のChromeウィンドウが表示されます。ヘッドレスにするにはNODRIVER_HEADLESS=trueを設定してください。
セッション間でログイン状態を維持するにはどうすればよいですか?
create_profileで永続プロファイルを作成し、use_profileで切り替えてください。または、save_session/load_sessionを使用してください。
Windows/macOS/Linuxで動作しますか? このプロジェクトは3つすべてに対応しています。ブラウザー統合テストはChrome 155を搭載したWindows 11で実行し、CIではブラウザーを使わないテストスイートをWindows、macOS、Linuxで実行しています。
範囲と制限事項
- 検出への耐性は、サイトと設定によって異なります。上記のフィンガープリント結果は、その環境で実施したチェックを記録したものであり、すべてのサイトへのアクセスを保証するものではありません。IPレピュテーション、リクエスト頻度、セッション状態も影響します。
cf_verifyは、サポート対象のCloudflareチェックボックスチャレンジ用のオプションヘルパーであり、汎用CAPTCHAサービスではありません。画像グリッド、テキストCAPTCHA、hCaptchaのパズルには対応していません。- これは独立したツールAPIであり、
chrome-devtools-mcpを完全に置き換えるものではありません。スクリプトやプロンプトを移行する際は、ツールリファレンスを確認してください。 - 永続プロファイルを使用できるブラウザーは、同時に1つだけです。MCPサーバーを完全に再起動した後、同じプロファイルを再開するには、
use_profileで再度選択してください。
変更履歴
CHANGES.mdを参照してください。Version 2.6.0では、プロファイルごとの起動モードを追加し、ブラウザーの正常な終了とタブの復元に関する問題を修正し、nodriverを0.50.6に更新しています。既存のネットワークキャプチャ、パッシブセキュリティチェック、分離されたブラウザーセッションも引き続き利用できます。
クレジット
Saber-CC(MIT)によるnodriver-mcpをベースにしています。ブラウザーバックエンドにはnodriver(ultrafunkamsterdam)を使用しています。一部のツール名とワークフローは、chrome-devtools-mcpから着想を得ています。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。