Skip to main content
Glama
momadhuynh04

ProBrowser

by momadhuynh04

ProBrowser

AIエージェント向けリアルブラウザ自動化MCPサーバー — アンチ検出

29ツール · 実Opera/ChromeへのCDP接続 · 人間らしい入力 · DOM + ビジョンのハイブリッド

Python MCP PhantomWright CDP Tests Platform License

機能パイプラインクイックスタート使用法設定アーキテクチャプロジェクト構造アンチ検出

🌐 言語: English | Tiếng Việt


[!WARNING] 開発・テストはArch Linuxのみ カーネル Linux 7.1.5-arch1-2 · DE: KDE Plasma 他のディストリビューション/デスクトップは未テスト — 結果は環境によって異なります。


AIエージェント(Kilo、Claude Codeなど)がModel Context Protocolを通じてユーザーの実ブラウザを操作できるようにするMCPサーバーです。ヘッドレスモードも使い捨てプロファイルもありません — エージェントはCDP経由で実行中のOpera/Chromeに接続し、すべてのセッション・Cookie・ログインを保持したまま、人間らしいタイミングとDOM優先/ビジョン・フォールバック戦略でブラウザを操作します。

✨ 機能

機能

説明

🔌 実ブラウザ制御

connect_over_cdp はポート9222で実行中のブラウザに接続します — セッション・Cookie・拡張機能は保持されます。明示的に指示がない限り、ヘッドレスや新しいプロファイルを起動することはありません。

🧰 29個のMCPツール

ナビゲーション、タブ、クリック/タイプ/ホバー/キーボード、スクロール、ドラッグ&ドロップ、DOM/テキスト抽出、JS評価、3種類のスクリーンショット、CAPTCHAツールキット、システム検出。

🕒 人間らしい入力

ガウス分布のキー間遅延(45〜75 WPM)、自然なmousedown↔mouseup間隔、三次イージングアウトのスクロール — タイミングミドルウェアとしてレイヤー化され、JSインジェクションはゼロ。

🔍 DOM + ビジョンのハイブリッド

まず構造化DOM抽出(get_domfindget_text)を実行し、DOMが不十分な場合はスクリーンショット+座標クリックをフォールバックとして使用。

🎯 位置検証

座標クリックの前に: 原点O=(x,y)で正確に交差する赤いX/Y軸と要素プローブを注釈したスクリーンショット、警告(pointer-events:none、無効、iframe)。

🧩 CAPTCHAツールキット

ナビゲーション後にreCAPTCHA/hCaptcha/Turnstile/Cloudflareを自動検出; エージェントのビジョンによる画像グリッド解決(captcha_grid → タイル選択 → solve_captcha); オプションの2Captcha API自動解決。

🗂️ タブ管理

タブの一覧表示/切り替え/開く/閉じる — 1つの実ブラウザでのマルチタブワークフロー。

🚨 実用的なエラー

すべての失敗は構造化された {error_code, error, recoverable, suggestion} を返します — TIMEOUTSELECTOR_NOT_FOUNDCDP_CONNECTION_LOSTNETWORK_ERROR

📚 自己文書化

browse_help(topic=...) はサーバー内の11トピックを提供; browse_list_tools は実行時に全カタログをミラーリング。

テスト済み

87のユニットテスト(フェイクページ、ブラウザ不要)+ 実ブラウザ統合スイート(pytest -m integration)。

Related MCP server: selenium-mcp

🏭 パイプライン

 ┌──────────┐   ┌────────────┐   ┌─────────────┐   ┌──────────┐   ┌──────────┐   ┌──────────┐
 │ CONNECT  │ → │   ORIENT   │ → │     SEE     │ → │   PLAN   │ → │   ACT    │ → │  VERIFY  │
 │ check_   │   │ navigate + │   │ screenshot  │   │ selector │   │ click /  │   │ re-read  │
 │ browser  │   │ wait idle  │   │ get_dom     │   │ or coords│   │ type     │   │ state    │
 └──────────┘   └────────────┘   └─────────────┘   └──────────┘   └──────────┘   └──────────┘
      │                                                    │
      ▼ not running                                        ▼ DOM miss
 ┌──────────────┐                              ┌──────────────────────────┐
 │ open_browser │                              │ validate_position(x, y)  │
 │ (real profile│                              │ → annotated O=(x,y) shot │
 │  + CDP flag) │                              │ → click_position(x, y)   │
 └──────────────┘                              └──────────────────────────┘

