Nicholas Roscino
b89a23889e
chore: spawn new browser flag
2026-03-27 19:09:28 +01:00
Nicholas Roscino
3d6d4a5a3f
chore: test
2026-03-27 18:27:21 +01:00
Nicholas Roscino
6aba753e51
chore: adding uninstall of text to avoid test overlapping
2026-03-27 17:48:56 +01:00
Nicholas Roscino
c8a89cd609
chore: removed unused uninstallation of extension
2026-03-27 17:39:13 +01:00
Nicholas Roscino
0ce2a89ac6
chore: adding uninstall to extension tests
2026-03-27 17:24:11 +01:00
Nicholas Roscino
aab83b9cda
chore: remove canary usage on extensions tests
2026-03-27 14:35:57 +01:00
Nikolay Vitkov
e8e33d4172
chore: fix some typos ( #1240 )
2026-03-26 13:56:59 +00:00
yulunz
b2b5e3fef6
chore: handling more client name enums ( #1228 )
...
The openclaw client name is defined at
https://github.com/openclaw/openclaw/blob/ea476de1e488979a3e9e5bf32e4d4f20e563144f/src/browser/chrome-mcp.ts#L234C14-L234C29
2026-03-24 18:18:14 +00:00
yulunz
9a47b657d7
feat: record client name in telemetry. ( #1208 )
...
The changes in the PR intercepts the name of the MCP client right after
server initialization, coverts it into one of the existing enum values,
and append it with the telemetry request.
Note that the client name is unset if there is no client connected yet.
This means the server_start event won't have a client name.
Tested with gemini-cli.
---------
Co-authored-by: Yulun Zeng <yulunz@chromium.org >
2026-03-21 00:09:14 +00:00
Nikolay Vitkov
e56d79393c
chore: don't re-export internals ( #1211 )
2026-03-20 13:15:06 +00:00
Nikolay Vitkov
53483bc637
perf: use CDP to find open DevTools pages (reland) ( #1210 )
...
This should reduce the flakiness and issue with finding open DevTools
tabs for the corresponding pages.
Currently we do multiple loops over all the targets, so this should have
a nice performance improvement when multiple pages are opened.
With a fallback for older versions.
2026-03-20 11:50:27 +00:00
Flo
1e6456ce22
perf(memory): release old navigation request in NetworkCollector ( #1200 )
...
Issue #1192
## Problem
In `--autoConnect` mode, `chrome-devtools-mcp` experiences a severe
memory leak (~13 MB/min) when Chrome is actively used. This eventually
leads to OOM crashes or kernel panics.
The root cause is in `src/PageCollector.ts`:
1. `NetworkCollector` overrides `splitAfterNavigation` but forgets to
call `navigations.splice(this.#maxNavigationSaved)`, causing the array
of navigations to grow infinitely.
2. Even within a single navigation (e.g., in long-lived SPA
applications), the `navigations[0]` array grows infinitely because there
is no limit on the number of items collected per navigation. Since
`HTTPRequest` objects are heavy, this quickly exhausts memory.
## Solution
1. Changed `#maxNavigationSaved` to `protected maxNavigationSaved` so
subclasses can access it.
2. Added `navigations.splice(this.maxNavigationSaved)` to
`NetworkCollector.splitAfterNavigation` to ensure old navigations are
properly discarded.
3. Introduced `protected maxItemsPerNavigation = 5000` to limit the
number of items stored per navigation. When the limit is reached, the
oldest item is removed (`shift()`), preventing unbounded memory growth
in SPAs.
Tested locally by running `npm run build` and verifying the fix.
---------
Co-authored-by: Wolfgang Beyer <woolfi.b@gmail.com >
2026-03-20 11:02:10 +00:00
dependabot[bot]
d2cc01e16d
chore(deps-dev): bump chrome-devtools-frontend from 1.0.1596260 to 1.0.1598808 in the bundled-devtools group ( #1179 )
...
Bumps the bundled-devtools group with 1 update:
[chrome-devtools-frontend](https://github.com/ChromeDevTools/devtools-frontend ).
Updates `chrome-devtools-frontend` from 1.0.1596260 to 1.0.1598808
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/c98dd4a717026307553c4abf9a226c5c980b29e3 "><code>c98dd4a</code></a>
Use artifact folder when non is provided</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/8a38b2b1d9769f6f4d793887f5b0d40b4be43c90 "><code>8a38b2b</code></a>
Roll puppeteer-core</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/9b7af4bc01415528a6d2faf9cae52443f7f634d9 "><code>9b7af4b</code></a>
AI: add ConversationSummaryAgent</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/d85131af6a77c8ada5f0b3fd19cebedddfffe0ec "><code>d85131a</code></a>
Introduce AbortController to Widget update cycle.</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/2086971d3a959ba7de0f5b2d4f9fe27eacf02d95 "><code>2086971</code></a>
Update DevTools DEPS (trusted)</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/915059c2ce26f572ea07d1c9534e528f983e2550 "><code>915059c</code></a>
Roll browser-protocol and CfT</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/0e6b4cc51b4f5fd381bd66554ea3c59c98a8dc03 "><code>0e6b4cc</code></a>
Collapse non-contributing style sections by default</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/114c64579022140303e372b489ad7dfc3e483d5a "><code>114c645</code></a>
Revert "Prevent resource exhaustion when import
recording"</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/dadf98e7f75ad6486cd0e0d7f1d04cbe24bafae4 "><code>dadf98e</code></a>
[sdk] Use MockCDPConnection in CPUThrottlingManager.test.ts</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/60dc180f9c65aa4edb4b387ee4b0b21506e57ecc "><code>60dc180</code></a>
Use element-mode <code>widget</code> directive in rest of the code</li>
<li>Additional commits viewable in <a
href="https://github.com/ChromeDevTools/devtools-frontend/compare/v1.0.1596260...v1.0.1598808 ">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores )
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
---------
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Wolfgang Beyer <wolfi@chromium.org >
2026-03-19 14:11:28 +00:00
Nicholas Roscino
8c2a7fc21e
fix: mark categoryExtensions flag mutually exclusive with autoConnect ( #1202 )
...
Fixes #1072
2026-03-18 16:57:30 +00:00
Wolfgang Beyer
b14d03a655
revert: Reverts "perf: use CDP to find open DevTools pages." ( #1201 )
...
Reverts ChromeDevTools/chrome-devtools-mcp#1150
Quick revert because this change has broken debugging of Electron apps.
2026-03-18 10:46:24 +00:00
Nikolay Vitkov
94de19cdcd
perf: use CDP to find open DevTools pages. ( #1150 )
...
This should reduce the flakiness and issue with finding open DevTools
tabs for the corresponding pages.
Currently we do multiple loops over all the targets, so this should have
a nice performance improvement when multiple pages are opened.
2026-03-11 13:30:30 +00:00
Alex Rudenko
0c0a538921
test: fix flaky test ( #1132 )
2026-03-06 10:01:36 +00:00
Alex Rudenko
c2d8009ff7
refactor: move main files ( #1120 )
...
- `chrome-devtools-mcp.js` is the `npx chrome-devtools-mcp`
- `chrome-devtools.js` is the new CLI
- `-cli-options.js` is the corresponding options
- all these files are in the bin folder to indicate they are executable
2026-03-05 21:51:37 +00:00
Nicholas Roscino
2a6ac709ea
chore: extension pages list ( #1065 )
...
This PR introduces extension pages in the listPages tool under the flag
--category-extension.
2026-03-05 20:57:07 +00:00
Alex Rudenko
8a3a1b7c19
test: improve cli test ( #1121 )
...
Use async spawn, and make the logs visible in CI.
2026-03-05 17:08:23 +00:00
Alex Rudenko
4e4038beff
chore: configure cli args ( #1115 )
...
This PR configures CLI args for the start command. It removes arguments
that do not make sense.
2026-03-05 12:48:42 +00:00
Alex Rudenko
dc53fa331d
chore: validate start args ( #1113 )
...
The `start` command accepts the MCP server CLI options. This PR adds
yargs validation to the start command and re-uses the same yargs
definitions.
2026-03-05 11:27:26 +01:00
Alex Rudenko
d95e9ba89d
chore: add detailed daemon status ( #1110 )
...
adds additional details about running daemon.
2026-03-05 08:41:10 +00:00
Alex Rudenko
88da3b83da
chore: fix bundling for the CLI ( #1111 )
...
extracts non-launch related fixes from
https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/1100
2026-03-05 08:26:37 +00:00
Alex Rudenko
bad5a16f95
chore: handle images in the CLI ( #1107 )
...
- save base64 data as an image to a tmp file.
- change `--format` to `--output-format` to avoid conflicts.
2026-03-05 07:49:13 +00:00
Alex Rudenko
a02a5671f9
chore: change text format to md in CLI ( #1102 )
...
as it is closer to reality.
2026-03-04 18:08:50 +00:00
dependabot[bot]
7c9ff36178
chore(deps-dev): bump chrome-devtools-frontend from 1.0.1591204 to 1.0.1592362 in the bundled-devtools group ( #1098 )
...
Bumps the bundled-devtools group with 1 update:
[chrome-devtools-frontend](https://github.com/ChromeDevTools/devtools-frontend ).
Updates `chrome-devtools-frontend` from 1.0.1591204 to 1.0.1592362
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/22b657d21f73350906f5029706d576d18817f011 "><code>22b657d</code></a>
Update DevTools DEPS (trusted)</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/0d56199f472ca4a345cc7e2d364b241c7ec01a66 "><code>0d56199</code></a>
Host experiment for JPEG XL support</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/a2886d7263db7cd56fcc024baf121ce2e4bacf51 "><code>a2886d7</code></a>
Update Context Selection Agent preamble</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/eb79da005f6e25c84235e6f077d25a12d8533a57 "><code>eb79da0</code></a>
Remove hover effect for title help keyboard accessibility in metric
card</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/9a6eb09d15986ffb176a95dccc3e1ac901bf14dd "><code>9a6eb09</code></a>
Linkify codespan to satisfy LLM</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/952a0ddc8d00a46578ae0aefa77d03123b80bec3 "><code>952a0dd</code></a>
[GreenDev] Add descriptions to investigation steps</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/ddd57a4b0abedf94bbbcfe18aff6259716e5f011 "><code>ddd57a4</code></a>
[GreenDev] Let agent execute JS in console and apply a fix to
sources</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/a22023592a98c7269216b1d23e12d6e2f77ad3f9 "><code>a220235</code></a>
DevTools: Support screen.orientation.lock() in device emulation</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/50b6db7a82db093ae58e6cf7e0b84ac6ad43a063 "><code>50b6db7</code></a>
Linkify links in the markdown response from LLM</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/a8f9701a9117e9e735b1bc64f35491f8f3389722 "><code>a8f9701</code></a>
Report the expected test name</li>
<li>Additional commits viewable in <a
href="https://github.com/ChromeDevTools/devtools-frontend/compare/v1.0.1591204...v1.0.1592362 ">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores )
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: Alex Rudenko <alexrudenko@chromium.org >
2026-03-04 16:13:27 +00:00
dependabot[bot]
a073c0c54b
chore(deps-dev): bump puppeteer from 24.37.5 to 24.38.0 in the bundled group ( #1099 )
...
Bumps the bundled group with 1 update:
[puppeteer](https://github.com/puppeteer/puppeteer ).
Updates `puppeteer` from 24.37.5 to 24.38.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/puppeteer/puppeteer/releases ">puppeteer's
releases</a>.</em></p>
<blockquote>
<h2>puppeteer-core: v24.38.0</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-core-v24.37.5...puppeteer-core-v24.38.0 ">24.38.0</a>
(2026-03-04)</h2>
<h3>🎉 Features</h3>
<ul>
<li>roll to Chrome 146.0.7680.31 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14729 ">#14729</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/627eb5e6572f5248286ab09d74c204e2399632e8 ">627eb5e</a>)</li>
<li>roll to Firefox 148.0 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14728 ">#14728</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/09b655a1a4b2ee389f4a63f701a347566a5b9d88 ">09b655a</a>)</li>
</ul>
<h3>🛠️ Fixes</h3>
<ul>
<li>consider browsingContext.navigationCommitted to dispose an existing
navigation (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14724 ">#14724</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/b4e92c637c503710895c842f391793018c4f35b5 ">b4e92c6</a>)</li>
<li>disable PartitionAllocSchedulerLoopQuarantineTaskControlledPurge (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14744 ">#14744</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/e6c7425d3f459adfbf5c1dd0b230da33fa9eb7c3 ">e6c7425</a>)</li>
<li>roll to Chrome 145.0.7632.117 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14719 ">#14719</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/1d407e1e69ee0f307f8819152a980fa0a24835ff ">1d407e1</a>)</li>
</ul>
<h2>puppeteer: v24.38.0</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.37.5...puppeteer-v24.38.0 ">24.38.0</a>
(2026-03-04)</h2>
<h3>🎉 Features</h3>
<ul>
<li>roll to Chrome 146.0.7680.31 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14729 ">#14729</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/627eb5e6572f5248286ab09d74c204e2399632e8 ">627eb5e</a>)</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li>puppeteer-core bumped from 24.37.5 to 24.38.0</li>
</ul>
</li>
</ul>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/puppeteer/puppeteer/blob/main/CHANGELOG.md ">puppeteer's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.37.5...puppeteer-v24.38.0 ">24.38.0</a>
(2026-03-04)</h2>
<h3>🎉 Features</h3>
<ul>
<li>roll to Chrome 146.0.7680.31 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14729 ">#14729</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/627eb5e6572f5248286ab09d74c204e2399632e8 ">627eb5e</a>)</li>
<li>roll to Firefox 148.0 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14728 ">#14728</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/09b655a1a4b2ee389f4a63f701a347566a5b9d88 ">09b655a</a>)</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li>puppeteer-core bumped from 24.37.5 to 24.38.0</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>🛠️ Fixes</h3>
<ul>
<li>consider browsingContext.navigationCommitted to dispose an existing
navigation (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14724 ">#14724</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/b4e92c637c503710895c842f391793018c4f35b5 ">b4e92c6</a>)</li>
<li>disable PartitionAllocSchedulerLoopQuarantineTaskControlledPurge (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14744 ">#14744</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/e6c7425d3f459adfbf5c1dd0b230da33fa9eb7c3 ">e6c7425</a>)</li>
<li>roll to Chrome 145.0.7632.117 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14719 ">#14719</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/1d407e1e69ee0f307f8819152a980fa0a24835ff ">1d407e1</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/d3356fac46478974c5b88ba2b26b26954cb741ff "><code>d3356fa</code></a>
chore: release main (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14720 ">#14720</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/e6c7425d3f459adfbf5c1dd0b230da33fa9eb7c3 "><code>e6c7425</code></a>
fix: disable PartitionAllocSchedulerLoopQuarantineTaskControlledPurge
(<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14744 ">#14744</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/e24f43290280df6398e992842490631aafd9f287 "><code>e24f432</code></a>
chore(deps-dev): bump the dev-dependencies group across 1 directory with
7 up...</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/b12fca9bd9bedb9c90863c52e7359cfbf281a81e "><code>b12fca9</code></a>
test: update tests and add diagnostics (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14741 ">#14741</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/627eb5e6572f5248286ab09d74c204e2399632e8 "><code>627eb5e</code></a>
feat: roll to Chrome 146.0.7680.31 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14729 ">#14729</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/e0e3e89aa4d7e1825d411a4729a76a0852824c83 "><code>e0e3e89</code></a>
chore: enable blank issues in issue template configuration (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14739 ">#14739</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/ba19944981f4e601127a5b7b54feefd1df972cbe "><code>ba19944</code></a>
chore(deps-dev): bump rollup from 4.22.4 to 4.59.0 in
/examples/puppeteer-in-...</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/b4e92c637c503710895c842f391793018c4f35b5 "><code>b4e92c6</code></a>
fix: consider browsingContext.navigationCommitted to dispose an existing
navi...</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/57b40c03e11ec5defebfa30cb9fcea5d6f6ae572 "><code>57b40c0</code></a>
chore(deps): bump typed-query-selector from 2.12.0 to 2.12.1 in the
dependenc...</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/eca8ca4b90c9e16a86152a62ed8839119c4386a3 "><code>eca8ca4</code></a>
chore(deps): bump the all group in /website with 2 updates (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14732 ">#14732</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.37.5...puppeteer-v24.38.0 ">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores )
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
---------
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Alex Rudenko <alexrudenko@chromium.org >
2026-03-04 15:58:19 +00:00
Alex Rudenko
cb0079efbb
refactor: simplify the response texts ( #1095 )
...
- removed redundant headers in Markdown
- updates more tests to use snapshots
2026-03-04 07:23:37 +00:00
Alex Rudenko
109bf43e4c
chore: fix arg forwarding in CLI ( #1084 )
...
Drive-by: e2e tests for major scenarios.
Drive-by: make stopDaemon more robust.
2026-03-03 17:47:01 +00:00
Nicholas Roscino
8dbf862549
test: installing chrome through test script ( #1085 )
...
Fixes local test failing for triggerAction on extensions.
2026-03-03 16:06:18 +00:00
Alex Rudenko
82f9e6539d
chore: handle CLI responses and formats ( #1080 )
...
Initial handling for CLI responses. Note that image responses are not
supported yet.
2026-03-03 12:30:08 +00:00
Nicholas Roscino
e5973fd021
chore: implement trigger extension action ( #1049 )
...
This PR implements the ability to trigger an extension action by passing
it an extension id.
It uses puppeteer internals and the canary chrome version in tests since
the TriggerAction CDP command is still not available in the current
stable release.
2026-03-02 16:21:58 +00:00
Alex Rudenko
9d173cd3f2
chore(deps): update lh bundle ( #1078 )
...
Produced by `npm run update-lighthouse`.
2026-03-02 15:40:15 +00:00
Alex Rudenko
e51ba47203
fix: simplify emulation and script tools ( #1073 )
...
- reduces the token usage.
- makes emulation and script compatible with CLI.
- documents .nullable() and .object() restrictions for the future.
- the emulation tools do not have nullable anymore and undefined would
clear the emulation instead. The model is thus required to provide all
emulation settings at once.
Closes https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/918
2026-03-02 13:31:55 +00:00
Nicholas Roscino
505089c288
chore: evaluate script on service workers ( #1052 )
...
This PR introduce script evaluation on service workers behind the flag
--category-extension.
2026-02-27 13:29:17 +00:00
Alex Rudenko
f763da24a1
fix: simplify focus state management ( #1063 )
...
Simplify focus management by emulating focused state for all pages. This
is especially useful in the new multi agent use case.
2026-02-27 14:10:00 +01:00
Alex Rudenko
9628dabcb4
refactor: clean up more of the context getters ( #1062 )
...
- moves more code to the McpPage
- deleted Context specific tests
2026-02-27 12:53:20 +00:00
Alex Rudenko
4cb5a17b57
refactor: remove page passing via context ( #1061 )
...
- removes several redundant getters on the context.
- removes passing page instances via context.
2026-02-27 12:08:10 +00:00
Alex Rudenko
d6c06c56a7
refactor: make cdp resolvers use McpPage ( #1060 )
...
Makes cdp resolvers scoped to the page. Once collectors are per McpPage,
the entire method could be moved to McpPage.
2026-02-27 10:58:49 +00:00
Alex Rudenko
40c241bbfc
refactor: move dialog handling to McpPage ( #1059 )
...
- renamed getSelectedPage to getSelectedPptrPage
- removes getSelectedPptrPage from tool interfaces
- moves dialog handling to McpPage
- makes responses to be optionally McpPage-scoped
2026-02-27 11:49:43 +01:00
Alex Rudenko
302e5a0419
refactor: consistently use McpPage in tools ( #1057 )
...
Follow-up to
https://github.com/ChromeDevTools/chrome-devtools-mcp/commit/caf601a32832bb87cfac801a6bbeacb87508412f
The work is not complete and as a follow-up I will handle other Context
methods and moved whatever is relevant to the McpPage. Also, duplicate
getters would go away.
2026-02-27 09:41:08 +00:00
Alex Rudenko
13a18e2380
chore: implement daemon client ( #1037 )
...
The client is meant to start the daemon if it is not running or connect
to the existing one. Long-running client connections are not needed yet.
Removed previous direct daemon test as we better test it via the client,
the intended way to manage the daemon.
2026-02-26 15:03:21 +00:00
Alex Rudenko
5f694c60ff
refactor: improve type safety for page scoped tools ( #1051 )
...
I think we should create proper classes for tool definitions soon.
Follow-up for
https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/1022
2026-02-26 14:33:57 +00:00
Alex Rudenko
dfdac2648e
feat: integrate Lighthouse audits ( #831 )
...
This PR adds tool to perform navigation and snapshot audits using
Lighthouse for Accessibility, SEO and Best practices. For performance
audits existing tools can be used.
Closes https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/473
2026-02-26 12:30:45 +00:00
Stanislav Publika
caf601a328
feat: add pageId routing for parallel multi-agent workflows ( #1022 )
...
## Summary
Adds optional `pageId` routing to page-scoped tools, gated behind
`--experimental-page-id-routing`. When enabled, multi-agent callers can
target a specific page without relying on global selection state. Fully
backward-compatible: without the flag, behavior is unchanged.
### Key changes
- **`pageScoped` annotation**: tools declare `pageScoped: true`; the
server merges `pageId` into their schema at registration time (when the
flag is on)
- **`McpPage` wrapper**: consolidates per-page state (numeric id,
isolated context name, focus tracking) into a single class
- **Request-scoped page routing**: `resolvePageById()` resolves the
target page, `setRequestPage()` threads it through the handler so tools
like `getSelectedPage()` see the right page
- **`assertPageIsFocused`**: keyboard/input tools validate that the
target page holds browser focus, returning an actionable error ("call
select_page first") instead of silently dispatching to the wrong page
- **`--experimental-page-id-routing` CLI flag** (hidden): gates schema
injection and request-scoped routing so the feature can be tested before
graduating
- **Eval scenarios**: `page_id_routing_test` and
`page_focus_keyboard_test` with `serverArgs` support in the eval harness
Addresses #1019
2026-02-26 11:39:38 +00:00
Nicholas Roscino
1a4eaba95b
chore: list service workers ( #1035 )
...
This PR adds the extension service workers to the output of listPages.
This is available only behind "--category-extensions" flag
2026-02-25 13:49:37 +00:00
Nicholas Roscino
25638f093b
chore: enable dynamic tool definition based on CLI arguments ( #1031 )
...
This PR allows tools to be created dynamically based on the provided cli
arguments
2026-02-24 17:01:33 +00:00
Alex Rudenko
1746ed9ee1
fix: detect X server display on Linux ( #1027 )
...
in headful mode on Linux we should try detecting X server if DISPLAY is
not set.
2026-02-24 14:35:55 +00:00
Alex Rudenko
dd26bbf172
chore: implement a daemon process ( #1020 )
...
Implements a daemon process needed for the CLI. The daemon has commands
to start/stop itself as well as an ability to forward data to the
managed MCP server. Local sockets or named pipes are used depending on
the platform.
The .sock and .pid files are placed under
XDG_RUNTIME_DIR/chrome-devtools-mcp or /tmp/chrome-devtools-mcp for
short socket paths.
It uses Puppeteer's PipeTransport to avoid re-implementing \0 terminated
messages.
Note the code is not used anywhere at the moment.
2026-02-24 13:48:36 +00:00