@raultov/browser-control-mcp 0.11.0-beta.17 → 0.11.0-beta.18
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 +66 -0
- package/README.md +14 -12
- package/npm-shrinkwrap.json +2 -2
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,72 @@ from a copy of its code: entries describe the differences from that release.
|
|
|
10
10
|
|
|
11
11
|
## [Unreleased]
|
|
12
12
|
|
|
13
|
+
## [0.11.0-beta.18] - 2026-11-03
|
|
14
|
+
|
|
15
|
+
Public **BETA**. Consistency fixes on both browsers. `webmcp_cancel_invocation`
|
|
16
|
+
cancels a pending WebMCP invocation; `webmcp_invoke_tool` waits 10 s by
|
|
17
|
+
default (`timeout_ms`), takes no `frameId` when one frame has the tool, and
|
|
18
|
+
`webmcp_list_tools` is compact. Tab tools behave the same on Chrome and
|
|
19
|
+
Firefox (`close_tab` defaults to the active tab, one rule for the next active
|
|
20
|
+
tab, `list_tabs` in tab order, Chrome registers its first tab after
|
|
21
|
+
`restart_browser`). Chrome `search_scripts` no longer counts or searches the
|
|
22
|
+
server's snippets or a previous page's scripts; `resume` and the other
|
|
23
|
+
debugger tools word "not paused" the same on both browsers. Chrome `emulate`
|
|
24
|
+
measures the page once a resize landed. Behaviour changes: `webmcp_list_tools`
|
|
25
|
+
answers `{frameId, tools}`; `webmcp_invoke_tool` waits 10 s instead of 30 s.
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
|
|
29
|
+
- `webmcp_cancel_invocation` (`--enable-webmcp`, Chrome) cancels a pending
|
|
30
|
+
WebMCP invocation with `WebMCP.cancelInvocation`; one Chrome no longer
|
|
31
|
+
knows (its page navigated away) is marked `Canceled`. (#73)
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
|
|
35
|
+
- Chrome: `emulate` measures what the page sees once a resize (or a reset)
|
|
36
|
+
landed: the next `resize` event or two animation frames, at most 500 ms.
|
|
37
|
+
Chrome answers the override before the renderer resizes, so the reply
|
|
38
|
+
could hold the previous size on a fresh instance. (#74)
|
|
39
|
+
- Debugger tools no longer leak internals (#66):
|
|
40
|
+
- Chrome: `search_scripts` neither counts nor searches the server's own
|
|
41
|
+
snippets nor the scripts of a page the tab left. Its script list was
|
|
42
|
+
never cleared on navigation: after a change of process Chrome reuses
|
|
43
|
+
script ids, so a stale entry named the server's outline snippet, and a
|
|
44
|
+
page with 5 scripts counted 38. The list is now cleared when the page's
|
|
45
|
+
contexts are, and scripts created over the protocol (no URL and no
|
|
46
|
+
stack) are left out; a page's own `eval` stays.
|
|
47
|
+
- `search_scripts` with `debug` answers JSON (`{scripts, errors}`), not
|
|
48
|
+
Rust's `Debug` format.
|
|
49
|
+
- Chrome `evaluate_on_call_frame` on a page that is not paused fails with
|
|
50
|
+
`the debugger is not paused`, as on Firefox and as `step_over`.
|
|
51
|
+
- `resume` on a page that is not paused answers `The debugger was not
|
|
52
|
+
paused: nothing to resume.` with `{paused: false}` on both browsers
|
|
53
|
+
(Firefox failed with `wrongState`, Chrome answered either way).
|
|
54
|
+
- Firefox RDP failures say `Firefox (RDP) protocol error in <request>`;
|
|
55
|
+
they were labelled BiDi.
|
|
56
|
+
- Tab tools behave the same on both browsers (#69):
|
|
57
|
+
- `close_tab` without `tab_id` closes the active tab, as every other tool
|
|
58
|
+
omitting it acts on it (it failed with `missing field \`tab_id\``).
|
|
59
|
+
- Closing the active tab activates the most recently active tab still
|
|
60
|
+
open, else the newest one (by number: `tab-10` after `tab-9`). Chrome
|
|
61
|
+
picked an arbitrary tab when none had been active, Firefox the highest
|
|
62
|
+
id as text.
|
|
63
|
+
- `list_tabs` lists the tabs by number on both browsers.
|
|
64
|
+
- After `restart_browser`, Chrome registers the new browser's first tab
|
|
65
|
+
(it listed none until the next call), as Firefox does.
|
|
66
|
+
- WebMCP tools are easier to drive (#73):
|
|
67
|
+
- `webmcp_invoke_tool` waits 10 s by default (it blocked 30 s), or
|
|
68
|
+
`timeout_ms` (at most 60 000); the pending reply says how to poll or
|
|
69
|
+
cancel the invocation. `frameId` is optional when one frame registers
|
|
70
|
+
the tool (a clear error names the frames otherwise).
|
|
71
|
+
- A pending invocation whose page navigated away carries a `note` in
|
|
72
|
+
`webmcp_get_invocation` and `webmcp_list_invocations` (it showed
|
|
73
|
+
`Pending` forever).
|
|
74
|
+
- `webmcp_list_invocations` takes `status` in any case.
|
|
75
|
+
- `webmcp_list_tools` is compact JSON: `{frameId, tools}` with the frame
|
|
76
|
+
once when shared, no empty `required` and no false annotations (on
|
|
77
|
+
knot.kz, 789 tokens instead of ~1700).
|
|
78
|
+
|
|
13
79
|
## [0.11.0-beta.17] - 2026-11-02
|
|
14
80
|
|
|
15
81
|
Public **BETA**. Fixes found probing the debugger, tab and raw protocol tools
|
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ It is the successor of
|
|
|
13
13
|
from a copy of its code) and complements Playwright MCP or
|
|
14
14
|
chrome-devtools-mcp with runtime JavaScript debugging on both browsers.
|
|
15
15
|
|
|
16
|
-
> **Status: BETA (0.11.0-beta.
|
|
16
|
+
> **Status: BETA (0.11.0-beta.18).** This version contains known bugs and differences
|
|
17
17
|
> between Chrome and Firefox (see [Limitations and TODO](#limitations-and-todo))
|
|
18
18
|
> and parts that have not been verified (see [Untested](#untested)). Tool
|
|
19
19
|
> replies may change in incompatible ways before 1.0. Please report problems
|
|
@@ -117,11 +117,11 @@ see the note.
|
|
|
117
117
|
| `open_instance` | ✓ | partial | `features`, `copy_cookies` and `source_profile` are Chrome only |
|
|
118
118
|
| `close_instance` | ✓ | ✓ | |
|
|
119
119
|
| `list_instances` | ✓ | ✓ | each instance reports its `browser` and `capabilities` |
|
|
120
|
-
| `restart_browser` | ✓ | ✓ | was `restart_chrome`; refused on a Chrome already running on the port (attached, not launched by the server) |
|
|
120
|
+
| `restart_browser` | ✓ | ✓ | was `restart_chrome`; refused on a Chrome already running on the port (attached, not launched by the server); the new browser's first page is registered as a tab |
|
|
121
121
|
| `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 |
|
|
122
122
|
| `open_tab` | ✓ | ✓ | the new tab becomes the active one, in front |
|
|
123
|
-
| `close_tab` | ✓ | ✓ | the
|
|
124
|
-
| `list_tabs` | ✓ | ✓ | |
|
|
123
|
+
| `close_tab` | ✓ | ✓ | `tab_id` defaults to the active tab; the most recently active open tab (else the newest) becomes active and is brought to the front |
|
|
124
|
+
| `list_tabs` | ✓ | ✓ | tabs in the order they were opened (`tab-2` before `tab-10`) |
|
|
125
125
|
| `switch_tab` | ✓ | ✓ | |
|
|
126
126
|
| `navigate` | ✓ | ✓ | `history: "back"` or `"forward"` instead of `url` moves one entry in the tab's history and waits for the page to load (also when it comes from the back-forward cache, which fires no `load`); at either end it fails without moving; a URL the browser saves instead of opening (a download: `Content-Disposition: attachment`, or a type such as CSV) fails saying so, and the tab stays where it was; a page behind HTTP authentication (401) fails at once naming its scheme and realm and how to log in (credentials in the URL, `http://user:password@host/path`, which the browser keeps for the session); a page that pauses at a breakpoint or opens a dialog while loading fails at once naming it (see `resume`, `handle_dialog`) |
|
|
127
127
|
| `reload` | ✓ | ✓ | a pause, a dialog or HTTP authentication while loading fails at once, as with `navigate` |
|
|
@@ -156,19 +156,20 @@ see the note.
|
|
|
156
156
|
| `audit_page` | ✓ | ✓ | `perf` group; accessibility (images without alt, fields, buttons and links without a name, `html lang`, heading order, duplicate ids, broken `aria-labelledby`/`aria-describedby`, `tabindex` > 0, targets under 24×24 px too close to another, text contrast under WCAG AA), SEO (title, meta description, viewport, vague link text, uncrawlable links, canonical, `noindex`) and best practices (doctype and quirks mode, HTTPS, mixed content, distorted images, console errors); the same script on both browsers; each failing check lists its first 10 elements with a snapshot ref, a selector, its start tag and a detail (the contrast ratio, the size...), then the ids that passed or did not apply; `categories` narrows it; not checked: text over background images or gradients, iframes, closed shadow roots, response headers |
|
|
157
157
|
| `set_breakpoint` | ✓ | partial | Firefox: by URL only (no `script_id` / `script_hash`) |
|
|
158
158
|
| `remove_breakpoint` | ✓ | ✓ | |
|
|
159
|
-
| `resume` | ✓ | ✓ | |
|
|
159
|
+
| `resume` | ✓ | ✓ | on a page that is not paused: `The debugger was not paused: nothing to resume.` with `{paused: false}` |
|
|
160
160
|
| `step_over` | ✓ | ✓ | |
|
|
161
161
|
| `evaluate_on_call_frame` | ✓ | ✓ | |
|
|
162
|
-
| `search_scripts` | ✓ | ✓ | a long line's preview is 100 characters on each side of the match; inline scripts and modules included; frames of another origin too (Chrome ids such as `2.17`) |
|
|
162
|
+
| `search_scripts` | ✓ | ✓ | a long line's preview is 100 characters on each side of the match; inline scripts and modules included, the server's own evaluations left out; `debug` answers `{scripts, errors}` as JSON; frames of another origin too (Chrome ids such as `2.17`) |
|
|
163
163
|
| `pause_on_load` | ✓ | ✗ | TODO on Firefox, see [Limitations and TODO](#limitations-and-todo) |
|
|
164
164
|
| `enable_proxy_auth` | ✓ | partial | needs `--proxy-server`; a request the proxy rejects twice is cancelled; untested on Firefox against a real proxy |
|
|
165
165
|
| `send_cdp_command` | ✓ | ✗ | `raw` group; raw Chrome DevTools Protocol; refuses `Network`/`Page`/`Runtime`/`Log`/`Debugger.disable` and `Browser.close`; `Fetch.enable` comes with a note |
|
|
166
166
|
| `send_bidi_command` | ✗ | ✓ | `raw` group; raw WebDriver BiDi; refuses `session.new`, `session.end`, `browser.close` |
|
|
167
167
|
| `send_rdp_request` | ✗ | ✓ | `raw` group; raw Firefox RDP request to an actor (`thread`, `console`, `root` shortcuts); the event packets that actor sends afterwards go to `get_custom_events` (at most 16 actors watched) |
|
|
168
|
-
| `webmcp_list_tools` | ✓ | ✗ | needs `--enable-webmcp`; WebMCP is a Chrome testing feature; every annotation Chrome reports is listed (`readOnly`, `consequential`, `untrustedContent`, `debugging`, `autosubmit`, newer ones as they are) |
|
|
169
|
-
| `webmcp_invoke_tool` | ✓ | ✗ | needs `--enable-webmcp`; a tool answering in MCP shape (`{content, isError}`) gives its own text and image blocks, and its `isError` makes the reply an error; other output comes as JSON; the output of an `untrustedContent` tool comes with a note to treat it as data |
|
|
170
|
-
| `webmcp_get_invocation` | ✓ | ✗ | needs `--enable-webmcp` |
|
|
171
|
-
| `webmcp_list_invocations` | ✓ | ✗ | needs `--enable-webmcp` |
|
|
168
|
+
| `webmcp_list_tools` | ✓ | ✗ | needs `--enable-webmcp`; WebMCP is a Chrome testing feature; every annotation Chrome reports is listed (`readOnly`, `consequential`, `untrustedContent`, `debugging`, `autosubmit`, newer ones as they are); compact JSON `{frameId, tools}` (`frameId` once when the tools share it), without empty `required` or false annotations |
|
|
169
|
+
| `webmcp_invoke_tool` | ✓ | ✗ | needs `--enable-webmcp`; `frameId` optional when one frame registers the tool; waits `timeout_ms` (default 10 000, at most 60 000) for the answer, then says how to poll or cancel it; a tool answering in MCP shape (`{content, isError}`) gives its own text and image blocks, and its `isError` makes the reply an error; other output comes as JSON; the output of an `untrustedContent` tool comes with a note to treat it as data |
|
|
170
|
+
| `webmcp_get_invocation` | ✓ | ✗ | needs `--enable-webmcp`; a pending invocation whose page navigated away carries a `note` |
|
|
171
|
+
| `webmcp_list_invocations` | ✓ | ✗ | needs `--enable-webmcp`; `status` in any case |
|
|
172
|
+
| `webmcp_cancel_invocation` | ✓ | ✗ | needs `--enable-webmcp`; cancels a pending invocation (`WebMCP.cancelInvocation`); one Chrome no longer knows (its page is gone) is marked `Canceled` |
|
|
172
173
|
|
|
173
174
|
After `click_element`, `hover`, `drag`, `fill_input`, `fill_form` and
|
|
174
175
|
`press_key` the server waits for the page to settle before answering: until its DOM
|
|
@@ -617,8 +618,9 @@ incompatible:
|
|
|
617
618
|
- Firefox WebSocket frames and page errors need the Firefox debugger port
|
|
618
619
|
(WebDriver BiDi has no WebSocket frame events); binary frames are reported
|
|
619
620
|
as Firefox gives them, not base64 as on Chrome.
|
|
620
|
-
- `webmcp_list_tools`, `webmcp_invoke_tool`, `webmcp_get_invocation
|
|
621
|
-
`webmcp_list_invocations` are Chrome only
|
|
621
|
+
- `webmcp_list_tools`, `webmcp_invoke_tool`, `webmcp_get_invocation`,
|
|
622
|
+
`webmcp_list_invocations` and `webmcp_cancel_invocation` are Chrome only
|
|
623
|
+
(a Chrome testing feature).
|
|
622
624
|
- `send_cdp_command` is Chrome only; `send_bidi_command` and
|
|
623
625
|
`send_rdp_request` are Firefox only.
|
|
624
626
|
- Cookie import (`--allow-cookie-import`) and launch presets (`features`) are
|
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.11.0-beta.
|
|
22
|
+
"version": "0.11.0-beta.18"
|
|
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.11.0-beta.
|
|
51
|
+
"version": "0.11.0-beta.18"
|
|
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.11.0-beta.
|
|
3
|
+
"https://github.com/raultov/browser-control-mcp/releases/download/v0.11.0-beta.18"
|
|
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.11.0-beta.
|
|
95
|
+
"version": "0.11.0-beta.18",
|
|
96
96
|
"volta": {
|
|
97
97
|
"node": "18.14.1",
|
|
98
98
|
"npm": "9.5.0"
|