mcpField
S
Stealth Agent Browser

Stealth Agent Browser

ローカル
github.comブラウザ自動化128 週間前に更新

Stealth Agent Browser について

Stealth Agent Browserは、ウェブ閲覧やコンテンツ抽出を行うMCP対応AIエージェント向けのChromium操作サーバーです。アクセシビリティスナップショット、注釈付きスクリーンショット、ReadabilityによるMarkdown抽出を組み合わせ、プロキシも設定できます。

主な機能

  1. 01Chromiumでのウェブ閲覧
  2. 02要素参照付きアクセシビリティスナップショット
  3. 03注釈付きスクリーンショット表示
  4. 04ReadabilityによるMarkdown抽出
  5. 05プロキシとブラウザーセッションの設定

活用シーン

  1. 01ページを開いて要素を操作
  2. 02記事ページからMarkdownを抽出
  3. 03スクリーンショットでページ要素を特定
  4. 04プロキシ設定を使ったウェブ操作

MCP 対応

MCP サーバーとして、ブラウザー移動、スナップショット、クリック、入力、スクロール読み取り、セッション管理のツールを提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"ykshah1309-stealth-agent-browser": {
"command": "npx",
"args": [
"-y",
"stealth-agent-browser-mcp"
],
"env": {
"SAB_HEADLESS": "<SAB_HEADLESS>",
"SAB_STEALTH_LEVEL": "<SAB_STEALTH_LEVEL>",
"SAB_PROXY_SERVER": "<SAB_PROXY_SERVER>",
"SAB_PROXY_USERNAME": "<SAB_PROXY_USERNAME>",
"SAB_PROXY_PASSWORD": "<SAB_PROXY_PASSWORD>",
"SAB_USER_DATA_DIR": "<SAB_USER_DATA_DIR>"
}
}
}
}
起動コマンドnpx -y stealth-agent-browser-mcp
設定が必要な環境変数
SAB_HEADLESSRun Chromium headless. Default: true.
SAB_STEALTH_LEVELoff | patched | paranoid. Default: patched.
SAB_PROXY_SERVEROptional proxy URL, e.g. http://host:port.
SAB_PROXY_USERNAMEシークレットOptional proxy username.
SAB_PROXY_PASSWORDシークレットOptional proxy password.
SAB_USER_DATA_DIRPersistent browser profile directory.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmstealth-agent-browser-mcp0.2.0

ツール

13

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
urlstringはい移動先の完全修飾URL。
modeenumいいえナビゲーション後に返すスナップショットのモード。'aom' は最も低コストです。'hybrid' は Set-of-Mark 注釈付きスクリーンショットを追加します。aom | vision | hybrid
waitUntilenumいいえ待機するページライフサイクルイベント。load | domcontentloaded | networkidle | commit

詳細

stealth-agent-browser-mcp

AI エージェントにステルス性能に優れた Chromium ブラウザーと、Accessibility-Object-Model と Set-of-Mark ビジョンを組み合わせたインターフェースを提供する Model Context Protocol(MCP)サーバーです。Claude 向けに構築されていますが、MCP 互換のホストであればどれでも動作します。

  • ステルスを最優先。 rebrowser-playwright を使用して、playwright-extra クラスのステルスプラグインを回避する Runtime.Enable CDP リークにパッチを適用します。通常の Playwright では失敗する最新のボット検出テスト(CreepJS、bot.sannysoft.com)に合格します。
  • デフォルトでトークン消費を抑制。 browser_snapshot は生の HTML(100KB 以上)ではなく、Playwright aria snapshot の YAML(約 2~5 KB)を返します。すべての操作可能な要素には、アクションで直接使用できる [ref=eN] ID が付与されるため、セレクターもズレもありません。
  • 必要なときにハイブリッドビジョン。 mode: "hybrid" を指定すると、サーバーはスクリーンショット上に番号付きの赤いボックスを重ね、モデルが視覚的に対象を特定できるようにします(Set-of-Mark プロンプティング、Yang ら)。画像上の ref ID は YAML 内の ID と一致します。同期がずれるような別個の番号体系はありません。
  • 可読性に基づくコンテンツ抽出。 browser_scroll_read は JSDOM 経由で Mozilla Readability を実行し、読みやすい Markdown を返します。差分のみの返却も指定でき、変更がなければ再読み込み時のコストはかかりません。
  • プロキシに対応。 セッションごとのプロキシ認証に対応しており、レジデンシャルプロキシプールで便利です。

