Skip to main content

OpenClaw

OpenClaw is a self-hosted AI gateway that connects chat apps (WhatsApp, Telegram, Discord, iMessage) to AI coding agents. You can give OpenClaw agents full browser control by connecting them to Vibe through an MCP server, a skill, or both.

This page covers:

  • Option A: MCP Server — OpenClaw calls Vibe browser tools through the Model Context Protocol
  • Option B: Skill — OpenClaw agents run vibebrowser-cli commands directly
  • When to use each option (or combine them)
  • How Vibe fits alongside OpenClaw's built-in browser profiles

Prerequisites

Before either option, you need:

  1. Chrome (or Brave/Chromium) with the Vibe extension installed
  2. MCP External Control enabled in extension Settings
  3. Node.js 18+ installed (for the @vibebrowser/mcp package)
  4. OpenClaw installed (docs.openclaw.ai)

Option A: MCP Server

This is the recommended integration for cloud-hosted OpenClaw agents. You run vibebrowser-mcp locally on the machine with the browser, and point OpenClaw at its HTTP endpoint.

Step 1 — Start the local HTTP bridge

On the machine where the Vibe extension is running:

npx -y --package @vibebrowser/mcp vibebrowser-mcp start \
--transport http \
--remote YOUR_EXTENSION_UUID

Find your Extension UUID in the Vibe extension Settings under MCP External Control → Remote.

This starts a local MCP endpoint at http://127.0.0.1:8788/mcp. Keep the terminal open.

Step 2 — Register the MCP server in OpenClaw

Add the bridge URL to your OpenClaw configuration:

{
"mcpServers": {
"vibe": {
"url": "http://127.0.0.1:8788/mcp"
}
}
}

Replace 127.0.0.1 with your local machine's IP if the OpenClaw agent runs on a different host. For internet-facing setups, you'll need a tunnel (e.g., Cloudflare Tunnel, ngrok).

Once configured, the OpenClaw agent can use all Vibe browser tools through MCP.

Helper command

Run vibebrowser-mcp openclaw --remote YOUR_UUID to print the exact commands, URL, and JSON snippet for your setup.

Verify the connection

Ask the OpenClaw agent to list browser tabs or take a snapshot. If the response includes your open tabs, the connection is working.


Option B: Skill

A skill teaches an OpenClaw agent how to use vibebrowser-cli commands directly, without going through MCP. This is useful when:

  • You run OpenClaw agents locally (not in the cloud)
  • You want the agent to run browser commands as shell calls
  • You prefer CLI-style output (JSON on stdout) over MCP tool responses
  • You're building automation scripts that chain CLI commands

Install the skill

The skill ships inside the @vibebrowser/mcp npm package. Copy it to your OpenClaw skills directory:

Global (available to all OpenClaw workspaces):

mkdir -p ~/.openclaw/skills/vibebrowser
npx -y --package @vibebrowser/mcp \
node -e "const fs=require('fs'),p=require('path'); \
const src=p.join(p.dirname(require.resolve('@vibebrowser/mcp/package.json')),'openclaw','vibebrowser','SKILL.md'); \
fs.copyFileSync(src, p.join(process.env.HOME,'.openclaw','skills','vibebrowser','SKILL.md'))"

Project-level (only for the current workspace):

mkdir -p skills/vibebrowser
# Copy SKILL.md from the package to skills/vibebrowser/SKILL.md

You can also clone the vibe-mcp repository and copy openclaw/vibebrowser/SKILL.md manually.

OpenClaw auto-discovers skills from these directories — no install command needed beyond copying the file.

Set the environment variable

The skill needs your Extension UUID to connect through the remote relay:

export VIBE_EXTENSION_UUID="your-extension-uuid"

Add this to your shell profile (.bashrc, .zshrc, etc.) so it persists across sessions.

Alternatively, configure the environment variable in ~/.openclaw/openclaw.json:

{
"skills": {
"entries": {
"vibebrowser": {
"enabled": true,
"env": {
"VIBE_EXTENSION_UUID": "your-extension-uuid"
}
}
}
}
}

How the skill works

Once installed, OpenClaw automatically discovers the skill and loads it when relevant. The skill teaches the agent to run commands like:

# Check connection
npx -y --package @vibebrowser/mcp vibebrowser-cli \
--remote "$VIBE_EXTENSION_UUID" --json status

# List open tabs
npx -y --package @vibebrowser/mcp vibebrowser-cli \
--remote "$VIBE_EXTENSION_UUID" --json tabs

# Take a page snapshot
npx -y --package @vibebrowser/mcp vibebrowser-cli \
--remote "$VIBE_EXTENSION_UUID" --json snapshot

# Click an element by ref
npx -y --package @vibebrowser/mcp vibebrowser-cli \
--remote "$VIBE_EXTENSION_UUID" --json click 12

# Type into a field
npx -y --package @vibebrowser/mcp vibebrowser-cli \
--remote "$VIBE_EXTENSION_UUID" --json type 23 "hello" --submit

The skill also includes safety rules — the agent will check tab state before acting, avoid destructive actions unless asked, and report connection errors clearly.


Vibe vs. OpenClaw's Built-In Browser

OpenClaw ships with its own browser tool that supports three profiles:

