MCP server bridging Claude Code to a browser extension over WS+HMAC
MCP server bridging Claude Code to a browser extension over WS+HMAC
A secure browser-automation bridge between Claude Code (or any MCP client) and your Chrome. An alternative to Kimi WebBridge with explicit security boundaries instead of implicit ones.
Compare MCP servers by category, or browse hosted MCP servers if you prefer an endpoint over a local process.
Check the linked publisher documentation and your connected client's tool list. Names and availability can vary with the server version and account permissions.
| Tool | What it does |
|---|---|
| list_tabs | No allowlist check — listing is free. |
| navigate | Checks the destination URL against allowlist. waitFor={selector?,text?,absent?,timeoutMs?} polls after the load until the page is actually usable (SPAs render l |
| reload | Hard reload via bypassCache=true. Allowlist-gated; refs invalidate. |
| history_go | Back/forward through the tab's session history — return to the previous page without knowing its URL. direction='back'\ |
| close_tab | tabId required — no implicit fallback (closing the wrong tab loses work). |
| snapshot | Accessibility tree with stable @eN refs (per-tab), pruned of layout noise. Cross-checks against a DOM walk (same refs) when the a11y tree looks suspiciously spa |
| read_text | Whole-page or by ref. No raw JS. Capped at 20 000 chars by default (maxChars overrides, ceiling 200 000; cut results carry truncated/totalChars/nextOffset). Pas |
| get_state | Cheap one-element probe (CSS or @eN) — {exists, visible, tag, text, box?, inViewport?} without a full snapshot. Verify an action's effect or re-check a ref in o |
| console_tail | Recent page console errors/warnings + uncaught exceptions for a tab ({enabled, entries:[{ts,level,text,origin}]}) — tell "the handler threw and the page is wedg |
| network_tail | Recent XHR/fetch responses for a tab ({enabled, entries:[{ts,method,url,status,type,contentType,size,body?}]}) — the data behind canvas dashboards (Metrika, Cha |
| handle_dialog | See and steer native JS dialogs (alert/confirm/prompt/beforeunload) — an open dialog freezes the page's JS and is browser UI no other tool can click. With handl |
| click | DOM .click(). CSS selector or @eN ref. Optional waitFor polls for the click's effect in the same call. |
| mouse_click | Real Input.dispatchMouseEvent as a full hover→press→release sequence. Auto-aims around partial overlays; a fully covered target reports covered/hitTarget/hitTar |
| hover | Hover the pointer over an element/point without clicking (the mouseMoved preamble only). For CSS :hover-only menus, tooltips, row-action UIs. selector/@eN (auto |
| fill | Blocks password fields without allowPassword=true — the gate checks the resolved node and the node the keystrokes actually reach, following focus through open s |
| select_option | Choose an option in a native (the OS popup can't be driven via CDP). Sets the value in the DOM and fires input/change instead of opening the menu. One of value/ |
| key_type | Raw text input via CDP. Blocks when focus is on a password field without allowPassword=true. |
| send_keys | Mod+A, Shift+Tab, etc. Mod = Cmd on macOS, Ctrl elsewhere. Same password-field gate as key_type. |
| screenshot | PNG/JPEG as a native MCP image block. maxWidth downscales so the returned image is at most that many pixels wide (it accounts for the display's device pixel rat |
| set_viewport | Emulate a device viewport — the way to test responsive/mobile layouts. Per tab, not a window resize: it disturbs nothing the human is looking at, and gives you |
| print_to_pdf | Render the page to a PDF in the download sandbox — returns {path, size, filename}, so the bytes never enter the model context. Unlike screenshot it needs no vis |
| wait_for | Poll (250 ms) until a selector/@eN ref is visible (for CSS: any match — not necessarily the first, which click/fill act on; with absent=true, gone means no matc |
| settle | Wait for the DOM to stop changing (no child, text or attribute mutations in the top-level document for stableMs, default 500 ms) — for "the page just did someth |
| find | Semantic element locator — match by role/name/nameExact/value over the accessibility tree instead of a CSS selector, ranked exact-match-first (limit, ≤ 50). No |
| reveal | Scroll a virtualized list/container and re-snapshot until an element matching find's predicate appears — for infinite-scroll feeds and lazy-rendered tables. con |
| scroll | Deterministic scrolling — the predicate-less companion to reveal. selector → scrollIntoView; or scroll the page (or a selector container) by dx/dy (negatives = |
| evaluate | Per-domain opt-in. Returns {type, value}. |
| fetch_in_page | fetch() with page cookies/auth. Returns {status, contentType, headers, mode, data}. saveAs= writes the body straight into the download sandbox instead — result |
| upload | Attach local files to via DOM.setFileInputFiles. Paths must be absolute, ..-free, and resolve under ~/Downloads/sallyport/ (override via SALLYPORT_DOWNLOAD_DIR) |
| save_to_file | Daemon-local — writes base64 to ~/Downloads/sallyport/ (override via SALLYPORT_DOWNLOAD_DIR). Sandboxed: no path separators or ... |
| status | Daemon-answered health check: {connected, mode, version, port, pendingCalls, uptimeS, lastCalls, lastError, lastHandshakeError}. mode is broker (explicit owned |
{
"mcpServers": {
"sallyport": {
"command": "/Users/you/.local/bin/sallyport-daemon",
"args": []
}
}
}From the project documentation. Replace placeholders and example paths before connecting.
Use Microsoft’s Playwright MCP server to navigate pages, inspect accessibility snapshots, fill forms and capture browser screenshots.
The original Chromium automation reference server — simple, screenshot-driven browser control.
Give your coding agent the full DevTools toolbox: traces, network, console, heap snapshots and Lighthouse.
Puppeteer-powered browser control that drives pages from the accessibility tree instead of pixels.
Enables AI-powered applications to monitor and interact with browser data via a Chrome extension and MCP.
Automates browsers and APIs, enabling Large Language Models (LLMs) to interact with web pages for tasks like screenshot capture and JavaScript