ツール実行フロー(例 browse_click):

agent call → pre-click Gaussian delay (~80ms)
           → PhantomWright Actionability Engine (visible? enabled? stable? unobscured?)
           → CDP Input.dispatchMouseEvent (trusted gesture, NOT element.click())
           → post-click pause (~150ms)
           → result JSON (+ optional verification screenshot)

自動CAPTCHA/広告オーバーレイスキャンは、browse_navigate / browse_wait のたびに実行されます。

🚀 クイックスタート

前提条件

  • Arch Linux(開発/テストプラットフォーム)— カーネル 7.1.5-arch1-2、KDE Plasma

  • Python 3.11+python --version で確認

  • Chromiumベースのブラウザ — Opera(推奨)、Chrome、Chromium、Brave

  • MCPクライアント — Kilo CLI、Claude Code、またはMCP stdioに対応した任意のクライアント

インストール

# 1. Clone
git clone https://github.com/YOUR_USER/probrowser.git
cd probrowser

# 2. Setup (venv + deps + verify)
./setup.sh
# ...or manually:
python -m venv .venv
.venv/bin/pip install -r requirements.txt

MCPクライアントに登録

kilo.json(プロジェクトルート):

{
  "mcp": {
    "probrowser": {
      "type": "local",
      "command": ["/absolute/path/to/probrowser/.venv/bin/python", "-m", "src"],
      "enabled": true,
      "timeout": 120000
    }
  }
}

Claude Codeユーザー: .mcp.json 経由で同じサーバーを使用。29個の browse_* ツールが読み込まれるようにクライアントを再起動してください。

初回実行

# Option A — start Opera yourself with CDP enabled:
opera --remote-debugging-port=9222

# Option B — let the agent do it (real profile, cookies intact):
browse_check_browser()          # → not connected?
browse_open_browser(browser="opera")

あとはエージェントに話しかけるだけ: 「YouTubeを開いてOne of These Nightsを再生して」 — エージェントが自分で接続、ナビゲーション、クリック、再生確認を行います。

💻 使用法

ツールグループ

グループ

ツール

ナビゲーションとタブ

browse_navigate · browse_wait · browse_list_tabs · browse_switch_tab · browse_open_tab · browse_close_tab

操作

browse_click · browse_validate_position · browse_click_position · browse_type · browse_hover · browse_keyboard · browse_scroll · browse_drag_drop

抽出

browse_get_dom · browse_find · browse_get_text · browse_eval

スクリーンショット

browse_screenshot · browse_screenshot_viewport · browse_screenshot_save

CAPTCHA

browse_check_captcha · browse_captcha_grid · browse_solve_captcha

システム

browse_detect_browsers · browse_check_browser · browse_open_browser

メタ

browse_help · browse_list_tools

完全なパラメータリファレンス: docs/tools-reference.md または実行時に browse_help(topic="tools-reference")

使用例

→ browse_check_browser()
← { connected: false }                      # nothing on :9222 yet

→ browse_open_browser(browser="opera")
← { launched: true, profile: "~/.config/opera", cdp_url: "...:9222" }

→ browse_navigate(url="https://youtube.com/...")
← { success: true, title: "..." }           # auto CAPTCHA scan ran here

→ browse_get_dom(search="One of These Nights")
← { count: 10, elements: [{type: "link", selector: "a[aria-label=...]"}] }

→ browse_click(selector="a[aria-label=...]")
← { success: true }

→ browse_eval(expression="() => {const v=document.querySelector('video'); return {paused: v.paused, time: v.currentTime}}")
← { paused: false, time: 3.1 }              # verified: audio is playing 🎵

スタンドアロンサーバー

PROBROWSER_CDP_URL=http://localhost:9222 .venv/bin/python -m src

⚙️ 設定

すべての実行時設定は環境変数で駆動されます:

変数

デフォルト

