browser-buddy について
Browser Buddyは、ユーザーがログイン済みのChromeプロファイルを通じてコーディングエージェントにページを読ませるローカルブリッジです。アクティブタブやバックグラウンドで開いたURLからテキストを抽出し、ブラウザー操作機能は提供しません。
主な機能
- 01アクティブタブのテキストを取得
- 02バックグラウンドタブでURLを開いて読み取り
- 03既存のChromeプロファイルとログイン状態を利用
- 04ドメイン許可リストで開くURLを制限
- 05クラウドやAPIキー不要のローカルブリッジ
活用シーン
- 01既存のログインが必要なページを読む
- 02現在のタブのテキストをエージェントに渡す
- 03バックグラウンドタブで取得後にタブを閉じる
- 04URLへのアクセスを許可ドメインに限定
MCP 対応
ローカルMCPサーバーはstdio経由で`read_active_tab`と`open_and_read_url`を公開します。PythonホストとChrome拡張を通じてリクエストを中継し、抽出したページテキストをMCPクライアントに返します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
2掲載時のツール一覧 · 2 週間前に更新
このツールにパラメーターはありません。
詳細
Browser Buddy
コーディングエージェントが、ログイン済みのあなたの実際のブラウザーでページを読めるようにします。
Claude Code の WebFetch は、多くのサイトで 403 エラーになります。ドキュメントを開いたり、Reddit のスレッドを確認したり、GitHub のイシューを見たりするよう頼んでも、403 エラーが返ってきます。サーバー側のフェッチャーには、あなたの Cookie、ログイン情報、セッションがないためです。
Browser Buddy は、小規模なローカル MCP ブリッジです。Chrome 拡張機能(Manifest V3)が Python のネイティブメッセージングホストと通信し、ホストは 2 つの MCP ツールを提供します。エージェントは、ログイン済みでボットチェックも通過した、あなたに見えているのとまったく同じページを読み取れます。ページがあなたのマシンから出るのは、エージェントのコンテキストに渡されるときだけです。
標準ライブラリのみを使用します。依存関係も、クラウドも、API キーも不要です。
ツール
| ツール | 内容 |
|---|---|
read_active_tab | アクティブな Chrome タブから、読み取り可能なテキスト(URL、タイトル、整形済みの本文)を抽出します |
open_and_read_url | 実際のプロフィール(Cookie/ログイン情報)を使って URL をバックグラウンドタブで開き、テキストを抽出してタブを閉じます |
アーキテクチャ
┌─────────────┐ MCP (JSON-RPC 2.0 ┌──────────────────┐ Unix socket ┌───────────────────┐ Native Messaging ┌────────────────┐
│ Claude Code │ ── over stdio, NDJSON ──▶ │ browser_buddy_mcp │ ── NDJSON ──▶ │ browser_buddy_host │ ── 4-byte LE ──▶ │ Chrome extension │
│ │ ◀────────────────────── │ .py │ ◀──────────── │ .py │ ◀── JSON ─────── │ (your profile) │
└─────────────┘ └──────────────────┘ └───────────────────┘ └────────────────┘
▲ │ │
│ │ one request per socket connection; │ chrome.tabs +
└──────── page text lands here ──────────┘ host routes replies by request id │ chrome.scripting
▼
real logged-in page
- 拡張機能(
extension/):MV3 サービスワーカーです。ホストへのchrome.runtime.connectNativeポートを永続的に保持し、自動再接続します。実際のタブに対してread_active_tab/open_and_read_urlを実行し、抽出したテキストを送り返します。 - ホスト(
host/browser_buddy_host.py):Chrome によって起動されます。拡張機能(長さプレフィックス付き stdio)と MCP サーバー($TMPDIR/browser-buddy/browser-buddy.sockの Unix ソケット)を中継します。リクエストを ID で対応付け、タイムアウトは 90 秒です。 - MCP サーバー(
pypi/browser_buddy_mcp.py):手書きの JSON-RPC 2.0 を stdio 経由で使用します(mcpパッケージは不要です)。ツール呼び出しをホストに転送し、ページのテキストを MCP のcontentとして返します。
インストール
1. 拡張機能を読み込む
chrome://extensionsを開き、Developer mode を有効にします。- Load unpacked →
extension/フォルダーを選択します。 - 「Browser Buddy」の下に表示される拡張機能 ID をコピーします。
2. ネイティブホストを登録する
cd host
./install.sh <paste-extension-id-here>
これにより、browser_buddy_host.py を指す com.browserbuddy.host.json が Chrome の NativeMessagingHosts ディレクトリ(Linux/macOS)に書き込まれます。Chrome を再起動し、拡張機能のサービスワーカーコンソールを開くと、[browser-buddy] native host connected と表示されます。
3. MCP サーバーを Claude Code に追加する
claude mcp add browser-buddy -- python3 /absolute/path/to/pypi/browser_buddy_mcp.py
または、~/.claude.json/プロジェクトの .mcp.json に追加します。
{
"mcpServers": {
"browser-buddy": {
"command": "python3",
"args": ["/absolute/path/to/browser-buddy/pypi/browser_buddy_mcp.py"]
}
}
}
Python 3.9 以降が必要です。pip でのインストールは不要です。公開済みのパッケージをインストールすることもできます:pip install browser-buddy-mcp(pypi/ からビルドされています。browser-buddy-mcp コマンドがエントリーポイントです)。
デモ
- 通常使用している Chrome で、WebFetch ではアクセスできないサイト(非公開の GitHub イシュー、ログイン必須のドキュメントなど)にログインします。
- Claude Code で「browser-buddy を使って、アクティブなタブを読んで」と指示します。
- または「browser-buddy の open_and_read_url を使って、 を読んで」と指示します。バックグラウンドタブが開き、テキストが抽出されると、タブは自動的に閉じます。
スクレイピング API(Firecrawl など)を使わない理由
ベンダー提供のスクレイパー(Firecrawl など)は、ページをサーバー側で取得します。あなたの Cookie を持たず、SSO/2FA/ログイン画面を通過できず、アカウントにログインしたあなたに見える内容も確認できません。また、ページごとに料金がかかります。公式の Claude in Chrome は反対に、ブラウザーを完全に自律制御できますが、ツール呼び出しのたびに権限ダイアログが表示され(1 セッションで数十回)、Chrome ウェブストアでの評価は 2.7 星です。
Browser Buddy はその中間を選びます。**すでにログインしているブラウザーから、読み取り専用でアクセスします。**認証情報がマシンの外に出ることも、ページごとに料金が発生することも、ダイアログが何度も表示されることもありません。「エージェントに、自分に見えているものを見せる」だけです。
制限事項(正直にお伝えします)
- Chrome/Chromium のみです。 拡張機能がすべての仕組みです。Chrome がなければツールも使えません。
- 設計上、読み取り専用です。 テキストを抽出しますが、クリック、入力、フォームへの記入は行いません。信頼性を高めるための仕様ですが、CAPTCHA や対話型のゲートは回避できません。
- テキスト抽出はヒューリスティックに基づくもので、完全な可読性エンジンではありません。 複雑な SPA でも通常は動作します(読み込み後、落ち着くまで少し待機します)が、特殊なレイアウトではノイズが抽出されることがあります。
- 実際のプロフィールは、現実のリスク範囲です。 エージェントは、ブラウザーから見えるすべての情報を見ることができます。タブを読み取るエージェントのセッションを信頼できる場合にのみ、インストールしてください。
- MV3 サービスワーカーは一時的にしか動作しません。 拡張機能はネイティブポートに自動で再接続しますが、コールドスタート時には最初の呼び出しに約 1 秒かかることがあります。
- エージェントであれば、ソケット接続ごとに一度に 1 件のリクエストで問題ありません。並行してスクレイピングする大規模な環境向けには作られていません。
- 長いページは 60k 文字で切り詰められます(
(truncated)と表示されます)。
セキュリティ:ドメインの許可リスト
open_and_read_url は、URL を実際にログインしているブラウザーで開きます。プロンプトインジェクションを仕込まれたページが、エージェントをメールやその他の機密性の高いサイトへ誘導する可能性があります。エージェントが開けるドメインを制限してください。
// ~/.config/browser-buddy/config.json
{
"allowed_domains": ["github.com", "stackoverflow.com"]
}
項目はドメインとそのサブドメインに一致します(docs.github.com は github.com によって対象になります)。リストが空の場合(デフォルト)は、任意の URL が許可されますが、サーバーはリストの設定を推奨する警告をログに記録します。リストにない URL は、開かれる前に拒否されます。read_active_tab には影響しません。このツールが読み取るのは、ユーザーがすでに開いているタブのみです。
開発
python3 tests/test_smoke.py # 25 tests: framing, bridge routing, MCP handlers,
# socket dir, domain allowlist
node --check extension/background.js
ライセンス
MIT — LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。