109 Commits

Author SHA1 Message Date
Tolgahan Demirbaş 50a16fae69 feat: make pageId required for page-scoped tools by default (#1777)
Removes `--experimental-page-id-routing` making it the default behavior.
To go back to the previous behavior, pass `--pageIdRouting=false` when
starting the server.

---------

Co-authored-by: Alex Rudenko <alexrudenko@chromium.org>
Co-authored-by: Samiya Caur <samiyac@google.com>
2026-08-24 16:54:06 +00:00
Nikolay Vitkov 5d0283969c refactor: move config files out of bin (#2578) 2026-08-14 14:17:28 +00:00
Alex Rudenko c1ea5bf88f build: move devtools into third_party (#2558) 2026-08-12 11:19:50 +00:00
dependabot[bot] 9b9639edaf chore(deps): bump devtools-frontend from a4b4a54 to b89284c (#2550)
Bumps
[devtools-frontend](https://github.com/ChromeDevTools/devtools-frontend)
from `a4b4a54` to `b89284c`.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/b89284cbca3d602273b868f7183ddfc0e1e7c983"><code>b89284c</code></a>
AI Assistance: Add sources skill to v2 agent</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/12c836b0ae0204417547d834d48f9d3fca9331ec"><code>12c836b</code></a>
Update ScreencastView to track FrameNavigated events</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/b12485948f157fd5de86865317e9b66aeeeb1552"><code>b124859</code></a>
Fix layering: Move AiCodeGen out of panels/common</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/922c4de3e13adcafd8be197710b2b384298a75ab"><code>922c4de</code></a>
Fix layering: Move TypeToAllowDialog out of panels/common</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/66f02c4703f20388d85e0e0e7f364a2d2e631c1b"><code>66f02c4</code></a>
Add getRetainedByContextSummary() to HeapSnapshot</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/b20d97a596788469f750cae8adc0c0c1026d0608"><code>b20d97a</code></a>
Implement navigatedWithinDocument events</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/42d89998f6f034be0404f52fffc9606ae78209b0"><code>42d8999</code></a>
Remove resizer icon</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/c717554d7ed0ae40d0ee7ff69ab86ba1350cdecf"><code>c717554</code></a>
AIv2: support empty context in ListPageOrigins V2 tool</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/28731a26267ce6e3527ae015fe42ec6fe39a7c60"><code>28731a2</code></a>
AI: Implement getEventByKey and selectEventByKey tools for
performance</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/a5e4620e81e8c9255bb6f730d8815c43794f3181"><code>a5e4620</code></a>
Add a setting to skip all pauses</li>
<li>Additional commits viewable in <a
href="https://github.com/ChromeDevTools/devtools-frontend/compare/a4b4a54b836da9774714e7ce7a8f748a537978e6...b89284cbca3d602273b868f7183ddfc0e1e7c983">compare
view</a></li>
</ul>
</details>
<br />

---------

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-08-11 16:18:24 +00:00
Alex Rudenko d016152503 test: detect memory leaks (#2551)
Adds an optional job to run leak detection.
2026-08-11 11:57:21 +00:00
Nikolay Vitkov 6e949e9359 chore: add command and remove recursive (#2532)
`--recursive` forces the pull of other submodules give we don't build
DevTools we don't need them

Ran `npm audit fix`
2026-08-10 12:12:50 +00:00
yulunz 71d897b27e chore: add a new profiler scenario for get_console_messages. (#2491)
To see the heap size increase the scenario has to be run with
warmup-iterations=0. I have made the number of iterations different by
scenario, unless they are overriden through the command line.

Once we have the fixes all merged, I will add an assert somewhere and
see if this can be added into the test suite.
2026-08-07 10:24:40 +00:00
yulunz 884c8dee7c chore: refactor the profiler into scenarios. (#2488)
This is mostly a refactor except:
- the url param is removed. The source map server is always turned on.
We can always manually connect the mcp server to an external site and
check for memory usage / leaks. Testing should be deterministic and not
rely on outside resources.
- the reports are now stored by scenario. Console still prints out
report for each scenario, alongside a final report giving a one line
summary per scenario.

Still a bit rough, but useful.
2026-08-07 09:41:23 +00:00
Nikolay Vitkov 72d825272f chore: use ESM instead of CJS (#2487)
Also remove the `.mjs` as we are in a module repo.
2026-08-07 07:31:54 +00:00
Alex Rudenko 011ac74b67 build: consume devtools-frontend as a submodule (#2481)
Adding devtools-frontend from github as a submodule with depth of 1 to
speed up checkouts. prepare.ts script should automatically pull the
right version.
2026-08-06 09:48:28 +00:00
Alex Rudenko d302a47716 chore: add a script to capture memory snapshots (#2464)
I did not catch a leak using the test sites.
 
Refs: https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/2456
https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/2431
2026-08-05 11:16:25 +00:00
mehmet turac d5d91ee787 chore(deps-dev): update eslint to v10 (#2393)
Fixes #955

## Summary

- update ESLint and `@eslint/js` to v10
- replace the import lint plugin with an ESLint 10-compatible
implementation while preserving the existing import and Node protocol
checks
- update the local license rule for ESLint 10's rule-context properties
- align the supported Node.js versions with ESLint 10's engine
requirements
- preserve the current recommended-rule baseline during the major
upgrade

## Testing

- `npm ci`
- `npm run check-format`
- `npm run typecheck`
- `npm run test`
2026-07-29 11:30:10 +00:00
dependabot[bot] e2c19fed80 chore(deps-dev): bump chrome-devtools-frontend from 1.0.1661063 to 1.0.1664619 in the bundled-devtools group across 1 directory (#2386)
Check code before submitting / [Required] Check correct format (push) Has been cancelled
Check code before submitting / [Required] Check docs updated (push) Has been cancelled
release-please / release-please (push) Has been cancelled
Compile and run tests / Tests on macos-latest with node 22 (push) Has been cancelled
Compile and run tests / Tests on ubuntu-latest with node 22 (push) Has been cancelled
Compile and run tests / Tests on windows-latest with node 22 (push) Has been cancelled
Compile and run tests / Tests on macos-latest with node 24 (push) Has been cancelled
Compile and run tests / Tests on ubuntu-latest with node 24 (push) Has been cancelled
Compile and run tests / Tests on windows-latest with node 24 (push) Has been cancelled
Compile and run tests / Tests on macos-latest with node 26 (push) Has been cancelled
Compile and run tests / Tests on ubuntu-latest with node 26 (push) Has been cancelled
Compile and run tests / Tests on windows-latest with node 26 (push) Has been cancelled
Compile and run tests / [Required] Tests passed (push) Has been cancelled
Bumps the bundled-devtools group with 1 update in the / directory:
[chrome-devtools-frontend](https://github.com/ChromeDevTools/devtools-frontend).

Updates `chrome-devtools-frontend` from 1.0.1661063 to 1.0.1662965
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/69d83ee009fdf624e84ae922a579aee77cf0f071"><code>69d83ee</code></a>
Roll browser-protocol and CfT</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/83caa60581c6fed8370cf8afaa6067447a357cc6"><code>83caa60</code></a>
Revert &quot;[ProdExcellence]: Fix XHRBreakpointsSidebarPane
test&quot;</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/3108a1d857828221f68e5c8c9a05e144064f7789"><code>3108a1d</code></a>
Update DevTools DEPS (trusted)</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/3a75f2e1804b402a10950db28db033bfb1156adf"><code>3a75f2e</code></a>
[Ads Panel] Relocate 'Highlight ads' checkbox to the Ads panel</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/4c539fcb2244952aa86ef158022cbe0a720e6bcd"><code>4c539fc</code></a>
[global-state] Migrate ExtensionScope.test.ts to TestUniverse</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/65fd0498a382fe301ab3e1e197c75d0918d660dd"><code>65fd049</code></a>
[global-state] Pass TargetManager to ChangeManager constructor</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/04a5398f3be6378ba9af4adc0ddc721413040674"><code>04a5398</code></a>
[global-state] AiAgent2.ts - Pass TargetManager via constructor
dependency in...</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/052e32ed24542e1d05880da62acf3868635f4951"><code>052e32e</code></a>
Extend SourceView test before the UI eng vision migration</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/d915e63ca3fd4bea4049725c1916bc91682516e5"><code>d915e63</code></a>
Edit &amp; Resend (2/5): Console originator</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/07342db2e5fa2cd844fec8fa23e3616cadbdf75e"><code>07342db</code></a>
Adopt UI eng vision in the IndexedDBViews</li>
<li>Additional commits viewable in <a
href="https://github.com/ChromeDevTools/devtools-frontend/compare/v1.0.1661063...v1.0.1662965">compare
view</a></li>
</ul>
</details>
<br />

---------

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>
Co-authored-by: Mathias Bynens <mathias@qiwi.be>
2026-07-24 07:27:11 +00:00
Alex Rudenko 38dd346805 docs: fix showing defaults in configuration (#2234)
closes https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/2233
2026-06-19 09:48:30 +00:00
Alex Rudenko f8fb2a9236 test: drop node20 code in tests (#2146) 2026-05-27 11:12:22 +00:00
Alex Rudenko 329fbf1ac9 build: update expected npm publish output (#2140)
It appears the format has changed
https://github.com/ChromeDevTools/chrome-devtools-mcp/actions/runs/26453140812/job/77879380358?pr=2086
2026-05-26 15:13:45 +00:00
Samiya Caur 8e8e83e3f8 test: update all the eval scenarios to work with experimentalPageIdRouting flag (#2085)
Refs #2052 

This change updates all the eval scenarios so that they work with and
without experimentalPageIdRouting flag

Co-authored-by: Samiya Caur <samiyac@chromium.org>
2026-05-20 09:46:18 +00:00
Alex Rudenko 30dcd0ba96 docs: remove windows workaround and document Node LTS support (#2074)
Adds test coverage for 26, removes test coverage for 23 and 20.
2026-05-18 08:19:06 +00:00
dependabot[bot] 20021469dc chore(deps-dev): bump puppeteer from 24.43.0 to 25.0.2 in the bundled group across 1 directory (#2045)
Bumps the bundled group with 1 update in the / directory:
[puppeteer](https://github.com/puppeteer/puppeteer).

Updates `puppeteer` from 24.43.0 to 25.0.2
<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: v25.0.2</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-core-v25.0.1...puppeteer-core-v25.0.2">25.0.2</a>
(2026-05-15)</h2>
<h3>🛠️ Fixes</h3>
<ul>
<li>update docs text (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14992">#14992</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/36527b8b9dd856e11a372b46cba23409e5613573">36527b8</a>)</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li><code>@​puppeteer/browsers</code> bumped from 3.0.1 to 3.0.2</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2>puppeteer: v25.0.2</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v25.0.1...puppeteer-v25.0.2">25.0.2</a>
(2026-05-15)</h2>
<h3>♻️ Chores</h3>
<ul>
<li><strong>puppeteer:</strong> Synchronize puppeteer versions</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li><code>@​puppeteer/browsers</code> bumped from 3.0.1 to 3.0.2</li>
<li>puppeteer-core bumped from 25.0.1 to 25.0.2</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2>puppeteer-core: v25.0.1</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-core-v25.0.0...puppeteer-core-v25.0.1">25.0.1</a>
(2026-05-13)</h2>
<h3>🛠️ Fixes</h3>
<ul>
<li>enabled features should take precedence over disabled features (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14985">#14985</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/f6fd7c29f92e6183b2fd48f0571957306c58d440">f6fd7c2</a>)</li>
<li>roll to Chrome 148.0.7778.167 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14980">#14980</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/84c46fede6b02a1e9a00104b97b28c263f0c84df">84c46fe</a>)</li>
<li>roll to Firefox 150.0.3 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14983">#14983</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/872f77822d6b6b9b6510752d838107a967241bdb">872f778</a>)</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li><code>@​puppeteer/browsers</code> bumped from 3.0.0 to 3.0.1</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2>puppeteer: v25.0.1</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v25.0.0...puppeteer-v25.0.1">25.0.1</a>
(2026-05-13)</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</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-v25.0.1...puppeteer-v25.0.2">25.0.2</a>
(2026-05-15)</h2>
<h3>♻️ Chores</h3>
<ul>
<li><strong>puppeteer:</strong> Synchronize puppeteer versions</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li><code>@​puppeteer/browsers</code> bumped from 3.0.1 to 3.0.2</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>🛠️ Fixes</h3>
<ul>
<li>update docs text (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14992">#14992</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/36527b8b9dd856e11a372b46cba23409e5613573">36527b8</a>)</li>
</ul>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v25.0.0...puppeteer-v25.0.1">25.0.1</a>
(2026-05-13)</h2>
<h3>♻️ Chores</h3>
<ul>
<li><strong>puppeteer:</strong> Synchronize puppeteer versions</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li><code>@​puppeteer/browsers</code> bumped from 3.0.0 to 3.0.1</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>🛠️ Fixes</h3>
<ul>
<li>enabled features should take precedence over disabled features (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14985">#14985</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/f6fd7c29f92e6183b2fd48f0571957306c58d440">f6fd7c2</a>)</li>
<li>roll to Chrome 148.0.7778.167 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14980">#14980</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/84c46fede6b02a1e9a00104b97b28c263f0c84df">84c46fe</a>)</li>
<li>roll to Firefox 150.0.3 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14983">#14983</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/872f77822d6b6b9b6510752d838107a967241bdb">872f778</a>)</li>
</ul>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.43.1...puppeteer-v25.0.0">25.0.0</a>
(2026-05-12)</h2>
<h3>⚠ BREAKING CHANGES</h3>
<ul>
<li>remove deprecated Puppeteer.product (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14977">#14977</a>)</li>
<li>bump min NodeJS to 22 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14973">#14973</a>)</li>
<li>return a Promise for executablePath, defaultArgs (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14965">#14965</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/3aadc38c533caa8df87f381868291ede870883e2"><code>3aadc38</code></a>
chore: release main (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14993">#14993</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/36527b8b9dd856e11a372b46cba23409e5613573"><code>36527b8</code></a>
fix: update docs text (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14992">#14992</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/3ea7bd54b97965fb0e1b83a2c017720162785c92"><code>3ea7bd5</code></a>
fix: capitalize &quot;Chrome&quot; in troubleshooting.md (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14991">#14991</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/ae72fdbec9720c982fc2ed818036d7be9b2aa1dc"><code>ae72fdb</code></a>
chore: Tiny punctuation update in troubleshooting.md (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14990">#14990</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/1597fde55de1e7b3c31032aa43dce0607b4307d3"><code>1597fde</code></a>
chore: release main (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14982">#14982</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/f6fd7c29f92e6183b2fd48f0571957306c58d440"><code>f6fd7c2</code></a>
fix: enabled features should take precedence over disabled features (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14985">#14985</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/bf05fb9bf5bac997e365eda2e31c6067e5ec1677"><code>bf05fb9</code></a>
fix: update browsers to trigger release (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14984">#14984</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/872f77822d6b6b9b6510752d838107a967241bdb"><code>872f778</code></a>
fix: roll to Firefox 150.0.3 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14983">#14983</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/84c46fede6b02a1e9a00104b97b28c263f0c84df"><code>84c46fe</code></a>
fix: roll to Chrome 148.0.7778.167 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14980">#14980</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/ee655d8292f37cc33f279746ef72613e5ccb5db8"><code>ee655d8</code></a>
chore(main): release ng-schematics 0.8.0 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14978">#14978</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.43.0...puppeteer-v25.0.2">compare
view</a></li>
</ul>
</details>
<br />

---------

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-05-17 06:34:22 +00:00
yulunz 3efd8c0194 chore: add sanity check to error enums (#2059)
This also caught and fixed an issue where the enum index is not
sequential :/

No error enums have been defined on the service side yet so it's
possible to modify the enum index directly.
2026-05-14 22:39:15 +00:00
yulunz 71ccdb0dbf chore: better organize telemetry utilities (#2057)
There is no behavior change. 

This groups utilities into two modules:
- `transformation.ts`: for any logic related to mutating / filtering of
the names, values of telemetry entries.
- `metricsRegistry.ts`: for any logic that related to the maintenance of
metrics.json files.
2026-05-14 05:33:40 +00:00
Piotr Paulski faac61d2f2 test: fix fill_form eval (#2011)
Improve fill_form eval by checking if fill_form was the only tool called
for the task and provide more descriptive failure messages.

Co-authored-by: Piotr Paulski <piotrpaulski@chromium.org>
2026-05-07 13:59:14 +00:00
Alex Rudenko 14938acd08 docs: remove token estimates (#2003)
since we include conditional tools in the reference, we cannot give
exact estimates since they depend on the configuration.
2026-05-06 09:21:54 +00:00
Alex Rudenko da0441d425 docs: extract WebMCP into its own category (#1993)
Extracting WebMCP tools into a separate category for better grouping in
the docs. This changes `--experimentalWebmcp` to
`--categoryExperimentalWebmcp` to align with other experimental
categories. Debugging category was not a good fit since the tools
provided by WebMCP are not necessarily used for debugging.

cc @beaufortfrancois
2026-05-05 12:50:42 +00:00
Nicholas Roscino 895fc65a1f docs: update generate-docs.ts tools output order (#1991)
Closes: #1932
2026-05-05 08:31:59 +00:00
Nicholas Roscino b2b3e99d67 feat(cli): generate commands for conditional tools (#1962)
This PR adds all tools in the CLI interface. When a tool is not enabled
the server responds with an error guiding the user on how to enable the
category or the experiment.

Closes:
https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/1933
2026-04-30 07:59:08 +00:00
Alex Rudenko 8cbdb8d494 fix(cli): re-generate cli correctly (#1969)
Regressed in
https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/1120
2026-04-28 14:18:39 +00:00
Piotr Paulski 21bc5b4476 test: add eval targeting fill_form use with select and checkbox elements (#1968)
This eval represents minimal reproduction scenario for #1942. Currently
fill_form is used in around 25% of the attempts.

It can also be used to reproduce #1941 with about 1:10 chance.

---------

Co-authored-by: Piotr Paulski <piotrpaulski@chromium.org>
2026-04-28 13:39:35 +00:00
yulunz cb6b724fdc chore: combine the update metrics scripts. (#1964)
This is a cleanup to merge the update metrics script together into one.
There is behavior change.
2026-04-28 05:59:57 +00:00
yulunz 7b3b4d306e chore: make json file for flag usage metrics append only (#1882)
This makes the flag_usage_metrics.json file append only. Parent: #1881
2026-04-27 20:12:49 +00:00
Piotr Paulski c9c1683b67 chore(deps-dev): bump chrome-devtools-frontend from 1.0.1613625 to 1.0.1616061 (#1952)
Closes #1908

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Piotr Paulski <piotrpaulski@chromium.org>
2026-04-24 19:40:09 +00:00
Alex Rudenko 82b67b07d3 refactor: add support for CLI sessionIds in tests (#1919)
Closes https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/1119
2026-04-22 08:15:36 +00:00
Nicholas Roscino 3ff21cf30d feat: support Chrome extensions debugging (#1922)
Adds ability to install, uninstall and reload extensions, trigger
extension actions and inspect extension pages, service workers and
content scripts. Specify `--categoryExtensions` to enable.

Closes https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/1173
Closes https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/96

---------

Co-authored-by: Mathias Bynens <mathias@qiwi.be>
Co-authored-by: Alex Rudenko <OrKoN@users.noreply.github.com>
Co-authored-by: Alex Rudenko <alexrudenko@chromium.org>
2026-04-21 14:03:15 +00:00
Nicholas Roscino ec895f195a refactor: use puppeteer Extension API (#1911)
This PR refactor the extension usages using the new Puppeteer API.

Requires puppeteer release before merging
2026-04-20 14:38:48 +00:00
Alex Rudenko 0f29acf7cc chore: fix viewport eval (#1888) 2026-04-20 10:26:35 +00:00
yulunz 0a6aaa52eb chore: generate a json file for flag usage metrics (#1881)
This is the second most highly touched metric areas - so let's automate
this portion first. The approach is similar to what we have for tool
call args. The append-only logic will be added in the follow-up PR:
#1882
2026-04-17 18:50:31 +00:00
Alex Rudenko e102a43bab test: try things to reduce flakiness (#1879) 2026-04-16 15:35:34 +00:00
Nikolay Vitkov 6ba1816173 test: add debug logs when running GitHub actions in debug (#1878) 2026-04-16 12:50:27 +00:00
Alex Rudenko 028748663d chore: minor fixes to build and evals (#1875) 2026-04-16 11:59:06 +00:00
Nikolay Vitkov 764b9cf406 chore: some build and test fixes (#1861)
Under some cases one could not re-build correctly due to the directory
being remove.
And we can save some CPU cycles in test to disable the update checker.
2026-04-14 15:26:11 +00:00
Alex Rudenko 728d90208d test: speed up .only (#1846)
the node test framework runs not only tests respecting
`--test-concurrency=1` but also discovery of the tests (import of the
files). This makes the `npm run test:only` slow. This PR checks ahead of
times which files have .only and only tells the node test runner to
import those.
2026-04-10 10:46:52 +00:00
yulunz ed9e4dd17d chore: make tool_call_metrics.json append only against new changes. (#1778)
With this change new tools are added to the very back of the json file.
Any removed tools will receive a isDeprecated flag in the existing
entry. And the same with tool arguments.
2026-04-01 22:27:53 +00:00
yulunz bc8ef4bc16 chore: add a script to generate tool_call_metrics.json for telemetry. (#1257)
This adds a script that generates a json file that summarizes all tool
calls and arguments for each.

- The arguments run through the blocklist filtering so arguments
containing high entropy ids are filtered out (e.g. "uid", "msgid" etc).
- It uses existing functions from clearcut logger module to transform
the arg name and value (i.e. take the length of the string, take the
size of the array, and rename the string to be "string_length", and
array "array_count" etc).
- These functions from the clearcut logger module will be later used to
sanitize the params as we start to log them.

This doesn't include the append only / deprecation logic just yet (i.e.
it's doesn't handle the case when new tools are added / removed, or
arguments of the existing tools are modified). This will be added in
following PRs.

The parent PR is #1250.
2026-04-01 18:51:35 +00:00
Matt Van Horn cdbc66f160 chore: add ESLint guard against direct third-party imports bypassing bundle (#1189)
## Summary

- Adds a custom ESLint rule `@local/no-direct-third-party-imports` that
flags value imports of bundled third-party packages
(`@modelcontextprotocol/sdk`, `puppeteer-core`, `@puppeteer/browsers`,
`yargs`, `debug`, `zod`, `core-js`) when used outside of
`src/third_party/`
- Type-only imports (`import type`) are allowed since they are erased at
compile time and don't affect the bundle
- The rule is scoped to `src/**/*.ts` so development scripts and tests
are unaffected

This prevents the class of bugs where a direct npm import works during
development (devDependencies installed) but breaks in the published
package (only bundled code ships). PR #1111 was an example of this exact
issue caught through manual `npm pack` testing.

Closes #1123

## Test plan

- [x] Verified `npx eslint --no-cache src/` passes with no violations on
the current codebase
- [x] Verified the rule correctly catches a test file with `import
{Client} from '@modelcontextprotocol/sdk/client/index.js'`
- [x] Verified the rule allows `import type {Flags} from 'lighthouse'`
(type-only import)
- [x] Verified the rule does not fire inside `src/third_party/index.ts`
(the barrel itself)
- [x] Verified scripts/ and tests/ are unaffected (rule scoped to
`src/**/*.ts`)

---------

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Alex Rudenko <alexrudenko@chromium.org>
2026-04-01 07:59:11 +00:00
Matt Van Horn 2e1eabac02 chore: add eslint rule to validate tool schema patterns (#1191)
## Summary

- Add `@local/no-zod-nullable-object` ESLint rule that disallows
`.nullable()` and `.object()` usage in tool schema files
(`src/tools/**/*.ts`)
- Fix the existing `zod.object()` violation in `fill_form` by converting
the elements array from objects to `"uid=value"` formatted strings
- Remove the TODO from CONTRIBUTING.md and link the rule name to the
documented restriction

## Context

Per the [PR #1073
review](https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/1073#discussion_r2872188785)
and the CONTRIBUTING.md guidelines, tool schemas should not use
`.nullable()` or `.object()` types. Complex objects should be
represented as short formatted strings instead.

The rule catches:
- `zod.object({...})` / `z.object({...})` - flags direct zod object
schema usage
- `.nullable()` - flags nullable schema usage on any expression

Closes #1076

## Test plan

- [ ] `npx eslint src/tools/` passes with no violations
- [ ] Creating a test file with `zod.object()` or `.nullable()` in
`src/tools/` triggers the rule
- [ ] TypeScript compilation passes (`npx tsc --noEmit`)
- [ ] Existing `fill_form` test updated to use new string format

---------

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Alex Rudenko <OrKoN@users.noreply.github.com>
Co-authored-by: Nikolay Vitkov <34244704+Lightning00Blade@users.noreply.github.com>
Co-authored-by: Alex Rudenko <alexrudenko@chromium.org>
2026-04-01 07:40:32 +00:00
Alex Rudenko ae311fc23c chore: filter out some tools from CLI (#1131)
Filters out wait_for and fill_form.
2026-03-06 08:05:50 +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
Alex Rudenko 013110b0ee chore: generate cli automatically (#1117) 2026-03-05 13:35:15 +00:00
Madhavi bdbbc84c12 fix: improve tool descriptions (#965)
Addresses cases where DevTools MCP tools were not consistently picked up
from natural language prompts by improving tool descriptions and
metadata.

Validation:
Tested locally across multiple prompts related to LCP and page
performance.
MCP tools were selected more consistently after the description updates.

Refs #940

---------

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 <OrKoN@users.noreply.github.com>
Co-authored-by: Nikolay Vitkov <34244704+Lightning00Blade@users.noreply.github.com>
Co-authored-by: Alex Rudenko <alexrudenko@chromium.org>
2026-03-05 06:47:15 +00:00
Alex Rudenko b5b9a7753b test: fix install of chrome in test.mjs (#1087)
This is used by some extension tests that rely on new CDP capabilities.
cc @nroscino
2026-03-03 20:43:53 +00:00