説明

PROBROWSER_CDP_URL

http://localhost:9222

起動時に接続するCDPエンドポイント

PROBROWSER_TOOL_TIMEOUT_MS

120000

ツール呼び出しごとの上限(共有イベントループ保護)

PROBROWSER_CAPTCHA_ENABLED

1

CAPTCHAサブシステムのマスタースイッチ

PROBROWSER_CAPTCHA_AUTO_DETECT

1

ナビゲーション後のCAPTCHA/広告の自動スキャン

CAPTCHA_API_KEY

2Captcha APIキー(テキストチャレンジの自動解決; グリッド解決はエージェントのビジョンに基づく)

PROBROWSER_CAPTCHA_MAX_WAIT_MS

60000

API支援による解決の最大待機時間

MCPクライアント側の設定(timeoutenabled)は kilo.json にあります — 意図的にgitから除外されています(.gitignore を参照)。

🏛️ アーキテクチャ

┌──────────────────────────────────────────────────────────┐
│                AI Agent (Kilo / Claude Code)              │
│        plan → browse_* tool call → evaluate → repeat      │
└───────────────────────┬──────────────────────────────────┘
                        │ MCP Protocol (stdio, JSON-RPC)
                        ▼
┌──────────────────────────────────────────────────────────┐
│              ProBrowser MCP Server (Python)               │
│   tool registry (29) → action coordinator → humanize.py   │
│        (Gaussian delays · WPM typing · scroll easing)     │
│   analyzer/: dom_parser · hybrid_strategy · captcha       │
└───────────────────────┬──────────────────────────────────┘
                        │ CDP — Input.dispatch* events only
                        ▼
┌──────────────────────────────────────────────────────────┐
│         User's Real Browser (Opera/Chrome, port 9222)     │
│            sessions · cookies · logins preserved          │
└──────────────────────────────────────────────────────────┘

主要な設計判断

判断

根拠

すべてPython

PhantomWright + mcp SDKはどちらもPython — 1つの言語、1つのプロセス、IPCゼロ

OS入力ではなくPhantomWright

ydotool/xdotool/KWinのハックは不要; CDPレベルのイベントはWaylandでも動作し、ユーザー入力をブロックしない

JSインジェクションではなくCDP入力

Input.dispatchMouseEvent は信頼されたジェスチャー; element.click() は検出可能で脆弱

ブラウザ起動ではなくconnect_over_cdp

ユーザーのセッションこそが製品 — 再ログイン不要、Cookieの喪失なし

ビジョンはエージェントが所有

サーバーはジオメトリ/スクリーンショットを抽出; エージェント自身のビジョンモデルが座標を決定

📁 プロジェクト構造

probrowser/
├── main entry
│   ├── src/__main__.py            # python -m src → stdio MCP loop
│   └── src/server.py              # registry (29 tools) + dispatch + timeouts + captcha hooks
├── core
│   ├── src/browser/connection.py  # connect_over_cdp, session persistence, page recovery
│   ├── src/browser/tab_manager.py # tab discovery / switching
│   ├── src/humanize.py            # Gaussian timing middleware
│   ├── src/errors.py              # classify_exception → structured error codes
│   ├── src/config.py              # env-driven configuration
│   └── src/logging.py             # per-action latency/success logging
├── tools (src/tools/, 29 modules)
│   ├── navigate · wait · list_tabs · switch_tab · open_tab · close_tab
│   ├── click · validate_position · click_position · type · hover · keyboard
│   ├── scroll · drag_drop
│   ├── get_dom · find · get_text · eval_js
│   ├── screenshot · screenshot_viewport · screenshot_save
│   ├── check_captcha · captcha_grid · solve_captcha
│   └── detect_browsers · check_browser · open_browser · help · list_tools
├── analyzer (src/analyzer/)
│   ├── dom_parser.py              # DOM → simplified JSON (interactive + visible only)
│   ├── hybrid_strategy.py         # DOM-first, vision fallback
│   └── captcha.py                 # CAPTCHA/ad-overlay detection
├── captcha (src/captcha/)
│   ├── grid.py                    # grid geometry + cropped screenshot extraction
│   └── solver.py                  # tile clicking + verify flow
├── docs/                          # 11 topics served via browse_help()
├── tests/                         # 87 unit tests + integration suite
├── AGENTS.md / CLAUDE.md          # operating guide injected into agents
└── dev-phase-mcp-server.md        # dev-phase principles

