YetiBrowser MCP is a fully open-source implementation of the Browser MCP workflow. It links a Node-based MCP server with Chrome/Firefox extensions so Model Context Protocol clients—Codex/Claude Code, Cursor, Windsurf, MCP Inspector, or your own tools—can automate a real browser tab while keeping every byte on your machine and auditable.
- Transparent and hackable – no blob downloads. Inspect, fork, and extend every component.
- Local-first – the extension talks only to a localhost MCP server; browsing data never leaves your device.
- Cross-browser – shared logic powers both Chrome and Firefox packages (Firefox build is pending better Manifest V3 support, so connection UX may be limited until Mozilla ships full MV3 APIs).
- Developer-focused tooling – richer console capture, DOM diffing, page-state dumps, and full-page screenshots built for debugging and QA.
- Production-friendly – scripts and docs for packaging, publishing, and integrating with IDE workflows.
packages/shared– shared TypeScript definitions for messages and tool schemas.packages/server– the MCP server that bridges MCP clients to a running browser tab.extensions/shared– shared extension source (background/popup) and assets.extensions/chrome/extensions/firefox– per-browser packaging layers.docs/– workspace commands, publishing checklists, and feature notes.scripts/– helper utilities such aspackage-extensions.shfor release zips.
browser_snapshot– capture an accessibility-oriented snapshot of the current pagebrowser_snapshot_diff– compare the two most recent snapshots to highlight DOM/ARIA changesbrowser_navigate– load a new URL in the connected tab and return an updated snapshotbrowser_go_back/browser_go_forward– move through history while keeping MCP in syncbrowser_wait– pause automation for a set number of secondsbrowser_wait_for– block until a selector appears (optionally visible) before proceedingbrowser_press_key– simulate a keyboard key press on the focused elementbrowser_click– click the element identified by a CSS selectorbrowser_hover– hover the pointer over the targeted elementbrowser_drag– drag an element onto a drop target for sortable/drag-and-drop UIsbrowser_type– type text (optionally submitting with Enter) into an editable elementbrowser_fill_form– fill multiple inputs/selects/checkboxes/radios in a single callbrowser_select_option– choose one or more options in a<select>elementbrowser_screenshot– capture a viewport or full-page screenshot via the DevTools protocolbrowser_get_console_logs– return recent console output, including errors with stack tracesbrowser_page_state– dump forms, storage keys, and cookies for the connected pagebrowser_connection_info– report bridge WebSocket port, connection status, and extension versionbrowser_evaluate– run custom JavaScript inside the page and return JSON-serializable resultsbrowser_handle_dialog– accept or dismissalert/confirm/promptdialogs with optional prompt text
- Install the latest Chrome Browser Extension here: https://chromewebstore.google.com/detail/hpedknkjljpopinabjjmljgckhlancni?utm_source=item-share-cb
- Leave it on Automatic connection mode unless you are running multiple instances of YetiBrowser MCP Server
- Due to the limited capabilities of Manifest v3 in Firefox stable release, the Firefox extension is on hold until full support is commonly avaialble (outside of Nightly builds).
- Edit your ~/.codex/config.toml and add the MCP entry:
[mcp_servers.yetibrowser-mcp] command = "npx" args = ["yetibrowser-mcp"]
- Restart
codexCLI command; you should seeyetibrowser-mcplisting under/mcptools. - If you want to provide a specific port, use this format for the args entry:
args = ["yetibrowser-mcp", "--ws-port", "9010"]
- Make sure the extension is installed and connected to a tab, then start the MCP server with
npx yetibrowser-mcp(or run the locally built CLI). - Add the server entry to
~/Library/Application Support/Claude/claude_desktop_config.json(see the example indocs/publishing.md). - Restart
claudeso it picks up the new MCP server; you should seeyetibrowser-mcplisted under the/mcptools menu once the extension connects.
- Any MCP client can connect by spawning the CLI (
npx yetibrowser-mcp) or optionally provide a specific port, e.g.npx yetibrowser-mcp --ws-port 9010. - The server exposes the standard MCP transport over stdio, so use whatever configuration mechanism your client supports to run the command above when a tab is connected.
- For testing and debugging outside a coding agent.
npx @modelcontextprotocol/inspector yetibrowser-mcp -- --ws-port 9010to run and inspect the MCP server in conjunction with the YetiBrowser MCP browser extension.
- The CLI walks ports
9010-9020until it finds a free one, loggingswitched towhen it advances. Pass--ws-port <port>if you want to pin a specific port instead. - The Browser extension popup mirrors that behaviour: leave it on “Automatic” to track the CLI’s port, or choose “Manual” and enter the port reported by
browser_connection_info/ the CLI log to override it. - Simply ask your AI tool about the connection port. For example:
what is the yetibrowser mcp connction info?, then set the manual port the port reported.
- Workspace commands live in
docs/workspace-commands.md. - Publishing steps (npm + extension stores) are in
docs/publishing.md. - Screenshot behaviour is documented in
docs/screenshot.md. - Generate distributable Chrome/Firefox zips with
./scripts/package-extensions.sh(outputs toartifacts/). - A repository-level privacy policy is available in
PRIVACY.md.