deeporax-browser-mcp
Controls the Arc browser through the MCP server, enabling navigation, DOM inspection, clicking, typing, screenshots, and JavaScript execution in real browser tabs.
Controls the Brave browser through the MCP server, enabling navigation, DOM inspection, clicking, typing, screenshots, and JavaScript execution in real browser tabs.
Click on "Install 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., "@deeporax-browser-mcpnavigate to example.com and take a screenshot"
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.
deeporax-browser-mcp
Control a real Chrome browser from any MCP client: navigate, snapshot the DOM with element refs, click, type, screenshot, read the console, and run JS.
Headless tools launch a throwaway browser. This one drives the browser you are already using, with your profile, your logins, and your open tabs. An on-page overlay shows what the agent is doing and lets you stop it at any moment.
Once installed, prompts like this just work:
use deeporax browser mcp to create the google ads campaign for this project
The agent opens your Chrome, reads the page structure, and clicks through the UI while you watch.
How it works
AI client (Claude Code, Cursor, VS Code, ...)
| stdio (MCP)
v
deeporax-browser-mcp (Node.js)
| WebSocket ws://127.0.0.1:17373
v
Chrome extension (MV3)
|
v
Your Chrome tabs (DOM + screenshots)Your AI client starts the server automatically when a chat session opens, so you never run it yourself. The extension connects to it over localhost.
Related MCP server: MCP Browser
Install
Two parts, both required:
The MCP server — one line for your AI client
The Chrome extension — load unpacked, once
Takes about two minutes.
A. Install the MCP server
Pick a runner
Every config below uses npx -y deeporax-browser-mcp. Swap in whichever runner you prefer:
Runner |
|
|
npm (default) |
|
|
Bun |
|
|
pnpm |
|
|
Yarn |
|
|
Deno |
|
|
Global install |
|
|
A global install starts faster and gives a stable extension path, which matters for step B:
npm install -g deeporax-browser-mcp
bun add -g deeporax-browser-mcp
pnpm add -g deeporax-browser-mcp
yarn global add deeporax-browser-mcpRequires Node.js 18+.
Claude Code
claude mcp add deeporax-browser-mcp -- npx -y deeporax-browser-mcpAdd -s user to enable it in every project. Verify with claude mcp list.
Other clients
Click your tool to expand.
~/.cursor/mcp.json (global) or .cursor/mcp.json (per project):
{
"mcpServers": {
"deeporax-browser-mcp": {
"command": "npx",
"args": ["-y", "deeporax-browser-mcp"]
}
}
}~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"deeporax-browser-mcp": {
"command": "npx",
"args": ["-y", "deeporax-browser-mcp"]
}
}
}.vscode/mcp.json in your workspace. VS Code uses servers, not mcpServers:
{
"servers": {
"deeporax-browser-mcp": {
"type": "stdio",
"command": "npx",
"args": ["-y", "deeporax-browser-mcp"]
}
}
}Then enable it from the tools picker in Copilot Chat (Agent mode).
claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"deeporax-browser-mcp": {
"command": "npx",
"args": ["-y", "deeporax-browser-mcp"]
}
}
}Restart Claude Desktop after editing.
settings.json. Zed uses context_servers:
{
"context_servers": {
"deeporax-browser-mcp": {
"source": "custom",
"command": "npx",
"args": ["-y", "deeporax-browser-mcp"]
}
}
}Open the MCP Servers panel, choose Configure MCP Servers, and add:
{
"mcpServers": {
"deeporax-browser-mcp": {
"command": "npx",
"args": ["-y", "deeporax-browser-mcp"]
}
}
}~/.continue/config.yaml:
mcpServers:
- name: deeporax-browser-mcp
command: npx
args: ["-y", "deeporax-browser-mcp"]~/.gemini/settings.json:
{
"mcpServers": {
"deeporax-browser-mcp": {
"command": "npx",
"args": ["-y", "deeporax-browser-mcp"]
}
}
}~/.codex/config.toml (TOML, not JSON):
[mcp_servers.deeporax-browser-mcp]
command = "npx"
args = ["-y", "deeporax-browser-mcp"]opencode.json:
{
"mcp": {
"deeporax-browser-mcp": {
"type": "local",
"command": ["npx", "-y", "deeporax-browser-mcp"],
"enabled": true
}
}
}Settings → Extensions → Add custom extension, type StandardIO, command:
npx -y deeporax-browser-mcpSettings → Tools → AI Assistant → Model Context Protocol (MCP) → Add, then use command npx with args -y deeporax-browser-mcp, or paste the standard mcpServers block.
Settings → AI → Manage MCP servers → Add, then paste the standard mcpServers block.
Program → Install → Edit mcp.json, then paste the standard mcpServers block.
Any MCP client that speaks stdio works. The universal shape is:
{
"mcpServers": {
"deeporax-browser-mcp": {
"command": "npx",
"args": ["-y", "deeporax-browser-mcp"],
"env": { "DEEPORAX_MCP_PORT": "17373" }
}
}
}Ready-made examples live in configs/.
B. Install the Chrome extension
The npm package ships the unpacked extension. Works in Chrome, Edge, Brave, Arc, and other Chromium browsers.
Option 1: from the installed package (recommended)
Print the folder:
node -e "const p=require('path');console.log(p.join(p.dirname(require.resolve('deeporax-browser-mcp/package.json')),'extension'))"Or ask your agent to run browser_status, which prints the exact path.
Then:
Open
chrome://extensionsEnable Developer mode
Load unpacked and select that folder
Pin Deeporax Browser MCP. The badge shows ON when the server is connected.
Prefer a global install for this step. With
npx, the package lives in a cache directory that can move between runs.
Option 2: download a release zip
Grab extension-dist.zip from Releases, unzip, and load it the same way.
Option 3: build from source
See Install from source, then load packages/mcp-server/extension/.
C. Verify
Ask your agent:
use browser_status then snapshot my current tab
You should see connected: true and a DOM snapshot with refs like e1, e2.
Tools
32 tools, grouped by what you reach for.
See the page
Tool | Purpose |
| Accessibility-style DOM with refs |
| PNG of the visible viewport |
| Search the page by text or regex, returns refs |
| Read raw content |
| Element box in CSS pixels |
Act on it
Tool | Purpose |
| Click by |
| Click at viewport coordinates (computer-use style) |
| Type into an input, optionally submit |
| Fill many fields in one call |
| Key or chord, e.g. |
| Hover an element |
| Drag one element onto another |
| Choose |
| Scroll the page or an element into view |
| Set files on |
Move around
Tool | Purpose |
| Go to a URL, optionally in a new tab |
| list / new / close / select |
| History |
| Wait for time, text, or a selector |
| Resize the browser window |
Debug
Tool | Purpose |
| Read console log/warn/error, filterable by regex |
| List recent network requests |
| Run JavaScript in the page |
| Decide alert/confirm/prompt behavior up front |
Session
Tool | Purpose |
| Extension connection and active tab |
| Show/hide the overlay, or resume after a user pressed Stop |
| Outline an element so a human can see it |
| Run several actions in one round-trip |
| Delete saved snapshots and screenshots |
The loop that works
browser_navigate → browser_snapshot → browser_click / browser_type → browser_snapshotSnapshots hand back refs like e1, e2. Use those instead of CSS selectors when
you can: they survive markup churn better and are what the click and type tools
expect. Refs go stale after navigation, so snapshot again after the page
changes.
Agent control overlay
You can always see when an agent is driving a tab, and stop it.
A pulsing orange border around the viewport
A status pill naming the current action: Deeporax — clicking link "Sign in"
A Stop button that halts agent control for that tab
A cursor that glides to each target and pulses right before the click fires
The pill appears automatically during any action and hides after 15 seconds of inactivity.
Stop is a hard stop. Every later action in that tab returns an error until you
call browser_overlay with action: "resume". To run one action without the
visuals, pass overlay: false to it.
The overlay lives in a closed shadow root, so page CSS cannot restyle it and page
scripts cannot read it. Everything is pointer-events: none except the Stop button,
so it never blocks clicks, and animations are disabled under
prefers-reduced-motion.
How the connection works
There is no daemon and nothing to start by hand.
MCP client (Claude, Cursor, ...)
| spawns on demand, over stdio
v
deeporax-browser-mcp <- one process per MCP client
| WebSocket server on 127.0.0.1:17373
v
Chrome extension <- connects out, retries every 2sStartup. Your MCP client launches the server the first time a browser tool is called, or when the client starts. The server opens the bridge port. The extension is already retrying in the background, so it attaches within about two seconds.
Shutdown. The server exits when its client exits: closing stdin, SIGINT, SIGTERM, and SIGHUP all shut it down and release the port. Nothing survives the session, so there is no process to clean up later.
Two clients at once. Only one server can own the port. A second one asks the incumbent to hand over, and the incumbent closes its listener so the newcomer can bind. The extension reconnects to whoever owns the port. If the port is held by something that never yields, the new server gives up after 10 attempts and goes into standby: it stops retrying and its tools explain the conflict instead of burning a timer for the rest of the session.
If the extension shows a disconnected badge, the server is simply not
running yet. Ask your agent for browser_status, which starts it. The popup's
Reconnect button forces a fresh attempt immediately.
Port. Set DEEPORAX_MCP_PORT on the server if 17373 is taken. The extension
currently expects 17373, so change both sides together.
Temporary files
Snapshots and screenshots are written under:
/tmp/deeporax-browser-mcp/snapshots/*.txt
/tmp/deeporax-browser-mcp/screenshots/*.pngAuto-pruned after 30 minutes, and capped at 40 files per kind
Tool results include the saved path
persistOnly: truereturns only the path (handy when the body is huge)browser_clear_tmpdeletes one path or wipes the whole tree/tmpis also cleared on reboot on many systems
Configuration
Env | Default | Meaning |
|
| Local WebSocket port (server + extension must match) |
The extension currently hardcodes port 17373. Change both sides if you need another port.
Install from source
git clone https://github.com/imfaisii/deeporax-browser-mcp.git
cd deeporax-browser-mcp
bun install
bun run buildnpm install, pnpm install, and yarn install work too. The extension bundle is built with Bun.
Point your MCP config at the local binary:
{
"mcpServers": {
"deeporax-browser-mcp": {
"command": "node",
"args": ["/ABS/PATH/deeporax-browser-mcp/packages/mcp-server/dist/index.js"]
}
}
}Load the extension from packages/mcp-server/extension/.
Development commands:
bun run typecheck
bun run smoke
bun run pack:dryTroubleshooting
connected: false or "extension not connected"
Chrome must be open with the extension loaded. Check that the toolbar badge reads ON, and that the folder you loaded matches the path browser_status reports.
ERR_CONNECTION_REFUSED on 127.0.0.1:17373 in the extension console
Nothing is serving the bridge yet. Your MCP client starts the server on demand, so open a chat session in that client. Do not run the server yourself in a terminal; two servers competing for the port is the usual cause.
Tools fail on chrome:// pages
Chrome blocks extensions on chrome://, the Web Store, and other privileged pages. Switch to a normal http(s) tab.
Snapshot returns few elements on a complex app
Cross-origin iframes are not walked yet. Use browser_evaluate or a CSS selector for those regions.
Security
The bridge listens on 127.0.0.1 only
The extension can read and modify pages you visit and capture screenshots
browser_evaluateruns arbitrary JS in the page. Treat MCP access like full browser controlPrefer a dedicated Chrome profile for automation when you can
See SECURITY.md for private vulnerability reporting
Limitations
Viewport screenshots only (not full-page scroll)
chrome://and Chrome Web Store pages are blocked by ChromeMV3 service workers can sleep; an alarm + reconnect loop keeps the bridge healthy
Cross-origin iframes are not walked by the snapshot
One extension connection at a time (newest wins)
Contributing
See CONTRIBUTING.md.
License
MIT © Faisal Ashfaq
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseCqualityDmaintenanceAn MCP server that gives Claude Code real browser control for web automation, testing, and screenshots.Last updated3296154MIT
- Alicense-qualityCmaintenanceAn MCP server for browser automation and console log capture via a Chrome extension, enabling AI-driven DOM interaction, navigation, and screenshot capabilities.Last updated2MIT
- Alicense-qualityCmaintenanceA lean, LLM-first browser automation MCP server that gives Claude (or any MCP client) a real Chromium browser to navigate, interact with, and debug web apps.Last updated46MIT
- Alicense-qualityDmaintenanceMCP server to control Chrome browsers locally or remotely via the Claude extension, enabling navigation, form filling, screenshots, and JavaScript execution from any MCP client.Last updatedMIT
Related MCP Connectors
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
Live browser debugging for AI assistants — DOM, console, network via MCP.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/imfaisii/deeporax-browser-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server