Skip to content

Интеграция агентов MCP

MCP-сервер Sa2web предоставляет удаленный браузер как стандартные MCP-инструменты для Claude Code, Claude Desktop, Cursor, Windsurf, VS Code Copilot, Cline, Roo Code, opencode, Gemini CLI, Zed, Hermes Agent и OpenClaw.

Проект MCP открыт на sa2web/sa2web-mcp и опубликован в npm как @sa2web/mcp.

Для прямой работы из терминала см. CLI удаленного браузера.

Целевой сайт отображается в iframe#rbi-frame, которым сервер управляет через Playwright.

Установка

Установите Node.js 18 или новее, затем установите npm-пакет глобально:

bash
npm install @sa2web/mcp -g
npx playwright install --with-deps

После этого доступны sa2, sa2-browser и MCP-вход sa2-mcp.

Для разработки из исходников клонируйте публичный репозиторий и соберите проект:

bash
git clone https://github.com/sa2web/sa2web-mcp.git
cd sa2web-mcp
npm install
npx playwright install --with-deps
npm run build

Настройка клиента

После глобальной установки укажите sa2-mcp напрямую:

json
{
  "mcpServers": {
    "sa2-remote-browser": {
      "command": "sa2-mcp",
      "env": {
        "SA2_LOGIN_URL": "https://<APP_DOMAIN>/agent/login?clientId=...&clientSecret=...",
        "SA2_LOGIN_REDIRECT_PATH": "/app/login",
        "SA2_HEADLESS": "false",
        "SA2_IGNORE_HTTPS_ERRORS": "true"
      }
    }
  }
}

Если клиент не находит глобальные команды, укажите полный путь к sa2-mcp или используйте node /absolute/path/to/sa2web-mcp/dist/server.js из локальной сборки.

json
{
  "mcpServers": {
    "sa2-remote-browser": {
      "command": "node",
      "args": ["/absolute/path/to/sa2web-mcp/dist/server.js"],
      "env": {
        "SA2_LOGIN_URL": "https://<APP_DOMAIN>/agent/login?clientId=...&clientSecret=...",
        "SA2_LOGIN_REDIRECT_PATH": "/app/login",
        "SA2_HEADLESS": "false",
        "SA2_IGNORE_HTTPS_ERRORS": "true"
      }
    }
  }
}

VS Code Copilot использует корневое поле servers, opencode — mcp, Zed — context_servers. Для Hermes Agent добавьте сервер в mcp_servers файла ~/.hermes/config.yaml, для OpenClaw — в mcp.servers конфигурации Gateway. Перезапустите клиент и убедитесь, что появился sa2_help.

Учетные данные

Не сохраняйте настоящий clientSecret в Git или документации. Немедленно заменяйте раскрытые учетные данные.

Основные переменные

ПеременнаяПо умолчаниюНазначение
SA2_LOGIN_URLнетОбязательный URL входа; из него определяется origin удаленного браузера
SA2_AUTO_LOGIN_BEFORE_NAVIGATEtrueАвтоматический вход перед открытием цели
SA2_HEADLESSfalseЗапуск Playwright без интерфейса
SA2_BROWSERchromiumchromium, firefox или webkit
SA2_IGNORE_HTTPS_ERRORStrueИгнорировать ошибки HTTPS-сертификатов; false требует действительные сертификаты
SA2_RBI_FRAME_CONTENT_WAIT_MS15000Ожидание содержимого iframe
SA2_NAVIGATION_TIMEOUT_MS45000Тайм-аут навигации
SA2_ACTION_TIMEOUT_MS15000Тайм-аут действий
SA2_LOG_STDERRtrueВывод журналов в stderr; stdout остается для MCP
SA2_LOG_FILEнетНеобязательный файл журнала

Устаревшие SA2_REMOTE_BROWSER_PREFIX и SA2_REMOTE_BROWSER_BASE_URL настраивать не нужно.

Рекомендуемый порядок

text
sa2_help
  -> sa2_list_available_targets    # только для SaaS, рабочего пространства или внутреннего сайта
  -> sa2_open_target
  -> browser_snapshot / browser_extract_text
  -> browser_click / browser_type / browser_press / browser_wait

Публичный URL:

json
{ "type": "cloud", "url": "https://example.com" }

Сохраненная цель:

json
{ "targetId": "workspace:123" }

После открытия страницы предпочтительно вызывайте browser_snapshot и передавайте возвращенные ref=eN инструментам взаимодействия. id=tN и context=[tN] — текстовые ссылки внутри snapshot, а не CSS-селекторы и не рабочие refs.

Полный справочник инструментов

Ниже описаны все инструменты текущего сервера. Параметры относятся к объекту MCP arguments.

