@raultov/browser-control-mcp 0.3.1-beta.3 → 0.3.4-beta.4
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/CHANGELOG.md +69 -0
- package/README.md +20 -9
- package/npm-shrinkwrap.json +2 -2
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,75 @@ from a copy of its code: entries describe the differences from that release.
|
|
|
10
10
|
|
|
11
11
|
## [Unreleased]
|
|
12
12
|
|
|
13
|
+
## [0.3.4-beta.4] - 2026-10-27
|
|
14
|
+
|
|
15
|
+
Public **BETA**. The same server as 0.3.3-beta.4, which was published on
|
|
16
|
+
crates.io but without binaries, npm package or Homebrew formula: its
|
|
17
|
+
release notes made GitHub skip the builds. See 0.3.3-beta.4 below for the
|
|
18
|
+
changes.
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- The release notes no longer quote a URL with credentials, which GitHub
|
|
23
|
+
treats as a secret; `make check` now refuses one in this file.
|
|
24
|
+
|
|
25
|
+
## [0.3.3-beta.4] - 2026-10-27
|
|
26
|
+
|
|
27
|
+
Public **BETA**. Tools that reported success for something that did not
|
|
28
|
+
happen now say what happened, and proxy credentials are handled more
|
|
29
|
+
safely. Some replies change: an unknown tool argument is an error,
|
|
30
|
+
`navigate`/`reload` add `status`, a download URL fails, and
|
|
31
|
+
`restart_browser`/`stop_browser` on an attached Chrome refuse or only
|
|
32
|
+
disconnect.
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
|
|
36
|
+
- `open_instance` without `headless` follows the server's `--headless` flag.
|
|
37
|
+
It always opened a window, even on a server started with `--headless`
|
|
38
|
+
(where there may be no display, as in the Docker image).
|
|
39
|
+
- Credentials written in a proxy URL (a user and password before the host,
|
|
40
|
+
from `--proxy-server`, `open_instance`'s `proxy` or `restart_browser`)
|
|
41
|
+
no longer reach the browser: Chrome got them on its command line, readable
|
|
42
|
+
by any local user with `ps` (and ignored them), and Firefox refused to
|
|
43
|
+
launch. `enable_proxy_auth` now falls back to the credentials of
|
|
44
|
+
`--proxy-server`.
|
|
45
|
+
- `enable_proxy_auth` with wrong credentials no longer loops: a request the
|
|
46
|
+
proxy challenges again after two answers is cancelled. Firefox re-raised
|
|
47
|
+
the same request forever (about 50 challenges a second, each carrying the
|
|
48
|
+
password); Chrome retried tens of times. On Firefox, calling the tool
|
|
49
|
+
again also removes the previous intercept (each call added one more).
|
|
50
|
+
- On Chrome, an instance attached to a browser that was already running on
|
|
51
|
+
its port (not launched by the server) no longer reports a restart or stop
|
|
52
|
+
that did not happen. `restart_browser` (and a `copy_cookies` relaunch)
|
|
53
|
+
fails saying the server cannot relaunch it, and nothing is changed;
|
|
54
|
+
`stop_browser` disconnects and says the browser keeps running. Both said
|
|
55
|
+
"successfully" while the same process kept running without the presets.
|
|
56
|
+
- `navigate` and `reload` report the document's HTTP status (`"status":
|
|
57
|
+
404`), and an error status (400 and up) adds a note. A 404 used to look
|
|
58
|
+
like any success, and an error with an empty body failed on Chrome
|
|
59
|
+
(`ERR_HTTP_RESPONSE_CODE_FAILURE`) but succeeded on Firefox: it is now a
|
|
60
|
+
success with its status on both.
|
|
61
|
+
- `navigate` to a URL the browser downloads fails with `Navigation failed:
|
|
62
|
+
the URL is a download...` on both browsers. Firefox answered "Navigated
|
|
63
|
+
to" the previous page; Chrome failed with `net::ERR_ABORTED`.
|
|
64
|
+
- A tool call with an argument the tool does not have now fails before
|
|
65
|
+
anything runs, naming the argument it was probably meant to be (`tabId`
|
|
66
|
+
answers "did you mean `tab_id`?"). Unknown arguments were ignored, so a
|
|
67
|
+
`tabId` typo ran on the active tab.
|
|
68
|
+
|
|
69
|
+
## [0.3.2-beta.3] - 2026-10-25
|
|
70
|
+
|
|
71
|
+
Public **BETA**. Replies up to 256 MB no longer drop the browser connection
|
|
72
|
+
(new `cdp-lite` and `bidi-lite` releases).
|
|
73
|
+
|
|
74
|
+
### Fixed
|
|
75
|
+
|
|
76
|
+
- Replies up to 256 MB no longer drop the connection: built with `cdp-lite`
|
|
77
|
+
0.3.1 and `bidi-lite` 0.1.4, which accept WebSocket messages up to 256 MiB
|
|
78
|
+
(the WebSocket library's default closed the connection on a frame over
|
|
79
|
+
16 MiB, e.g. an `evaluate_js` string of 20 MB). The lost-connection error
|
|
80
|
+
now names the 256 MB limit.
|
|
81
|
+
|
|
13
82
|
## [0.3.1-beta.3] - 2026-10-25
|
|
14
83
|
|
|
15
84
|
Public **BETA**. Size limits: large pages, results, scripts, logs and
|
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@ It is the successor of
|
|
|
11
11
|
from a copy of its code) and complements Playwright MCP or
|
|
12
12
|
chrome-devtools-mcp with runtime JavaScript debugging on both browsers.
|
|
13
13
|
|
|
14
|
-
> **Status: BETA (0.3.
|
|
14
|
+
> **Status: BETA (0.3.4-beta.4).** This version contains known bugs and differences
|
|
15
15
|
> between Chrome and Firefox (see [Limitations and TODO](#limitations-and-todo))
|
|
16
16
|
> and parts that have not been verified (see [Untested](#untested)). Tool
|
|
17
17
|
> replies may change in incompatible ways before 1.0. Please report problems
|
|
@@ -40,8 +40,8 @@ see the note.
|
|
|
40
40
|
| `open_instance` | ✓ | partial | `features`, `copy_cookies` and `source_profile` are Chrome only |
|
|
41
41
|
| `close_instance` | ✓ | ✓ | |
|
|
42
42
|
| `list_instances` | ✓ | ✓ | each instance reports its `browser` and `capabilities` |
|
|
43
|
-
| `restart_browser` | ✓ | ✓ | was `restart_chrome
|
|
44
|
-
| `stop_browser` | ✓ | ✓ | was `stop_chrome`; on an attached Firefox it ends the session, the browser keeps running |
|
|
43
|
+
| `restart_browser` | ✓ | ✓ | was `restart_chrome`; refused on a Chrome already running on the port (attached, not launched by the server) |
|
|
44
|
+
| `stop_browser` | ✓ | ✓ | was `stop_chrome`; on an attached Chrome or Firefox it only disconnects (Firefox: ends the session), the browser keeps running and the reply says so |
|
|
45
45
|
| `open_tab` | ✓ | ✓ | |
|
|
46
46
|
| `close_tab` | ✓ | ✓ | |
|
|
47
47
|
| `list_tabs` | ✓ | ✓ | |
|
|
@@ -67,7 +67,7 @@ see the note.
|
|
|
67
67
|
| `evaluate_on_call_frame` | ✓ | ✓ | |
|
|
68
68
|
| `search_scripts` | ✓ | ✓ | a long line's preview is 100 characters on each side of the match |
|
|
69
69
|
| `pause_on_load` | ✓ | ✗ | TODO on Firefox, see [Limitations and TODO](#limitations-and-todo) |
|
|
70
|
-
| `enable_proxy_auth` | ✓ | partial | needs `--proxy-server`; untested on Firefox against a real proxy |
|
|
70
|
+
| `enable_proxy_auth` | ✓ | partial | needs `--proxy-server`; a request the proxy rejects twice is cancelled; untested on Firefox against a real proxy |
|
|
71
71
|
| `send_cdp_command` | ✓ | ✗ | raw Chrome DevTools Protocol |
|
|
72
72
|
| `send_bidi_command` | ✗ | ✓ | raw WebDriver BiDi; refuses `session.new`, `session.end`, `browser.close` |
|
|
73
73
|
| `send_rdp_request` | ✗ | ✓ | raw Firefox RDP request to an actor (`thread`, `console`, `root` shortcuts) |
|
|
@@ -273,13 +273,19 @@ claude mcp add browser-control-mcp -- npx -y @raultov/browser-control-mcp
|
|
|
273
273
|
lazily, on the first tool that needs them, with an ephemeral profile.
|
|
274
274
|
- **Tabs.** `open_tab`, `list_tabs`, `switch_tab`, `close_tab`. Every tool
|
|
275
275
|
takes `instance_id` and `tab_id`; without them it targets the default
|
|
276
|
-
instance and its active tab.
|
|
276
|
+
instance and its active tab. An argument a tool does not have fails the
|
|
277
|
+
call before anything runs (a `tabId` typo answers "did you mean
|
|
278
|
+
`tab_id`?"), so a typo never falls back to the active tab.
|
|
277
279
|
- **Same replies on both browsers.** `navigate` and `reload` answer once the
|
|
278
280
|
page fired `load` (at most 30 s, else with a note): a first line
|
|
279
281
|
(`Navigated to <final URL>.` / `Page reloaded.`), then
|
|
280
282
|
`{"url": "<final URL, after redirects>", "tab_id": "tab-N", "browser": {...}}`,
|
|
281
283
|
where `browser` holds the protocol's ids (CDP `frameId`/`loaderId`, BiDi
|
|
282
|
-
`navigation`)
|
|
284
|
+
`navigation`), plus `"status"`, the document's HTTP status, for http(s)
|
|
285
|
+
pages (an error status, 400 and up, also adds a note; an error page with
|
|
286
|
+
an empty body is reported the same way on both browsers). A URL the
|
|
287
|
+
browser downloads fails with `Navigation failed: the URL is a
|
|
288
|
+
download...`. `open_tab` answers `{tab_id, target_id, url, label}` with the
|
|
283
289
|
final URL. A network error (unknown host, refused connection...) fails with
|
|
284
290
|
`Navigation failed: <browser's code> (<url>)`, e.g.
|
|
285
291
|
`net::ERR_NAME_NOT_RESOLVED` on Chrome and `NS_ERROR_UNKNOWN_HOST` on
|
|
@@ -316,7 +322,7 @@ claude mcp add browser-control-mcp -- npx -y @raultov/browser-control-mcp
|
|
|
316
322
|
| --- | --- | --- | --- |
|
|
317
323
|
| `--browser <chrome\|firefox>` | `chrome` | browser of the default instance | browser of the default instance |
|
|
318
324
|
| `--local` | off | navigation limited to local addresses | same |
|
|
319
|
-
| `--headless` | off | headless Chrome | headless Firefox |
|
|
325
|
+
| `--headless` | off | headless Chrome (also the default of `open_instance`'s `headless`) | headless Firefox (same) |
|
|
320
326
|
| `--window-size <W>x<H>` | `1920x1080` | window of launched Chrome (`--window-size`) | window of launched Firefox (`--width`/`--height`) |
|
|
321
327
|
| `--host <HOST>` | `127.0.0.1` | debugging host | debugging host |
|
|
322
328
|
| `--port <PORT>` | `9222` | debugging port of the default instance | ignored (use `--firefox-port`) |
|
|
@@ -333,6 +339,11 @@ claude mcp add browser-control-mcp -- npx -y @raultov/browser-control-mcp
|
|
|
333
339
|
| `--firefox-rdp-port <PORT>` | none | — | debugger port of the attached Firefox (needs `--firefox-port`) |
|
|
334
340
|
| `--no-firefox-debugger` | off | — | launch Firefox without its debugger port (no debugger tools) |
|
|
335
341
|
|
|
342
|
+
Credentials written in a proxy URL (`http://user:pass@host:port`) never reach
|
|
343
|
+
the browser's command line; `enable_proxy_auth` uses those of `--proxy-server`
|
|
344
|
+
when neither its arguments nor `--proxy-username`/`--proxy-password` give
|
|
345
|
+
them.
|
|
346
|
+
|
|
336
347
|
`--proxy` and `--webmcp` are aliases. To attach to your own Firefox, start it
|
|
337
348
|
with `--remote-debugging-port <port>` (and `--start-debugger-server ws:<rdp>`
|
|
338
349
|
plus `devtools.debugger.remote-enabled` and `devtools.chrome.enabled` for the
|
|
@@ -423,7 +434,7 @@ incompatible:
|
|
|
423
434
|
|
|
424
435
|
| Tool | 0.1.x | 0.2.0 |
|
|
425
436
|
| --- | --- | --- |
|
|
426
|
-
| `navigate`, `reload` | Chrome: raw `Page.navigate` reply (`frameId`, `loaderId`, `errorText`) without waiting, `{}` on reload; Firefox: `{navigation, url}` | `{url, tab_id, browser, notes?}` after `load`; `url` is the final URL; protocol ids under `browser` |
|
|
437
|
+
| `navigate`, `reload` | Chrome: raw `Page.navigate` reply (`frameId`, `loaderId`, `errorText`) without waiting, `{}` on reload; Firefox: `{navigation, url}` | `{url, tab_id, browser, status?, notes?}` after `load`; `url` is the final URL; protocol ids under `browser`; `status` is the document's HTTP status |
|
|
427
438
|
| `navigate`, `open_tab` to an unreachable host | Chrome: success (`errorText` inside, or a `chrome-error://` tab) | error `Navigation failed: <code> (<url>)`; `open_tab` names the tab, which stays open |
|
|
428
439
|
| `evaluate_js` | Chrome: `{"result": {type, value, ...}}`; Firefox: the bare value | `{value, type, subtype?, description?}` |
|
|
429
440
|
| `set_breakpoint` | Chrome: CDP id (`1:3:0:http://…`) and `locations`; Firefox: `{breakpointId, url, lineNumber, columnNumber}` | `{breakpoint_id: "bp-N", url, line_number, column_number, resolved}` |
|
|
@@ -500,7 +511,7 @@ incompatible:
|
|
|
500
511
|
|
|
501
512
|
```sh
|
|
502
513
|
make check # fmt, clippy -D warnings, tests, docs, duplication, packaging, version
|
|
503
|
-
make e2e # E2E smoke against real
|
|
514
|
+
make e2e # E2E smoke against real Chrome and Firefox, headless (E2E_VISIBLE=1 shows them; Linux, macOS)
|
|
504
515
|
make check-all # both
|
|
505
516
|
```
|
|
506
517
|
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"hasInstallScript": true,
|
|
20
20
|
"license": "MIT",
|
|
21
21
|
"name": "@raultov/browser-control-mcp",
|
|
22
|
-
"version": "0.3.
|
|
22
|
+
"version": "0.3.4-beta.4"
|
|
23
23
|
},
|
|
24
24
|
"node_modules/detect-libc": {
|
|
25
25
|
"engines": {
|
|
@@ -48,5 +48,5 @@
|
|
|
48
48
|
}
|
|
49
49
|
},
|
|
50
50
|
"requires": true,
|
|
51
|
-
"version": "0.3.
|
|
51
|
+
"version": "0.3.4-beta.4"
|
|
52
52
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"artifactDownloadUrls": [
|
|
3
|
-
"https://github.com/raultov/browser-control-mcp/releases/download/v0.3.
|
|
3
|
+
"https://github.com/raultov/browser-control-mcp/releases/download/v0.3.4-beta.4"
|
|
4
4
|
],
|
|
5
5
|
"author": "raultov <raultov@protonmail.com>",
|
|
6
6
|
"bin": {
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
"zipExt": ".tar.xz"
|
|
93
93
|
}
|
|
94
94
|
},
|
|
95
|
-
"version": "0.3.
|
|
95
|
+
"version": "0.3.4-beta.4",
|
|
96
96
|
"volta": {
|
|
97
97
|
"node": "18.14.1",
|
|
98
98
|
"npm": "9.5.0"
|