許可された用途に限ります。 ステルスツールには正当な用途があります(アクセシビリティ監査、自分のアカウントの自動化、所有するサイトやテスト許可を得たサイトでの QA など)。サイトの利用規約や適用される法律に違反する目的でこのサーバーを使用しないでください。SECURITY.md を参照してください。


インストール

npm install -g stealth-agent-browser-mcp
# Chromium binary is fetched automatically on first launch
npx playwright-core install chromium

または、インストールせずに npx stealth-agent-browser-mcp を実行してください。

クイックスタート(Claude Desktop / Claude Code / Cursor)

MCP 設定に追加します。

{
  "mcpServers": {
    "stealth-browser": {
      "command": "npx",
      "args": ["-y", "stealth-agent-browser-mcp"],
      "env": {
        "SAB_HEADLESS": "true",
        "SAB_STEALTH_LEVEL": "patched"
      }
    }
  }
}

ホストを再起動します。エージェントに以下のツールが表示されます。

ツール

ツール目的
browser_navigateURL に移動し、スナップショットを返します。
browser_snapshotaom(YAML のみ、最も低コスト)、vision(生のスクリーンショット)、または hybrid(YAML と Set-of-Mark スクリーンショット)。
browser_click[ref=eN] で要素をクリックします。
browser_typeref で指定した入力欄またはテキストエリアに入力します。
browser_selectref で指定した <select> の選択肢を選びます。
browser_scroll_readスクロールして Readability の Markdown を返します(デフォルトでは差分のみ)。
browser_wait_forテキストまたは ref が表示されるまで待機します。
browser_tabslist / new / close / switch。
browser_evalページの MAIN world で JS 式を評価し、JSON 結果を返します。
browser_set_proxy単一プロキシの設定を更新します(browser_restart の実行後に有効になります)。
browser_set_proxy_pool実行中にレジデンシャルプロキシプールを置き換えます(browser_restart の実行後に有効になります)。
browser_solve_captcha代替 CAPTCHA ソルバー(CapSolver / 2Captcha)。ページ上の Turnstile/hCaptcha/reCAPTCHA を検出します。
browser_restart現在の設定で、アクティブなブラウザーセッションを閉じて再度開きます。

すべてのアクションツールは、直近の AOM スナップショットに出力された ref で指定します。ref は Playwright 独自の aria-ref=eN ID であり、別個の番号体系はありません。

設定

すべて環境変数で設定します。

