stealth-browser-mcp
stealth-browser-mcp
Сервер MCP, который даёт ИИ-ассистенту настоящий браузер Chrome с сохранённой авторизацией.
Большинство инструментов автоматизации браузеров выдают модели свежий пустой браузер. Этот же использует постоянный профиль Chrome, поэтому вы один раз входите сами — проходя через всю требуемую сайтом 2FA, CAPTCHA и проверки устройства — а модель может продолжать использовать эту сессию в следующих запусках, так и не увидев ваш пароль.
Для сайтов, которые не терпят автоматизированного входа, предусмотрены два запасных пути: учётные данные, извлекаемые из связки ключей macOS в момент заполнения, и ключи доступа WebAuthn, воспроизводимые через виртуальный аутентификатор Chrome.
[!WARNING] Это мощный инструмент. Он даёт языковой модели управление браузером с вашими актуальными сессиями и способен вводить сохранённые пароли на страницы, которые модель выбирает сама. Прочитайте SECURITY.md и Ответственное использование, прежде чем направлять его на что-то, что вам дорого.
Содержание
Related MCP server: agent-browser-mcp
Как это работает
MCP client (Claude Code, Claude Desktop, Cursor, …)
│
│ JSON-RPC over stdio
▼
┌───────────────────────────┐
│ stealth-browser-mcp │
│ 16 tools, one browser │
└─────┬───────────────┬─────┘
│ │
credentials │ │ CDP + Puppeteer
▼ ▼
┌───────────────────┐ ┌───────────────────────┐
│ macOS Keychain │ │ Google Chrome │
│ stealth-mcp:* │ │ + stealth plugin │
│ passwords, │ │ + WebAuthn virtual │
│ passkey material │ │ authenticator │
└───────────────────┘ └───────────┬───────────┘
│
▼
┌─────────────────────────┐
│ Persistent profile dir │
│ cookies · localStorage │
│ IndexedDB · sessions │
└─────────────────────────┘Работу делают три части:
Постоянство. Chrome запускается против фиксированного userDataDir, а не временного. Достаточно один раз войти в интерактивном окне, и cookie переживают все последующие запуски — обычная причина нарушения автоматизации на реальных сайтах исчезает.
Маскировка. puppeteer-extra-plugin-stealth
закрывает известные признаки автоматизации, а сервер добавляет ещё несколько:
navigator.webdriver равняется undefined, window.chrome.runtime присутствует,
убирается HeadlessChrome из User-Agents, а такжe выставляется
--disable-blink-features=AutomationControlled. Клики водят мышью по траектории
до точки с дрожащим смещением внутри элемента; ввод выполняется посимвольно
с паузами в 30–100 мс.
Повторное использование сессии вместо её создания. Целевая архитектура — вообще избегать автоматизации входа. Автозаполнение из связки ключей и повторен иные passkeys существуют для тех случаев, где обойтись без этого нельзя.
Требования
Node.js 18 или новее
Google Chrome. Встроенный Chromium от Puppeteer тоже работает, но полноценная сборка Chrome заметно менее детектируема.
macOS, если нужны возможности связки ключей и passkey. Всё остальное — навигация, извлечение данных, скриншоты, постоянный профиль — кросс-платформенно. Слой связки ключей вызывает
/usr/bin/securityи на других платформах работать не будет; браузерные инструменты его не трогают.
Установка
git clone https://github.com/lauyuen/stealth-browser-mcp.git
cd stealth-browser-mcp
npm installПри желании скопируйте пример файла окружения и отредактируйте:
cp .env.example .envПроверьте, что браузер запускается и маскировки активны:
npm run check-stealthПодключение к MCP-клиенту
Сервер общается по stdio. Укажите клиенту абсолютный путь к src/server.js.
Claude Code
claude mcp add stealth-browser -- node /absolute/path/to/stealth-browser-mcp/src/server.jsClaude Desktop — ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"stealth-browser": {
"command": "node",
"args": ["/absolute/path/to/stealth-browser-mcp/src/server.js"]
}
}
}Любой другой MCP-клиент — та же схема, плюс необязательное переопределение профиля:
{
"mcpServers": {
"stealth-browser": {
"command": "node",
"args": ["/absolute/path/to/stealth-browser-mcp/src/server.js"],
"env": {
"BROWSER_PROFILE_DIR": "/absolute/path/to/a/private/profile/dir"
}
}
}
}После этого перезапустите клиент. browser_status — самый быстрый способ убедиться,что соединение активно.
Первый вход
Прежде чем модель сможет использовать сайт, наполните профиль вручную:
npm run login -- https://example.comОткроется видимое окно Chrome с тем же профилем, который будет использовать MCP-сервер. Войдите как обычно — менеджеры паролей, запросы 2FA, CAPTCHA, «запомнить это устройство», всё в этом же спектре. Когда закончите, нажмите Enter в терминале, и сессия сохранится на диск.
Каждый следующий запуск MCP наследует эту сессию. Повторяйте процедуру для каждого сайта. Сессии истекают по собственному расписанию сайта, поэтому повторяйте, когда сайт выписывает регистрацию от вас.
Справочник инструментов
Навигация и взаимодействие
Инструмент | Аргументы | Примечания |
|
|
|
|
| Прокручивает элемент в область видимости, затем ведёт мышь к точке со сдвигом внутри него перед нажатием. |
|
| Вводит по одному символу со случайными задержками. |
|
|
|
|
| Ждёт элемент, паузу или и то и другое. |
Чтение страницы
Инструмент | Аргументы | Примечания |
|
| Убирает скрипты и стили; возвращает текст плюс структурированные ссылки и поля форм. Самый дешёвый способ дать модели прочитать страницу. |
|
| Сырой |
|
| Возвращает PNG как изображение MCP. |
|
| Выполняет JavaScript в контексте страницы и возвращает результат. См. предупреждение в SECURITY.md. |
Сессия и аутентификация
Инструмент | Аргументы | Примечания |
|
| Читает пароль из связки ключей и вводит его. Секрет никогда не возвращается модели. |
|
| Записывает в связку ключей под |
|
| С обоими аргументами внедряет сохранённый ключ доступа. Без аргументов подключает пустой аутентификатор, готовый к регистрации. |
|
| Захватывает только что зарегистрированные учётные данные и сохраняет их. |
Жизненный цикл браузера
Инструмент | Аргументы | Примечания |
| — | Состояние подключения, число вкладок, текущий URL, путь профиля, признак подключённого аутентификатора. |
|
| Открывает текущую сессию в видимом окне, чтобы вы вручную прошли CAPTCHA или подтвердили 2FA, затем возвращает управление. |
| — | Закрывает браузер корректно и сохраняет cookie на диск. |
Браузер по умолчанию запускается в headless-режиме и переиспользуется между вызовами. browser_open_interactive_window — единственный инструмент, который переводит его в окна.
Хранение учётных данных в связке ключей
Пароли живут в связке ключей macOS под приставкой stealth-mcp:, никогда — в файле репозитории и никогда — в контексте модели.
npm run keychain set github you@example.com # prompts; input is not echoed
npm run keychain get github you@example.com # confirms presence, prints length only
npm run keychain delete github you@example.comЗатем модель запускает вход, так и не узнав секрет:
// browser_autofill_login
{
"service": "github",
"account": "you@example.com",
"usernameSelector": "#login_field",
"passwordSelector": "#password",
"submitSelector": "input[type='submit']"
}service — любая метка, которую вы выберете; она должна совпасть между CLI, аргументом в вызове инструмента.
Вы также можете передать пароль в конце команды CLI для скриптов, но он попадёт в историю вашей оболочки и список процессов, поэтому команда делает вам об этом.
Ключи доступа
Chrome предоставляет WebAuthn виртуальный аутентификатор через протокол DevTools — программный аутентификатор, предназначенный для тестирования сценариев WebAuthn. Этот сервер управляет им и хранит материю ключей в связке ключей, чтобы она сохранялась между запусками.
Регистрация автоматизированного ключа доступа
Вызовите
passkey_enable_virtual_authenticatorбез аргументов.Перейдите к форме добавления «passkey» на сайте и завершите её. Виртуальный аутентификатор отвечает на вызов; системные обы при не появляются.
Вызовите
passkey_save_registration, указавrpIdсайта и вашу учётную запись.
Использование позже
passkey_enable_virtual_authenticator с rpId и account внедряет сохранённые учётные данные до перехода, и сайт выполняет вход без запроса.
[!CAUTION] Хранимый таким образом ключ доступа — это файл, а не аппаратный ключ. Его можно: вот свойства, которые настоящие passkeys и должны предотвращать. Используйте ключ такого для чисто автоматизированных passkeys. Не применяйте его для ключа доступа, защищающего почту, банк или другую информацию, потеря которой критична.
Конфигурация
Все настройки — это переменные окружения, читаемые из окружения процесса или из .env. См. .env.example.
Переменная | По умолчанию | Назначение |
|
| Постоянный профиль Chrome. Сдерживает недешевые сессии — делайте его приватным и не добавляйте под version controling. |
| По умолчанию для платформы | Бинарь Chrome для взлома. Если путь не существует, используется Chromium из Puppeteer. |
|
| Тайм-аут навигации и поиска селекторов, в миллисекундах. |
Флаги запуска Chrome и размер окна по умолчанию 1280×800 находятся в src/config.js. Некоторые флаги обменивают безопасность на совместимость — SECURITY.md объясняет, какие именно и почему вам может стоит их удалить.
Проверка маскировки
npm run check-stealthСообщает значения navigator.webdriver, window.chrome, window.chrome.runtime, количество плагинов, navigator.languages и фактический user agent, а затем выводит вычисленные пути к профилю и Chrome.
Для более жёсткой проверки направьте браузер на страницу fingerprinting — например bot.sannysoft.com или abrahamjuliot.github.io/creepjs — с помощью browser_navigate, а затем browser_screenshot.
Никакая stealth-настройка не является полностью необнаружимой. Хорошо защищённые сайты сочетают fingerprinting с поведенческим анализом, репутацией IP-адреса и историей аккаунта и всё равно распознают автоматизацию. Относитесь к этому как к «не срабатывает на очевидных проверках», а не как к невидимости.
Устранение неполадок
«Failed to launch the browser process» / профиль заблокирован. Chrome допускает только один процесс на каталог профиля. Закройте любой Chrome, который вы запускали вручную с тем же каталогом профиля. Сервер при запуске удаляет устаревшие файлы блокировки Singleton* и переподключается к работающему экземпляру через его порт DevTools, но работающий Chrome, которому принадлежит профиль, имеет приоритет.
Сайт завершает сеанс модели или блокирует её. Сохранённый сеанс истёк. Повторно запустите npm run login -- <url>.
Селекторы не совпадают. Вызовите browser_extract_html с узким селектором и дайте модели прочитать реальную разметку, а не гадать. Одностраничные приложения часто монтируют поля ввода с задержкой — сначала browser_wait_for.
Появляется CAPTCHA. Вызовите browser_open_interactive_window, решите её сами и продолжайте. Решение сохраняется в профиле.
Ошибки Keychain в Linux или Windows. Это ожидаемо — этот слой существует только в macOS. Инструменты браузера работают везде; инструменты для учётных данных и passkey — нет.
Ответственное использование
Этот проект существует, чтобы ассистент мог действовать на сайтах, на которых у вас уже есть аккаунт, используя сеансы, которые вы установили сами. Это и есть предполагаемая область применения, и конструкция с постоянными профилями отражает это.
Средства антидетекта и автоматизацию работы с учётными данными, очевидно, можно использовать и в других целях. Прежде чем запускать это против сайта, учтите:
Условия использования сайта. Многие из них прямо запрещают автоматизированный доступ. Обход защиты от ботов может нарушить договор, с которым вы согласились, а в некоторых юрисдикциях несанкционированный доступ влечёт уголовную ответственность. Возможность обойти защиту — это не разрешение.
Согласие. Автоматизируйте аккаунты, которые принадлежат вам или на которые у вас есть письменное разрешение действовать. Чужие учётные данные в вашей Keychain — это не согласие.
Нагрузка. Ограничивайте интенсивность запросов. Уважайте
robots.txt, где это применимо. Автоматизация, которая обходится сайту в реальные деньги, — верный способ добиться запрета этой техники для всех.Чужие данные. Страницы, которые читает модель, передаются провайдеру вашего MCP-клиента. Не пропускайте через него личные данные третьих лиц.
Вклады, основная цель которых — обход защиты конкретного сайта, сбор учётных данных или масштабирование злоупотреблений, не будут приняты.
Лицензия
MIT © Yuen Lau
Maintenance
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
- FlicenseNot gradedqualityNot gradedmaintenanceEnables AI agents to authenticate with websites using a real Chromium browser with anti-detection measures and human-in-the-loop support for captchas and 2FA. Features stealth browsing, human-like interactions, and persistent session storage to automate and resume login workflows.
- AlicenseBqualityFmaintenanceEnables 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.20239MIT
- AlicenseNot gradedqualityCmaintenanceLets AI assistants control your real Chrome browser to perform web tasks like reading pages, taking screenshots, clicking, and typing, using your existing logged-in sessions.131MIT
- AlicenseAqualityBmaintenanceGives your AI agent a persistent browser identity with anti-detection, credential vault, and multi-persona support for automated web browsing, login, and signup.318MIT
Related MCP Connectors
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
AI-powered browser automation — navigate, click, fill forms, and extract data from any website.
Stealth web browser for agents: search, fetch, click and type through persistent sessions over MCP.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/lauyuen/stealth-browser-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server