Browser Control
Allows controlling a Firefox browser via the Browser Control extension, providing browser automation capabilities through a shared daemon and WebSocket connection.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Browser Control open https://news.ycombinator.com and summarize the top 3 stories"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
browser-control-daemon
One daemon owns the Browser Control extension's WebSocket port (8089). Every Claude Code session runs a thin stdio MCP shim that talks to the daemon over a private unix socket, and starts the daemon in the background if it isn't running. Sessions are no longer limited by the number of ports the extension is configured for.
claude session 1 ─ shim ─┐
claude session 2 ─ shim ─┼─ unix socket (0600) ─ daemon ─ ws://127.0.0.1:8089 ─ extension
claude session N ─ shim ─┘Setup
npm run build
claude mcp add browser-control -e EXTENSION_SECRET=<secret from extension options> -- node $PWD/dist/server.jsExtension: configure the single port 8089 (remove the extra ports / pool wrapper).
Related MCP server: firefox-mcp
Notes
EXTENSION_SECRET/EXTENSION_PORTare read by the daemon at spawn time. To change them:npm run stop; the next tool call respawns it.Logs:
~/.local/state/browser-control-daemon/daemon.log.Daemon requests use its own UUID correlation ids, so concurrent sessions can't collide.
Tools are a copy of upstream
mcp-server/server.ts; only theBrowserAPIimport differs.Tests:
npm test(needs unix-socket creation, so not inside the Claude Code sandbox).Stop the old per-session upstream server / port pool first: the daemon exits if 8089 is taken.
Attribution
src/server.ts and src/common/ are derived from
eyalzh/browser-control-mcp (MIT, see LICENSE).
Use it with that project's Firefox extension.
Available Tools
9 toolscapture-tab-screenshotA
Capture a screenshot of the visible area of a browser tab, by tab ID. The user must authorize each tab by clicking the extension's toolbar button while that tab is open. If the tab is not authorized, this tool returns an error explaining what to ask the user to do; relay that request to the user and retry afterwards. Authorization ends when the tab navigates or closes. Capturing brings the tab to the foreground momentarily.
Inputs: tabId (required), scale, format, quality.
close-browser-tabsC
Close tabs in the user's browser by tab IDs
Inputs: tabIds (required).
find-highlight-in-browser-tabC
Find and highlight text in a browser tab (use a query phrase that exists in the web content)
Inputs: tabId (required), queryPhrase (required).
get-list-of-open-tabsC
Get the list of open tabs in the user's browser. Use offset and limit parameters for pagination when there are many tabs.
Inputs: limit, offset.
get-recent-browser-historyB
Get the list of recent browser history (to get all, don't use searchQuery)
Inputs: searchQuery.
get-tab-web-contentA
Get the full text content of the webpage and the list of links in the webpage, by tab ID. Use "offset" only for larger documents when the first call was truncated and if you require more content in order to assist the user.
Inputs: tabId (required), offset.
group-browser-tabsC
Organize opened browser tabs in a new tab group
Inputs: tabIds (required), groupColor, groupTitle, isCollapsed.
open-browser-tabB
Open a new tab in the user's browser (useful when the user asks to open a website)
Inputs: url (required).
reorder-browser-tabsC
Change the order of open browser tabs
Inputs: tabOrder (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 9 tools
Each tool has a clearly distinct purpose: tab lifecycle (open, close, reorder, group), tab/history listing, content extraction, highlighting, and screenshots. Overlap is minimal, and even the two read tools (get-tab-web-content vs capture-tab-screenshot) differ by output modality. An agent can reliably select the correct tool.
All tool names use consistent kebab-case with verb-first phrasing (open-, close-, get-, reorder-, find-, group-, capture-). Resource nouns are predictable (browser-tab, tabs, history, web-content). No mixed conventions or naming outliers.
Nine tools is well-scoped for a browser-control server and sits comfortably in the ideal 3-15 range. Each tool maps to a distinct operation, avoiding both bloat and thinness.
The surface covers core tab management, history, content extraction, highlighting, and screenshots. Minor gaps like navigating an existing tab or refreshing a page are absent, but agents can approximate these via opening a new tab or re-reading content.
Maintenance
Related MCP Connectors
Work on your own computers from Claude or ChatGPT: run commands, edit and search files.
Shared memory MCP server for Claude Code, Codex, Gemini CLI and Cursor. Cited, editable.
Launch, inspect, control, and share isolated cloud browsers for your agents.
Remote MCP server exposing your Node Command fleet (files, shell, processes, browser) to AI hosts.
Related MCP Servers
- MIT
- AlicenseBqualityCmaintenanceLets Claude Code attach to a running, signed-in Firefox over WebDriver BiDi to control tabs, navigate, screenshot, read pages, click, type, fill forms, evaluate JavaScript, and inspect console/network activity.22MIT
- AlicenseNot gradedqualityBmaintenanceEnables Claude Code to drive a local Firefox browser: opening and managing tabs, navigating, reading page structure and text, clicking, typing, filling forms, running JavaScript, taking screenshots, and inspecting console messages and network requests. Everything runs over a local Unix socket with no network traffic, and actions are restricted to tabs explicitly placed under Claude's control.8 npmGPL 3.0
- AlicenseNot gradedqualityAmaintenanceEnables Claude Code to drive a real Firefox browser through a local MCP server using synthetic DOM events for clicks and typing. Supports tab management, navigation, page reading, form interaction, screenshots, and per-site consent with no network port opened.4 npm1MIT