変数デフォルト値備考
SAB_HEADLESStrueウィンドウを表示する場合は false にします(デバッグ用)。
SAB_STEALTH_LEVELpatchedoff | patched | paranoid。
SAB_PROXY_SERVER—単一プロキシモードです。例:http://host:port
SAB_PROXY_USERNAME / SAB_PROXY_PASSWORD—
SAB_PROXY_POOL—レジデンシャルプロキシプールです。カンマ区切りの URL(http://u:p@host:port,...)または {server, username, password} の JSON 配列を指定します。
SAB_PROXY_ROTATIONper-restartper-session | per-restart | static。
SAB_PROXY_STICKY_TEMPLATE—スティッキー IP プロバイダー用のユーザー名テンプレートです。${sessionId} が補間されます。例:brd-customer-c1-zone-res-session-${sessionId}。
SAB_HUMAN_MOUSEtrueクリック前にためらいを加えたベジェ曲線のマウス移動を行います。Datadome の軌跡分析を回避します。
SAB_CAPTCHA_PROVIDERnonecapsolver | twocaptcha | none。
SAB_CAPTCHA_API_KEY—プロバイダーの API キーです。
SAB_USER_DATA_DIR—永続プロファイルディレクトリです(Cookie によって評価が蓄積されます)。
SAB_DEFAULT_TIMEOUT_MS15000アクションごとのタイムアウトです。
SAB_MAX_ANNOTATED75ハイブリッドモードでラベル付けするボックスの最大数です。
SAB_VIEWPORT_W / SAB_VIEWPORT_H1366 / 768
SAB_LOCALEen-US
SAB_TIMEZONEAmerica/New_York
LOG_LEVELinfodebug、warn などです。常に標準エラー出力に書き込みます。

アーキテクチャ

src/
├── index.ts         # Entry (stdio)
├── server.ts        # MCP server + tool registration
├── tools.ts         # Tool handlers
├── browser.ts       # Stealth Chromium launcher (rebrowser-playwright)
├── session.ts       # Per-connection browser/context/page state
├── snapshot.ts      # AOM + Set-of-Mark pipeline
├── annotate.ts      # SVG overlay compositing (sharp)
├── reader.ts        # Readability → Markdown (pierces open shadow roots)
├── fingerprint.ts   # Rotatable UA/viewport/timezone profiles
├── proxy.ts         # Residential pool + rotation + sticky-session template
├── human-mouse.ts   # Bezier-curve cursor paths (ghost-cursor math)
├── captcha.ts       # CapSolver / 2Captcha REST adapters
├── config.ts        # Zod-validated env config
└── logger.ts        # pino → stderr (never stdout)

すべてのログは標準エラー出力に書き込みます。標準出力は JSON-RPC 用に確保されています。console.log は追加しないでください。

TLS/JA3 フィンガープリント — Node レイヤーのスプーファーを使わない理由

スクレイパーでは、よく次のような要望があります。「curl-impersonate または node-tls-client を使って TLS ClientHello(JA3)を Chrome に見えるように偽装したい」

これは Node レイヤーの HTTP スクレイパー(fetch、got、axios)に当てはまります。この場合、TCP 接続は Node の OpenSSL から開始され、Chrome の BoringSSL とは異なるシグネチャを持つ ClientHello が送信されます。そのため、Cloudflare/Akamai Bot Manager は JavaScript が 1 バイトでも実行される前に、ネットワークレイヤーで接続を遮断します。

この MCP はそのようなアーキテクチャではありません。 すべてのリクエストは Chromium 経由で送信されます。Chromium の TLS スタックは Chrome の TLS スタックそのもの(文字どおり同じ BoringSSL ビルド)なので、ClientHello の JA3 は構造上、Chrome の JA3 になります。JavaScript レベルで書き換えることはできず、その必要もありません。

TLS で検出される可能性があるのは、TLS を終端して再度開始するプロキシ(MITM)を経由する場合です。レジデンシャルプロキシプロバイダー(Bright Data、DataImpulse、Oxylabs residential、SOAX)は TCP レベルでルーティングし、TLS を MITM しないため、Chromium のハンドシェイクは変更されずにオリジンへ到達します。TLS を MITM する製品には、マネージド型スクレイピングブラウザー(Bright Data の Scraping Browser、Oxylabs Web Unblocker)があります。これらは独自のヘッドレス Chrome を提供し、この MCP にレイヤーを重ねるのではなく、置き換えて使用します。

結論: rebrowser-playwright + レジデンシャルプロキシプール(P1)+ 人間らしいマウス操作(P2)を使えば、TLS フィンガープリント、CDP ランタイム、DOM サーフェス、動作レイヤーのすべてが実際の Chrome と一致します。Captcha の解決(P3)は、それでも検出されるセッションの 1~5% に対するフォールバックです。

ベンチマーク

npm run bench:stealth は、設定済みのブラウザーを公開されているボット検出テストページ(bot.sannysoft.com、CreepJS、pixelscan、BrowserLeaks WebRTC)にアクセスさせ、合否を報告します。これらは rebrowser-patches プロジェクトと Patchright プロジェクトでも使用されている同じテストハーネスです。リファレンススイートについては、rebrowser-bot-detector を参照してください。

ローカルフィクスチャを使った一般的なテスト実行結果(test/ を参照):

テスト結果
AOM YAML にすべてのインタラクティブ要素の refs が含まれている✓
hybrid モードが PNG と YAML を返し、refs が一致する✓
refs を指定した click/type で期待どおりの DOM 変更が生じる✓
Readability が記事を Markdown に抽出する✓
差分のみのスクロールを繰り返すと (no readable content change) が返る✓

比較

stealth-agent-browser-mcpplaywright-mcpbrowser-use MCPcomputer use
CDP レベルのステルス(Cloudflare/DataDome)✓✗部分的✗
アクセシビリティツリーのスナップショット✓✓✓✗
Set-of-Mark ビジョン(参照ラベル付きスクリーンショット)✓✗✗純粋なビジョン
可読性に基づくスクロールと読み取り✓✗✗✗
デフォルトでトークン消費を抑制✓✓✗✗
エージェントループを同梱✗(ホスト側のモデルが制御)✗✓✗

開発

npm install
npx playwright-core install chromium
npm run build
npm test

コントリビューション

CONTRIBUTING.md を参照してください。すべての貢献は Apache-2.0 の下でライセンスされます。

ライセンス

Apache-2.0

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。