Vibe MCP
About
Drive your real, logged-in Chrome from any MCP client, including an agent running on another machine with no inbound port open.
Details
- Transport
- SSE
Explore
Setting up with Highlight
This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:
- Download and install Highlight from highlightai.com/download
- Navigate to the plugins tab and select "Add Custom Plugin"
-
Configure the plugin with the settings below
Plugin Name
Vibe MCPCommand (node, npx, python, etc.)Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.
- Enable "Start Automatically" if you want the plugin to start when Highlight launches
From the repository
Paste the block below into yourOpenClaworHermesagent. Replace the last line with your remote value — the connector URL (https://relay.api.vibebrowser.app/mcp/<uuid>) shown in the Vibe extension'sSettings → AI Agent Control → Remote (internet) → Relay access(a bare UUID or awss://relay URL also still work). That's the only edit you make.
You are setting yourself up to control my real Chrome through Vibe Browser. Work through the steps in order, and after each step confirm it worked before moving on. Do not claim a step is done until you have proven it. 1. Install the "vibebrowser" skill for your runtime: - OpenClaw: npx -y skills add VibeTechnologies/vibe-mcp -s vibebrowser -a openclaw -g -y --copy --dangerously-accept-openclaw-risks then run openclaw skills list and confirm a "vibebrowser" row shows "ready" as installer registration. - Hermes: npx -y skills add VibeTechnologies/vibe-mcp -s vibebrowser -y optional installer registration check: npx -y skills list shows a "vibebrowser" row. 2. Remember my remote so I only give it to you once. Save it to a file vibebrowser-cli.md in your persistent agent workspace root (the directory that holds your memory/ folder — not the shell's working dir, not $HOME unless they are the same) as a line remote: <value>; if your runtime can also write memory keys, additionally store it under vibebrowser_remote. On every later command — including the first message of a new conversation — load it back from that file and reuse it without asking me again. 3. Record a standing rule so you route correctly later: whenever I ask you to do anything in MY browser / MY Chrome / MY tabs / the page I'm on, use this vibebrowser skill (npx -y @vibebrowser/cli@latest with my saved remote) to drive my REAL browser — never your built-in, headless, or in-pod browser, never web-fetch instead, and never run vibebrowser. Save this rule wherever your standing instructions/memory live so it applies in future conversations. 4. Confirm you can control my Chrome, retrying on "Extension reconnecting" (wait 3s, up to 5x): npx -y @vibebrowser/cli@latest --remote "<my remote>" --json status --wait-for-extension --wait-timeout 20000 npx -y @vibebrowser/cli@latest --remote "<my remote>" --json snapshot --format aria Then report: (1) is extensionConnected true, (2) did the snapshot return my real page content? My remote: <PASTE YOUR CONNECTOR URL, UUID, OR wss:// URL HERE>
The browser-automation MCP space moved fast. Most of what used to differentiate us is now table stakes — so here is an honest scorecard. Where a competitor matches us, the column saysYes.
- Outbound, cross-machine control.The Vibe extension opens an outbound WebSocket to a relay (wss://relay.api.vibebrowser.app/<uuid>). Nothing listens on the user's machine, nothing is port-forwarded, and the agent can live in a pod, a cron job, or a chat bot. No competitor documents an extension-initiated outbound connection to a remote MCP server.
- Real profile without the dialog tax.Chrome DevTools MCP needs approval foreachWebSocket connection to Chrome (](https://vibebrowser.app)#1794, open; persistence wasclosed won't-fix). The maintainer's workaround —--remote-debugging-portwith a dedicated--user-data-dir— avoids the dialog by giving up your logged-in profile. So:skip the dialog, or use your real profile — not both.
- Vendor lock-in.Claude for Chrome is GA, clicks and types via thedebuggerpermission, and supports scheduled tasks — it is the closest competitor. But it only drives Anthropic's own surfaces (side panel, Claude Desktop connector, Cowork, Claude Code). There is no public API or MCP surface, so Codex, OpenCode, Hermes and OpenClaw cannot use it. Vibe MCP is agent-agnostic.
- Stability.Chrome DevTools MCP is explicitly experimental and currently carries open memory-leak (#2431,#2291,#2456) and concurrency (#1763,#1921) issues.
Run Claude Desktop, Cursor, VS Code Copilot, and OpenCode at once — they share control of one browser through the relay, which multiplexes requests and routes each response back to the agent that asked.
Claude Desktop Cursor VS Code OpenCode | | | | v v v v [vibebrowser-mcp] [vibebrowser-mcp] [vibebrowser-mcp] [vibebrowser-mcp] | | | | +------------------+----------------+---------------+ | v [Relay Daemon] <-- Auto-spawned, handles multiplexing | v [Vibe Extension] | v [Your Chrome]
- Multi-Agent Ready- Run Claude, Cursor, VS Code, and more simultaneously against one browser
- Uses Your Browser- No separate browser instance, uses your existing Chrome with all your logins
- Remote-capable- The extension dials out to a relay, so the agent can run on another machine with no inbound port
- Local by default- In local mode everything stays on127.0.0.1; only remote relay mode routes traffic throughrelay.api.vibebrowser.app
- Direct Chrome DevTools mode- Extension tools stay primary by default; use--devtoolsto drive your real running Chrome directly over the DevTools Protocol (no extension required)
Install the Vibe AI Browser extension in Chrome, Brave, or any Chromium browser:
Option A: Chrome Web Store (Recommended)
- Visit theChrome Web Store
- Click "Add to Chrome"
- The Vibe icon will appear in your toolbar
- Download thelatest release ZIP
- Extract to a permanent folder
- Go tochrome://extensions, enable Developer Mode
- Click "Load unpacked" and select the extracted folder
For detailed instructions, see theinstallation guide.
- macOS:~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:%APPDATA%\Claude\claude_desktop_config.json
{ "mcpServers": { "vibe": { "command": "npx", "args": ["-y", "@vibebrowser/mcp"] } } }
- Open Cursor Settings (Cmd/Ctrl + ,)
- Go to "Features" -> "MCP Servers"
- Click "Add Server" and add:
{ "vibe": { "command": "npx", "args": ["-y", "@vibebrowser/mcp"] } }
{ "github.copilot.chat.mcpServers": { "vibe": { "command": "npx", "args": ["-y", "@vibebrowser/mcp"] } } }
Edit~/.codeium/windsurf/mcp_config.json:
{ "mcpServers": { "vibe": { "command": "npx", "args": ["-y", "@vibebrowser/mcp"] } } }
{ "mcp": { "servers": { "vibe": { "command": "npx", "args": ["-y", "@vibebrowser/mcp"] } } } }
{ "mcpServers": { "vibe": { "command": "npx", "args": ["-y", "@vibebrowser/mcp"] } } }
All three share one config file:~/.codex/config.toml. Configure once, use everywhere.
codex mcp add vibe -- npx -y @vibebrowser/mcp
Or add the table to~/.codex/config.tomlby hand (Codex usesTOML, not JSON):
[mcp_servers.vibe] command = "npx" args = ["-y", "@vibebrowser/mcp"]
In the ChatGPT desktop app you can also use the UI:Settings → MCP servers → Add server, chooseSTDIO, commandnpx, args-y @vibebrowser/mcp, thenRestart.
Verify withcodex mcp list, or type/mcpin the Codex TUI or the desktop composer.
ChatGPT on the web does not read local Codex config, so a local MCP server like Vibe is not available there.
Use the shortest direct package invocation for the MCP server:
npx -y @vibebrowser/mcp@latest --help npx -y @vibebrowser/mcp@latest start --transport http npx -y @vibebrowser/mcp@latest openclaw --remote "$VIBE_REMOTE_URL"
Backward-compatible aliases still work when you need explicit binaries:
npx -y -p @vibebrowser/mcp@latest vibebrowser-mcp --help npx -y -p @vibebrowser/mcp@latest vibe-mcp --help
Everything above assumes the client can spawn a local process. Hosted assistants cannot: Claude on the web / in Cowork / on mobile, and ChatGPT on the web, run in the vendor's cloud with no access to your machine. They accept aremote MCP server URLand nothing else — no command, no arguments, and no custom request headers.
For those, skip@vibebrowser/mcpentirely. The extension alone is enough:
https://relay.api.vibebrowser.app/mcp/<your-extension-uuid>
Find<your-extension-uuid>in the extension:Vibe icon → Settings → AI Agent Control → Remote (internet) → Relay access. That panel shows this exact connector URL, and the same string is now thepreferredvalue for the CLI/server--remoteflag — paste it in both places, no translation needed:
VIBE_REMOTE_URL="https://relay.api.vibebrowser.app/mcp/00000000-0000-0000-0000-000000000000" npx -y @vibebrowser/mcp@latest start --remote "$VIBE_REMOTE_URL"
A bare extension UUID or awss://relay.api.vibebrowser.app/<uuid>relay URL are still accepted as advanced/compatibility forms — see the accepted--remotevalues table in "Cloud OpenClaw -> Local Browser" below.
This is a plainStreamable HTTPMCP endpoint. There isno OAuth consent flow, no dynamic client registration, and no scope setupon this path — the UUID in the URL (or header, below) is the entire credential. If a client insists on an OAuth login before it will add the server, that client is not supported here; use the local stdio path instead.
Custom connectors are a paid-plan feature in the Claude and ChatGPT products.
Codex Desktop, Codex CLI and the Codex IDE extension can spawn a local process, and they all share~/.codex/config.toml. Prefer the local stdio entry above — it keeps traffic on127.0.0.1and keeps the UUID out of a URL. Usecodex mcp add vibe --url …only when the browser you want to drive is on a different machine from Codex. The ChatGPTdesktop appis Codex-backed and reads the same config, so it is a local-stdio surface too; only ChatGPTwebneeds the hosted URL.
vibebrowser-mcp
connects to the local relay on port`19888`
Pass--devtoolsto either CLI to bypass relay/extension routing entirely and drive yourreal running Chromedirectly over the Chrome DevTools Protocol. This backend (ported from thechrome-useskill) reads Chrome'sDevToolsActivePortfile and autoConnects to your live profile — no extension, no external MCP server, zero extra dependencies. Requires Chrome 144+; the permission dialog fires once per profile.
--devtoolsexposes a focused tool set:navigate,snapshot(accessibility tree with@eNrefs),click,fill,type,press_key,hover,scroll,screenshot,eval,get_text,get_url,get_title, and tab management (list_tabs,new_tab,select_tab,close_tab). Usesnapshotto get@eNelement refs, then pass them as selectors toclick/fill/type.
Override the Chrome profile/channel withVIBE_CHROME_USER_DATA_DIRandVIBE_CHROME_CHANNEL(stable|canary|beta|dev).
Not yet covered by--devtoolsv1 (addable later as more CDP domains are wired): network request inspection, console logs, performance traces, Lighthouse, memory snapshots, device emulation, dialog handling, file upload, and drag.
Claude / Cursor / VS Code (stdio) │ ▼ [vibebrowser-mcp] │ ws://127.0.0.1:19888 ▼ Local Relay (auto-spawned) │ ws://127.0.0.1:19889 ▼ Vibe Extension (Chrome)
- AI applications connect via MCP over stdio
- vibebrowser-mcpconnects to the local relay on port19888
- The relay forwards commands to the extension on port19889
- Results flow back to the agent
Don't conflate them — the transport to the MCP server is configurable, the transport to the extension is not.
MCP client ──stdio──┐ ├──> [vibebrowser-mcp] ──ws──> [relay] ──ws──> [extension] MCP client ──http───┘
Streamable HTTP lets a remote or hosted agent — one that can't spawn a stdio subprocess — talk to the server over a URL:
npx -y @vibebrowser/mcp@latest start --transport http # serves POST/GET http://127.0.0.1:8788/mcp
Defaults:--host 127.0.0.1,--http-port 8788,--http-path /mcp. Add--allow-host <host>(repeatable) if you front it with a proxy or bind it beyond localhost.
When multiple agents connect, Vibe MCP automatically spawns a relay daemon:
- First agent starts the relay (listens on ports 19888 and 19889)
- Additional agents connect to the relay as clients
- Relay multiplexes all agent requests to the single extension connection
- Each agent receives only its own responses
⚠️Security:The--remotevalue below is a live credential — a relay URL/UUID/connector URL grants full control of the target browser session. It is thesolebearer credential (there is no second-factor token). Treat it like a password: keep it secret, never commit it or paste it into logs, and if it leaks, regenerate it in the Vibe extension Settings.
--remote(and the MCPset_remotetool) accept three forms, all normalized to the same relay connection:
Self-hosted or local relays derive the same way:https://your-host/vibe/mcp/<uuid>→ relaywss://your-host/vibe; a loopback connector likehttp://127.0.0.1:19889/mcp/<uuid>→ws://127.0.0.1:19889(self-hosted/local relay only — non-loopback hosts must usehttps:///wss://).
Rejected: an invalid UUID; a URL with embedded credentials, a query string, or a fragment; plaintexthttp:///ws://for a non-loopback host; and any HTTP(S) URL that doesn't end in the exact/mcp/<uuid>suffix.
If your agent runs in the cloud but you want it to control the user's real local browser, runvibebrowser-mcpin HTTP mode and connect it to the Vibe extension in remote relay mode. Pass the connector URL (preferred), the extension UUID, or the full WebSocket relay URL to--remote.
VIBE_REMOTE_URL="https://relay.api.vibebrowser.app/mcp/00000000-0000-0000-0000-000000000000" npx -y @vibebrowser/mcp@latest start --transport http --remote "$VIBE_REMOTE_URL"
This exposes a local MCP endpoint athttp://127.0.0.1:8788/mcpby default.
When OpenClaw runs on a different machine (for example cloud-hosted), provide a reachable URL:
VIBE_REMOTE_URL="https://relay.api.vibebrowser.app/mcp/00000000-0000-0000-0000-000000000000" PUBLIC_MCP_URL="https://browser-bridge.example.com/mcp" npx -y @vibebrowser/mcp@latest openclaw --remote "$VIBE_REMOTE_URL" --public-url "$PUBLIC_MCP_URL"
You can print the exact OpenClaw-friendly setup with:
VIBE_REMOTE_URL="https://relay.api.vibebrowser.app/mcp/00000000-0000-0000-0000-000000000000" npx -y @vibebrowser/mcp@latest openclaw --remote "$VIBE_REMOTE_URL"
Claude Desktop / Cursor
Paste into your MCP client config file to install this server.
{
"mcpServers": {
"vibe mcp": {
"server": {
"command": "npx",
"args": [
"-y",
"@vibebrowser/mcp"
]
}
}
}
}
McpServers
{
"server": {
"command": "npx",
"args": [
"-y",
"@vibebrowser/mcp"
]
}
}
Transport
"stdio"
Package
"@vibebrowser/mcp"
Registry
"npm"
MCP server for[Vibe AI Browser— drive yourreal, logged-in Chromefrom any MCP client, including agents running on adifferent machinewith no inbound port open.
⚠️Security — treat your relay URL/UUID like a password.A relay URL or extension UUID (wss://relay.api.vibebrowser.app/<uuid>) grantslive control of your browser session(read your tabs, take screenshots, read page content). Never share it, paste it into a chat with untrusted parties, or commit it to a repo. Every example UUID in this documentation is a non-routable placeholder (YOUR-EXTENSION-UUIDor00000000-0000-0000-0000-000000000000) — substitute your own secret value locally and keep it out of version control.
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.



