@vibebrowser/mcp 0.2.5 → 0.2.7
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 +70 -2
- package/dist/browser-cli.d.ts.map +1 -1
- package/dist/browser-cli.js +767 -358
- package/dist/browser-cli.js.map +1 -1
- package/dist/browser-main.js +1 -0
- package/dist/browser-main.js.map +1 -1
- package/dist/cli.js +52 -4
- package/dist/cli.js.map +1 -1
- package/dist/connection.d.ts +14 -7
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +106 -21
- package/dist/connection.js.map +1 -1
- package/dist/devtools-fallback.d.ts +22 -0
- package/dist/devtools-fallback.d.ts.map +1 -0
- package/dist/devtools-fallback.js +172 -0
- package/dist/devtools-fallback.js.map +1 -0
- package/dist/relay.d.ts +23 -3
- package/dist/relay.d.ts.map +1 -1
- package/dist/relay.js +448 -103
- package/dist/relay.js.map +1 -1
- package/dist/server.d.ts +4 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +248 -12
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +27 -10
- package/dist/types.d.ts.map +1 -1
- package/docs/chrome-devtools-relay.md +7 -0
- package/docs/eval.md +101 -16
- package/docs/openclaw-local-browser.md +119 -18
- package/openclaw/vibebrowser/SKILL.md +219 -0
- package/package.json +9 -2
- package/openclaw/vibe-local-browser/SKILL.md +0 -132
package/docs/eval.md
CHANGED
|
@@ -7,7 +7,7 @@ This document tracks the current validation matrix for the `vibebrowser-mcp` and
|
|
|
7
7
|
- published npm validation (`@vibebrowser/mcp@latest`)
|
|
8
8
|
- real-extension browser evals versus fake-extension protocol evals
|
|
9
9
|
|
|
10
|
-
Evaluation date: **March
|
|
10
|
+
Evaluation date: **March 26, 2026 (America/Los_Angeles)**.
|
|
11
11
|
|
|
12
12
|
## Coverage Matrix
|
|
13
13
|
|
|
@@ -16,6 +16,7 @@ Evaluation date: **March 25, 2026 (America/Los_Angeles)**.
|
|
|
16
16
|
| Relay race regression | `npm run test:e2e:relay-race` | local | fake extension socket | relay preserves in-flight tool calls across extension reconnects |
|
|
17
17
|
| HTTP MCP transport | `npm run test:e2e:http` | local | fake extension socket | streamable HTTP MCP path works end to end |
|
|
18
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 |
|
|
19
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 |
|
|
20
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 |
|
|
21
22
|
|
|
@@ -119,7 +120,22 @@ Pass signal:
|
|
|
119
120
|
- `vibebrowser-mcp --help` prints the branded CLI
|
|
120
121
|
- `vibebrowser-cli --help` prints the standalone OpenClaw-compatible CLI
|
|
121
122
|
|
|
122
|
-
### 4.
|
|
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
|
|
123
139
|
|
|
124
140
|
```bash
|
|
125
141
|
cd /Users/engineer/workspace/vibebrowser/vibe-mcp
|
|
@@ -136,8 +152,69 @@ Hard requirement:
|
|
|
136
152
|
|
|
137
153
|
- a live Vibe extension session must already be connected or connectable on the relay path
|
|
138
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
|
|
139
216
|
|
|
140
|
-
###
|
|
217
|
+
### 6. Full OpenCode browser eval in sibling repo
|
|
141
218
|
|
|
142
219
|
```bash
|
|
143
220
|
cd /Users/engineer/workspace/vibebrowser/vibe
|
|
@@ -169,10 +246,18 @@ Commands executed in this session:
|
|
|
169
246
|
| `npm pack --json --pack-destination <tmp>` | PASS | tarball includes both `dist/cli.js` and `dist/browser-main.js` plus docs/openclaw skill files |
|
|
170
247
|
| `npx -y --package <local-tarball> vibebrowser-mcp --help` | PASS | branded `vibebrowser-mcp` binary available from package artifact |
|
|
171
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 |
|
|
172
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 |
|
|
173
|
-
| `npx -y --package @vibebrowser/mcp@latest vibebrowser-mcp --help` | PASS, but stale | published npm has the `vibebrowser-mcp` alias, but not the full new standalone CLI release shape |
|
|
174
|
-
| `npx -y --package @vibebrowser/mcp@latest vibebrowser-cli --help` | FAIL | `vibebrowser-cli` is not present in the current npm `latest` release |
|
|
175
|
-
| `npm whoami` | FAIL | `ENEEDAUTH`; publish from this machine is currently blocked |
|
|
176
261
|
|
|
177
262
|
Observed real-extension agent failure:
|
|
178
263
|
|
|
@@ -184,26 +269,26 @@ Interpretation:
|
|
|
184
269
|
|
|
185
270
|
- packaged artifacts are valid locally
|
|
186
271
|
- the standalone CLI branding and binaries are correct in the tarball
|
|
187
|
-
- published npm `latest` is
|
|
272
|
+
- published npm `latest` is now updated to `0.2.5` with all intended binaries
|
|
188
273
|
- real-agent validation currently depends on a live extension session and was not satisfiable in this shell session
|
|
189
274
|
|
|
190
275
|
## Publish Reality
|
|
191
276
|
|
|
192
277
|
Current npm state:
|
|
193
278
|
|
|
194
|
-
- `npm view @vibebrowser/mcp version dist-tags.latest --json`
|
|
195
|
-
- `@latest`
|
|
196
|
-
- `
|
|
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`
|
|
197
285
|
|
|
198
286
|
Consequences:
|
|
199
287
|
|
|
200
|
-
- the new `vibebrowser-mcp` / `vibebrowser-cli` binaries are
|
|
201
|
-
-
|
|
202
|
-
- do not claim npm end-to-end availability until:
|
|
203
|
-
- a new version is cut
|
|
204
|
-
- publish auth is configured
|
|
205
|
-
- `npx -y --package @vibebrowser/mcp@<new-version> vibebrowser-cli --help` succeeds
|
|
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
|
|
206
290
|
|
|
207
291
|
## Tracking
|
|
208
292
|
|
|
209
293
|
- Tracking issue: `VibeTechnologies/vibe-mcp#22`
|
|
294
|
+
- Release PR: `VibeTechnologies/vibe-mcp#23`
|
|
@@ -59,56 +59,91 @@ So the missing piece was a streamable HTTP MCP transport.
|
|
|
59
59
|
|
|
60
60
|
That is what `vibebrowser-mcp start --transport http` now provides.
|
|
61
61
|
|
|
62
|
-
##
|
|
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
|
|
63
71
|
|
|
64
72
|
The user needs three pieces:
|
|
65
73
|
|
|
66
74
|
1. the Vibe Co-Pilot browser extension
|
|
67
75
|
2. `vibebrowser-mcp` on the same machine as the browser
|
|
68
|
-
3. an OpenClaw MCP server entry pointing
|
|
69
|
-
|
|
70
|
-
## Step 1: install the Vibe extension
|
|
76
|
+
3. an OpenClaw MCP server entry pointing to the local `vibebrowser-mcp` HTTP endpoint
|
|
71
77
|
|
|
72
|
-
Install the Vibe
|
|
78
|
+
## Step 1: Install the Vibe extension
|
|
73
79
|
|
|
74
|
-
|
|
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
|
|
75
86
|
|
|
76
|
-
|
|
87
|
+
> **Note**: The Extension UUID is a unique identifier that allows `vibebrowser-mcp` to connect to your specific browser session through the Vibe relay.
|
|
77
88
|
|
|
78
|
-
## Step 2:
|
|
89
|
+
## Step 2: Start the local HTTP bridge
|
|
79
90
|
|
|
80
91
|
On the same machine where the browser extension is installed, run:
|
|
81
92
|
|
|
93
|
+
**Option A: Using the helper command (recommended)**
|
|
94
|
+
|
|
82
95
|
```bash
|
|
83
|
-
npx -y --package @vibebrowser/mcp vibebrowser-mcp
|
|
96
|
+
npx -y --package @vibebrowser/mcp vibebrowser-mcp openclaw --remote <extension-uuid>
|
|
84
97
|
```
|
|
85
98
|
|
|
86
|
-
|
|
99
|
+
This prints the exact commands and MCP URL you need.
|
|
87
100
|
|
|
88
|
-
|
|
89
|
-
|
|
101
|
+
If OpenClaw is running on another machine (for example in the cloud), provide a reachable URL:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
npx -y --package @vibebrowser/mcp vibebrowser-mcp openclaw --remote <extension-uuid> --public-url https://<reachable-host>/mcp
|
|
90
105
|
```
|
|
91
106
|
|
|
92
|
-
|
|
107
|
+
**Option B: Manual command**
|
|
93
108
|
|
|
94
109
|
```bash
|
|
95
|
-
npx -y --package @vibebrowser/mcp vibebrowser-mcp
|
|
110
|
+
npx -y --package @vibebrowser/mcp vibebrowser-mcp start --transport http --remote <extension-uuid>
|
|
96
111
|
```
|
|
97
112
|
|
|
98
|
-
|
|
113
|
+
By default this starts a local MCP endpoint at:
|
|
99
114
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
115
|
+
```
|
|
116
|
+
http://127.0.0.1:8788/mcp
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
That loopback URL only works when OpenClaw can reach the same machine. For cloud OpenClaw, register a reachable URL (`--public-url`) instead.
|
|
120
|
+
|
|
121
|
+
Keep this terminal open - the bridge must stay running for OpenClaw to connect.
|
|
103
122
|
|
|
104
123
|
For operator workflows and OpenClaw skills, you can also use the OpenClaw-compatible browser CLI surface directly:
|
|
105
124
|
|
|
106
125
|
```bash
|
|
126
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli sessions
|
|
107
127
|
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote <extension-uuid> status
|
|
108
128
|
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote <extension-uuid> tabs
|
|
109
129
|
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote <extension-uuid> snapshot --json
|
|
110
130
|
```
|
|
111
131
|
|
|
132
|
+
`snapshot` in `vibebrowser-cli` is tool-only and maps directly to extension snapshot tools:
|
|
133
|
+
|
|
134
|
+
- default (`--format ai`) -> `take_md_snapshot`
|
|
135
|
+
- ARIA (`--format aria`) -> `take_a11y_snapshot`
|
|
136
|
+
|
|
137
|
+
Use `--page-id <id>` (or `--pageId <id>`) to target a specific tab without switching user focus.
|
|
138
|
+
|
|
139
|
+
For local relay mode with multiple connected browsers/profiles:
|
|
140
|
+
|
|
141
|
+
- run `vibebrowser-cli sessions` to list available local session IDs
|
|
142
|
+
- pass `--session <id>` to target one explicitly
|
|
143
|
+
- if omitted, the CLI uses the first connected local session
|
|
144
|
+
|
|
145
|
+
`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.
|
|
146
|
+
|
|
112
147
|
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
148
|
|
|
114
149
|
## Step 3: add the MCP server to OpenClaw
|
|
@@ -125,8 +160,47 @@ Register the bridge URL in OpenClaw:
|
|
|
125
160
|
}
|
|
126
161
|
```
|
|
127
162
|
|
|
163
|
+
Use that loopback URL only for same-machine setups. For cloud OpenClaw, set `"url"` to the reachable value you passed through `--public-url`.
|
|
164
|
+
|
|
128
165
|
Once that is configured, the cloud OpenClaw agent can use the Vibe browser tools through the local bridge.
|
|
129
166
|
|
|
167
|
+
## Optional: Use the OpenClaw skill for local agents
|
|
168
|
+
|
|
169
|
+
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.
|
|
170
|
+
|
|
171
|
+
### Install the skill
|
|
172
|
+
|
|
173
|
+
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.
|
|
174
|
+
|
|
175
|
+
### Configure environment
|
|
176
|
+
|
|
177
|
+
Set the extension UUID in your shell:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
export VIBE_EXTENSION_UUID="<your-extension-uuid>"
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Available commands
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
# Check status
|
|
187
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json status
|
|
188
|
+
|
|
189
|
+
# List tabs
|
|
190
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json tabs
|
|
191
|
+
|
|
192
|
+
# Open a page
|
|
193
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json open https://example.com
|
|
194
|
+
|
|
195
|
+
# Click element by index
|
|
196
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json click 12
|
|
197
|
+
|
|
198
|
+
# Type into element
|
|
199
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json type 23 "hello"
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
See [`openclaw/vibebrowser/SKILL.md`](../openclaw/vibebrowser/SKILL.md) for the full command reference.
|
|
203
|
+
|
|
130
204
|
## When to use this setup
|
|
131
205
|
|
|
132
206
|
This architecture is the right fit when the agent needs the **user's own browser context**, for example:
|
|
@@ -171,3 +245,30 @@ That is a much better fit than asking users to move their life into a fresh clou
|
|
|
171
245
|
The end result is simple:
|
|
172
246
|
|
|
173
247
|
**OpenClaw stays in the cloud. The browser stays local. Vibe MCP connects them cleanly.**
|
|
248
|
+
|
|
249
|
+
## Troubleshooting
|
|
250
|
+
|
|
251
|
+
### "Extension UUID not found"
|
|
252
|
+
|
|
253
|
+
Make sure you've enabled **Remote** mode in the Vibe extension settings. The UUID only appears when Remote mode is active.
|
|
254
|
+
|
|
255
|
+
### "Connection refused" errors
|
|
256
|
+
|
|
257
|
+
1. Ensure the `vibebrowser-mcp` process is still running
|
|
258
|
+
2. Check the terminal for error messages
|
|
259
|
+
3. Verify the MCP URL matches exactly (including the `/mcp` path) and is reachable from OpenClaw (not `127.0.0.1` for cloud-hosted OpenClaw)
|
|
260
|
+
|
|
261
|
+
### "No extension connected"
|
|
262
|
+
|
|
263
|
+
1. Open Chrome and click the Vibe extension icon
|
|
264
|
+
2. Verify MCP External is enabled in Settings
|
|
265
|
+
3. Check the extension shows "Connected" status
|
|
266
|
+
|
|
267
|
+
### MCP URL format
|
|
268
|
+
|
|
269
|
+
The correct format is:
|
|
270
|
+
```
|
|
271
|
+
http://127.0.0.1:8788/mcp
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
Not `http://127.0.0.1:8788` (missing `/mcp` path).
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vibebrowser
|
|
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
|
+
## Installation
|
|
21
|
+
|
|
22
|
+
1. **Get the Extension UUID**:
|
|
23
|
+
- Install the Vibe extension in Chrome
|
|
24
|
+
- Open extension Settings → MCP External
|
|
25
|
+
- Enable Remote mode and copy the Extension UUID
|
|
26
|
+
|
|
27
|
+
2. **Set environment variable**:
|
|
28
|
+
```bash
|
|
29
|
+
export VIBE_EXTENSION_UUID="<your-extension-uuid>"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
3. **Install the skill**:
|
|
33
|
+
Copy this file to your OpenClaw skills directory (typically `~/.openclaw/skills/` or your project's `openclaw/skills/` folder).
|
|
34
|
+
|
|
35
|
+
Use the `vibebrowser-cli` command when the user wants OpenClaw to drive their real local browser through the Vibe extension.
|
|
36
|
+
|
|
37
|
+
Prefer this skill when the task depends on:
|
|
38
|
+
|
|
39
|
+
- the user's real browser profile
|
|
40
|
+
- existing logged-in sessions
|
|
41
|
+
- local tabs already open on the user's machine
|
|
42
|
+
- browser extensions or stored site state
|
|
43
|
+
|
|
44
|
+
Do not use this skill for OpenClaw tenant cloud browsing.
|
|
45
|
+
|
|
46
|
+
## Required environment
|
|
47
|
+
|
|
48
|
+
The shell running OpenClaw must have:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
export VIBE_EXTENSION_UUID="<extension-uuid>"
|
|
52
|
+
|
|
53
|
+
# Optional if you use a custom relay URL.
|
|
54
|
+
# export VIBE_REMOTE_RELAY_URL="wss://relay.api.vibebrowser.app"
|
|
55
|
+
# export VIBE_RELAY_URL="wss://relay.api.vibebrowser.app" # legacy alias
|
|
56
|
+
|
|
57
|
+
# Optional compatibility label. Vibe always targets the real local browser path.
|
|
58
|
+
# export VIBE_BROWSER_PROFILE="user"
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Command form
|
|
62
|
+
|
|
63
|
+
Prefer this exact command pattern:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json <subcommand> ...
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
If the package is already installed locally, you can use:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json <subcommand> ...
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
If you set `VIBE_RELAY_URL`, append:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
--relay-url "$VIBE_RELAY_URL"
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
If you set `VIBE_REMOTE_RELAY_URL`, use:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
--relay-url "$VIBE_REMOTE_RELAY_URL"
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Deterministic runbook (default)
|
|
88
|
+
|
|
89
|
+
Use this sequence when the task needs reliable, repeatable control:
|
|
90
|
+
|
|
91
|
+
1. Verify connection:
|
|
92
|
+
```bash
|
|
93
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json status --wait-for-extension --wait-timeout 10000
|
|
94
|
+
```
|
|
95
|
+
2. Resolve a target page id without changing focus:
|
|
96
|
+
```bash
|
|
97
|
+
PAGE_ID="$(
|
|
98
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json tabs \
|
|
99
|
+
| jq -r '.pages[] | select(.active == true) | .id' \
|
|
100
|
+
| head -n1
|
|
101
|
+
)"
|
|
102
|
+
```
|
|
103
|
+
3. Snapshot that page before acting:
|
|
104
|
+
```bash
|
|
105
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json --page-id "$PAGE_ID" snapshot --format aria --interactive
|
|
106
|
+
```
|
|
107
|
+
If the aria snapshot is too verbose, try the default first and fall back:
|
|
108
|
+
```bash
|
|
109
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json --page-id "$PAGE_ID" snapshot
|
|
110
|
+
# If empty or only title returned, retry with aria:
|
|
111
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json --page-id "$PAGE_ID" snapshot --format aria --interactive
|
|
112
|
+
```
|
|
113
|
+
4. Perform action on the same page id:
|
|
114
|
+
```bash
|
|
115
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json --page-id "$PAGE_ID" click 12
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
If `jq` is unavailable, parse `.pages` from `tabs --json` directly and still pass `--page-id <id>` on every action.
|
|
119
|
+
|
|
120
|
+
## Safe operating rules
|
|
121
|
+
|
|
122
|
+
- **Never use `focus` or `tab select` unless explicitly asked.** The user may be actively working in the browser — switching their active tab is disruptive. Instead, pass `--page-id <id>` (or `--pageId <id>`) to target a specific tab without switching focus. Get the page ID from `tabs` output, then use it on any command:
|
|
123
|
+
```bash
|
|
124
|
+
vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json --page-id 2 snapshot
|
|
125
|
+
vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json --page-id 2 click 7
|
|
126
|
+
```
|
|
127
|
+
- Prefer `tabs` or `snapshot` before acting.
|
|
128
|
+
- `snapshot` is tool-only and maps to extension snapshot tools (`take_md_snapshot` by default, `take_a11y_snapshot` for `--format aria`).
|
|
129
|
+
- Use `open <url>` to create a fresh page when possible.
|
|
130
|
+
- Use `evaluate --fn ...` only for simple compatibility-safe expressions such as:
|
|
131
|
+
- `() => 21 + 21`
|
|
132
|
+
- `() => document.title`
|
|
133
|
+
- `() => location.href`
|
|
134
|
+
- `() => location.hostname`
|
|
135
|
+
- `() => location.origin`
|
|
136
|
+
- Avoid destructive actions unless the user explicitly asks.
|
|
137
|
+
- If the CLI returns a connection error, report it clearly and stop guessing.
|
|
138
|
+
- 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.
|
|
139
|
+
|
|
140
|
+
## Common commands
|
|
141
|
+
|
|
142
|
+
Status:
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json status
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
List pages:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json tabs
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Open a new page:
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json open https://example.com
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Take the default AI snapshot:
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json snapshot
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Take the ARIA / interactive snapshot:
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json snapshot --format aria --interactive
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Click and type using OpenClaw-style refs:
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json click 12
|
|
176
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json type 23 "hello" --submit
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Evaluate JavaScript:
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
npx -y --package @vibebrowser/mcp vibebrowser-cli --remote "$VIBE_EXTENSION_UUID" --json evaluate --fn '() => document.title'
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## Snapshot format: `ai` vs `aria`
|
|
186
|
+
|
|
187
|
+
The `snapshot` command supports two extraction formats:
|
|
188
|
+
|
|
189
|
+
| Format | Flag | Engine | Best for |
|
|
190
|
+
|--------|------|--------|----------|
|
|
191
|
+
| `ai` (default) | `--format ai` | Content script (in-page JS) | Simple pages, articles, search results |
|
|
192
|
+
| `aria` | `--format aria` | CDP accessibility tree | **SPAs, background tabs, Notion, Gmail, complex apps** |
|
|
193
|
+
|
|
194
|
+
**When the default `--format ai` returns only the page title or empty content**, switch to `--format aria`:
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
# Default — may return empty for background tabs or SPAs like Notion
|
|
198
|
+
vibebrowser-cli ... snapshot
|
|
199
|
+
|
|
200
|
+
# Reliable fallback — uses Chrome DevTools Protocol directly, works on background tabs
|
|
201
|
+
vibebrowser-cli ... snapshot --format aria --interactive
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**Known limitations of `--format ai`:**
|
|
205
|
+
- Returns empty for **background tabs** (content script not injected or `getBoundingClientRect` returns 0x0)
|
|
206
|
+
- Returns `"Could not establish connection"` when the content script is unreachable
|
|
207
|
+
- May miss content behind `aria-hidden` containers in SPAs like Notion
|
|
208
|
+
|
|
209
|
+
**Rule of thumb:** If `snapshot` returns suspiciously little content, retry with `--format aria --interactive` before reporting failure.
|
|
210
|
+
|
|
211
|
+
## Success criteria
|
|
212
|
+
|
|
213
|
+
A successful run usually looks like:
|
|
214
|
+
|
|
215
|
+
1. confirm the relay is reachable
|
|
216
|
+
2. list current tabs or create a fresh one
|
|
217
|
+
3. navigate or snapshot if needed
|
|
218
|
+
4. evaluate `document.title` or `location.href` to verify the result
|
|
219
|
+
5. summarize what happened for the user
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibebrowser/mcp",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.7",
|
|
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",
|
|
@@ -18,10 +18,14 @@
|
|
|
18
18
|
"dev": "tsc --watch",
|
|
19
19
|
"start": "node dist/cli.js",
|
|
20
20
|
"prepublishOnly": "npm run build",
|
|
21
|
-
"test": "npm run test:e2e:relay-race && npm run test:e2e:http && npm run test:e2e:browser-cli",
|
|
21
|
+
"test": "npm run test:e2e:relay-race && npm run test:e2e:relay-roundtrip && npm run test:e2e:cli-relay && npm run test:e2e:http && npm run test:e2e:browser-cli",
|
|
22
22
|
"test:e2e:browser-cli": "node scripts/e2e-browser-cli.mjs",
|
|
23
|
+
"test:e2e:cli-relay": "node scripts/e2e-cli-relay.mjs",
|
|
23
24
|
"test:e2e:http": "node scripts/e2e-http-streamable.mjs",
|
|
25
|
+
"test:e2e:devtools-flag": "node scripts/e2e-devtools-flag.mjs",
|
|
26
|
+
"test:e2e:browser-cli-live": "node scripts/e2e-browser-cli-live.mjs",
|
|
24
27
|
"test:e2e:relay-race": "node scripts/e2e-relay-fake-extension-race.mjs",
|
|
28
|
+
"test:e2e:relay-roundtrip": "node scripts/e2e-relay-roundtrip.mjs",
|
|
25
29
|
"test:e2e:agents": "node scripts/e2e-mcp-agents.mjs"
|
|
26
30
|
},
|
|
27
31
|
"keywords": [
|
|
@@ -64,6 +68,9 @@
|
|
|
64
68
|
"commander": "^12.0.0",
|
|
65
69
|
"ws": "^8.18.0"
|
|
66
70
|
},
|
|
71
|
+
"optionalDependencies": {
|
|
72
|
+
"chrome-devtools-mcp": "^0.21.0"
|
|
73
|
+
},
|
|
67
74
|
"devDependencies": {
|
|
68
75
|
"@types/node": "^20.0.0",
|
|
69
76
|
"@types/ws": "^8.5.0",
|