@vibebrowser/mcp 0.2.4 → 0.2.6
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 +122 -12
- package/dist/browser-cli.d.ts +4 -0
- package/dist/browser-cli.d.ts.map +1 -0
- package/dist/browser-cli.js +1597 -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 +106 -13
- package/dist/cli.js.map +1 -1
- package/dist/connection.d.ts +15 -7
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +118 -24
- package/dist/connection.js.map +1 -1
- package/dist/ollama.d.ts +1 -1
- package/dist/ollama.js +4 -4
- package/dist/ollama.js.map +1 -1
- package/dist/relay.d.ts +19 -10
- package/dist/relay.d.ts.map +1 -1
- package/dist/relay.js +272 -98
- package/dist/relay.js.map +1 -1
- package/dist/server.d.ts +56 -11
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +488 -68
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +30 -10
- 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 +294 -0
- package/docs/openclaw-local-browser.md +264 -0
- package/openclaw/vibebrowser/SKILL.md +153 -0
- package/package.json +11 -2
package/docs/eval.md
ADDED
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
# vibebrowser-mcp Evaluation Process
|
|
2
|
+
|
|
3
|
+
This document tracks the current validation matrix for the `vibebrowser-mcp` and `vibebrowser-cli` binaries, with an explicit split between:
|
|
4
|
+
|
|
5
|
+
- local workspace validation
|
|
6
|
+
- packed package artifact validation (`npm pack`)
|
|
7
|
+
- published npm validation (`@vibebrowser/mcp@latest`)
|
|
8
|
+
- real-extension browser evals versus fake-extension protocol evals
|
|
9
|
+
|
|
10
|
+
Evaluation date: **March 26, 2026 (America/Los_Angeles)**.
|
|
11
|
+
|
|
12
|
+
## Coverage Matrix
|
|
13
|
+
|
|
14
|
+
| Surface | Harness | Source Modes | Backend | What It Proves |
|
|
15
|
+
|---|---|---|---|---|
|
|
16
|
+
| Relay race regression | `npm run test:e2e:relay-race` | local | fake extension socket | relay preserves in-flight tool calls across extension reconnects |
|
|
17
|
+
| HTTP MCP transport | `npm run test:e2e:http` | local | fake extension socket | streamable HTTP MCP path works end to end |
|
|
18
|
+
| OpenClaw-compatible browser CLI | `npm run test:e2e:browser-cli` | `local`, `pack`, `npm` | fake extension socket | `vibebrowser-cli` command shape, JSON output, and tool routing work end to end |
|
|
19
|
+
| Live browser CLI regression | `npm run test:e2e:browser-cli-live` | local | real extension session | validates `open`/`snapshot` behavior on a real URL against the connected Vibe extension |
|
|
20
|
+
| Codex + OpenCode MCP bridge | `npm run test:e2e:agents` | `local`, `pack`, `npm` | real extension session | packaged `vibebrowser-mcp` can be launched by Codex/OpenCode tooling and route MCP traffic to a real Vibe-connected browser |
|
|
21
|
+
| OpenCode financial eval (`../vibe`) | `node tests/mcp-eval.test.js --skip-build --model github-copilot/gpt-4.1 --mcp-source ...` | `auto`, `local`, `pack`, `npm` | harness-managed browser + extension | full OpenCode browser task execution against the Vibe extension |
|
|
22
|
+
|
|
23
|
+
Important scope note:
|
|
24
|
+
- There is **not yet** a full hosted OpenClaw runtime eval in this repo.
|
|
25
|
+
- Current OpenClaw coverage is the **OpenClaw-compatible CLI surface** (`vibebrowser-cli`) plus the `openclaw` helper and HTTP bridge docs.
|
|
26
|
+
- Do not claim full hosted OpenClaw runtime parity based only on the CLI test.
|
|
27
|
+
|
|
28
|
+
## Source Selectors
|
|
29
|
+
|
|
30
|
+
### Browser CLI harness
|
|
31
|
+
|
|
32
|
+
`scripts/e2e-browser-cli.mjs` now supports:
|
|
33
|
+
|
|
34
|
+
- `E2E_BROWSER_CLI_SOURCE=local`
|
|
35
|
+
- `E2E_BROWSER_CLI_SOURCE=pack`
|
|
36
|
+
- `E2E_BROWSER_CLI_SOURCE=npm`
|
|
37
|
+
|
|
38
|
+
Optional override:
|
|
39
|
+
|
|
40
|
+
- `E2E_BROWSER_CLI_PACKAGE=/absolute/or/relative/path/to/package.tgz`
|
|
41
|
+
|
|
42
|
+
`pack` mode creates a temporary tarball with `npm pack --json --pack-destination ...` and runs:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npx -y --package <local-tarball> vibebrowser-cli ...
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### MCP agent harness
|
|
49
|
+
|
|
50
|
+
`scripts/e2e-mcp-agents.mjs` now supports:
|
|
51
|
+
|
|
52
|
+
- `E2E_MCP_SOURCE=local`
|
|
53
|
+
- `E2E_MCP_SOURCE=pack`
|
|
54
|
+
- `E2E_MCP_SOURCE=npm`
|
|
55
|
+
|
|
56
|
+
Optional override:
|
|
57
|
+
|
|
58
|
+
- `E2E_MCP_PACKAGE=/absolute/or/relative/path/to/package.tgz`
|
|
59
|
+
|
|
60
|
+
`pack` mode creates a temporary tarball and runs:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
npx -y --package <local-tarball> vibebrowser-mcp ...
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Cross-repo OpenCode eval
|
|
67
|
+
|
|
68
|
+
`../vibe/tests/mcp-eval.test.js` now accepts:
|
|
69
|
+
|
|
70
|
+
- `--mcp-source auto`
|
|
71
|
+
- `--mcp-source local`
|
|
72
|
+
- `--mcp-source pack`
|
|
73
|
+
- `--mcp-source npm`
|
|
74
|
+
- `--mcp-package <tarball-or-package-spec>`
|
|
75
|
+
|
|
76
|
+
Use `--mcp-source pack` when validating a release candidate before publish.
|
|
77
|
+
|
|
78
|
+
## Required Commands
|
|
79
|
+
|
|
80
|
+
### 1. Local regression suite
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
cd /Users/engineer/workspace/vibebrowser/vibe-mcp
|
|
84
|
+
npm run build
|
|
85
|
+
npm test
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Pass signal:
|
|
89
|
+
|
|
90
|
+
- `npm test` exits `0`
|
|
91
|
+
- output contains:
|
|
92
|
+
- `e2e ok`
|
|
93
|
+
- `http e2e ok`
|
|
94
|
+
- `browser cli e2e ok`
|
|
95
|
+
|
|
96
|
+
### 2. Packaged CLI artifact validation
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
cd /Users/engineer/workspace/vibebrowser/vibe-mcp
|
|
100
|
+
E2E_BROWSER_CLI_SOURCE=pack node scripts/e2e-browser-cli.mjs
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Pass signal:
|
|
104
|
+
|
|
105
|
+
- output contains `browser cli e2e ok`
|
|
106
|
+
- `vibebrowser-cli` is installed from a `.tgz` package artifact, not from the workspace
|
|
107
|
+
|
|
108
|
+
### 3. Packaged binary smoke check
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
cd /Users/engineer/workspace/vibebrowser/vibe-mcp
|
|
112
|
+
TMP_DIR="$(mktemp -d)"
|
|
113
|
+
npm pack --json --pack-destination "$TMP_DIR"
|
|
114
|
+
npx -y --package "$TMP_DIR"/vibebrowser-mcp-*.tgz vibebrowser-mcp --help
|
|
115
|
+
npx -y --package "$TMP_DIR"/vibebrowser-mcp-*.tgz vibebrowser-cli --help
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Pass signal:
|
|
119
|
+
|
|
120
|
+
- `vibebrowser-mcp --help` prints the branded CLI
|
|
121
|
+
- `vibebrowser-cli --help` prints the standalone OpenClaw-compatible CLI
|
|
122
|
+
|
|
123
|
+
### 4. Published npm CLI validation
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
cd /Users/engineer/workspace/vibebrowser/vibe-mcp
|
|
127
|
+
npx -y --package @vibebrowser/mcp@latest vibebrowser-mcp --version
|
|
128
|
+
npx -y --package @vibebrowser/mcp@latest vibe-mcp --version
|
|
129
|
+
npx -y --package @vibebrowser/mcp@latest vibebrowser-cli --version
|
|
130
|
+
E2E_BROWSER_CLI_SOURCE=npm node scripts/e2e-browser-cli.mjs
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Pass signal:
|
|
134
|
+
|
|
135
|
+
- all three binaries print the published version
|
|
136
|
+
- `browser cli e2e ok` proves `vibebrowser-cli` works from the npm registry package, not only from a local tarball
|
|
137
|
+
|
|
138
|
+
### 5. Real-extension agent eval
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
cd /Users/engineer/workspace/vibebrowser/vibe-mcp
|
|
142
|
+
E2E_MCP_SOURCE=pack node scripts/e2e-mcp-agents.mjs
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Pass signal:
|
|
146
|
+
|
|
147
|
+
- output contains `e2e ok`
|
|
148
|
+
- Codex uses `vibe-browser.*` tools
|
|
149
|
+
- OpenCode can resolve the same MCP config and report `vibe-browser connected`
|
|
150
|
+
|
|
151
|
+
Hard requirement:
|
|
152
|
+
|
|
153
|
+
- a live Vibe extension session must already be connected or connectable on the relay path
|
|
154
|
+
- this harness does **not** prove anything if the extension is absent
|
|
155
|
+
- default Codex settings are tuned for current CLI compatibility:
|
|
156
|
+
- `E2E_CODEX_MODEL=gpt-5`
|
|
157
|
+
- `E2E_CODEX_REASONING_EFFORT=low`
|
|
158
|
+
- `E2E_CODEX_TIMEOUT_MS=480000`
|
|
159
|
+
|
|
160
|
+
### 5a. Live browser CLI regression (real extension)
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
cd /Users/engineer/workspace/vibebrowser/vibe-mcp
|
|
164
|
+
npm run test:e2e:browser-cli-live
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Optional env overrides:
|
|
168
|
+
|
|
169
|
+
- `BROWSER_LIVE_URL` (default: X search URL from issue repro)
|
|
170
|
+
- `BROWSER_LIVE_TIMEOUT_MS` (default: `60000`)
|
|
171
|
+
- `BROWSER_LIVE_MIN_CONTENT_CHARS` (default: `200`)
|
|
172
|
+
|
|
173
|
+
Pass signal:
|
|
174
|
+
|
|
175
|
+
- output contains `live browser cli e2e ok`
|
|
176
|
+
- output prints measured `open latency`, content lengths, and matched `pageId`
|
|
177
|
+
- test proves real-extension `open` + page-content + `snapshot --page-id` flow (not mocked)
|
|
178
|
+
|
|
179
|
+
### 5b. Latest built extension eval via Chrome for Testing
|
|
180
|
+
|
|
181
|
+
Build the dev extension first:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
cd /Users/engineer/workspace/vibebrowser/vibe
|
|
185
|
+
npm run build:extension:dev
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Use the direct script form when debugging the isolated path, especially from a detached worktree where `../vibe` discovery may not point at the intended sibling repo:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
cd /Users/engineer/workspace/vibebrowser/vibe-mcp
|
|
192
|
+
E2E_DEBUG=1 \
|
|
193
|
+
E2E_TEST_BROWSER=1 \
|
|
194
|
+
E2E_VIBE_REPO_ROOT=/Users/engineer/workspace/vibebrowser/vibe \
|
|
195
|
+
E2E_TEST_EXTENSION_PATH=/Users/engineer/workspace/vibebrowser/vibe/dist/extension/dev \
|
|
196
|
+
E2E_MCP_SOURCE=npm \
|
|
197
|
+
node scripts/e2e-mcp-agents.mjs
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
Use the package-script entrypoint for the canonical repo-level check:
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
cd /Users/engineer/workspace/vibebrowser/vibe-mcp
|
|
204
|
+
E2E_TEST_BROWSER=1 \
|
|
205
|
+
E2E_VIBE_REPO_ROOT=/Users/engineer/workspace/vibebrowser/vibe \
|
|
206
|
+
E2E_TEST_EXTENSION_PATH=/Users/engineer/workspace/vibebrowser/vibe/dist/extension/dev \
|
|
207
|
+
E2E_MCP_SOURCE=npm \
|
|
208
|
+
npm run test:e2e:agents
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
Pass signal:
|
|
212
|
+
|
|
213
|
+
- output contains `e2e ok`
|
|
214
|
+
- the eval launches a separate Chrome for Testing instance
|
|
215
|
+
- the loaded extension comes from `../vibe/dist/extension/dev`, not the user’s daily Chrome profile
|
|
216
|
+
|
|
217
|
+
### 6. Full OpenCode browser eval in sibling repo
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
cd /Users/engineer/workspace/vibebrowser/vibe
|
|
221
|
+
node tests/mcp-eval.test.js --skip-build --model github-copilot/gpt-4.1 --mcp-source pack
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
Pass criteria:
|
|
225
|
+
|
|
226
|
+
- `MCP External enabled: PASS`
|
|
227
|
+
- `Relay connected: PASS`
|
|
228
|
+
- `MCP tools used: PASS`
|
|
229
|
+
- `Tickers found: 6/6`
|
|
230
|
+
- process exits `0`
|
|
231
|
+
|
|
232
|
+
Note:
|
|
233
|
+
|
|
234
|
+
- this harness launches its own browser test environment from the `vibe` repo
|
|
235
|
+
- use it when you explicitly want the full browser-task eval, not just package smoke coverage
|
|
236
|
+
|
|
237
|
+
## Latest Verification Snapshot
|
|
238
|
+
|
|
239
|
+
Commands executed in this session:
|
|
240
|
+
|
|
241
|
+
| Command | Result | Notes |
|
|
242
|
+
|---|---|---|
|
|
243
|
+
| `npm run build` | PASS | local TypeScript build succeeded |
|
|
244
|
+
| `npm test` | PASS | relay race, HTTP, and local browser CLI e2e all passed |
|
|
245
|
+
| `E2E_BROWSER_CLI_SOURCE=pack node scripts/e2e-browser-cli.mjs` | PASS | tarball-installed `vibebrowser-cli` passed end to end |
|
|
246
|
+
| `npm pack --json --pack-destination <tmp>` | PASS | tarball includes both `dist/cli.js` and `dist/browser-main.js` plus docs/openclaw skill files |
|
|
247
|
+
| `npx -y --package <local-tarball> vibebrowser-mcp --help` | PASS | branded `vibebrowser-mcp` binary available from package artifact |
|
|
248
|
+
| `npx -y --package <local-tarball> vibebrowser-cli --help` | PASS | standalone `vibebrowser-cli` binary available from package artifact |
|
|
249
|
+
| `gh workflow run "Publish to npm" --ref release/vibebrowser-cli-0.2.5` | PASS | GitHub publish workflow completed successfully |
|
|
250
|
+
| `npm view @vibebrowser/mcp version dist-tags.latest bin --json` | PASS | npm `latest` is now `0.2.5` and includes `vibebrowser-mcp`, `vibe-mcp`, and `vibebrowser-cli` |
|
|
251
|
+
| `npx -y --package @vibebrowser/mcp@latest vibebrowser-mcp --version` | PASS | published npm binary resolves to `0.2.5` |
|
|
252
|
+
| `npx -y --package @vibebrowser/mcp@latest vibe-mcp --version` | PASS | legacy alias still resolves to `0.2.5` |
|
|
253
|
+
| `npm run test:e2e:agents` | PASS | local `dist/cli.js` path completed all three MiniWoB tasks with Codex + OpenCode against the live extension session |
|
|
254
|
+
| `E2E_MCP_SOURCE=npm npm run test:e2e:agents` | PASS | published npm binary path completed the same three MiniWoB tasks end to end |
|
|
255
|
+
| `E2E_DEBUG=1 E2E_TEST_BROWSER=1 E2E_VIBE_REPO_ROOT=/Users/engineer/workspace/vibebrowser/vibe E2E_TEST_EXTENSION_PATH=/Users/engineer/workspace/vibebrowser/vibe/dist/extension/dev E2E_MCP_SOURCE=npm node scripts/e2e-mcp-agents.mjs` | PASS | debug run against a separate Chrome for Testing instance with the unpacked extension build |
|
|
256
|
+
| `E2E_TEST_BROWSER=1 E2E_VIBE_REPO_ROOT=/Users/engineer/workspace/vibebrowser/vibe E2E_TEST_EXTENSION_PATH=/Users/engineer/workspace/vibebrowser/vibe/dist/extension/dev E2E_MCP_SOURCE=npm npm run test:e2e:agents` | PASS | canonical repo entrypoint passed against the latest built extension in isolated browser mode |
|
|
257
|
+
| `npx -y --package @vibebrowser/mcp@latest vibebrowser-cli --version` | PASS | standalone CLI is now available from npm `latest` |
|
|
258
|
+
| `E2E_BROWSER_CLI_SOURCE=npm node scripts/e2e-browser-cli.mjs` | PASS | npm-installed `vibebrowser-cli` passed end to end |
|
|
259
|
+
| `npm run test:e2e:browser-cli-live` | PASS | real extension run against X search URL; reported open latency `60718ms`, open content `9119` chars, snapshot content `9564` chars |
|
|
260
|
+
| `E2E_MCP_SOURCE=pack node scripts/e2e-mcp-agents.mjs` | FAIL (environment) | timed out waiting for a live Vibe extension connection on the relay path |
|
|
261
|
+
|
|
262
|
+
Observed real-extension agent failure:
|
|
263
|
+
|
|
264
|
+
```text
|
|
265
|
+
Error: Extension did not connect to relay within 120000ms. Ensure Vibe extension has MCP External enabled in the active Chrome profile.
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
Interpretation:
|
|
269
|
+
|
|
270
|
+
- packaged artifacts are valid locally
|
|
271
|
+
- the standalone CLI branding and binaries are correct in the tarball
|
|
272
|
+
- published npm `latest` is now updated to `0.2.5` with all intended binaries
|
|
273
|
+
- real-agent validation currently depends on a live extension session and was not satisfiable in this shell session
|
|
274
|
+
|
|
275
|
+
## Publish Reality
|
|
276
|
+
|
|
277
|
+
Current npm state:
|
|
278
|
+
|
|
279
|
+
- `npm view @vibebrowser/mcp version dist-tags.latest bin --json` returns `0.2.5`
|
|
280
|
+
- `@latest` now includes:
|
|
281
|
+
- `vibebrowser-mcp`
|
|
282
|
+
- `vibe-mcp`
|
|
283
|
+
- `vibebrowser-cli`
|
|
284
|
+
- publish succeeded via GitHub Actions workflow `Publish to npm`
|
|
285
|
+
|
|
286
|
+
Consequences:
|
|
287
|
+
|
|
288
|
+
- the new `vibebrowser-mcp` / `vibebrowser-cli` binaries are published to npm and verified from the registry
|
|
289
|
+
- the remaining non-green item is the real-extension agent eval, which still requires a live Vibe extension session on the relay path
|
|
290
|
+
|
|
291
|
+
## Tracking
|
|
292
|
+
|
|
293
|
+
- Tracking issue: `VibeTechnologies/vibe-mcp#22`
|
|
294
|
+
- Release PR: `VibeTechnologies/vibe-mcp#23`
|
|
@@ -0,0 +1,264 @@
|
|
|
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
|
+
## Prerequisites
|
|
63
|
+
|
|
64
|
+
You need:
|
|
65
|
+
|
|
66
|
+
1. **Node.js 18+** - `vibebrowser-mcp` requires Node.js
|
|
67
|
+
2. **Chrome/Brave/Chromium** with the Vibe extension installed
|
|
68
|
+
3. **OpenClaw** configured with an MCP server URL
|
|
69
|
+
|
|
70
|
+
## What gets installed
|
|
71
|
+
|
|
72
|
+
The user needs three pieces:
|
|
73
|
+
|
|
74
|
+
1. the Vibe Co-Pilot browser extension
|
|
75
|
+
2. `vibebrowser-mcp` on the same machine as the browser
|
|
76
|
+
3. an OpenClaw MCP server entry pointing to the local `vibebrowser-mcp` HTTP endpoint
|
|
77
|
+
|
|
78
|
+
## Step 1: Install the Vibe extension
|
|
79
|
+
|
|
80
|
+
1. Install the Vibe Co-Pilot extension from [Chrome Web Store](https://chromewebstore.google.com/detail/vibe-ai-browser-co-pilot/djodpgokbmobeclicaicnnidccoinado)
|
|
81
|
+
2. Open Chrome and click the Vibe extension icon
|
|
82
|
+
3. Go to **Settings** (gear icon)
|
|
83
|
+
4. Find **MCP External** (or "MCP External Control")
|
|
84
|
+
5. Enable it and select **Remote** mode
|
|
85
|
+
6. Copy the **Extension UUID** shown - you'll need this for the next step
|
|
86
|
+
|
|
87
|
+
> **Note**: The Extension UUID is a unique identifier that allows `vibebrowser-mcp` to connect to your specific browser session through the Vibe relay.
|
|
88
|
+
|
|
89
|
+
## Step 2: Start the local HTTP bridge
|
|
90
|
+
|
|
91
|
+
On the same machine where the browser extension is installed, run:
|
|
92
|
+
|
|
93
|
+
**Option A: Using the helper command (recommended)**
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
npx -y --package @vibebrowser/mcp vibebrowser-mcp openclaw --remote <extension-uuid>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
This prints the exact commands and MCP URL you need.
|
|
100
|
+
|
|
101
|
+
**Option B: Manual command**
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
npx -y --package @vibebrowser/mcp vibebrowser-mcp start --transport http --remote <extension-uuid>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
By default this starts a local MCP endpoint at:
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
http://127.0.0.1:8788/mcp
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Keep this terminal open - the bridge must stay running for OpenClaw to connect.
|
|
114
|
+
|
|
115
|
+
For operator workflows and OpenClaw skills, you can also use the OpenClaw-compatible browser CLI surface directly:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli sessions
|
|
119
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote <extension-uuid> status
|
|
120
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote <extension-uuid> tabs
|
|
121
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote <extension-uuid> snapshot --json
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
`snapshot` in `vibebrowser-cli` is tool-only and maps directly to extension snapshot tools:
|
|
125
|
+
|
|
126
|
+
- default (`--format ai`) -> `take_md_snapshot`
|
|
127
|
+
- ARIA (`--format aria`) -> `take_a11y_snapshot`
|
|
128
|
+
|
|
129
|
+
Use `--page-id <id>` (or `--pageId <id>`) to target a specific tab without switching user focus.
|
|
130
|
+
|
|
131
|
+
For local relay mode with multiple connected browsers/profiles:
|
|
132
|
+
|
|
133
|
+
- run `vibebrowser-cli sessions` to list available local session IDs
|
|
134
|
+
- pass `--session <id>` to target one explicitly
|
|
135
|
+
- if omitted, the CLI uses the first connected local session
|
|
136
|
+
|
|
137
|
+
`open` and `navigate` responses include extracted page content in JSON output (`pageContent`) when page state is modified, so agents can continue without an immediate extra snapshot call.
|
|
138
|
+
|
|
139
|
+
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.
|
|
140
|
+
|
|
141
|
+
## Step 3: add the MCP server to OpenClaw
|
|
142
|
+
|
|
143
|
+
Register the bridge URL in OpenClaw:
|
|
144
|
+
|
|
145
|
+
```json
|
|
146
|
+
{
|
|
147
|
+
"mcpServers": {
|
|
148
|
+
"vibe": {
|
|
149
|
+
"url": "http://127.0.0.1:8788/mcp"
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Once that is configured, the cloud OpenClaw agent can use the Vibe browser tools through the local bridge.
|
|
156
|
+
|
|
157
|
+
## Optional: Use the OpenClaw skill for local agents
|
|
158
|
+
|
|
159
|
+
For OpenClaw agents running locally (not in the cloud) that need access to your real browser, you can use the Vibe skill instead of configuring an MCP server URL.
|
|
160
|
+
|
|
161
|
+
### Install the skill
|
|
162
|
+
|
|
163
|
+
Copy `openclaw/vibebrowser/SKILL.md` from this package to your OpenClaw skills directory. The skill provides OpenClaw-compatible CLI commands that target your Vibe-connected browser.
|
|
164
|
+
|
|
165
|
+
### Configure environment
|
|
166
|
+
|
|
167
|
+
Set the extension UUID in your shell:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
export VIBE_EXTENSION_UUID="<your-extension-uuid>"
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Available commands
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
# Check status
|
|
177
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json status
|
|
178
|
+
|
|
179
|
+
# List tabs
|
|
180
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json tabs
|
|
181
|
+
|
|
182
|
+
# Open a page
|
|
183
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json open https://example.com
|
|
184
|
+
|
|
185
|
+
# Click element by index
|
|
186
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json click 12
|
|
187
|
+
|
|
188
|
+
# Type into element
|
|
189
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json type 23 "hello"
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
See [`openclaw/vibebrowser/SKILL.md`](../openclaw/vibebrowser/SKILL.md) for the full command reference.
|
|
193
|
+
|
|
194
|
+
## When to use this setup
|
|
195
|
+
|
|
196
|
+
This architecture is the right fit when the agent needs the **user's own browser context**, for example:
|
|
197
|
+
|
|
198
|
+
- websites where the user is already logged in locally
|
|
199
|
+
- workflows that depend on cookies or browser extensions
|
|
200
|
+
- tasks on tabs the user already opened
|
|
201
|
+
- browsing in the exact local profile the user uses every day
|
|
202
|
+
|
|
203
|
+
## When not to use this setup
|
|
204
|
+
|
|
205
|
+
Do **not** use this as a replacement for the hosted tenant browser.
|
|
206
|
+
|
|
207
|
+
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.
|
|
208
|
+
|
|
209
|
+
So the rule is simple:
|
|
210
|
+
|
|
211
|
+
- **tenant browser in cloud** -> tenant `/browser` stack
|
|
212
|
+
- **user's real local browser** -> Vibe extension + relay + `vibebrowser-mcp` HTTP bridge
|
|
213
|
+
|
|
214
|
+
## Why this split matters
|
|
215
|
+
|
|
216
|
+
Trying to force one model to solve both cases creates product confusion.
|
|
217
|
+
|
|
218
|
+
The tenant browser is about a cloud runtime having its own browser environment.
|
|
219
|
+
|
|
220
|
+
The Vibe extension path is about letting a cloud agent borrow the user's real browser safely and intentionally.
|
|
221
|
+
|
|
222
|
+
They sound similar from the outside, but they optimize for different things:
|
|
223
|
+
|
|
224
|
+
- tenant browser -> repeatability, isolation, hosted runtime control
|
|
225
|
+
- local browser bridge -> real sessions, real profile, real user context
|
|
226
|
+
|
|
227
|
+
That distinction is what made the implementation plan finally click.
|
|
228
|
+
|
|
229
|
+
## What this unlocks
|
|
230
|
+
|
|
231
|
+
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.
|
|
232
|
+
|
|
233
|
+
That is a much better fit than asking users to move their life into a fresh cloud browser profile just to get browser automation.
|
|
234
|
+
|
|
235
|
+
The end result is simple:
|
|
236
|
+
|
|
237
|
+
**OpenClaw stays in the cloud. The browser stays local. Vibe MCP connects them cleanly.**
|
|
238
|
+
|
|
239
|
+
## Troubleshooting
|
|
240
|
+
|
|
241
|
+
### "Extension UUID not found"
|
|
242
|
+
|
|
243
|
+
Make sure you've enabled **Remote** mode in the Vibe extension settings. The UUID only appears when Remote mode is active.
|
|
244
|
+
|
|
245
|
+
### "Connection refused" errors
|
|
246
|
+
|
|
247
|
+
1. Ensure the `vibebrowser-mcp` process is still running
|
|
248
|
+
2. Check the terminal for error messages
|
|
249
|
+
3. Verify the MCP URL matches exactly (including the `/mcp` path)
|
|
250
|
+
|
|
251
|
+
### "No extension connected"
|
|
252
|
+
|
|
253
|
+
1. Open Chrome and click the Vibe extension icon
|
|
254
|
+
2. Verify MCP External is enabled in Settings
|
|
255
|
+
3. Check the extension shows "Connected" status
|
|
256
|
+
|
|
257
|
+
### MCP URL format
|
|
258
|
+
|
|
259
|
+
The correct format is:
|
|
260
|
+
```
|
|
261
|
+
http://127.0.0.1:8788/mcp
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
Not `http://127.0.0.1:8788` (missing `/mcp` path).
|