web-bridge
web-bridge — MCP-инструмент, позволяющий ИИ-редактору управлять произвольными статическими веб-страницами
web-bridge — это MCP Server (один процесс Node, два интерфейса), который позволяет ИИ-редактору выполнять JavaScript на статических веб-страницах, подключивших client.js, читать консоль, имитировать клики/ввод. Подходит для локальной отладки в нескольких браузерах и вкладках, а также поддерживает развёртывание на внешнем сервере (--transport http, см. ниже «Удалённое развёртывание»).
AI 编辑器 ┌───────────────────┐ 浏览器页面
┌──────────────┐ │ MCP Server │ ┌──────────────────┐
│ MCP Client │ │ (Node 单进程) │ │ <script src= │
│ │ stdio 或 │ · 接口B: MCP │ WebSocket │ :3210/client.js">│
│ AI 只到这里 │◄─────────►│ (stdio / http) │◄──────────►│ client.js │
└──────────────┘ Streamable│ · 接口A: WebSocket │ 接口A │ (eval 执行/ │
HTTP(远程) │ · HTTP /client.js │ │ console 捕获) │
└───────────────────┘ └──────────────────┘ИИ-редактор и браузер не соединяются напрямую: оба соединения завершаются на MCP Server (server.js), ИИ управляет страницей косвенно через вызовы инструментов.
Быстрый старт
cd web-bridge
npm install # 首次Подключите скрипт к статической веб-странице (подходит любая страница и любой порт, кросс-доменный доступ разрешён):
<script src="http://127.0.0.1:3210/client.js"></script>Настройте MCP-сервис в ИИ-редакторе: замените
<REPO>/server.jsв mcp.json на абсолютный путь к этому репозиторию и вставьте так, как показано ниже для соответствующего редактора. Как только редактор запуститserver.js, WebSocket-сервис (по умолчанию127.0.0.1:3210) будет готов.Скажите ИИ: «используй list_pages из web-bridge, чтобы посмотреть, какие страницы подключены, затем eval_js помоги мне нажать #btn и прочитать консоль».
Примечание о порядке подключения: можно подключить скрипт на странице заранее — client.js будет автоматически переподключаться (с экспоненциальной задержкой 1s→2s→5s→10s), и после запуска редактора страница подключится сама. Страница состояния hub: http://127.0.0.1:3210/
Related MCP server: browser-mcp
Инструменты MCP
Инструмент | Параметры | Описание |
| — | список подключённых страниц (pageId, заголовок, URL, время подключения) |
|
| выполняет произвольный JS на странице и возвращает сериализованный результат; поддерживает |
| необязательно | читает последние выводы console и неперехваченные исключения страницы |
|
| находит элемент и вызывает click() (сначала scrollIntoView) |
|
| фокусирует, вводит текст, отправляет события input / change (совместимо с contenteditable) |
| необязательно | читает innerText элемента |
Правило pageId: если подключена только одна страница, его можно опустить; если подключено несколько страниц и pageId не указан, инструмент вернёт ошибку и список страниц, и ИИ сам добавит pageId и повторит.
Подключение в различных редакторах
В следующих примерах предполагается абсолютный путь к репозиторию /path/to/web-bridge; при необходимости замените его.
ZCode / Claude Code (в корне проекта .mcp.json или claude mcp add):
{
"mcpServers": {
"web-bridge": {
"command": "node",
"args": ["/path/to/web-bridge/server.js"],
"env": { "PORT": "3210" }
}
}
}Cursor (.cursor/mcp.json): формат тот же.
Claude Desktop (claude_desktop_config.json): формат тот же.
Аргументы командной строки: node server.js --port 3210 --host 127.0.0.1 --token <secret> (можно также использовать переменные окружения PORT / HOST / TOKEN).
Удалённое развёртывание (внешний сервер)
Обычный режим stdio требует, чтобы редактор запускал процесс локально; при развёртывании web-bridge на внешнем сервере используйте режим HTTP-транспорта — редактору достаточно указать один url в конфигурации MCP:
1. Запустите на сервере (рекомендуется управление через systemd / pm2; для публичного доступа обязательно включите токен):
node server.js --transport http --host 0.0.0.0 --port 3210 --token <secret>2. Конфигурация редактора (Claude Code / Cursor / ZCode и др., вставьте в место исходной конфигурации):
{
"mcpServers": {
"web-bridge": {
"type": "http",
"url": "https://your-domain.com/mcp",
"headers": { "Authorization": "Bearer <secret>" }
}
}
}При прямом подключении (без обратного прокси/TLS) url укажите как http://<服务器IP>:3210/mcp. Примечание: Claude Desktop поддерживает только локальный режим stdio и не поддерживает удалённый url.
3. Скрипт на странице измените так, чтобы он указывал на сервер:
<script src="https://your-domain.com/client.js?token=<secret>"></script>Пояснения:
HTTPS-страницы могут подключаться только через
https/wss(ограничение смешанного содержимого). Рекомендуется использовать обратный прокси, например nginx / caddy, для терминации TLS и пересылки на этот сервис; при отправке client.js автоматически распознаётX-Forwarded-Proto/X-Forwarded-Hostи формирует правильный адрес подключенияwss://, без дополнительной настройки. Пример для caddy (автоматический выпуск сертификата):your-domain.com { reverse_proxy 127.0.0.1:3210 }После включения токена конечная точка
/mcpподдерживает три способа аутентификации:Authorization: Bearer <secret>(рекомендуется; в конфигурации редактора укажите headers),X-Web-Bridge-Token: <secret>, параметр url?token=.HTTP-транспорт использует официальный протокол Streamable HTTP (режим stateless); каждый запрос обрабатывается независимо, все разделяют общий hub, и несколько редакторов могут подключаться одновременно.
При публичном развёртывании обязательно: задайте
--token, используйте TLS, в файрволе откройте только необходимые порты.
Замечания по безопасности
По умолчанию прослушивается только
127.0.0.1. Любая открытая на этом компьютере веб-страница (включая сторонние сайты, которые вы просматриваете) может попытаться подключиться к локальному порту — в режиме без токена по умолчанию она сможет получать код от ИИ, а также подделывать результаты.В недоверенной сетевой среде или при необходимости подключить локальные устройства (например, телефон) через
--host 0.0.0.0обязательно включите--token: в этом случае запрос client.js должен содержать?token=<secret>, и первый пакет WebSocket также проверяет токен.
Протокол сообщений WebSocket (внутренняя справка)
WS-сообщения между браузером и MCP Server представляют собой текстовые JSON-фреймы; используйте это при поддержке lib/hub.mjs / client.js:
Направление | Сообщение | Поля | Описание |
страница→сервер |
|
| первый пакет после подключения; если не получен в течение 5 секунд, соединение закрывается; при повторном pageId (дублированная вкладка) новое соединение заменяет старое |
страница→сервер |
|
| отправляется после подключения, а также по событиям DOMContentLoaded/load/popstate/hashchange и каждые 5 с по опросу (запасной механизм для SPA) |
страница→сервер |
|
| обёртка console и перехват неперехваченных исключений, пакетная отправка с троттлингом 500 мс; hub хранит кольцевой буфер по 500 записей на страницу (сохраняются после отключения) |
страница→сервер |
|
| опоздавшие ответы (уже истёк тайм-аут) игнорируются |
сервер→страница |
|
| проверка hello пройдена |
сервер→страница |
|
| код, который должен быть выполнен |
сервер→страница |
|
| например, ошибка токена |
Соглашения выполнения eval (client.js): сначала код оборачивается как выражение async () => ( code ); при SyntaxError происходит возврат к блоку операторов (можно использовать return); предустановлены $ / $$; тайм-аут отсчитывается на стороне hub (по умолчанию 30 с, максимум 120 с); результат безопасно сериализуется в строковое представление (Error→stack, DOM→краткое содержимое outerHTML, пометка циклических ссылок, глубина ≤ 6, ≤ 50k символов).
Разработка
Тесты:
npm test(Node e2e: запуск процесса + имитация страницы + вызов инструментов через два транспорта stdio/HTTP);npm run test:browser(сценарий с реальным браузером через Playwright: Chromium загружает test/test-page.html, через реальный WebSocket проверяются 6 инструментов; перед первым запуском выполнитеnpx playwright install chromium). Сценарий с реальным браузером можно также проверить вручную, открыв тестовую страницу.Зависимости:
ws(WebSocket),@modelcontextprotocol/sdk(MCP),zod(проверка параметров); dev-зависимость@playwright/test. Node ≥ 18.
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
- AlicenseBqualityBmaintenanceAn MCP server that provides AI models with full browser automation capabilities through Chrome. It enables navigation, interaction, screenshots, and complete DevTools access by bridging AI clients with a companion Chrome extension.9992Apache 2.0
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI coding tools to control a browser for automated actions, UI extraction, network interception, and screenshots.1
- AlicenseNot gradedqualityCmaintenanceAn MCP server for browser automation and console log capture via a Chrome extension, enabling AI-driven DOM interaction, navigation, and screenshot capabilities.2MIT
- AlicenseAqualityBmaintenanceMCP server that gives AI coding assistants direct access to the browser — navigate, click, fill forms, run JavaScript, take screenshots, and read page content.11231MIT
Related MCP Connectors
Live browser debugging for AI assistants — DOM, console, network via MCP.
MCP server for understanding Javascript internals from ECMAScript specification.
A paid remote MCP for AI agent browser MCP session, built to return verdicts, receipts, usage logs,
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/kirakiray/web-bridge-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server