chrome-bridge
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., "@chrome-bridgesearch my bookmarks for "kubernetes" and show which folder each is in"
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.
Agent tools like Claude Code, Codex and Cursor can drive web pages, but they
can't touch the browser itself: bookmark folders, tab groups, which tabs are
open. Chrome only exposes those to extensions. chrome-bridge is that
extension plus a tiny MCP server, so you can
say things like:
Make bookmarks for every server in this list under
Bookmarks bar/Lab, then open them as a tab group called "Lab" in cyan.
and the agent does it.
How it works
Claude Code / Codex / Cursor / shell
│ MCP (stdio) or `chrome-bridge call`
▼
bin/chrome-bridge.mjs ── opens 127.0.0.1:4736x only while in use
▲
│ WebSocket, mutual HMAC handshake
│
extension/ (MV3 service worker) ── chrome.bookmarks / tabs / tabGroupsThe server opens its port only when a tool is called and closes it after 5 minutes idle.
The extension's service worker wakes every 30 s (the
chrome.alarmsminimum), tries the ports, finds nothing, and goes back to sleep. Nothing stays resident for the life of the browser.The cost of that design: the first call after an idle period waits up to ~30 s for the extension to connect. Calls after that are immediate.
Up to five servers can run at once (ports 47361-47365), so several agent clients can each have their own.
Related MCP server: Tabryn
Security
Concern | Mitigation |
Remote access | Binds to |
Web pages connecting to localhost | Connections must present a |
Another local program posing as either side | Mutual HMAC-SHA256 challenge/response over a 256-bit shared secret. The server proves itself to the extension too, so a rogue listener can't feed it commands. |
Arbitrary code execution | The extension accepts only a fixed command table. No |
Accidental deletes | Removing a non-empty folder requires |
Leaving it on | The toolbar badge shows ON while an agent is connected, and the popup has a switch that refuses all connections. |
Out of scope: anything already running as your user account can read the secret file. That's the same trust boundary as your Chrome profile itself.
Install
Requires Node 20+ and Chrome 120+.
git clone https://github.com/PLCMercenary/chrome-bridge.git
cd chrome-bridge
npm ci # one dependency: ws
./bin/chrome-bridge.mjs pair # generates the shared secretpair writes the secret to ~/.config/chrome-bridge/secret and
extension/pair.json (both mode 0600, and pair.json is gitignored). Run it
again any time to rotate the secret.
Then load the extension:
Open
chrome://extensionsand turn on Developer mode.Click Load unpacked and pick the
extension/folder.After any
pairrotation or code update, click the reload icon on the extension's card.
Optionally put the CLI on your PATH:
ln -s "$PWD/bin/chrome-bridge.mjs" ~/.local/bin/chrome-bridgeConnect your agent
Use absolute paths. GUI clients often don't inherit your shell's PATH, so
point at the real node binary (command -v node).
Claude Code
claude mcp add --scope user chrome-bridge -- "$(command -v node)" "$PWD/bin/chrome-bridge.mjs" mcpCodex
codex mcp add chrome-bridge -- "$(command -v node)" "$PWD/bin/chrome-bridge.mjs" mcpCursor (~/.cursor/mcp.json), or any client that takes the usual JSON form:
{
"mcpServers": {
"chrome-bridge": {
"command": "/absolute/path/to/node",
"args": ["/absolute/path/to/chrome-bridge/bin/chrome-bridge.mjs", "mcp"]
}
}
}Anything else can use the CLI:
chrome-bridge tools
chrome-bridge call bookmarks_tree '{"depth": 1}'
chrome-bridge call tab_group_create '{"title":"Docs","color":"blue","urls":["https://developer.chrome.com/docs/extensions"]}'Tools
Tool | Writes | What it does |
| Bookmark tree, optionally from an | |
| Title or URL substring search; each hit includes its folder path | |
| yes | New folder under |
| yes | New bookmark, same parent options |
| yes | Rename, or change a bookmark's URL |
| yes | Move to another folder and/or position |
| yes | Delete; |
| Open windows, their tabs, and open tab groups | |
| yes | Group new |
| yes | Rename, recolor, collapse or expand |
| yes | Add URLs or tabs to a group |
| yes | Remove the group, keep the tabs |
| yes | Remove the group by closing its tabs |
Colors: grey, blue, red, yellow, green, pink, purple, cyan,
orange.
Folder paths
Paths look like Bookmarks bar/Work/Servers and match case-insensitively.
Recent Chrome versions keep two copies of each root folder when you're signed
in: a synced account copy and a local-only copy, merged in the UI. The bridge
searches both and prefers the synced one, so new items sync to your account.
If a name is ambiguous, the error lists the candidate ids so you can use
parentId instead.
Known limits
Closed saved tab groups are invisible. Chrome doesn't expose saved groups to extensions while they're closed. Click a group's chip to open it and the bridge can see and edit it.
Whether ungrouping or closing an open saved group also deletes the saved chip hasn't been verified yet.
Incognito windows are only visible if you allow the extension in incognito.
Troubleshooting
Symptom | Fix |
| Chrome isn't running, the extension is disabled, or the popup switch is off. Open the popup to check. |
| Run |
Connects, then drops immediately | The secrets don't match. Re-run |
| More than five servers are running. Close a client or two. |
"WebSocket connection failed" in the extension's error log | Expected while no agent is connected: it's the 30 s check finding nothing. |
Layout
bin/chrome-bridge.mjs MCP server + CLI (Node, ESM)
extension/manifest.json MV3 manifest: bookmarks, tabs, tabGroups, alarms, storage
extension/background.js connection, auth, and the command table
extension/popup.* on/off switch and connection status
assets/logo.svg project logoLicense
This server cannot be deployed
Maintenance
Related MCP Connectors
A paid remote MCP for AI agent browser DevTools MCP, built to return verdicts, receipts, usage logs,
Live browser debugging for AI assistants — DOM, console, network via MCP.
Personal knowledge MCP: capture bookmarks, notes & todos by chat; archive pages; search memory.
Shared long-term memory vault for AI agents with 20 MCP tools.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables MCP-compatible AI agents to securely control Chrome tabs via a local bridge, with explicit per-tab sharing and human approval for consequential actions.MIT
- AlicenseNot gradedqualityAmaintenanceConnects AI agents to your Chrome browser via MCP, enabling real-time control of existing tabs, sessions, and application state for development workflows.MIT
- FlicenseNot gradedqualityBmaintenanceExposes your Chrome/Edge browser as MCP tools for AI agents, enabling browser automation through a Chrome extension with 47 tools for navigation, interaction, page reading, and more.21 npm-
- AlicenseAqualityBmaintenanceEnables reading and writing Chrome bookmarks (folders, URLs, search, move, remove) through MCP clients like Claude Code, using a companion Chrome extension for secure local communication.11175 npmMIT