ProfileWhat it doesWhen to use it
openclawIsolated, agent-managed browserRepeatable cloud tasks, scraping, testing
userAttaches to your Chrome via Chrome DevTools MCPLocal tasks when you're at the computer
VibeConnects to your real browser through a remote relayLocal browser access when the agent runs remotely, or when you need multi-agent support

When to choose Vibe over the built-in profiles:

  • The OpenClaw agent runs in the cloud but needs your local browser sessions
  • Multiple agents need to control the same browser simultaneously
  • You want browser control without exposing a CDP port or keeping Chrome DevTools MCP running
  • The user profile requires you to be at your machine — Vibe's relay works without you present

When to use OpenClaw's built-in browser instead:

  • The agent needs an isolated, reproducible browser environment
  • You're running tasks that don't depend on your personal browser profile
  • The agent runs in the cloud and doesn't need your local sessions

You can use both. Vibe handles your real browser; the openclaw profile handles isolated cloud browsing.


MCP Server vs. Skill

MCP ServerSkill
How it worksOpenClaw calls structured MCP toolsAgent runs CLI commands in the shell
SetupStart HTTP bridge + add MCP URLCopy SKILL.md to skills directory
Output formatStructured MCP tool responsesJSON on stdout
Best forCloud/remote agentsLocal agents, shell scripting, CI pipelines
Multi-agentYes — relay handles multiplexingYes — relay handles multiplexing

You can use both at the same time. The MCP server and the skill both connect through the same relay and do not conflict.


CLI Quick Reference

Whether you use the MCP server or the skill, the vibebrowser-cli binary is available for manual use and scripting.

Current Limitation: Multiple Browsers

vibebrowser-cli does not currently let you choose between multiple local browsers or profiles that all have the Vibe extension connected.

  • vibebrowser-cli tabs shows tabs from whichever extension session currently owns the relay connection.
  • vibebrowser-cli open <url> opens a page in that same session.
  • If you keep MCP External Control enabled in multiple browsers at once, behavior is undefined. The safe assumption is that browser selection is not deterministic.
  • If a single command appears to affect more than one browser, that is a bug.

Recommended workaround:

  • Keep MCP External Control enabled in one browser/profile per relay port.
  • Use --remote <uuid> when you need to target a specific extension instance.

Connection

vibebrowser-cli status                # Check connection (local relay)
vibebrowser-cli --remote UUID status # Remote mode

Tabs

vibebrowser-cli tabs                  # List open tabs
vibebrowser-cli open <url> # Open URL in new tab
vibebrowser-cli navigate <url> # Navigate active tab

Page inspection

vibebrowser-cli snapshot              # Text snapshot with element refs
vibebrowser-cli snapshot --format aria --interactive # ARIA tree
vibebrowser-cli screenshot --output page.png # Screenshot

Interaction

vibebrowser-cli click <ref>           # Click an element
vibebrowser-cli type <ref> "text" # Type into a field
vibebrowser-cli press Enter # Press a key
vibebrowser-cli hover <ref> # Hover over element
vibebrowser-cli select <ref> "val" # Select dropdown option
vibebrowser-cli fill --fields '[{"ref":"A3","value":"hello"}]'

Network & JavaScript

vibebrowser-cli requests --filter "api/"               # List network requests
vibebrowser-cli evaluate --fn "() => document.title" # Evaluate JS

Global options

OptionDescriptionDefault
-r, --remote <uuid>Connect via remote relay
--jsonMachine-readable JSON outputfalse
-d, --debugEnable debug loggingfalse
--timeout <ms>Command timeout30000
-p, --port <number>Relay WebSocket port19888
--relay-url <url>Custom relay URLwss://relay.api.vibebrowser.app

Architecture

OpenClaw Agent (cloud or local)
|
| MCP (HTTP) OR shell commands (vibebrowser-cli)
| |
v v
[vibebrowser-mcp] [vibebrowser-cli]
| |
+-------------------+---------------------+
|
v
[Relay Daemon] <-- auto-spawned, handles multiplexing
|
v
[Vibe Extension]
|
v
[Your Chrome]

Both paths connect through the same relay. The relay auto-spawns on first connection and multiplexes requests from multiple clients to the browser extension.


Troubleshooting

"No connection to Vibe extension"

  1. Make sure the Vibe extension is installed and running in Chrome
  2. Enable MCP External Control in extension Settings
  3. Check that the extension status shows "Connected"

"Extension UUID not found"

Make sure you've enabled Remote mode in the Vibe extension settings. The UUID only appears when Remote mode is active.

Commands hang or time out

  • Use --debug to see detailed connection logs: vibebrowser-cli --debug status
  • Check that no other process is using port 19888: lsof -i :19888
  • Try killing any existing relay process and running the command again

MCP bridge "Connection refused"

  1. Ensure the vibebrowser-mcp start --transport http process is still running
  2. Verify the URL includes the /mcp path: http://127.0.0.1:8788/mcp
  3. Check firewall rules if connecting from another machine

Skill not loading

  1. Verify SKILL.md is in one of OpenClaw's skill directories (~/.openclaw/skills/vibebrowser/ or <workspace>/skills/vibebrowser/)
  2. Check that VIBE_EXTENSION_UUID is set in your shell or in openclaw.json under skills.entries
  3. Restart OpenClaw after adding the skill