@vibebrowser/mcp 0.2.3 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +120 -6
- package/dist/browser-cli.d.ts +4 -0
- package/dist/browser-cli.d.ts.map +1 -0
- package/dist/browser-cli.js +1473 -0
- package/dist/browser-cli.js.map +1 -0
- package/dist/browser-main.d.ts +3 -0
- package/dist/browser-main.d.ts.map +1 -0
- package/dist/browser-main.js +10 -0
- package/dist/browser-main.js.map +1 -0
- package/dist/cli.d.ts +0 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +129 -11
- package/dist/cli.js.map +1 -1
- package/dist/connection.d.ts +1 -0
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +19 -4
- package/dist/connection.js.map +1 -1
- package/dist/ollama.d.ts +21 -0
- package/dist/ollama.d.ts.map +1 -0
- package/dist/ollama.js +248 -0
- package/dist/ollama.js.map +1 -0
- package/dist/relay.d.ts +8 -4
- package/dist/relay.d.ts.map +1 -1
- package/dist/relay.js +46 -19
- package/dist/relay.js.map +1 -1
- package/dist/server.d.ts +52 -11
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +303 -64
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +16 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +15 -0
- package/dist/version.js.map +1 -0
- package/docs/chrome-devtools-relay.md +351 -0
- package/docs/eval.md +209 -0
- package/docs/openclaw-local-browser.md +173 -0
- package/openclaw/vibe-local-browser/SKILL.md +132 -0
- package/package.json +8 -2
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Use Vibe Co-Pilot to Let Cloud OpenClaw Control Your Local Browser"
|
|
3
|
+
description: "How to connect a cloud OpenClaw agent to a user's local browser with the Vibe Co-Pilot extension, remote relay mode, and the new vibebrowser-mcp HTTP bridge."
|
|
4
|
+
date: "2026-03-15"
|
|
5
|
+
author: "Dzianis Vashchuk"
|
|
6
|
+
published: true
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
If you are running OpenClaw in the cloud, one of the most useful upgrades is giving it access to a real browser.
|
|
10
|
+
|
|
11
|
+
But there are actually two different browser problems hiding inside that sentence:
|
|
12
|
+
|
|
13
|
+
- **tenant browser**: a browser that lives inside the hosted OpenClaw runtime
|
|
14
|
+
- **local browser**: the user's actual Chrome or Chromium profile on their own machine
|
|
15
|
+
|
|
16
|
+
Those are not the same product problem, and they should not use the same architecture.
|
|
17
|
+
|
|
18
|
+
For the tenant browser, the right answer is still the hosted browser stack inside the tenant.
|
|
19
|
+
|
|
20
|
+
For the user's local browser, the right answer is the Vibe Co-Pilot extension plus `vibebrowser-mcp` in remote relay mode.
|
|
21
|
+
|
|
22
|
+
That is what this setup enables.
|
|
23
|
+
|
|
24
|
+
## The architecture that works
|
|
25
|
+
|
|
26
|
+
The flow looks like this:
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
Cloud OpenClaw agent
|
|
30
|
+
|
|
|
31
|
+
| MCP over HTTP
|
|
32
|
+
v
|
|
33
|
+
local vibebrowser-mcp bridge
|
|
34
|
+
|
|
|
35
|
+
| secure outbound relay connection
|
|
36
|
+
v
|
|
37
|
+
Vibe remote relay
|
|
38
|
+
|
|
|
39
|
+
v
|
|
40
|
+
Vibe Co-Pilot browser extension
|
|
41
|
+
|
|
|
42
|
+
v
|
|
43
|
+
User's local Chrome / Chromium browser
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The important point is that the browser still stays on the user's machine.
|
|
47
|
+
|
|
48
|
+
The cloud runtime does not need direct access to the user's laptop, an exposed CDP port, or a custom reverse tunnel into Chrome. The Vibe extension connects outward to the relay, and `vibebrowser-mcp` exposes a local MCP HTTP endpoint that OpenClaw can attach to.
|
|
49
|
+
|
|
50
|
+
## Why we added HTTP mode to `vibebrowser-mcp`
|
|
51
|
+
|
|
52
|
+
Before this change, `vibebrowser-mcp` worked well for local MCP clients such as Claude Desktop, Cursor, OpenCode, and VS Code because they can launch an MCP server over stdio.
|
|
53
|
+
|
|
54
|
+
Cloud OpenClaw is different.
|
|
55
|
+
|
|
56
|
+
In OpenClawBot and similar hosted deployments, MCP servers are configured as URLs. That means a stdio-only MCP bridge is not enough. We needed `vibebrowser-mcp` to expose a proper network MCP endpoint.
|
|
57
|
+
|
|
58
|
+
So the missing piece was a streamable HTTP MCP transport.
|
|
59
|
+
|
|
60
|
+
That is what `vibebrowser-mcp start --transport http` now provides.
|
|
61
|
+
|
|
62
|
+
## What to install
|
|
63
|
+
|
|
64
|
+
The user needs three pieces:
|
|
65
|
+
|
|
66
|
+
1. the Vibe Co-Pilot browser extension
|
|
67
|
+
2. `vibebrowser-mcp` on the same machine as the browser
|
|
68
|
+
3. an OpenClaw MCP server entry pointing at the local `vibebrowser-mcp` HTTP endpoint
|
|
69
|
+
|
|
70
|
+
## Step 1: install the Vibe extension
|
|
71
|
+
|
|
72
|
+
Install the Vibe Co-Pilot extension from `https://vibebrowser.app`.
|
|
73
|
+
|
|
74
|
+
Then open the extension settings and enable `MCP External`.
|
|
75
|
+
|
|
76
|
+
For cloud OpenClaw, choose **Remote** mode and copy the **Extension UUID**.
|
|
77
|
+
|
|
78
|
+
## Step 2: start the local HTTP bridge
|
|
79
|
+
|
|
80
|
+
On the same machine where the browser extension is installed, run:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
npx -y --package @vibebrowser/mcp vibebrowser-mcp start --transport http --remote <extension-uuid>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
By default this starts a local MCP endpoint at:
|
|
87
|
+
|
|
88
|
+
```text
|
|
89
|
+
http://127.0.0.1:8788/mcp
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
If you want the exact OpenClaw-friendly snippet, you can also run:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
npx -y --package @vibebrowser/mcp vibebrowser-mcp openclaw --remote <extension-uuid>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
That prints:
|
|
99
|
+
|
|
100
|
+
- the bridge command
|
|
101
|
+
- the MCP URL to register in OpenClaw
|
|
102
|
+
- a JSON snippet you can paste into config
|
|
103
|
+
|
|
104
|
+
For operator workflows and OpenClaw skills, you can also use the OpenClaw-compatible browser CLI surface directly:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote <extension-uuid> status
|
|
108
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote <extension-uuid> tabs
|
|
109
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote <extension-uuid> snapshot --json
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
That CLI accepts the same style of verbs and flags OpenClaw operators expect, but it still targets the Vibe real-browser path rather than an isolated OpenClaw-managed browser profile.
|
|
113
|
+
|
|
114
|
+
## Step 3: add the MCP server to OpenClaw
|
|
115
|
+
|
|
116
|
+
Register the bridge URL in OpenClaw:
|
|
117
|
+
|
|
118
|
+
```json
|
|
119
|
+
{
|
|
120
|
+
"mcpServers": {
|
|
121
|
+
"vibe": {
|
|
122
|
+
"url": "http://127.0.0.1:8788/mcp"
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Once that is configured, the cloud OpenClaw agent can use the Vibe browser tools through the local bridge.
|
|
129
|
+
|
|
130
|
+
## When to use this setup
|
|
131
|
+
|
|
132
|
+
This architecture is the right fit when the agent needs the **user's own browser context**, for example:
|
|
133
|
+
|
|
134
|
+
- websites where the user is already logged in locally
|
|
135
|
+
- workflows that depend on cookies or browser extensions
|
|
136
|
+
- tasks on tabs the user already opened
|
|
137
|
+
- browsing in the exact local profile the user uses every day
|
|
138
|
+
|
|
139
|
+
## When not to use this setup
|
|
140
|
+
|
|
141
|
+
Do **not** use this as a replacement for the hosted tenant browser.
|
|
142
|
+
|
|
143
|
+
If the user wants a browser that lives inside the OpenClaw tenant itself, keep using the existing tenant browser stack. That remains the correct architecture for hosted cloud browsing because it is reproducible, self-contained, and lives entirely inside the tenant runtime.
|
|
144
|
+
|
|
145
|
+
So the rule is simple:
|
|
146
|
+
|
|
147
|
+
- **tenant browser in cloud** -> tenant `/browser` stack
|
|
148
|
+
- **user's real local browser** -> Vibe extension + relay + `vibebrowser-mcp` HTTP bridge
|
|
149
|
+
|
|
150
|
+
## Why this split matters
|
|
151
|
+
|
|
152
|
+
Trying to force one model to solve both cases creates product confusion.
|
|
153
|
+
|
|
154
|
+
The tenant browser is about a cloud runtime having its own browser environment.
|
|
155
|
+
|
|
156
|
+
The Vibe extension path is about letting a cloud agent borrow the user's real browser safely and intentionally.
|
|
157
|
+
|
|
158
|
+
They sound similar from the outside, but they optimize for different things:
|
|
159
|
+
|
|
160
|
+
- tenant browser -> repeatability, isolation, hosted runtime control
|
|
161
|
+
- local browser bridge -> real sessions, real profile, real user context
|
|
162
|
+
|
|
163
|
+
That distinction is what made the implementation plan finally click.
|
|
164
|
+
|
|
165
|
+
## What this unlocks
|
|
166
|
+
|
|
167
|
+
With this bridge, OpenClaw users can keep the intelligence and orchestration in the cloud while still letting the agent act inside the browser they already use.
|
|
168
|
+
|
|
169
|
+
That is a much better fit than asking users to move their life into a fresh cloud browser profile just to get browser automation.
|
|
170
|
+
|
|
171
|
+
The end result is simple:
|
|
172
|
+
|
|
173
|
+
**OpenClaw stays in the cloud. The browser stays local. Vibe MCP connects them cleanly.**
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vibe-local-browser
|
|
3
|
+
description: Control the user's local browser through the Vibe Browser CLI bridge. Use this when the task must run against the user's real Vibe-connected browser session, tabs, cookies, or installed extensions.
|
|
4
|
+
metadata:
|
|
5
|
+
{
|
|
6
|
+
"openclaw":
|
|
7
|
+
{
|
|
8
|
+
"emoji": "🌐",
|
|
9
|
+
"requires":
|
|
10
|
+
{
|
|
11
|
+
"bins": ["npx"],
|
|
12
|
+
"env": ["VIBE_EXTENSION_UUID"],
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
}
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Vibe Local Browser
|
|
19
|
+
|
|
20
|
+
Use the `vibebrowser-cli` command when the user wants OpenClaw to drive their real local browser through the Vibe extension.
|
|
21
|
+
|
|
22
|
+
Prefer this skill when the task depends on:
|
|
23
|
+
|
|
24
|
+
- the user's real browser profile
|
|
25
|
+
- existing logged-in sessions
|
|
26
|
+
- local tabs already open on the user's machine
|
|
27
|
+
- browser extensions or stored site state
|
|
28
|
+
|
|
29
|
+
Do not use this skill for OpenClaw tenant cloud browsing.
|
|
30
|
+
|
|
31
|
+
## Required environment
|
|
32
|
+
|
|
33
|
+
The shell running OpenClaw must have:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
export VIBE_EXTENSION_UUID="<extension-uuid>"
|
|
37
|
+
|
|
38
|
+
# Optional if you use a custom relay URL.
|
|
39
|
+
# export VIBE_RELAY_URL="wss://relay.api.vibebrowser.app"
|
|
40
|
+
|
|
41
|
+
# Optional compatibility label. Vibe always targets the real local browser path.
|
|
42
|
+
# export VIBE_BROWSER_PROFILE="user"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Command form
|
|
46
|
+
|
|
47
|
+
Prefer this exact command pattern:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json <subcommand> ...
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
If the package is already installed locally, you can use:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json <subcommand> ...
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
If you set `VIBE_RELAY_URL`, append:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
--relay-url "$VIBE_RELAY_URL"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Safe operating rules
|
|
66
|
+
|
|
67
|
+
- Prefer `browser tabs` or `browser snapshot` before acting.
|
|
68
|
+
- Use `browser open <url>` to create a fresh page when possible.
|
|
69
|
+
- Use `browser evaluate --fn ...` only for simple compatibility-safe expressions such as:
|
|
70
|
+
- `() => 21 + 21`
|
|
71
|
+
- `() => document.title`
|
|
72
|
+
- `() => location.href`
|
|
73
|
+
- `() => location.hostname`
|
|
74
|
+
- `() => location.origin`
|
|
75
|
+
- Avoid destructive actions unless the user explicitly asks.
|
|
76
|
+
- If the CLI returns a connection error, report it clearly and stop guessing.
|
|
77
|
+
- The OpenClaw-compatible `--browser-profile` flag is accepted by the CLI, but Vibe always targets the user's real browser path rather than an isolated managed browser.
|
|
78
|
+
|
|
79
|
+
## Common commands
|
|
80
|
+
|
|
81
|
+
Status:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json status
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
List pages:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json tabs
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Open a new page:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json open https://example.com
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Take the default AI snapshot:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json snapshot
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Take the ARIA / interactive snapshot:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json snapshot --format aria --interactive
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Click and type using OpenClaw-style refs:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json click 12
|
|
115
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json type 23 "hello" --submit
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Evaluate JavaScript:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json evaluate --fn '() => document.title'
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Success criteria
|
|
125
|
+
|
|
126
|
+
A successful run usually looks like:
|
|
127
|
+
|
|
128
|
+
1. confirm the relay is reachable
|
|
129
|
+
2. list current tabs or create a fresh one
|
|
130
|
+
3. navigate or snapshot if needed
|
|
131
|
+
4. evaluate `document.title` or `location.href` to verify the result
|
|
132
|
+
5. summarize what happened for the user
|
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibebrowser/mcp",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "MCP server for browser automation - the only solution supporting multiple AI agents (Claude, Cursor, VS Code) simultaneously controlling your Chrome browser",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
8
|
"bin": {
|
|
9
9
|
"vibebrowser-mcp": "./dist/cli.js",
|
|
10
|
-
"vibe-mcp": "./dist/cli.js"
|
|
10
|
+
"vibe-mcp": "./dist/cli.js",
|
|
11
|
+
"vibebrowser-cli": "./dist/browser-main.js"
|
|
11
12
|
},
|
|
12
13
|
"publishConfig": {
|
|
13
14
|
"access": "public"
|
|
@@ -17,6 +18,9 @@
|
|
|
17
18
|
"dev": "tsc --watch",
|
|
18
19
|
"start": "node dist/cli.js",
|
|
19
20
|
"prepublishOnly": "npm run build",
|
|
21
|
+
"test": "npm run test:e2e:relay-race && npm run test:e2e:http && npm run test:e2e:browser-cli",
|
|
22
|
+
"test:e2e:browser-cli": "node scripts/e2e-browser-cli.mjs",
|
|
23
|
+
"test:e2e:http": "node scripts/e2e-http-streamable.mjs",
|
|
20
24
|
"test:e2e:relay-race": "node scripts/e2e-relay-fake-extension-race.mjs",
|
|
21
25
|
"test:e2e:agents": "node scripts/e2e-mcp-agents.mjs"
|
|
22
26
|
},
|
|
@@ -67,6 +71,8 @@
|
|
|
67
71
|
},
|
|
68
72
|
"files": [
|
|
69
73
|
"dist",
|
|
74
|
+
"openclaw",
|
|
75
|
+
"docs",
|
|
70
76
|
"README.md",
|
|
71
77
|
"LICENSE"
|
|
72
78
|
]
|