← Все статьи

Что должен уметь stealth-браузер для MCP и почему браузер агента вычисляют

4 мин чтения ai-agentsmcpdetection

Вы подключили агенту браузер через MCP, публичные страницы он открывает без проблем, а первый же важный сайт отвечает проверкой или тихо выкидывает из аккаунта. Модель ничего странного не делала. Браузер рассказал о себе раньше, чем агент успел куда-то нажать.

Как подключить браузер к MCP-клиенту и сохранить логин между вызовами, разобрано в статье про MCP-автоматизацию браузера. Здесь другой вопрос: по каким признакам распознают браузер агента и что должен менять «stealth browser MCP».

Четыре признака, которые выдают браузер агента

1. Отпечаток принадлежит хосту или серверу. Типовой MCP-сервер запускает обычный Chromium или Chrome. На вашем ноутбуке это честно: браузер сообщает вашу видеокарту, ваши шрифты, ваш экран. Перенесите тот же сервер на облачную VM или в контейнер, и он покажет программный рендерер (SwiftShader или llvmpipe в строке WebGL renderer), набор шрифтов Linux и размер экрана, которого не бывает у домашних ноутбуков. Все агенты на этом хосте отдают одинаковые значения, и десять «разных пользователей» оказываются одним устройством.

2. Признаки headless и автоматизации. На сервере нет дисплея, поэтому там часто запускают headless, а у него своя подпись: пустой список плагинов, противоречивые разрешения на уведомления, экран без панели задач, navigator.webdriver. Подробно они разобраны в статье про headless и headful.

3. Новая личность при каждом запуске. Профиль в памяти на каждую сессию означает браузер без cookies и без истории, который приходит на страницу входа с правильным паролем. Ровно так выглядит перебор украденных учётных данных.

4. IP дата-центра. Агент в облаке ходит в сеть с адресов этого облака, часто с часовым поясом UTC и языком en-US, хотя аккаунт принадлежит человеку из Казани. Одной репутации IP хватает, чтобы получить проверку ещё до выполнения JavaScript.

Ни один из этих признаков не связан с моделью.

Что должен изменить stealth-браузер для MCP

Каждое исправление закрывает один признак.

У цикла инструментов своя форма

Чистый отпечаток не скрывает того, как агент управляет страницей. Инструменты MCP грубые: прочитать снимок, подумать, нажать на ссылку из снимка, прочитать снова. Со стороны страницы этот цикл выглядит так:

Это не проблема отпечатка, и ни один браузер сам её не решает. Одни сайты придают этому большой вес, другие не смотрят вовсе. Именно поэтому stealth-браузера для агента мало, и поэтому сессию стоит посмотреть глазами, прежде чем масштабировать.

Как с этим справляются разные подходы

Playwright MCP (сервер Microsoft, @playwright/mcp). В README, прочитанном 22 октября 2026 на github.com/microsoft/playwright-mcp, сказано, что по умолчанию он работает с видимым окном и постоянным профилем на диске, режим --isolated держит профиль в памяти, --proxy-server задаёт прокси, --user-data-dir выбирает папку профиля, а --cdp-endpoint подключается к уже запущенному браузеру. Ничто из этого не уводит отпечаток от отпечатка хоста, поэтому несколько агентов на одном сервере выглядят как одно устройство.

Антидетект-браузер, подключённый через MCP. AntiBrow запускается как MCP-сервер командой npx anti-detect-browser --mcp. Процесс браузера переживает вызовы инструментов, отпечаток генерируется один раз на профиль и применяется в движке браузера, а не внедрённым скриптом. Хватит ли этого для конкретного сайта, зависит от прокси и истории аккаунта, а их не контролирует ни один браузер.

Когда всё это не нужно

Если агент читает публичную документацию, гоняет тесты на вашем собственном стенде или заходит в ваши же внутренние сервисы, правильный ответ это обычный Playwright MCP на вашей машине. Он бесплатный, и его постоянный профиль уже сохраняет логины. Stealth-сетап окупается только тогда, когда сайт на той стороне оценивает браузер, и когда с одного хоста работает больше одной личности.

Проверьте, не выглядят ли ваши агенты одним устройством

Признак 1 команды упускают чаще всего, потому что каждый агент по отдельности выглядит нормально. Пусть каждый профиль агента выполнит на странице один и тот же фрагмент, а вы положите результаты рядом:

const gl = document.createElement('canvas').getContext('webgl')
const ext = gl && gl.getExtension('WEBGL_debug_renderer_info')
console.log(JSON.stringify({
  gpu: ext && gl.getParameter(ext.UNMASKED_RENDERER_WEBGL),
  screen: [screen.width, screen.height, devicePixelRatio],
  cores: navigator.hardwareConcurrency,
  tz: Intl.DateTimeFormat().resolvedOptions().timeZone,
  webdriver: navigator.webdriver,
}))

Между личностями gpu, screen и cores не должны совпадать все сразу, а tz должен соответствовать выходному IP каждой личности. Внутри одной личности все пять значений завтра должны остаться теми же. Если все строки одинаковые, сайты видят одну машину. Другие пары для сравнения есть в чек-листе согласованности, а конфигурация MCP на странице для агентов.

Попробуйте на бесплатном тарифе.

Неограниченное число локальных профилей, без карты. Проверьте результат детекторами сами.