Alex Rudenko
5a23a8c201
feat: support testing light and dark mode ( #858 )
...
Closes https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/130
2026-01-28 13:57:54 +00:00
Alex Rudenko
849c59071c
chore: add structured content for rest of tools ( #836 )
...
Closes https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/689
2026-01-26 14:01:35 +00:00
Natasha Gorshunova
4ad781fee6
chore: implement list_extensions tool for local unpacked extensions ( #819 )
...
Co-authored-by: Natallia Harshunova <nharshunova@chromium.org >
Co-authored-by: Alex Rudenko <OrKoN@users.noreply.github.com >
2026-01-26 10:37:13 +00:00
Alex Rudenko
a6cd2cd3f2
fix: re-use node ids across snapshots ( #814 )
...
previously, Chrome DevTools MCP was strictly requiring the client to use
the latest snapshot. This change updates the behavior to be more
lenient. Previously issued uids will be recognized if the underlying
backend Id (loaderId + backendNodeId) still exists.
Related https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/726
2026-01-22 14:25:39 +00:00
Alex Rudenko
fbd22ce869
chore: structured performance responses ( #809 )
...
This PR moves formatting out of the tools and to the McpResponse.
Drive-by: clears up past trace results.
2026-01-22 10:01:59 +00:00
Alex Rudenko
a8169676f9
feat: support device viewport and user agent emulation ( #798 )
...
This PR adds two emulation attributes `viewport` and `userAgent` that
allow emulating a mobile or a different desktop device.
Closes https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/272
Closes https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/619
Closes https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/410
Closes https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/280
(the recommended way is to emulate via the MCP server instead of a
parallel DevTools session)
2026-01-20 14:07:57 +00:00
Alex Rudenko
3fcca026cb
chore: support structured content ( #744 )
...
The idea is to turn formatters into instances and support both text and
JSON formatting. The structured content is output if the experimental
structured content flag is passed. For now, only the snapshots are
returned in a structured way.
Refs https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/689
2026-01-12 13:53:12 +00:00
dependabot[bot]
4e69ed4bca
chore(deps-dev): bump the bundled group with 2 updates ( #641 )
...
Bumps the bundled group with 2 updates:
[@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/typescript-sdk )
and [puppeteer](https://github.com/puppeteer/puppeteer ).
Updates `@modelcontextprotocol/sdk` from 1.21.1 to 1.24.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/modelcontextprotocol/typescript-sdk/releases "><code>@modelcontextprotocol/sdk</code>'s
releases</a>.</em></p>
<blockquote>
<h2>1.24.1</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(streamableHttp): fix infinite retries when maxRetries is set to
0 by <a href="https://github.com/mrorigo "><code>@mrorigo</code></a> in
<a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1216 ">modelcontextprotocol/typescript-sdk#1216</a></li>
<li>chore: update protocol version to 2025-11-25 by <a
href="https://github.com/dsp-ant "><code>@dsp-ant</code></a> in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1218 ">modelcontextprotocol/typescript-sdk#1218</a></li>
<li>chore: bump version for release by <a
href="https://github.com/felixweinberger "><code>@felixweinberger</code></a>
in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1219 ">modelcontextprotocol/typescript-sdk#1219</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/mrorigo "><code>@mrorigo</code></a> made
their first contribution in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1216 ">modelcontextprotocol/typescript-sdk#1216</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/modelcontextprotocol/typescript-sdk/compare/1.24.0...1.24.1 ">https://github.com/modelcontextprotocol/typescript-sdk/compare/1.24.0...1.24.1 </a></p>
<h2>1.24.0</h2>
<h2>Summary</h2>
<p>This release brings us up to speed with the latest MCP spec
<code>2025-11-25</code>. Take a look at the <a
href="https://modelcontextprotocol.io/specification/2025-11-25 ">latest
spec</a> as well as the release <a
href="https://blog.modelcontextprotocol.io/posts/2025-11-25-first-mcp-anniversary/ ">blog
post.</a></p>
<h2>What's Changed</h2>
<ul>
<li>fix: update spec links from latest to draft by <a
href="https://github.com/domdomegg "><code>@domdomegg</code></a> in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1171 ">modelcontextprotocol/typescript-sdk#1171</a></li>
<li>Make sure to consume HTTP error response bodies by <a
href="https://github.com/GreenStage "><code>@GreenStage</code></a> in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1173 ">modelcontextprotocol/typescript-sdk#1173</a></li>
<li>docs: add GET request handling for streamableHttp stateless mode by
<a href="https://github.com/saharis9988 "><code>@saharis9988</code></a>
in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1161 ">modelcontextprotocol/typescript-sdk#1161</a></li>
<li>SEP-1686: Tasks by <a
href="https://github.com/LucaButBoring "><code>@LucaButBoring</code></a>
in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1041 ">modelcontextprotocol/typescript-sdk#1041</a></li>
<li>Fix JSON parse error on SSE events with empty data by <a
href="https://github.com/felixweinberger "><code>@felixweinberger</code></a>
in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1184 ">modelcontextprotocol/typescript-sdk#1184</a></li>
<li>Fix StreamableHTTPClientTransport instantiation by <a
href="https://github.com/yuwzho "><code>@yuwzho</code></a> in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/944 ">modelcontextprotocol/typescript-sdk#944</a></li>
<li>feat: eslint rule to prefer node protocols by <a
href="https://github.com/mattzcarey "><code>@mattzcarey</code></a> in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1187 ">modelcontextprotocol/typescript-sdk#1187</a></li>
<li>fix: call tasks/result to deliver side-channel messages by <a
href="https://github.com/felixweinberger "><code>@felixweinberger</code></a>
in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1185 ">modelcontextprotocol/typescript-sdk#1185</a></li>
<li>Add invalid_target oauth error (rfc 8707) by <a
href="https://github.com/GreenStage "><code>@GreenStage</code></a> in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1183 ">modelcontextprotocol/typescript-sdk#1183</a></li>
<li>fix(client): use StreamableHTTPError instead of plain Error in
send() by <a
href="https://github.com/yamadashy "><code>@yamadashy</code></a> in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1178 ">modelcontextprotocol/typescript-sdk#1178</a></li>
<li>coerce 'expires_in' to be a number by <a
href="https://github.com/adam-kuhn "><code>@adam-kuhn</code></a> in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1111 ">modelcontextprotocol/typescript-sdk#1111</a></li>
<li>Allow HTTP issuer URLs when MCP_DEV_MODE is enabled by <a
href="https://github.com/jerome3o-anthropic "><code>@jerome3o-anthropic</code></a>
in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1189 ">modelcontextprotocol/typescript-sdk#1189</a></li>
<li>fix: update registerTool signature for proper typed ToolCallback by
<a href="https://github.com/mattzcarey "><code>@mattzcarey</code></a> in
<a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1188 ">modelcontextprotocol/typescript-sdk#1188</a></li>
<li>SEP-1046: Client credentials flow for M2M without user interaction
by <a
href="https://github.com/KKonstantinov "><code>@KKonstantinov</code></a>
in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1157 ">modelcontextprotocol/typescript-sdk#1157</a></li>
<li>adds the transitive <code>@types/express-serve-static-core</code>
dependency as a direct devDependency by <a
href="https://github.com/mgyarmathy "><code>@mgyarmathy</code></a> in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1078 ">modelcontextprotocol/typescript-sdk#1078</a></li>
<li>Fix optional argument handling in prompts for Zod V4 by <a
href="https://github.com/filip-bartuska-ipf "><code>@filip-bartuska-ipf</code></a>
in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1199 ">modelcontextprotocol/typescript-sdk#1199</a></li>
<li>fix hanging stdio servers by <a
href="https://github.com/mattzcarey "><code>@mattzcarey</code></a> in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1200 ">modelcontextprotocol/typescript-sdk#1200</a></li>
<li>README refactor by <a
href="https://github.com/KKonstantinov "><code>@KKonstantinov</code></a>
in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1197 ">modelcontextprotocol/typescript-sdk#1197</a></li>
<li>[Docs] Fix typo by <a
href="https://github.com/koic "><code>@koic</code></a> in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1067 ">modelcontextprotocol/typescript-sdk#1067</a></li>
<li>feat: add closeSSEStream callback to RequestHandlerExtra by <a
href="https://github.com/felixweinberger "><code>@felixweinberger</code></a>
in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1166 ">modelcontextprotocol/typescript-sdk#1166</a></li>
<li>fix: improve SSE reconnection behavior by <a
href="https://github.com/felixweinberger "><code>@felixweinberger</code></a>
in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1191 ">modelcontextprotocol/typescript-sdk#1191</a></li>
<li>fix: normalize headers in sse transport by <a
href="https://github.com/marcrasi "><code>@marcrasi</code></a> in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/856 ">modelcontextprotocol/typescript-sdk#856</a></li>
<li>feat: add closeStandaloneSSEStream for GET stream polling by <a
href="https://github.com/felixweinberger "><code>@felixweinberger</code></a>
in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1203 ">modelcontextprotocol/typescript-sdk#1203</a></li>
<li>fix: normalize null to undefined in ElicitResultSchema content field
by <a href="https://github.com/mattzcarey "><code>@mattzcarey</code></a>
in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1204 ">modelcontextprotocol/typescript-sdk#1204</a></li>
<li>Modify Origin header validation in validateRequestHeaders
(streamableHttp.ts and sse.ts) to allow requests without an Origin, as
they are not relevant to server DNS rebinding protection. by <a
href="https://github.com/jacopoc "><code>@jacopoc</code></a> in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1205 ">modelcontextprotocol/typescript-sdk#1205</a></li>
<li>fix: allow zod 4 transformations by <a
href="https://github.com/mattzcarey "><code>@mattzcarey</code></a> in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1213 ">modelcontextprotocol/typescript-sdk#1213</a></li>
<li>feat: backwards-compatible createMessage overloads for SEP-1577 by
<a
href="https://github.com/felixweinberger "><code>@felixweinberger</code></a>
in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1212 ">modelcontextprotocol/typescript-sdk#1212</a></li>
<li>chore: bump version for release by <a
href="https://github.com/felixweinberger "><code>@felixweinberger</code></a>
in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1215 ">modelcontextprotocol/typescript-sdk#1215</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/GreenStage "><code>@GreenStage</code></a> made
their first contribution in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1173 ">modelcontextprotocol/typescript-sdk#1173</a></li>
<li><a
href="https://github.com/saharis9988 "><code>@saharis9988</code></a>
made their first contribution in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1161 ">modelcontextprotocol/typescript-sdk#1161</a></li>
<li><a href="https://github.com/yuwzho "><code>@yuwzho</code></a> made
their first contribution in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/944 ">modelcontextprotocol/typescript-sdk#944</a></li>
<li><a href="https://github.com/yamadashy "><code>@yamadashy</code></a>
made their first contribution in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1178 ">modelcontextprotocol/typescript-sdk#1178</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/modelcontextprotocol/typescript-sdk/commit/6dd7cd4e16cf7ece373dff4138e9a065aa1c6ae7 "><code>6dd7cd4</code></a>
chore: bump version for release (<a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/issues/1219 ">#1219</a>)</li>
<li><a
href="https://github.com/modelcontextprotocol/typescript-sdk/commit/600859f10586e5d49910a04ed877901bfec171b3 "><code>600859f</code></a>
chore: update protocol version to 2025-11-25 (<a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/issues/1218 ">#1218</a>)</li>
<li><a
href="https://github.com/modelcontextprotocol/typescript-sdk/commit/bfad917cad8d84c40047ae352b7611b61377ef59 "><code>bfad917</code></a>
fix(streamableHttp): fix infinite retries when maxRetries is set to 0
(<a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/issues/1216 ">#1216</a>)</li>
<li><a
href="https://github.com/modelcontextprotocol/typescript-sdk/commit/356b7e61c83af723a0b7ad67d8193de70a5f03ca "><code>356b7e6</code></a>
chore: bump version for release (<a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/issues/1215 ">#1215</a>)</li>
<li><a
href="https://github.com/modelcontextprotocol/typescript-sdk/commit/09623e2aa5044f9e9da62c73d820a8250b9d97ed "><code>09623e2</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/modelcontextprotocol/typescript-sdk/commit/cf51343cc12fc83db34d07b7d7269b73d413cc06 "><code>cf51343</code></a>
feat: backwards-compatible createMessage overloads for SEP-1577 (<a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/issues/1212 ">#1212</a>)</li>
<li><a
href="https://github.com/modelcontextprotocol/typescript-sdk/commit/82041262dc9cee1c27b787edeee828a0ed51e122 "><code>8204126</code></a>
fix: allow zod 4 transformations (<a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/issues/1213 ">#1213</a>)</li>
<li><a
href="https://github.com/modelcontextprotocol/typescript-sdk/commit/608360047dc6899f1cf4f0226eb62fe7b11b3898 "><code>6083600</code></a>
Modify Origin header validation in validateRequestHeaders
(streamableHttp.ts ...</li>
<li><a
href="https://github.com/modelcontextprotocol/typescript-sdk/commit/a6ee2cb3c234960b6c448eb9ffb4e442233e6c10 "><code>a6ee2cb</code></a>
fix: normalize null to undefined in ElicitResultSchema content field (<a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/issues/1204 ">#1204</a>)</li>
<li><a
href="https://github.com/modelcontextprotocol/typescript-sdk/commit/4b651b8fe17a567c8563b98c8fd677d9df688c0a "><code>4b651b8</code></a>
feat: add closeStandaloneSSEStream for GET stream polling (<a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/issues/1203 ">#1203</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/modelcontextprotocol/typescript-sdk/compare/1.21.1...1.24.1 ">compare
view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by <a
href="https://www.npmjs.com/~pcarleton ">pcarleton</a>, a new releaser
for <code>@modelcontextprotocol/sdk</code> since your current
version.</p>
</details>
<br />
Updates `puppeteer` from 24.31.0 to 24.32.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.32.0</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-core-v24.31.0...puppeteer-core-v24.32.0 ">24.32.0</a>
(2025-12-03)</h2>
<h3>🎉 Features</h3>
<ul>
<li>add browser.screens, .addScreen and .removeScreen methods (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14445 ">#14445</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/98ae5e75fda3d01c067dac6926370dba05cd720c ">98ae5e7</a>)</li>
<li>bluetooth emulation (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14448 ">#14448</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/e181c1befaebadfa74ec4e1b6742f26187bd3a2a ">e181c1b</a>)</li>
<li>roll to Chrome 143.0.7499.40 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14476 ">#14476</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/b0e15aff5143b1c08d0ad66555cfc5c9a369d5dd ">b0e15af</a>)</li>
<li>support channel in puppeteer.connect (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14466 ">#14466</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/bc3a52185d43618756c491e9cc930ca9340f9776 ">bc3a521</a>)</li>
<li>support new page window positioning (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14446 ">#14446</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/20881f8a52b8a29abaf6e5353dc8642474348fa0 ">20881f8</a>)</li>
<li><strong>webdriver:</strong> bluetooth emulation via WebDriver BiDi
(<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14455 ">#14455</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/e17263c815cb6638c035d0d91934ab8536f03b7b ">e17263c</a>)</li>
</ul>
<h3>🛠️ Fixes</h3>
<ul>
<li>ignore non-page DevTools targets when handleDevToolsAsPage=true (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14472 ">#14472</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/11bf1d205707e02c874cb6e3c5ee6f12b1e27f70 ">11bf1d2</a>)</li>
<li>prevent accessibility nodes attributes with false from being ignored
(<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14475 ">#14475</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/086a8ab650c424192ec8edf489fce90bad318bb2 ">086a8ab</a>)</li>
<li>roll to Firefox 145.0.2 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14462 ">#14462</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/97ca8944d5fb5f169804f230d431a62cb600bbfc ">97ca894</a>)</li>
<li><strong>webdriver:</strong> allow for scripts to throw platform
objects (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14456 ">#14456</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/7c0d3d977b2c3370516c42218977bd4338421b28 ">7c0d3d9</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 2.10.13 to 2.11.0</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2>puppeteer: v24.32.0</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.31.0...puppeteer-v24.32.0 ">24.32.0</a>
(2025-12-03)</h2>
<h3>🎉 Features</h3>
<ul>
<li>roll to Chrome 143.0.7499.40 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14476 ">#14476</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/b0e15aff5143b1c08d0ad66555cfc5c9a369d5dd ">b0e15af</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 2.10.13 to 2.11.0</li>
<li>puppeteer-core bumped from 24.31.0 to 24.32.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.31.0...puppeteer-v24.32.0 ">24.32.0</a>
(2025-12-03)</h2>
<h3>🎉 Features</h3>
<ul>
<li>add browser.screens, .addScreen and .removeScreen methods (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14445 ">#14445</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/98ae5e75fda3d01c067dac6926370dba05cd720c ">98ae5e7</a>)</li>
<li>bluetooth emulation (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14448 ">#14448</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/e181c1befaebadfa74ec4e1b6742f26187bd3a2a ">e181c1b</a>)</li>
<li>roll to Chrome 143.0.7499.40 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14476 ">#14476</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/b0e15aff5143b1c08d0ad66555cfc5c9a369d5dd ">b0e15af</a>)</li>
<li>support channel in puppeteer.connect (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14466 ">#14466</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/bc3a52185d43618756c491e9cc930ca9340f9776 ">bc3a521</a>)</li>
<li>support new page window positioning (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14446 ">#14446</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/20881f8a52b8a29abaf6e5353dc8642474348fa0 ">20881f8</a>)</li>
<li><strong>webdriver:</strong> bluetooth emulation via WebDriver BiDi
(<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14455 ">#14455</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/e17263c815cb6638c035d0d91934ab8536f03b7b ">e17263c</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 2.10.13 to 2.11.0</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>🛠️ Fixes</h3>
<ul>
<li>ignore non-page DevTools targets when handleDevToolsAsPage=true (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14472 ">#14472</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/11bf1d205707e02c874cb6e3c5ee6f12b1e27f70 ">11bf1d2</a>)</li>
<li>prevent accessibility nodes attributes with false from being ignored
(<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14475 ">#14475</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/086a8ab650c424192ec8edf489fce90bad318bb2 ">086a8ab</a>)</li>
<li>roll to Firefox 145.0.2 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14462 ">#14462</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/97ca8944d5fb5f169804f230d431a62cb600bbfc ">97ca894</a>)</li>
<li><strong>webdriver:</strong> allow for scripts to throw platform
objects (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14456 ">#14456</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/7c0d3d977b2c3370516c42218977bd4338421b28 ">7c0d3d9</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/c324e1bb5b1a33e793324669d402fd2e32e28707 "><code>c324e1b</code></a>
chore: release main (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14454 ">#14454</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/b0e15aff5143b1c08d0ad66555cfc5c9a369d5dd "><code>b0e15af</code></a>
feat: roll to Chrome 143.0.7499.40 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14476 ">#14476</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/086a8ab650c424192ec8edf489fce90bad318bb2 "><code>086a8ab</code></a>
fix: prevent accessibility nodes attributes with false from being
ignored (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/1 ">#1</a>...</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/11bf1d205707e02c874cb6e3c5ee6f12b1e27f70 "><code>11bf1d2</code></a>
fix: ignore non-page DevTools targets when handleDevToolsAsPage=true (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14472 ">#14472</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/bc3a52185d43618756c491e9cc930ca9340f9776 "><code>bc3a521</code></a>
feat: support channel in puppeteer.connect (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14466 ">#14466</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/4913b9bdf966889bb7ffc48703fc9ab8e8271ff1 "><code>4913b9b</code></a>
test: update canary expectations (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14467 ">#14467</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/45f82aff4343d0bb00871a084f734f87934b2f65 "><code>45f82af</code></a>
test: fix more path related issues in tests (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14465 ">#14465</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/372b2806cee3893c6935afa98cc9b836b7c1cce1 "><code>372b280</code></a>
fix: avoid hard-coded separators in chrome.ts (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14464 ">#14464</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/e17263c815cb6638c035d0d91934ab8536f03b7b "><code>e17263c</code></a>
feat(webdriver): bluetooth emulation via WebDriver BiDi (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14455 ">#14455</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/97ca8944d5fb5f169804f230d431a62cb600bbfc "><code>97ca894</code></a>
fix: roll to Firefox 145.0.2 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14462 ">#14462</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.31.0...puppeteer-v24.32.0 ">compare
view</a></li>
</ul>
</details>
<br />
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 merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@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 >
2025-12-03 09:05:24 +00:00
Simon Zünd
8e90a92780
chore: split withBrowser into withBrowser and withMcpContext ( #620 )
...
I split this PR off from my "create one DevTools universe per page" PR
in preparation. This allows tests to re-use browser instances without
creating an `McpContext`.
Drive-by: Move mocked browser/page into utils.ts.
2025-11-28 07:52:52 +01:00
Natasha Gorshunova
63b826cfe0
chore: report issues in details in get_console_mesasge ( #611 )
...
Co-authored-by: Natallia Harshunova <nharshunova@chromium.org >
2025-11-27 08:08:47 +01:00
Natasha Gorshunova
326c279179
chore: report console issues in get_console_messages ( #594 )
...
Co-authored-by: Natallia Harshunova <nharshunova@chromium.org >
2025-11-25 11:41:14 +01:00
zyzyzyryxy
94752ffade
fix: prevent dropping license notices on some files when publishing ( #604 )
...
This PR prevents license notices being dropped when creating package for
publication.
This can happen when first import in the file is type-only import that
gets removed during build. When there is no empty line between the
license block comment and such import, the comment is treated as related
to the import and gets removed alongside it.
Adding an empty line between copyright notice and the import fixes the
issue.
Co-authored-by: Piotr Paulski <piotrpaulski@chromium.org >
2025-11-24 12:38:30 +00:00
Nikolay Vitkov
b30bdd6e17
test: use snapshots for McpResponse ( #483 )
2025-10-27 16:02:03 +01:00
dependabot[bot]
e8394ab113
chore(deps-dev): bump the bundled group with 2 updates ( #481 )
...
Bumps the bundled group with 2 updates:
[@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/typescript-sdk )
and [puppeteer](https://github.com/puppeteer/puppeteer ).
Updates `@modelcontextprotocol/sdk` from 1.20.1 to 1.20.2
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/modelcontextprotocol/typescript-sdk/commit/7098bff073d78cfaee40869897d84a5929c29570 "><code>7098bff</code></a>
chore: bump version for weekly release (<a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/issues/1042 ">#1042</a>)</li>
<li><a
href="https://github.com/modelcontextprotocol/typescript-sdk/commit/c54309598505007c4467f78fa7dfb3e7c763679c "><code>c543095</code></a>
fix: Zod to JSONSchema pipe strategies (<a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/issues/962 ">#962</a>)</li>
<li>See full diff in <a
href="https://github.com/modelcontextprotocol/typescript-sdk/compare/1.20.1...1.20.2 ">compare
view</a></li>
</ul>
</details>
<br />
Updates `puppeteer` from 24.26.0 to 24.26.1
<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.26.1</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-core-v24.26.0...puppeteer-core-v24.26.1 ">24.26.1</a>
(2025-10-22)</h2>
<h3>🛠️ Fixes</h3>
<ul>
<li><strong>a11y:</strong> expose the url property for links (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14357 ">#14357</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/93d098b060771dbd1e6875f4664273604022f3bd ">93d098b</a>)</li>
<li>roll to Chrome 141.0.7390.122 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14360 ">#14360</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/f2fef816f234bd30a13bb86dfc654f29f5cb2f6b ">f2fef81</a>)</li>
</ul>
<h2>puppeteer: v24.26.1</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.26.0...puppeteer-v24.26.1 ">24.26.1</a>
(2025-10-22)</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>puppeteer-core bumped from 24.26.0 to 24.26.1</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.26.0...puppeteer-v24.26.1 ">24.26.1</a>
(2025-10-22)</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>puppeteer-core bumped from 24.26.0 to 24.26.1</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>🛠️ Fixes</h3>
<ul>
<li><strong>a11y:</strong> expose the url property for links (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14357 ">#14357</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/93d098b060771dbd1e6875f4664273604022f3bd ">93d098b</a>)</li>
<li>roll to Chrome 141.0.7390.122 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14360 ">#14360</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/f2fef816f234bd30a13bb86dfc654f29f5cb2f6b ">f2fef81</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/6e2348c27e3493e53b609122888e0950d342e4d2 "><code>6e2348c</code></a>
chore: release main (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14359 ">#14359</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/21f309239909548b390b7e851d481ff832899e35 "><code>21f3092</code></a>
test: fix move to ESM (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14362 ">#14362</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/5fe1333769dd7bf28b239db308d67f3402633da2 "><code>5fe1333</code></a>
test: move to ESM (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14358 ">#14358</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/f2fef816f234bd30a13bb86dfc654f29f5cb2f6b "><code>f2fef81</code></a>
fix: roll to Chrome 141.0.7390.122 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14360 ">#14360</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/93d098b060771dbd1e6875f4664273604022f3bd "><code>93d098b</code></a>
fix(a11y): expose the url property for links (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14357 ">#14357</a>)</li>
<li>See full diff in <a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.26.0...puppeteer-v24.26.1 ">compare
view</a></li>
</ul>
</details>
<br />
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 merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@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: Nikolay Vitkov <nvitkov@chromium.org >
2025-10-27 14:08:01 +00:00
Nikolay Vitkov
376f57c972
test: use html helper ( #478 )
2025-10-27 12:32:47 +00:00
Alex Rudenko
b0ce08ae2c
feat: support saving snapshots to file ( #463 )
...
Refs https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/153
---------
Co-authored-by: Nikolay Vitkov <34244704+Lightning00Blade@users.noreply.github.com >
2025-10-24 09:20:14 +00:00
Alina Varkki
15d942c4f3
feat: add filters and pagination to the console messages tool ( #387 )
...
In the next pr, we will add ids to messages and another tool to get more
details by id
2025-10-15 18:22:15 +02:00
Alex Rudenko
d47aaa96ff
feat: support verbose snapshots ( #388 )
...
As an option allow verbose snapshots
https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/363
---------
Co-authored-by: Nikolay Vitkov <34244704+Lightning00Blade@users.noreply.github.com >
2025-10-15 12:16:34 +00:00
Nikolay Vitkov
579819b5e7
feat: use stable id for network request querying ( #382 )
...
Provides stable id when selecting a network request, this should fix
issues with multiple same places and long URL selection.
2025-10-14 14:35:15 +02:00
Nikolay Vitkov
78bf66a7b1
refactor: use different format for reqid ( #380 )
2025-10-14 12:23:19 +00:00
Nikolay Vitkov
f4d7b49bb1
feat: support stable id for network requests ( #375 )
...
This is part 1, we just expose the uid here, in a follow up PR we will
be used for finding the request.
2025-10-14 12:45:16 +02:00
Alex Rudenko
2082641cc7
refactor: simplify snapshot generation ( #369 )
...
the only difference is that checked/pressed are only included if the
element was checked/pressed.
Refs: https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/363
2025-10-13 13:51:49 +00:00
Alex Rudenko
f08f8080d0
fix: return the default dialog value correctly ( #366 )
...
Closes https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/364
Closes https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/361
---------
Co-authored-by: Nikolay Vitkov <34244704+Lightning00Blade@users.noreply.github.com >
2025-10-13 11:46:18 +00:00
Nicholas Roscino
dd3c14336e
feat: add request and response body ( #267 )
...
This PR adds the request and response bodies into the context if they
are available and in a readable format.
---------
Co-authored-by: Nicholas Roscino <nroscino@chromium.org >
Co-authored-by: Nikolay Vitkov <34244704+Lightning00Blade@users.noreply.github.com >
2025-10-08 11:22:10 +02:00
Alex Rudenko
36e64d5ae2
feat: support timeouts in wait_for and navigations ( #228 )
...
Closes https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/223
Closes https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/116
2025-10-01 10:48:53 +02:00
Alex Rudenko
205eef5cdf
fix: reference to handle_dialog tool ( #209 )
2025-09-29 14:12:05 +00:00
Oz Tamir
59d81a3325
feat: add network request filtering by resource type ( #162 )
...
### Summary
This PR build upon #145 to also adds filtering by resource type to
`list_network_requests` (Also see: #137 and #107 ).
### Motivation
Agents often need specific request types (e.g., scripts, stylesheets,
images). Filtering reduces noise and improves performance.
### Changes
- **New parameter**: `resourceType` (array) to filter by resource types
- **Supported types**: all resource types supported by Puppeteer
- **Backward compatible**: when omitted, returns all requests
Filtering runs before pagination, so pagination applies to the filtered
results.
2025-09-26 13:17:58 +00:00
Nikolay Vitkov
15277541d8
chore: add additional EsLint rule ( #147 )
2025-09-25 17:20:01 +02:00
Oz Tamir
4c909bb8d7
feat: Add pagination list_network_requests ( #145 )
...
## Summary
This PR enhances the `list_network_requests` tool with pagination
support to handle large numbers of network requests efficiently. See
[this
issue](https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/136 ).
## Motivation
In my experience, the `list_network_requests` tool frequently hits LLM
token limits on pages with many requests, making it unusable for modern
web applications. I wanted to add pagination to allow agents to be more
flexible and manage token limits on their own.
## Changes
### Pagination Support
- Added `pageSize` parameter to limit requests per call
- Added `pageToken` parameter for navigation between pages
- Added pagination metadata in responses (nextPageToken,
previousPageToken, startIndex, endIndex, total)
### Implementation Details
- **New utility**: `src/utils/pagination.ts` - generic pagination
function
- **Enhanced McpResponse**: Added pagination options to
`setIncludeNetworkRequests()`
- **Updated network tool**: Added pagination parameters to schema
- **Offset-based pagination**: Uses numeric tokens, handles invalid
tokens gracefully
## Testing
- Comprehensive test coverage for pagination scenarios
- Tests for first page, subsequent pages, invalid tokens, and edge cases
- All existing tests continue to pass
## Backward Compatibility
- If no pagination parameters are provided, the MCP will return all
requests (same as before)
2025-09-25 16:26:43 +02:00
Alex Rudenko
1a4ba4d3e0
fix: add a message indicating that no console messages exist ( #91 )
...
To avoid clients being confused about the lack of console messages.
Closes https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/87
2025-09-23 22:10:46 +02:00
Nikolay Vitkov
0208bfdcf6
fix: expose timeout when Emulation is enabled ( #73 )
...
Co-authored-by: Alex Rudenko <OrKoN@users.noreply.github.com >
2025-09-23 11:17:53 +02:00
Alex Rudenko
a9cf9d77f7
test: await dialog dismiss to prevent async activity errors ( #70 )
2025-09-22 17:11:04 +02:00
Alex Rudenko
014a8bc52e
feat: validate uids ( #37 )
...
- generate snapshot IDs.
- change uid to be a string.
- validate that uid is not coming from a stale snapshot.
2025-09-16 11:54:35 +00:00
Alex Rudenko
31a0bdce26
feat: initial version
2025-09-11 12:46:05 +02:00