🛡️ アンチ検出

ブラウザ回避スタック

レイヤー

実装

詳細

エンジン

PhantomWright(パッチ適用済みPlaywrightドライバー)

navigator.webdriver をドライバーレベルで隠蔽

パッチ

ページJSが実行される前のステルスパッチ

window.chrome、プラグイン、WebGLベンダー、メディアコーデック

入力

CDP Input.dispatch* 信頼されたジェスチャー

element.click() でもOSレベルのシミュレーションでもない

セッション

実ユーザープロファイル + 実IP + 拡張機能

フィンガープリントに関して何も変わらない

タイミング

すべてのアクションに対するヒューマナイズミドルウェア

ガウス遅延、自然なWPM、イージング付きスクロール

引き続き機能するもの

ログイン、Cookie、拡張機能の状態、IPレピュテーション、canvas/WebGL/audioフィンガープリント — ブラウザはあなたのものなので、すべてがネイティブのままです。

制限事項

攻撃的なアンチボットサービス(Cloudflare Turnstile、hCaptchaの行動分析)は、IPレピュテーションで引っかかる可能性があります。フォールバックパス: スクリーンショット + validate_positionclick_position、さらにCAPTCHAツールキット。

🧪 テスト

# Unit suite — fake pages, no browser required (87 tests)
.venv/bin/python -m pytest tests/ -q

# Integration suite — needs Opera running with CDP
.venv/bin/python -m pytest tests/test_integration.py -m integration

Tính năng

機能

説明

🌐 実ブラウザ制御

実行中の Opera/Chrome に CDP 経由で接続 — セッション、Cookie、ログインを維持

🧰 29個のMCPツール

ナビゲーション、タブ、クリック/入力/ホバー/キーボード、スクロール、ドラッグ&ドロップ、DOM/テキスト抽出、JS、スクリーンショット、CAPTCHA

🕒 人間らしいシミュレーション

キー間のガウス遅延(45〜75 WPM)、自然なクリック間隔、イーズアウトスクロール

🔍 ハイブリッドDOM + Vision

構造化DOMを優先。不足時はスクリーンショット+座標に切替

🎯 座標検証

座標クリック前に、X/Y軸がO=(x,y)で正確に交差する注釈画像を確認

🧩 CAPTCHA処理

ナビゲーション後に自動検出。エージェントのビジョンでグリッドを解決。2Captcha経由で自動解決

🚨 アクション可能なエラー

各エラーは {error_code, suggestion} を返す — エージェントは次に何をすべきか分かる

✅ テスト済み

87のユニットテスト+実ブラウザでの統合テストスイート

クイックインストール

git clone https://github.com/YOUR_USER/probrowser.git && cd probrowser
./setup.sh                                   # venv + dependencies + verify
opera --remote-debugging-port=9222           # hoặc để agent tự mở

kilo.json でサーバーを宣言し(クイックスタート を参照)、クライアントを再起動すれば完了。


Arch Linux で 🎵 とともに作成 · MIT License

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    B
    quality
    F
    maintenance
    Enables AI agents to directly control your real Chrome browser with full context including login sessions, cookies, and open tabs. It provides tools for page scanning, JavaScript execution, CDP control, screenshots, and physical mouse/keyboard input for authentic browser automation.
    20
    239
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to create and control real, isolated browser profiles with engine-level fingerprinting and per-profile proxies, providing antidetect browsing capabilities through a Model Context Protocol interface.
    MIT

View all related MCP servers

Related MCP Connectors

  • Reliable web access for AI agents: smart HTTP, rotating proxies, and full-browser rendering.

  • Live browser debugging for AI assistants — DOM, console, network via MCP.

  • A paid remote MCP for AI agent browser approval MCP, built to return verdicts, receipts, usage logs,

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/momadhuynh04/probrowser'

If you have feedback or need assistance with the MCP directory API, please join our Discord server