ИнструментНазначение, основные параметры и результат
sa2_helpБез параметров. Возвращает рекомендуемый процесс, примеры и список совместимых инструментов.
sa2_list_available_targetsПеречисляет прокси, SaaS, аккаунты workspace и внутренние сайты со стабильными targetId.
sa2_open_targetРекомендуемая навигация: type=cloud + url, либо targetId/тип + id/name; поддерживает surf, waitUntil.
browser_open_loginОткрывает SA2_LOGIN_URL; необязательный waitUntil. Используется для диагностики входа.
browser_navigateСовместимая навигация по URL: обязателен url, необязательны surf, waitUntil.
browser_navigate_backНазад через внешнюю панель. После этого обновите snapshot.
browser_navigate_forwardВперед через внешнюю панель.
browser_reloadПерезагрузка через внешнюю панель; старые refs становятся недействительными.
browser_list_proxiesВозвращает free-browse, прокси и options, включая direct.
browser_list_saas_sitesВозвращает категории SaaS и плоский список sites.
browser_enter_saas_siteОткрывает SaaS по id или name; необязательный waitUntil.
browser_list_workspacesВозвращает данные workspace и цели на уровне аккаунтов.
browser_enter_workspaceОткрывает аккаунт по accountId либо siteId + username.
browser_list_inner_sitesВозвращает доступные внутренние сайты.
browser_enter_inner_siteОткрывает внутренний сайт по id или name.
browser_snapshotНеобязательный настоящий CSS filter. Возвращает семантический snapshot; для действий используйте ref=eN, не id=tN.
browser_extract_textНеобязательный настоящий CSS selector. Возвращает видимый текст дерева iframe.
browser_clickКлик по ref, selector, role/name, text или координатам x/y.
browser_typeОбязателен text; цель по ref/selector/role, поддерживает append, pressEnter.
browser_pressОбязателен key, например Enter, Escape, Control+A.
browser_press_keyСовместимый псевдоним browser_press с теми же параметрами.
browser_waitОжидает selector, text, urlIncludes или ms (по умолчанию 1000).
browser_scrollПрокрутка root/элемента в режиме by, to, intoView; без параметров вниз на 600 px.
browser_hoverНаведение по ref, selector, role/name или тексту.
browser_dragПеретаскивание от startRef/startSelector к endRef/endSelector.
browser_fill_formПоследовательно заполняет массив fields с locator и обязательным value.
browser_select_optionНаходит select по ref/selector, выбирает по values, value, label или index.
browser_checkУстанавливает checkbox/radio по ref, selector, role/name или тексту.
browser_uncheckСнимает checkbox; radio не поддерживается.
browser_file_uploadЗагружает доступные серверу path/paths через найденный file input.
browser_pasteВставляет text, html, rtf и/или файлы в цель или активный элемент.
browser_handle_dialogПринимает/отклоняет alert, confirm, prompt; accept по умолчанию true, доступны promptText, timeoutMs.
browser_resizeТребует положительные width, height; меняет desktop или размеры активной эмуляции.
browser_list_devicesБез параметров и открытия страницы. Возвращает Desktop и устройства Playwright с viewport, screen, DPR, touch/mobile и браузером.
browser_toggle_deviceМеняет эмуляцию без пересоздания context. Принимает enabled, device, размеры, DPR, touch, UA, orientation, reload; возвращает state, observed, targetObserved, warnings.
browser_screenshotВозвращает PNG; fullPage по умолчанию false.
browser_take_screenshotСовместимый снимок; fullPage по умолчанию true.
browser_evaluateВыполняет expression с необязательным arg в iframe, возвращает JSON.
browser_run_codeВыполняет асинхронный code с page, rootFrame, helpers. Только доверенный код.
browser_closeЗакрывает browser/context и очищает refs, вход, dialogs, CDP и состояние устройства.

Переключение устройства

Сначала вызовите browser_list_devices, затем, например, browser_toggle_device с { "device": "Pixel 7", "orientation": "portrait" }. Cookies и вход сохраняются. reload: true применяет новый UA к последующим запросам, а { "device": "Desktop" } восстанавливает прежний desktop viewport.

Chromium через CDP изменяет viewport, screen, DPR, touch, orientation и UA. Firefox/WebKit динамически меняют только viewport и возвращают ограничение в warnings. observed измеряет внешнюю оболочку, targetObserved — целевой iframe. После переключения обновите snapshot.

Безопасность и устранение неполадок

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

  • Инструменты не появились: проверьте сборку и абсолютные пути к node и dist/server.js, затем перезапустите клиент.
  • Ошибка входа: проверьте SA2_LOGIN_URL, учетные данные и состояние аккаунта.
  • Видна только панель: вызовите browser_wait или увеличьте время ожидания iframe.
  • Элемент не найден: сделайте новый snapshot и используйте последний ref=eN.

Sa2web 1.0.0