Browser Mcp について
Browser MCP は、ログイン済みの Chrome をエージェントが操作するためのローカル MCP サーバーと Chrome 拡張機能です。重要な操作で人の承認を求められ、複数エージェントを別々のタブグループで管理できます。
主な機能
- 01ログイン済みの Chrome セッションを操作
- 0240種類のブラウザツール
- 03重要な操作で人の承認を取得
- 04Gmailからメールのログインコードを取得
- 05複数エージェント用の色分けタブグループ
活用シーン
- 01認証済みサイトでの作業を自動化
- 02メールコードが必要なログインの完了
- 03CAPTCHAや認証情報の入力時に一時停止
- 04Webアプリの登録フローをテスト
MCP 対応
ローカル MCP サーバーが MCP クライアントにブラウザ操作機能を提供し、Chrome 拡張機能がブラウザを制御します。クライアントは、ユーザーへの確認やタブ切り替えを含むブラウザツールを呼び出せます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
40掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| url | string | はい | 移動先の URL |
| new_tab | boolean | いいえ | 現在のタブを再利用せず、新しいタブで開きます(デフォルト:false) |
詳細
Agent360 の Browser MCP
停止してあなたに確認できるブラウザツールです。 2FA コード、CAPTCHA、あなたにしかできない選択が必要なときは、あなた自身の画面で確認を求め、その後、同じログイン済みの Chrome で処理を続行します。
すでにログインしている Chrome を操作します。ログイン手順が失敗することも、API キーを設定する必要も、すべてのアカウントで見知らぬ新しいプロファイルを使う必要もありません。最大 20 のエージェントを同時に実行でき、それぞれが色分けされた独自のタブグループを使います。ツールは 40 個、MIT ライセンスで、お使いのマシン上で動作します。
→ 突破できるものとできないもの - すべての障壁を、実測済み、仕様によるもの、未対応、対応しないものに分類しています。まだ解決できていないものも含まれます。
Browser MCP を使うと、Claude Code(および Cursor や VS Code のエージェントモードなど、ローカルサーバーを実行する MCP クライアント)から、実際に使用している Chrome を操作できます。Cookie、セッション、2FA をそのまま使うため、Playwright や Puppeteer がブロックされる CAPTCHA、2FA、ボット対策サイトでも動作します。実際にあなた自身がブラウジングするからです。
最大の特長は、ログイン画面に到達したら Gmail を開いて確認コードを読み取り、サインインを続けられることです。メール API の設定は不要です。API のないプラットフォームを操作したり、自分のウェブアプリをエンドツーエンドで QA したり、ダッシュボード、LinkedIn、Reddit を人間のペースで使ったりできます。機密性の高い手順はあなたが承認します。
ツールは 40 個。reCAPTCHA v2 のチェックボックスを自動クリックし、その他は人間が対応できるフォールバックを備えています。複数のセッションを色分けされたタブグループで管理できます。MIT ライセンスで無料、お使いのマシン上で動作します。アカウント不要、テレメトリなし、当社に送信されるデータもありません。
4つのステップで完了
手作業は避けたいですか? これを AI アシスタント(Claude Code、Cursor、Codex、VS Code、Windsurf、Cline)に貼り付けると、自動でセットアップされます:
Browser MCP をセットアップしてください。https://browsermcp.dev/llms-install.md を読み、実行中の AI クライアントに合わせて手順に従ってください。私にしかできない手順は1つだけあります。どの手順か教えて、私の返事を待ってください。私が確認したら、
browser_list_tabsを呼び出して、両方の連携ができていることを確かめてください。URL を開けない場合:
npx @agent360/browser-mcp install
これは、以下の4つの手順で手作業で行う場合と同じガイドを読みます。どちらの場合も、1つだけあなたが行う必要があります。Chrome では拡張機能を自動でインストールできないため、1回だけ自分で読み込みます。
1 - Chrome 拡張機能をインストールします。 Chrome ウェブストアからワンクリックでインストールでき、Chrome が最新の状態に保ちます。ストアを利用できない場合は、以下の展開済み拡張機能のインストール方法をご覧ください。
2 - MCP サーバーを追加します。 ターミナルに貼り付けます。必須です。拡張機能だけでは何もできません:
claude mcp add --scope user browser-mcp -- npx @agent360/browser-mcp@latest
3 - Claude Code を再起動します。 これでサーバーが起動します。ステップ4までは拡張機能にバッジが表示されません。サーバーがポートを取得するのは、エージェントが初めてブラウザーを実際に使うときだけです。その時点で、接続中のエージェント数を示す緑色のバッジが表示されます。それまではアイコンに何も表示されないのが正常です。(アイコン自体の色は変わりません。緑色になるのはバッジです。)
4 - 動作確認のため、こう伝えます。 Claude Code に貼り付けます:
example.com を開いて、スクリーンショットを撮ってください。
"ブラウザーにアクセスできません" ではなく、画像が返ってきます。これで完了です。利用を開始できます。 → 他にできること
Cursor、VS Code、Codex、または Windsurf をお使いですか?同じサーバーを使いますが、設定は各クライアント固有のものになります。冒頭のプロンプトで設定するか、browsermcp.dev/docsをご覧ください。以下は詳細な手順です。
詳細な手順 - インストール方法
Browser MCP は2つの要素で構成され、どちらも必要です: Chrome 拡張機能(ブラウザーを操作します)とローカル MCP サーバー(エージェントが実際に通信する相手です)。拡張機能だけをインストールしても(たとえば Chrome ウェブストアから直接インストールしても)、接続先のサーバーがないため、"未接続" のままになります。Chrome からサーバーをインストールすることはできず、npm から拡張機能をインストールすることもできません。そのため、2つの手順が必要です。
ステップ1:MCP サーバーを Claude Code に登録する
claude mcp add --scope user browser-mcp -- npx @agent360/browser-mcp@latest
これは Claude Code 独自の MCP コマンドなので、Claude Code が実際に読み込む設定にエントリーが追加されます。--scope user を指定すると、すべてのプロジェクトで利用できるようになります。
ステップ2の展開済み拡張機能のインストールで使う拡張機能ファイルをディスクに保存しますか?その場合は、こちらも実行します:
npx @agent360/browser-mcp install
拡張機能を ~/.browser-mcp/extension/ にコピーし、そのパスをターミナルに表示します。コピーしてください。(Claude Code、Codex、VS Code、Cursor が見つかった場合は、それらにもサーバーを登録します。)
ステップ2:Chrome に拡張機能を読み込む
Chrome では npm から拡張機能を自動インストールできないため、手動で1回読み込みます。後で更新するには、インストールコマンドを再実行して拡張機能を再読み込みしてください(最新の状態に保つを参照)。拡張機能を自動更新したい場合は、Chrome ウェブストアからのインストールをおすすめします。
- Chrome を開き、アドレスバーに
chrome://extensionsと入力します - 「デベロッパー モード」をオンにします(右上)
- 「パッケージ化されていない拡張機能を読み込む」をクリックします(左上の「拡張機能をパッケージ化」の隣)
~/.browser-mcp/extension/に移動し、「選択」をクリックします- Mac の場合:ファイル選択画面で
Cmd+Shift+Gを押し、~/.browser-mcp/extension/を貼り付けて、Enter を押します - Windows の場合:アドレスバーに
%USERPROFILE%\.browser-mcp\extension\を貼り付けます(Windows ではまだ検証できていません。自動テストが通らないためです) - Linux の場合:パス欄に
~/.browser-mcp/extension/と入力します
- Mac の場合:ファイル選択画面で
- 新しい MCP サーバーを読み込むため、Claude Code を再起動します
これで完了です。Browser MCP のアイコンがツールバーに表示され、40個のブラウザーツールを Claude Code で利用できるようになります。
代替方法:手動で zip をダウンロードする(npm を使わない場合)
npm を使いたくない場合は、拡張機能を直接ダウンロードしてください。
- 最新の GitHub リリースから拡張機能の zip をダウンロードします(
agent360-browser-mcp-<version>.zip)。 - ファイルを解凍します(場所は自由です。例:
~/Downloads/browser-mcp-extension/)。 - 上記のステップ 2 に従いますが、
~/.browser-mcp/extension/の代わりに解凍したフォルダーを選択してください。 - サーバーを登録します。
claude mcp add --scope user browser-mcp -- npx @agent360/browser-mcp@latestを実行するか、~/.claude.jsonに手動で以下を追加してください。{ "mcpServers": { "browser-mcp": { "command": "npx", "args": ["@agent360/browser-mcp@latest"] } } }
Chrome ウェブストア(デベロッパーモード不要、自動更新される拡張機能)
これはステップ 2 のみを置き換えます。ステップ 1 は引き続き必要です。
- Chrome ウェブストアから拡張機能をインストール →します。デベロッパーモードを切り替える必要はなく、Chrome が自動で最新の状態に保ちます。
- MCP サーバーを登録します。
(Cursor / VS Code / Codex の場合は、それぞれのクライアント独自の MCP 設定を使用してください。詳しくはこちらをご覧ください。)claude mcp add --scope user browser-mcp -- npx @agent360/browser-mcp@latest - Claude Code を再起動します。
ステップ 2 を省略すると、拡張機能のアイコンは**「未接続」**のままになります。これは MCP サーバーがないことを示すもので、拡張機能の故障ではありません。
接続できました。次は何をしますか?
依頼するまでは何も起こりません。新しいツールで最も難しいのは、何を頼めばよいかを知ることです。以下のいずれかをエージェントに貼り付けてください(example.com とある箇所は、ご自身のサイトに置き換えてください)。
| こう頼んでください | わかること |
|---|---|
| 「example.com を開いて、スクリーンショットを撮って。」 | まずはこちらから。 *「ブラウザーにアクセスできません」*ではなく画像が返ってくれば、両方が通信できています。これがインストール全体のテストです。 |
| 「Gmail を開いて、最後の 3 通のメールの送信者を教えて。」 | 違いがわかる例です。すでにサインインしているあなたのブラウザーを使うので動作します。新しいヘッドレスブラウザーでは、ここでログイン画面が表示されます。 |
| 「分析ダッシュボードに移動して、今月の数値を取得し、表にまとめて。」 | この Chrome でサインインしているダッシュボードを使います。API キーもエクスポートも不要で、事前に連携機能を構築する必要もありません。 |
| 「example.com/signup の登録フォームに私の情報を入力して。機密性の高い操作をする前に止まって、確認して。」 | あなたが操作に関与し続けられます。エージェントは、パスワードや支払い情報など、単独で判断すべきではないことについて、処理を一時停止して確認できます。 |
| 「app.example.com にログインして。コードがメールで届いたら、Gmail を開いてコードを読み取り、続けて。」 | メール API の設定が不要な方法です。Gmail を開いてワンタイムコードを読み取り、ログインを完了します。 |
| 「実際のユーザーとしてアプリの登録フローを一通り試し、問題が起きる箇所を教えて。」 | ユーザーが利用するのと同じブラウザーで、自社製品のエンドツーエンドの QA を実行します。 |
パターンは、すでにサインインしているサイトで、自分なら行う多くのブラウザー操作を任せることです。 API がない場面、つまり社内ダッシュボード、管理パネル、ポータル、LinkedIn で特に力を発揮します。便利なものができましたか?ギャラリーに追加しましょう。
これを Playwright MCP / BrowserMCP より選ぶ理由
| Browser MCP | Playwright MCP | BrowserMCP.io | |
|---|---|---|---|
| ブラウザー | 拡張機能経由で、お使いの本物の Chrome | デフォルトでは永続プロファイル、または専用の拡張機能経由でお使いの Chrome | お使いの本物の Chrome |
| メンテナンス状況 | 活発にメンテナンスされています。最新リリースは v1.30.3(2026-10-15) | 活発にメンテナンスされています(Microsoft) | 最終コミットは 2025 年 4 月 |
| ログイン/Cookie | 既存のセッションを使用 | 永続プロファイルにより、実行の間もログイン状態を維持 | 認証済みの状態で使用可能 |
| 複数のエージェントで、1 つのログイン済みプロファイルを共有 | 同時に 20 個。それぞれに色分けされたタブグループがあります | こちらも対応しています。拡張機能により、接続した各クライアントに専用の色付きタブグループが割り当てられます | 1 つのセッション |
| 人間の介在 | browser_ask_user:2FA、CAPTCHA、認証情報の入力 | なし:ドキュメントに記載された 72 個のツールのうち、人に問い合わせられるものはありません(2026-09-19 に確認) | なし |
| トークン検索ガイド | 組み込みで 9 種類(Stripe、HubSpot、Slack など) | なし | なし |
| CORS の回避 | 拡張機能のバックグラウンドから browser_fetch を実行 | 該当なし | 限定的 |
| ネットワーク監視 | CDP 経由の browser_wait_for_network | 組み込み | なし |
| CSP が厳格なサイト | Chrome Debugger API を全体で使用 | 動作します | 限定的 |
| カスタムドロップダウン | Angular Material、React Select に対応 | 動作します | 限定的 |
| インストール | claude mcp add + Chrome ウェブストアから拡張機能をインストール | npx @playwright/mcp | npx @browsermcp/mcp + Chrome ウェブストア |
他のすべてを阻むページ
ヘッドレスブラウザーでは失敗する場面でこれが動作するのは、何かをすり抜けるからではありません。 すり抜けるものが何もないからです。お使いの Chrome、セッション、同意状態をそのまま利用します。残るのは難しい部分、つまり、構築方法が原因であらゆる自動化に抵抗するページです。
各リリースは、まさにそうしたページに対応できるかを実際の Chrome で検証するフローテストを通過する必要があります。全 40 個のツールをテストし、拡張機能が実行している Chrome がリリース対象のものかどうかも確認します。同じバージョン番号の別のコピーでは通過できません。実際に発生する失敗は、正直に報告されます。前面に表示されていないタブにはマウスイベントが届かず、その場合、ツールは成功したとは報告せず、その旨を伝えます。テストの対象は次のとおりです。
- 厳格な CSP - ナビゲーション、読み取り、実行、待機、クリックはすべて引き続き動作します(スクリプトは Chrome Debugger API 経由で実行され、スクリプトの挿入がブロックされた場合は、その他の処理も同 API にフォールバックします)
- クロスオリジン iframe - 内部を確認し、その中に到達できます
- シャドウ DOM - セレクターでその内部まで到達できます
- 制御された入力欄 -
fillで React スタイルの制御されたフィールドに入力できます - 正確性の確認 -
clickは 0×0 の要素をクリックせず、代わりにその旨を伝えます。また、ページがイベントを受け取らなかった場合もその旨を伝えます
既知の制限事項:表示していないタブでの操作
表示していないタブでも、エージェントは移動、読み取り、スクリーンショットの撮影、スクリプトの実行、クリック、および CSS セレクターで見つけたフィールドへの入力ができます。Chrome は、ウィンドウ内で表示されていないタブにはマウスイベントやキーボードイベントを送信しないため、キー入力、ホバー、ダブルクリック、右クリック、座標を指定したクリック、コンボボックスへの入力、および テキスト で見つけたフィールドへの入力はすべて、その旨を示すエラーで失敗します。その場合、エージェントは browser_switch_tab を呼び出して、そのタブをウィンドウ内でアクティブにできますが、1.30.2 以降は Chrome を手前に表示しません。そのため、Chrome を手前に表示する必要がある入力は、引き続き失敗する場合があります。その場合、エージェントはまずユーザーに確認します。bring_to_front: true を指定した場合に限り、Chrome が手前に表示されます。他のウィンドウに覆われたウィンドウのスクリーンショットも、Chrome を手前に表示する代わりに window-covered を返します。
これらのツールは Chrome の応答を鵜呑みにせず、ページが実際にイベントを受け取ったかどうかを測定するため、バックグラウンドタブでは、失敗を隠すことなく正直に報告します。(1.29.2 で導入されました。使用中のリリースについては CHANGELOG.md をご覧ください。)
完全に手を介さないバックグラウンド入力は 1.30 の機能には含まれず、修正することもできません。Chrome は、ウィンドウ内で表示されていないタブにはマウス入力もキーボード入力も送信しません(実測済み)。OS のフォーカスがないウィンドウのアクティブタブに入力が届くかどうかは、デスクトップ版 Chrome では測定されていないため、ツールが返す landed の結果で判断してください。一部はまったく解決できません。CSS の :hover はレンダラーが管理する状態であり、スクリプトで偽装することはできません。スクリプトからディスパッチされたイベントが isTrusted になることはありません。elementFromPoint はクロスオリジンの iframe で止まり、実際のダブルクリックで行われるテキスト選択は、イベントではなくブラウザーの動作です。
最後のグループが最も重要です。成功したとひそかに報告するツールは、失敗するツールよりも厄介です。なぜなら、その結果をもとに次の処理を進めるからです。まだ十分に対応できていない点については、記録に残しています。#19をご覧ください。
2026-09-07、さらに2026-09-19に訂正しました。 この表には以前、Playwright MCP はヘッドレスで、毎回ログインが必要だと記載していました。これは誤りでした。また、当時「維持されている制限」と呼んでいた、同じプロファイルで複数のクライアントが競合するという記述も誤りでした。この制限が該当するのは、同プロジェクトの永続プロファイルモードです。また、同プロジェクトの Chrome 拡張機能では、接続したクライアントごとに色分けされたタブグループが明示的に割り当てられます。これは、こちらの行で説明しているものと同じ仕組みです。1 つのページは訂正しましたが、同じ誤りがある箇所すべては訂正できていませんでした。実際に残る制限は、人間が介在する必要があることです。これについては実測しています。Playwright MCP の README に記載されているツールは 72 個で(2026-09-19 にカウント)、その中にユーザーにコードを入力してもらうために停止して尋ねられるツールはありません。
名称について: 似た名前の
browsermcp.io(@browsermcp/mcp)は、2025 年 4 月以降コミットがない、無関係の別プロジェクトです。こちらは Agent360 による Browser MCP(@agent360/browser-mcp)で、現在も積極的にメンテナンスされています。詳細な比較 →
環境変数
すべて任意です。通常の使用に必要なものはありません。
| 変数 | 効果 |
|---|---|
BROWSER_MCP_CHECK_NPM=1 | browser_provide_feedback で、このサーバーと npm で公開されている最新バージョンも比較します。デフォルトではオフのため、呼び出しが速く、オフラインでも動作します。 |
BROWSER_MCP_EXTENSION_ID=<32-char id> | サーバーを特定の Chrome 拡張機能に固定します。Browser MCP が複数読み込まれていて、特定のセッションで常に同じものと通信したい場合に使用します。Chrome のプロファイルを区別することはできません。Chrome ウェブストアの拡張機能は、どのプロファイルでも同じ ID です。その用途には BROWSER_MCP_PROFILE を使用します。 |
BROWSER_MCP_PROFILE=<name> | 1.31 以降:拡張機能のポップアップにこの名前(「This Chrome profile」)が表示されている Chrome プロファイルを操作します。使用できるのは英字、数字、ドット、ハイフン、アンダースコアで、最大 32 文字です。BROWSER_MCP_EXTENSION_ID と併用できます(両方が一致する必要があります)。無効な値は無視されず、すべてのブラウザー呼び出しが profile-invalid を返します。Chrome プロファイルを複数使用する場合を参照してください。 |
BROWSER_MCP_TOKEN | 1.30.1 で廃止され、無視されます。サーバーの起動時にその旨が通知されます。ペアリングは 1.30.0 で導入されましたが、アクセスを制限できなかったため、誤った保護として残すのではなく取り下げられました。再設計後に復活する予定です。 |
40 個のツール
ナビゲーションとコンテンツ
| ツール | 説明 |
|---|---|
browser_navigate | URL に移動します(タブを再利用するか、new_tab=true を指定します)。「Leave site?」が表示された場合は「Stay」と回答し、その旨を通知します(beforeunload-blocked)。leave_page=true を指定すると移動します。browser_handle_dialog が設定されている場合は、どちらでもなく、その設定に従って回答します。 |
browser_get_page_content | ページのテキストまたは HTML を取得します。 |
browser_screenshot | Chrome Debugger 経由でスクリーンショットを撮影します(タブにフォーカスがなくても動作します。ウィンドウが覆われている場合は window-covered を返します)。 |
browser_execute_script | Chrome デバッガー経由で、ページ独自のコンテキスト内で JavaScript を実行します(CSP が厳格なサイトでも動作します)。 |
browser_extract_list | コンテナーをスクロールし、新しい行が現れなくなるまで、長いリストや仮想化されたリストの行を読み取ります。アクティブなタブで実際のホイールイベントを使ってスクロールするため、スクロールで読み込まれるフィード(Threads、X など)も読み込まれます。非表示のページ(バックグラウンドタブ)では、スクロール中に読み込まれるリストの処理が早期に終了し、reached_end は false になります。 |
インタラクション
| ツール | 説明 |
|---|---|
browser_click | CSS またはテキストセレクター(text=Submit、button:text(Next))を使ってクリックします。テキストセレクターでは、まず開いているモーダルダイアログ内を検索します。マウスがターゲットに届かない場合はクリックせず、covered を返します |
browser_fill | 入力フィールドに入力します(CSP が厳格なサイトでも動作します)。テキストセレクターを指定した場合、マウスがフィールドに届かなければ何も入力せず、covered を返します |
browser_press_key | キーボードイベント(Enter、Tab、Escape、修飾キー)を送信します。ctrl または meta と組み合わせると、a、c、x、v、z、y は Chrome の全選択、コピー、切り取り、貼り付け、元に戻す、やり直しのコマンドとして送信されます |
browser_scroll | 要素まで、または指定したピクセル数だけスクロールします |
browser_wait | 要素が表示されるまで待機します |
browser_hover | ツールチップやドロップダウンを表示するためにホバーします。マウスが届かない場合は covered を返します |
browser_select_option | ネイティブの <select> とカスタムドロップダウン(Angular Material、React Select)に対応します。カスタムのトリガーまたはオプションにマウスが届かない場合はクリックせず、covered を返します |
browser_set_combobox | オートコンプリート/コンボボックス:クエリを入力 → フィルタリングされたリストボックスが表示されるまで待機 → オプションをクリックします(複数値チップに対応)。遅延レンダリングされたオプションで browser_select_option が失敗する場合に使用します |
browser_set_date | 信頼性の高い日付入力:ネイティブの値設定 → マスク入力 → カレンダーピッカーの操作(MUI/AntD/react-datepicker/Lexical)を試します。日付フィールドで browser_fill が失敗する場合に使用します |
browser_dismiss_overlays | aria-label/テキスト/×文字のヒューリスティックを使って、ポップアップ/モーダル/ツールチップ/バナーをまとめて閉じます。non_critical モードでは、フォームデータを含むダイアログを維持します |
browser_handle_dialog | ネイティブの alert/confirm/prompt/「サイトを離れますか?」ダイアログを承認または閉じます。拡張機能が開いているのを検出したダイアログに応答するか、次に開くダイアログを待ち受けます(リスナーが登録される前に開いたダイアログには、ここから応答できません) |
browser_double_click | 正確なダブルクリック(信頼できるマウスの押下/解放を 2 回実行)を行います。マウスが届かない場合は covered を返します |
browser_right_click | ページレベルのコンテキストメニューを開くために右クリックします。マウスが届かない場合は covered を返します |
browser_click_xy | 最終手段:信頼できるマウスイベントを使い、ビューポート上の生の座標(CSS ピクセル)をクリックします |
browser_reattach_debugger | 復旧:現在のタブで Chrome デバッガーを強制的に切断し、再接続します |
タブとフレーム
| ツール | 説明 |
|---|---|
browser_list_tabs | セッションのタブのみを一覧表示します |
browser_switch_tab | ID でタブを切り替えます。bring_to_front: true を指定しない限り、Chrome は現在の状態を維持します |
browser_close_tab | セッションが所有するタブのみを閉じます |
browser_get_new_tab | 最も新しく開いたタブ(OAuth ポップアップ)を取得します |
browser_list_frames | ページ上の iframe を一覧表示します |
browser_select_frame | Chrome デバッガーを介して、別サイトのものも含め、指定した iframe 内で JavaScript を実行します |
データとネットワーク
| ツール | 説明 |
|---|---|
browser_fetch | 拡張機能から HTTPS リクエストを送信します(ページの CORS と CSP を回避します)。ブラウザーの Cookie は送信も保存もされません。トークンはヘッダーに渡してください。プレーンな http は 127.0.0.1 にのみ対応します |
browser_wait_for_network | 特定の API 呼び出しが完了するまで待機します |
browser_extract_token | 既知のプロバイダーの API ページを開き、そこでトークンを見つける、または作成する手順を取得します(プロバイダーは以下の 9 社)。このツール自体は何も読み取りません |
CAPTCHA の解決
| ツール | 説明 |
|---|---|
browser_solve_captcha | CAPTCHA を検出し、1 回の呼び出しにつき 1 ステップずつ処理します。reCAPTCHA v2/v3、hCaptcha、Turnstile、FunCaptcha を自動検出します。アクション:detect、click_checkbox(reCAPTCHA のチェックボックスをクリック)、click_grid(選択した reCAPTCHA のセルをクリックします。画像は返されないため、先にスクリーンショットを撮ってください)、ask_human(browser_ask_user で表示するメッセージを返します) |
Human-in-the-Loop
| ツール | 説明 |
|---|---|
browser_ask_user | 操作または回答を依頼します。ログインや CAPTCHA の解決中に脇へドラッグできる小さなカード、または 2FA コード入力欄のあるダイアログを表示します。ページから入力内容を確認できるため、そのページに属するシークレットの入力に使用します。読み込み済みのページが必要です。Chrome のエラーページや about:blank では、すぐに失敗して何も表示されません。タブをアクティブにし、最小化されたウィンドウを元に戻しますが、ほかのアプリより前面に Chrome を表示することはありません。 |
Data
| ツール | 説明 |
|---|---|
browser_get_cookies | このセッションで開いているサイトの Cookie を取得します |
browser_set_cookies | ドメインの Cookie を設定します |
browser_get_local_storage | ページの localStorage を読み取ります |
browser_set_local_storage | localStorage の値を書き込みます |
browser_console_logs | ページの console.log/warn/error メッセージを取得します |
browser_upload_file | Chrome Debugger API 経由で <input type="file"> にファイルをアップロードします(ダイアログは表示されません)。Agent360 Browser MCP 拡張機能の「ファイル URL へのアクセスを許可」が必要です。Chrome ウェブストアからインストールした場合、この設定はデフォルトでオフになっています。また、有効にすると拡張機能が任意のローカルファイルをページとして開けるようになるため、有効にするかどうかはご自身で判断してください。有効にしない場合は、ファイルを手動で添付してください。受け渡し時の「Not allowed」エラーは、Chrome がファイルアクセスを有効と確認していない限り file-access-off として報告されます |
browser_drop_file | ドロップゾーン経由でアップロードします。対象がファイル入力欄の場合はそれを使い、そうでなければその中にある非表示の <input type="file"> を使います。どちらもない場合は対象をクリックし、ネイティブのファイル選択ダイアログを捕捉します。ページ上のほかのファイル入力欄にはファイルは渡されません。回答には使用した入力欄が記載され、変更ハンドラーがファイルを検知した後にページが入力欄を空にした場合は cleared_by_page と記載されます。ゾーンに表示可能な入力欄がなく、browser_upload_file が失敗した場合に使用してください。同じ設定が必要です |
Diagnostics & feedback
| ツール | 説明 |
|---|---|
browser_provide_feedback | セルフチェックと報告を一度に実行します。接続中の拡張機能とこのサーバーを比較し、複数の Browser MCP 拡張機能が同時に接続されていないか、同じ拡張機能が複数回接続されていないか(複数の Chrome プロファイルやブラウザーからの接続など)を検出します。BROWSER_MCP_CHECK_NPM=1 を指定すると、このサーバーと npm 上の最新バージョンも比較します。この 3 つは、「急に動かなくなった」と感じるときの主な原因です。判定(current/outdated/conflict/disconnected/idle/unknown)、具体的な修正手順、本当に不足している項目に関する情報を事前入力した課題リンクを返します。ツールによって処理がブロックされると、エージェントが自動的に呼び出します |
browser_about | プロジェクト情報と、要望、ユースケース、バグを送信するための入力済みリンクを表示します。1.31 以降は、チャットに接続されている Browser MCP のインストールも一覧表示します。表示されるのは、ポップアップのプロファイル名、インストール ID、バージョンです |
複数セッションのサポート
Claude Code の会話ごとに、固有のポート(9876-9895)で独自の MCP サーバーが起動します。Chrome 拡張機能は、アクティブなすべてのサーバーに同時に接続します。
一度に20個を超えて使う必要がありますか? 範囲は設定値であり、厳密な上限ではありませんが、両方の側で一致させる必要があります。
各チャットの MCP 設定で BROWSER_MCP_MAX_PORT を設定し、拡張機能のストレージで bmcpPorte を同じ範囲に設定してから、拡張機能を再読み込みしてください。範囲を読み取るのは起動時だけです。サーバー側だけを変更すると、チャット21は拡張機能が確認しないポートにバインドされるため、そのチャットではブラウザーが応答しなくなりますが、理由は表示されません。100で十分です。上限は200です。ポートを1つ増やすごとに、使うかどうかにかかわらず、ブラウザーは2秒ごとに拒否される接続を1回試みます。むやみに範囲を広げないでください。
Claude Session 1 ←(stdio)→ MCP :9876 ←(WS)→
Claude Session 2 ←(stdio)→ MCP :9877 ←(WS)→ Chrome Extension → Browser
Claude Session 3 ←(stdio)→ MCP :9878 ←(WS)→
- セッションの分離 - 各セッションに色分けされた Chrome タブグループが割り当てられます
- タブの所有権 - セッションは自分のタブのみを表示および操作できます
- 自動クリーンアップ - Claude Code が会話を閉じると、プロセスは終了します
- ポートは必要に応じて取得されます - サーバーは起動時ではなく、最初のブラウザー呼び出し時にポートへバインドし、最後のタブが閉じてから5分後に解放します。ブラウザーを一度も使わないチャットは、スロットを占有しません。
複数の Chrome プロファイル
Chrome ウェブストアの拡張機能は、どの Chrome プロファイルでも同じ ID を使うため、1.31より前はサーバーがプロファイルを区別できませんでした。拡張機能が2つのプロファイルで有効になっていると、コマンドはどちらか一方に送られ、どちらになるかは変わる可能性がありました。1.31以降は、各インストール(Chrome プロファイルごとに1つ)がインストール ID を報告し、拡張機能のポップアップにある「この Chrome プロファイル」で名前を付けられます。クライアントの MCP 設定で BROWSER_MCP_PROFILE=<name> を設定すると、そのクライアントは該当するプロファイルを操作します。
| 状況 | エージェントに返される内容 |
|---|---|
| 接続中のインストールのうち1つに名前が付いている | コマンドはそのインストールに送られ、最初のコマンド以降、チャットはそのインストールを使い続けます |
| まだ名前が付いたインストールがない | 呼び出しはまず該当するインストールを待ちます。通常は約7.5秒、ポートが直近10秒以内に開いた場合は最大約17.5秒(チャットで最初のブラウザー呼び出しの場合は、後述の2.5秒に待機時間の2倍を加えた時間)待機した後、確認できるインストールの一覧とともに profile-not-connected を返します。接続中の拡張機能がすべて1.31より古い場合は profile-routing-unsupported を返します |
| 同じ名前を持つインストールが2つ以上ある、または1つのインストールが二重に接続されている | それ以上待たずに profile-ambiguous を返します。また、BROWSER_MCP_PROFILE が指定されていない場合でも、二重に接続されたインストールは拒否されます |
| チャットが操作していたインストールが切断される | 実行中の呼び出しは従来どおり即座に失敗します。次の呼び出しは profile-disconnected を返し、その次の呼び出しから再選択します。同じインストールが間に合って再接続すれば、チャットはそのまま続行します |
BROWSER_MCP_PROFILE が指定されていない | 従来どおり、最も新しい拡張機能が最初に選ばれます。複数のインストールがある場合、次の応答でどのインストールが選ばれたかが示され、チャットはそのインストールを使い続けます |
チャットの最初のブラウザー呼び出しでは、ポートが開いてから約2.5秒待って選択します。これにより、すべての Chrome プロファイルが接続するためのスキャン(2秒ごとに実行)を1回行えます。この待機がなければ、たまたま最初に接続したプロファイルが何も通知されずに選ばれる可能性があります。アイドル状態のマシンでは、余裕は約0.5秒です。たとえば高負荷のマシンなどで、それより遅れてスキャンするプロファイルは最初の選択で見逃されることがあります。その場合、チャットは実際に接続したプロファイルを使い続けます。これらのエラー応答では、いずれも Chrome には何も送信されていません(sent: false)。また、サーバーが独自に別のプロファイルへ切り替えることもありません。チャットが使っていたインストールが切断された時点ですでに待機中だった呼び出しも、profile-disconnected を受け取ります。browser_about には接続中のインストールが表示されます。ポップアップで名前を変更しても、接続や実行中の呼び出しは切断されません。すでにそのインストールを操作しているチャットは、引き続きそれを操作します。名前は選択用のものであり、キーではありません。拡張機能の挨拶には署名がなく、マシン上の別のプログラムがどの名前でも名乗ることができます(下記のセキュリティを参照)。
エージェントを別のマシンで実行する
この拡張機能は意図的に 127.0.0.1 にのみ接続し、リモートの
WebSocket には接続しません。MCP ゲートウェイをブラウザーとは別のマシンで実行している場合は、SSH で
ポート範囲を転送してください。
以下は、まさにこの問題に遭遇して解決した @bkuri さんが
提供した手順です。Linux と systemd が必要です。ローカルに autossh がインストールされており、サーバーに公開鍵が登録済みである必要があります。
# ~/.config/systemd/user/browser-mcp-tunnel.service
[Unit]
Description=SSH tunnel for browser-mcp WebSocket (ports 9876-9895)
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/bin/sh -c '/usr/bin/autossh -M 0 -N \
-o ServerAliveInterval=30 -o ServerAliveCountMax=3 \
-o ExitOnForwardFailure=yes -o LogLevel=ERROR \
$(for p in $(seq 9876 9895); do printf " -L %s:127.0.0.1:%s" "$p" "$p"; done) \
server-name'
Restart=on-failure
RestartSec=5
Environment="AUTOSSH_GATETIME=0"
[Install]
WantedBy=default.target
server-name を置き換えてから、systemctl --user enable --now browser-mcp-tunnel.service を実行してください。
元の手順ではポート 9876~9885 を手動で列挙していました。当時の範囲は 10 個でしたが、現在は 20 個です。そのため、上記のループでポートを生成し、次回範囲が変更されたときに古くなる リストをハードコードするのを避けています。
組み込みのプロバイダー連携
browser_extract_token はプロバイダーの API ページを開き、認証情報の検索方法や作成方法を説明します。自体は何も読み取りません。また、HubSpot、Slack、Shopify、LinkedIn では、トークンページではなく、トークンにたどり着くまでの設定ページまたはアプリ一覧を開きます。それ以外のプロバイダーには Unknown provider と応答します。
| プロバイダー | トークン形式 | ダッシュボード |
|---|---|---|
| Stripe | sk_test_... / sk_live_... | stripe.com/apikeys |
| HubSpot | pat-... | app.hubspot.com |
| Slack | xoxb-... | api.slack.com/apps |
| Shopify | Admin API token | admin.shopify.com |
| Pipedrive | UUID | app.pipedrive.com |
| Calendly | JWT | calendly.com |
| Mailchimp | ...-us1 | admin.mailchimp.com |
| OAuth Client | console.cloud.google.com | |
| Client ID/Secret | linkedin.com/developers |
アーキテクチャ
extension/
manifest.json # Manifest V3
background.js # Service worker - Chrome API dispatcher, session tab groups
offscreen.js # Persistent WebSocket bridge (multi-port scanning)
popup.html/js # Status UI - sessions, tabs, action log
mcp-server/
index.js # MCP server (stdio) + WebSocket client
tools.js # 40 tool definitions
bin/cli.js # Install CLI
仕組み
- Claude Code が起動し、stdio 経由で MCP サーバーを起動します
- 初めてツールがブラウザーを必要としたとき、MCP サーバーが最初に空いているポート(9876~9895)にバインドします
- 拡張機能のオフスクリーンドキュメントが 2 秒ごとにポートをスキャンします
- WebSocket 接続が確立されます
- コマンドは Claude Code → MCP → 拡張機能 → Chrome API の順に流れます
- Claude Code を閉じると、プロセスは自動終了します(stdin の検出)
最新の状態を保つ
Browser MCP は 2 つの部分で構成されており、それぞれ独立して更新されます。拡張機能の更新方法は、インストール方法によって異なります。
| 部分 | インストール方法 | 更新方法 |
|---|---|---|
| MCP サーバー | 任意 | 自動。 npx @agent360/browser-mcp@latest 経由で実行されるため、Claude Code のセッションごとに npm から最新のものが取得されます。特に作業は必要ありません。 |
| 拡張機能 | Chrome ウェブストア | 自動ですが、すぐには更新されません。 新しいバージョンはまず Google の審査に合格する必要があり、通常 1~3 日かかります。その後、Chrome が数時間以内にバックグラウンドで取得します。作業は必要ありませんが、今日公開された修正が今日適用されるわけではありません。 |
| 拡張機能 | 展開済み(npx … install または手動の zip) | 手動。 Chrome は展開して読み込んだ拡張機能を自動更新しません。npx @agent360/browser-mcp install を再実行し、chrome://extensions → Browser MCP → ↻ reload を開いてください。 |
どちらを使っているかわからない場合は? chrome://extensions を開いて Browser MCP を探してください。"Loaded from /path/…" という行があれば展開済み(手動更新)です。その行がなければ、Chrome ウェブストアからインストールされているため、自動更新されます。
更新の手間をなくしたい場合は? Chrome ウェブストア から拡張機能をインストールし、claude mcp add --scope user browser-mcp -- npx @agent360/browser-mcp@latest を実行してサーバーを登録してください。その後は、設定で @agent360/browser-mcp@latest を使用している限り、両方が自動的に最新の状態に保たれます。
トラブルシューティング
「Chrome 拡張機能が接続されていません」
chrome://extensionsで拡張機能が読み込まれていることを確認します- 拡張機能のポップアップをクリックし、[再接続]を選択します
- ポートスキャンが完了するまで 2~3 秒待ちます
スクリーンショットの取得に失敗する
- セッションで使用しているタブに Chrome Debugger API を使用します(タブがフォーカスされていない場合でも動作します)
- 1.29.1 以降では、表示されているタブをキャプチャするフォールバックはありません。デバッガーがフレームを取得できない場合、呼び出しは失敗します。(1.29.0 以前では、表示中のタブを使うフォールバックがありました。)
browser_reattach_debuggerを実行して、もう一度試してください
SPA でクリックが機能しない
- テキストセレクターを試してください:
browser_click("text=Submit") - Chrome Debugger API を介して、実際のマウスイベントを自動的に使用します
「許可されていません」というエラーでアップロードに失敗する
- Chrome がページにファイルを渡すのは、Agent360 Browser MCP 拡張機能で「ファイル URL へのアクセスを許可する」がオンになっている場合のみです(chrome://extensions、Agent360 Browser MCP、詳細)。Chrome ウェブストアからインストールした場合、これはデフォルトでオフになっています
- この切り替えをオンにすると、拡張機能がローカルファイルをページとして開けるようになります。オンにするかどうかはご自身で判断してください。オンにしない場合は、ファイルを手動で添付してください
- 1.30.2 以降では、ファイルの受け渡しで「許可されていません」というエラーが発生した場合、Chrome がファイルアクセスがオンであると確認しない限り、
file-access-offとして報告されます
プロセスが残っている
- Claude Code を閉じると、プロセスは自動的に終了します(標準入力の検出)
- アイドルタイムアウト:コマンドが 4 時間ない場合、自動的に終了します
- 手動でクリーンアップするには、
lsof -i :9876-9895 | grep LISTENを実行します
💡 Browser MCP を一緒により良くしていきましょう
Browser MCP はオープンに開発され、利用する人々の声を反映して作られています。
他の人の希望や成果を見る
- 💡 ウィッシュリスト → - 皆が求めている機能
- 🎯 ユースケース → - 他の人が実現したこと(LinkedIn の ICP スクレイピング、ベンダー調査、日々の業務など)
30 秒で貢献する
- 💡 機能をリクエストする
- 🎯 ユースケースを共有する
- 🐛 バグを報告する
または、Claude に尋ねてください。Claude は browser_about ツールを把握しており、「browser-mcp で……ができたらいいのに」や「私の browser-mcp のユースケースを共有して」といった言葉を伝えると、報告の下書きを作成し、内容を確認して送信するためのリンクを提示します。
役に立った場合
Chrome ウェブストアのランキングは評価に基づいていますが、私たちにはまだ評価がありません。そのため、皆さんの一言は、私たちが書けるどんな文章よりも大きな力になります。役に立った場合はレビューを投稿してください。役に立たなかった場合も、率直にお知らせください。登録も報酬もなく、何かを利用するための条件でもありません。現時点では、私たちには何の反応も届いていないのです。
Mac のほかの機能にも同じ考え方を
こちらはブラウザーを操作します。Computer MCP は macOS 上のそれ以外のすべて、つまりメニュー、ウィンドウ、Dock、あらゆるアプリのアクセシビリティツリーを操作します。基本方針も同じです。スクリーンショットを書き込む前に、パスワード欄はメモリ上で黒塗りされます。書き込みには同意確認が必要で、すべての操作は追記専用ログに記録されます。デフォルトではバックグラウンドで実行され、画面を操作できるツールは、ユーザーが要求しない限り提供されません。
npx @agent360/computer-mcp · MIT · macOS。
プライバシー
このツールの目的は、閲覧がブラウザー内にとどまることです。アカウントは不要で、ページとの間に当社のサーバーが介在することもありません。
- ページのコンテンツ - ツールがタブから読み取った内容は、設定した MCP クライアントに送られ、それ以外の場所には送られません。当社が内容を見ることはありません。
- Cookie、ローカルストレージ、トークン はデフォルトではどこにもコピーされず、サーバーにも保存されません。ただし、これらにアクセスすることはできます。3 つのツールが直接読み取り(
browser_get_cookies、browser_get_local_storage、browser_extract_token)、さらに 2 つのツールが書き込みます(browser_set_cookies、browser_set_local_storage)。また、別の方法で同じデータにアクセスできるツールが 3 つあります。browser_execute_scriptはページ内で実行され、document.cookieを読み取れます。また、browser_get_page_contentとbrowser_extract_listは、ページ自体が DOM に設定したトークンを受け取ります。これらのツールが実行されると、その値は他のツール結果と同じように MCP クライアントに送られます。それ以外の場所には送られず、当社に送られることもありません。 - 当社は何も収集しません。 拡張機能にもサーバーにも、識別情報、利用回数、クラッシュレポート、分析データはありません。
- エージェント自身のレポート。
browser_provide_feedbackは、他のツール結果と同じように、そのレポートを AI クライアントに返します。また、新しいレポートごとに、使用したマシンの~/.browser-mcp/feedback.jsonlに 1 行追加しようとします。記録されるのは、時刻、種類、ツール、エージェントが報告した内容、試したこと、最終的にうまくいったこと、ページのオリジンとパス、バージョン番号、簡単な診断、接続中の拡張機能の数、重複をスキップするためのフィンガープリントです。エージェントが記述した 3 つの項目(起きたこと、試したこと、うまくいったこと)では、メールアドレスと 6 文字以上の数字列が、ファイルと返される事前入力済みの Issue リンクの両方で、まず[email]と[number]に置き換えられます。ページのアドレスはオリジンとパスだけに切り詰められます。サーバーがレポートを送信することはありません。リンクを開くと内容が GitHub に送信されますが、Issue が作成されるのは送信した場合のみです。ファイルを削除すると消去できます。 - 拡張機能と MCP クライアントの間のブリッジは、同じマシン上の
localhostで実行されます。サーバーがネットワークにアクセスするのは、BROWSER_MCP_CHECK_NPM=1で有効にできる npm バージョンチェックの場合のみです。このブリッジは ローカルで認証されていません。同じマシン上でユーザーとして実行されている別のプログラムが接続できます。Browser MCP は、すでに実行しているソフトウェアからユーザーを保護しません。 - エージェントが送信する JavaScript(
browser_execute_script、browser_select_frame)は、エージェントのセッションのタブ内で Chrome の Debugger API(1.31)を介してのみ実行されます。これは拡張機能の一部ではなく、Chrome は拡張機能がブラウザーをデバッグしていることを通知します。browser_list_tabsは、セッションのタブのアドレスとタイトルを MCP クライアントに返します。Browser MCP が Chrome の閲覧履歴を読み取ることはありません。 - 拡張機能のポップアップで設定するプロファイル名(1.31)とインストール ID は、Chrome プロファイルを選択するためのラベルであり、認証情報ではありません。拡張機能はこれらを署名なしで、ポート範囲内のすべての Browser MCP サーバーに送信します。また、マシン上の別のプログラムが同じ名前を名乗ることもできます。ID はランダムに生成され、Chrome プロファイルごとに 1 回だけ作成され、拡張機能のローカルストレージに保持されます。どちらも
browser_aboutとprofile-*エラー応答に表示されるため、他のツールの応答と同じようにエージェントに送られ、そこからエージェントが使用するモデルプロバイダーに送られます。
ポリシー全文:https://browsermcp.dev/privacy
ライセンス
MIT - Agent360
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
