Skip to main content
Glama
momadhuynh04

ProBrowser

by momadhuynh04

ProBrowser

MCP-сервер автоматизации реального браузера для ИИ-агентов — антидетекция

29 инструментов · Подключение CDP к вашему реальному Opera/Chrome · Человекоподобный ввод · Гибрид DOM + Vision

Python MCP PhantomWright CDP Tests Platform License

ВозможностиКонвейерБыстрый стартИспользованиеКонфигурацияАрхитектураСтруктура проектаАнтидетекция

🌐 Язык: English | Tiếng Việt


[!WARNING] Разработано и протестировано только на Arch Linux ядро Linux 7.1.5-arch1-2 · DE: KDE Plasma Остальные дистрибутивы/окружения не тестировались — результат может отличаться.


MCP-сервер, который позволяет ИИ-агентам (Kilo, Claude Code, …) управлять реальным браузером пользователя через Model Context Protocol. Никакого headless-режима и одноразовых профилей — агент подключается по CDP к запущенному Opera/Chrome со всеми сессиями, куками и логинами, а затем управляет им с человекоподобными таймингами и стратегией «сначала DOM, затем vision».

✨ Возможности

Функция

Описание

🔌 Управление реальным браузером

connect_over_cdp подключается к запущенному браузеру на порту 9222 — сессии, куки и расширения сохраняются. Никогда не запускает headless или новые профили, если об этом не попросили.

🧰 29 MCP-инструментов

Навигация, вкладки, клик/ввод/наведение/клавиатура, прокрутка, drag & drop, извлечение DOM/текста, JS eval, 3 варианта скриншотов, набор для CAPTCHA, определение системы.

🕒 Человекоподобный ввод

Задержки между нажатиями клавиш по гауссовскому распределению (45–75 WPM), естественные интервалы mousedown↔mouseup, плавная прокрутка с cubic ease-out — реализовано как middleware таймингов, без инъекций JS.

🔍 Гибрид DOM + Vision

Сначала структурированное извлечение DOM (get_dom, find, get_text); когда DOM недостаточно — скриншоты и клики по координатам как запасной вариант.

🎯 Проверка позиции

Перед любым кликом по координатам: аннотированный скриншот с красными осями X/Y, пересекающимися точно в начале координат O=(x,y) + проверка элемента, предупреждения (pointer-events:none, disabled, iframe).

🧩 Набор для CAPTCHA

Автоопределение reCAPTCHA/hCaptcha/Turnstile/Cloudflare после навигации; решение сеток изображений через vision агента (captcha_grid → выбор плиток → solve_captcha); опциональное авторешение через 2Captcha API.

🗂️ Управление вкладками

Список / переключение / открытие / закрытие вкладок — сценарии с несколькими вкладками в одном реальном браузере.

🚨 Ошибки с рекомендациями

Каждый сбой возвращает структурированный {error_code, error, recoverable, suggestion}TIMEOUT, SELECTOR_NOT_FOUND, CDP_CONNECTION_LOST, NETWORK_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

Жёсткий лимит на один вызов инструмента (защита общего event loop)

PROBROWSER_CAPTCHA_ENABLED

1

Главный переключатель подсистемы CAPTCHA

PROBROWSER_CAPTCHA_AUTO_DETECT

1

Автосканирование CAPTCHA/рекламы после навигации

CAPTCHA_API_KEY

API-ключ 2Captcha (авторешение текстовых заданий; решение сеток основано на vision агента)

PROBROWSER_CAPTCHA_MAX_WAIT_MS

60000

Максимальное ожидание решения с помощью API

Настройки на стороне MCP-клиента (timeout, enabled) находятся в 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: один язык, один процесс, ноль IPC

PhantomWright вместо OS-ввода

Никаких хаков с ydotool/xdotool/KWin; события на уровне CDP работают под Wayland и никогда не блокируют ввод пользователя

CDP-ввод вместо JS-инъекций

Input.dispatchMouseEvent — доверенный жест; element.click() обнаруживается и ненадёжен

connect_over_cdp вместо запуска браузеров

Сессия пользователя и есть продукт — никаких повторных входов, никаких потерянных кук

Vision на стороне агента

Сервер извлекает геометрию/скриншоты; собственная vision-модель агента принимает решение о координатах

📁 Структура проекта

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 скрыт на уровне драйвера

Патчи

Stealth-патчи до выполнения любого JS на странице

window.chrome, плагины, WebGL vendor, медиакодеки

Ввод

CDP Input.dispatch* доверенные жесты

Не element.click(), не OS-симуляция

Сессия

Реальный профиль пользователя + реальный IP + расширения

В отпечатке ничего не меняется

Тайминги

Humanize-middleware на каждом действии

Гауссовы задержки, естественный WPM, плавная прокрутка

Что по-прежнему работает

Ваши логины, куки, состояние расширений, репутация 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

Навигация, вкладки, клик/ввод/hover/клавиатура, прокрутка, перетаскивание, извлечение DOM/текста, JS, скриншоты, CAPTCHA

🕒 Имитация человека

Гауссова задержка между нажатиями клавиш (45–75 WPM), естественный ритм кликов, прокрутка ease-out

🔍 Гибрид DOM + Vision

Приоритет структурированному DOM; при его отсутствии — переход к скриншотам + координатам

🎯 Проверка координат

Аннотированное изображение с осями X/Y, пересекающимися точно в O=(x,y), перед кликом по координатам

🧩 Обработчик CAPTCHA

Автоопределение после навигации; решение сетки с помощью vision агента; auto-solve через 2Captcha

🚨 Ошибки с действиями

Каждая ошибка возвращает {error_code, suggestion} — агент знает, что делать дальше

✅ Протестировано

87 unit-тестов + интеграционный набор на реальном браузере

Быстрая установка

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 (см. Quick Start), перезапустите клиент — готово.


Сделано с 🎵 на 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