Browser Link
Connects ChatGPT to selected Chrome tabs via MCP, enabling browser inspection, snapshots, clicks, fills, selections, scrolling, navigation, and screenshots within user-authorized tabs.
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 Linkinspect my enabled tab and click the Sign in button"
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 Link · personal preview
Connect selected Chrome tabs to ChatGPT through a private MCP connection. The server is Rust. Page inspection, element references, input handling, and command validation are Rust compiled to WebAssembly. A small JavaScript adapter connects Chrome's extension APIs to that core.
Status: the Rust server and Wasm core build successfully. Automated integration tests exercise the real MCP, OAuth, WebSocket, and Wasm components with DOM/Chrome API fixtures. Native Chrome verification is still required: the build workspace blocks the Unix sockets Chrome needs. This is a personal preview, not a verified production release.
What is included
Folder | Purpose |
| Loadable Chrome extension, including prebuilt Wasm |
| Rust MCP server, OAuth authorization, pairing and WebSocket bridge |
| Rust/Wasm validation, snapshots, clicks, fills and selections |
| Portable Agent Plugins manifest and browser-control skill |
| Static Linux x86_64 server in the packaged release |
| Integration suite and separate native Chrome suite |
| Results and limitations of the packaged build |
No separate AI API key is needed by this bridge; it makes no model API calls. ChatGPT uses the exposed tools within the user's account permissions and plan limits. Browser Link does not run autonomously after the ChatGPT task stops.
Related MCP server: Tabryn
1. Run the bridge
For a local extension test on Linux x86_64, extract the package, open a terminal in it, and run:
chmod +x bin/browser-link-server-linux-x86_64
./bin/browser-link-server-linux-x86_64The server binds to 127.0.0.1:7319. It creates a private setup key at data/admin.key. To display that key in your own terminal:
./bin/browser-link-server-linux-x86_64 --show-keyFor Windows/macOS, use Docker Desktop or build the Rust server on that machine. Docker also works on Linux:
docker compose up --build -d
docker compose exec bridge browser-link-server --show-keyKeep the setup key local. Enter it in the extension and the bridge's own OAuth page, never in ChatGPT messages. The extension stores a separate device token after pairing and discards the setup key.
2. Load the extension
Open
chrome://extensionsand enable Developer mode.Select Load unpacked, then select this package's
extensionfolder.Pin Browser Link to the toolbar and open it.
Enter the bridge origin (
http://127.0.0.1:7319for a local test) and its setup key.Select Pair browser. Chrome requests access only to that bridge address.
Open the website you want to use. Click the toolbar extension and select Enable this tab.
Pairing grants no website access. Each enabled tab remains limited to its current origin. Navigating to another site or closing the tab revokes access. Stop all access disconnects and clears every enabled tab. Unpair this browser also revokes its device token at the reachable bridge.
3. Make the bridge reachable from ChatGPT
ChatGPT on the web cannot connect to the 127.0.0.1 address on your computer. For use here, run the bridge behind HTTPS on a server, or forward its entire origin through an HTTPS tunnel. Forward all routes, not just /mcp: OAuth discovery, sign-in, token exchange, pairing and /bridge WebSocket also need to work.
Set BROWSER_LINK_PUBLIC_URL to the real external origin before starting the bridge. For Docker, create a local .env file containing your actual address, for example:
BROWSER_LINK_PUBLIC_URL=https://browser.example.combrowser.example.com is an example; replace it with a domain you control. The Compose file exposes the bridge only on localhost. A reverse proxy on the same machine can provide TLS; see docs/Caddyfile.example. The server only accepts HTTP public URLs for loopback development. Keep the public URL stable so OAuth discovery and persisted connections remain consistent.
In the extension, pair with the real HTTPS origin. Then, in ChatGPT:
Open Plugins → + → Add custom MCP server.
Name it Browser Link and enter
https://YOUR-ACTUAL-HOST/mcp.Choose OAuth/automatic OAuth discovery and create the personal plugin.
In the bridge's authorization page, enter the setup key and approve the connection.
Start a new chat with Browser Link enabled. Ask it to inspect the tab you enabled.
Account/workspace policies still apply. Personal custom MCP setup does not submit the plugin to a public directory. No public listing has been created by this project.
The included personal skill guides tool use, but cannot establish the MCP connection itself. For a portable plugin package, run:
python3 scripts/configure-plugin.py https://YOUR-ACTUAL-HOST/mcpThis creates plugin/mcp.json with the real endpoint. plugin/mcp.example.json is documentation only. The plugin folder can then be used with a supported local/repo marketplace. Registering the custom MCP endpoint in ChatGPT remains a separate step.
Available tools
browser_status, browser_tabs, browser_snapshot, browser_click, browser_fill, browser_select, browser_scroll, browser_navigate, browser_screenshot.
Snapshots return text, current field values except password/file inputs, and up to 250 interactive element references. A new snapshot invalidates old references. Removed/hidden elements and changed element identities are rejected. Clicks may have real consequences; the agent must follow the user's authorized task and verify outcomes. Timed-out actions are not retried automatically.
This version operates the top-level document. It does not automate password entry, file uploads, browser settings, arbitrary JavaScript, cross-origin frames, closed shadow roots, or canvas controls. Screenshots use the active enabled tab's visible viewport and can contain private page content. The extension has no cookie-export or browsing-history API. There is one paired, connected browser per bridge.
Build from source
Install Rust and the pinned toolchain, then:
rustup target add wasm32-unknown-unknown --toolchain 1.99.1
cargo install wasm-bindgen-cli --version 0.2.129 --locked
python3 scripts/build.pyThis builds the server for your operating system and refreshes the loadable extension. The release already contains the extension's Wasm assets, so loading it does not require Rust on the browser machine.
Verify
cargo test --workspace
cargo clippy --workspace --all-targets -- -D warnings
cargo clippy -p browser-link-core --target wasm32-unknown-unknown -- -D warnings
npm ci
npm testFor the packaged static Linux binary, set BROWSER_LINK_TEST_BINARY to its absolute path before npm test; otherwise the suite uses target/release/browser-link-server.
On a normal computer, run the real Chrome suite:
npx playwright install chromium
npm run test:chromeIf using an existing Chrome for Testing/Chromium binary, set CHROME_PATH to its executable path. The test copy of the manifest pre-grants only its local fixture origins; the distributed manifest is unchanged. Actual toolbar permission prompting and viewport capture require this short manual check:
Load the original extension and pair it. Confirm that no tabs appear before enabling one.
Open the toolbar extension on a harmless form, enable the tab, then ask ChatGPT to fill it without submitting.
Ask for a screenshot; confirm it captures the enabled tab. Check the filled values yourself.
Navigate to another site; verify that access is removed until you enable that site.
Select Stop all access; verify that further actions fail. Reconnect and confirm previous tabs stay disabled.
Back up the private data directory or Docker volume if you want pairings and OAuth sessions to survive moving the bridge. Access tokens expire after one hour; rotating refresh tokens expire after 30 days. No page snapshots or screenshots are persisted by the server.
References
This server cannot be deployed
Maintenance
Related MCP Connectors
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
Live browser debugging for AI assistants — DOM, console, network via MCP.
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
A paid remote MCP for AI agent browser DevTools MCP, built to return verdicts, receipts, usage logs,
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables 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 gradedqualityCmaintenanceConnects AI agents to your Chrome browser via MCP, enabling real-time control of existing tabs, sessions, and application state for development workflows.MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to control and interact with a Chrome browser via MCP, providing tools for navigation, screenshots, clicking, form filling, content extraction, and tab management.-
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to request and receive user-granted, short-lived access to a single tab in the user's existing Chromium-based browser, then read, highlight, scroll, and navigate within that granted page without exposing other tabs or copying the browser profile.Apache 2.0