Skip to content

feat(mcp): offer page-registered WebMCP tools as MCP tools - #42671

Merged
Dmitry Gozman (dgozman) merged 5 commits into
microsoft:mainfrom
dgozman:webmcp-dynamic-tools
Sep 18, 2026
Merged

Dmitry Gozman (dgozman) merged 5 commits into
microsoft:mainfrom
dgozman:webmcp-dynamic-tools

Conversation

@dgozman

Copy link
Copy Markdown
Collaborator

Summary

  • The current tab's WebMCP tools are offered over MCP as webmcp_<tool> tools, with a tools-changed notification when the page's tools or the current tab change.
  • The page header names the page's WebMCP tools the first time a tab reports them, collapsing back to a bare count while the set is unchanged.
  • browser_webmcp_list / browser_webmcp_call stay available over MCP and the CLI for clients that ignore the tools-changed notification.
  • --no-webmcp (also webmcp config option and PLAYWRIGHT_MCP_WEBMCP) opts out of collecting page-registered tools.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

stringArrayEquals(a.webmcpTools, b.webmcpTools);
}

function stringArrayEquals(a: string[] | undefined, b: string[] | undefined): boolean {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you can compare a.join(':') and b.join(':')!

Comment thread docs/src/getting-started-cli.md Outdated
```

Tool names, descriptions, schemas and results are provided by the page, so treat them as untrusted input.
Tool names, descriptions, schemas, annotations and results are provided by the page, so treat them as untrusted input rather than as instructions. The `[readOnly]` and `[consequential]` annotations are optional claims a page makes about its own tools — a missing `[consequential]` is not a promise that a tool is safe, so judge a tool by what it does before letting it transact or act on your behalf.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks like a word soup. Let's trim this to the bare minimum, just state that WebMCP is supported and available to CLI

Comment thread docs/src/getting-started-mcp.md Outdated
### WebMCP tools

Pages can register their own tools for agents through the experimental [WebMCP](https://webmachinelearning.github.io/webmcp/) API. When a page has them, the page status after a navigation reports how many, and `browser_webmcp_list` and `browser_webmcp_call` expose them:
Pages can register their own tools for agents through the experimental [WebMCP](https://webmachinelearning.github.io/webmcp/) API. When a page has them, the page status after a navigation names them.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here, this is implementation detail, remove the words

return responseObject;
}

private async _callDynamicTool(name: string, rawArguments: mcpServer.CallToolRequest['params']['arguments'] & { _meta?: Record<string, any> }, formatError: (message: string) => mcpServer.CallToolResult): Promise<mcpServer.CallToolResult> {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that's a lot of duplication, can we reuse the same code that deals with response, formatting and session?

if (this._currentTab === tab)
return;
this._currentTab = tab;
this.updateWebMCPTools();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would expect this to bee in some async context so that selecting a tab returned new tool list

}

export function renderTabMarkdown(tab: TabHeader): string[] {
export function renderTabMarkdown(tab: TabHeader & { webmcpChanged?: boolean }): string[] {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We already have a generic treatment for things that have changed (url, title). I think mcp tools should be treated the same way

The current tab's WebMCP tools are offered as MCP tools named webmcp_<tool>,
with the client notified when they change or when the current tab changes.
Descriptions carry untrusted, read-only and consequential disclaimers, and a
tool that answers with an error fails the call.

browser_webmcp_list and browser_webmcp_call become skill-only, so the CLI
keeps them while pure MCP gets the page's tools directly.
Skipping the collection leaves the tab cache empty, so there is nothing to
advertise in the page status and nothing to offer as MCP tools. Also
available as the webmcp config option and PLAYWRIGHT_MCP_WEBMCP.
Move the WebMCP line above the console counts, and in cli mode name the
tools the first time a tab reports them, collapsing back to the bare count
while the tool set is unchanged. Over MCP the page tools are already offered
as tools of their own, so the count is left as is.

Track the tool names on the tab header instead of just their count, so a
page that swaps one tool for another is recognized as a change.

Also reword the annotation guidance: readOnly/consequential are optional
claims a page makes about its own tools, so a missing consequential is not
a promise that a tool is safe.
Name the page's WebMCP tools in the page header regardless of skill mode,
and offer browser_webmcp_list and browser_webmcp_call over MCP as well, so
a client that ignores the tools-changed notification still learns about the
page's tools and has a way to call them.

Also fix the SKILL.md example to match the actual page header output.
- browser_webmcp_list/call are skill-only, MCP clients use the dynamic webmcp_<tool> tools.
- Page header reports only the tool count, the snapshot lists the tools at the top in yaml and json.
- Shared tool-call path in BrowserBackend for built-in and page tools.
- Trimmed docs.
@github-actions

Copy link
Copy Markdown
Contributor

Test results for "MCP"

2 failed
❌ [chromium] › mcp/annotate.spec.ts:173 › user-initiated annotate downloads zip with feedback.md @mcp-windows-latest-chromium
❌ [firefox] › mcp/cli-session.spec.ts:54 › idle timeout shuts the session down @mcp-windows-latest-firefox

8638 passed, 1474 skipped


Merge workflow run.

@github-actions

Copy link
Copy Markdown
Contributor

🟢 CI is clear — both failures are pre-existing flakes

Hi, I'm the Playwright bot and I took a look at the failing CI checks.

Both failures are in mcp/annotate.spec.ts and mcp/cli-session.spec.ts, neither of which this PR touches, and both have a history of failing on other PRs and on push runs with the exact same error. Nothing here is on you.

Details

Overall: this PR changes the WebMCP backend (tools/backend/*), the MCP config/program, the MCP server tool-list plumbing, and the webmcp* / cli-webmcp tests. The two failures are in the annotate/dashboard flow and the CLI session idle timeout, neither of which exercises page-registered WebMCP tools. Both are established flakes in the aggregated CI results DB.

Pre-existing flake / infra

Triaged by the Playwright bot - agent run

addSection('Snapshot', [resolvedFile.printableLink]);
} else if (tabSnapshot.ariaSnapshotJSON !== undefined) {
const webmcpListing = this._context.currentTab()?.webmcpTools();
if (!snapshotToFile && tabSnapshot.ariaSnapshotJSON !== undefined) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dees it make sense to pre-bake it in tabSnapshot next to ariaSnapshot?

@dgozman
Dmitry Gozman (dgozman) merged commit 78ff426 into microsoft:main Sep 18, 2026
16 of 18 checks passed
Copilot AI added a commit to microsoft/playwright-mcp that referenced this pull request Sep 18, 2026
## What's New

### New Tools

- **`browser_emulate_media`** — Emulate color scheme, reduced motion, forced colors, contrast, and screen/print media. Pass `null` to clear an override ([#42668](microsoft/playwright#42668)).

### Other Changes

- **Tool removal:** `browser_webmcp_list` and `browser_webmcp_call` are now skill-only and no longer exposed as MCP tools ([#42671](microsoft/playwright#42671)).

## Bug Fixes

- Failed `browser_file_upload` calls preserve the file chooser, allowing another upload attempt without reopening it ([#42713](microsoft/playwright#42713)).
- Corrected the Playwright import in the published configuration types ([#1762](#1762)).

Co-authored-by: pavelfeldman <883973+pavelfeldman@users.noreply.github.com>
Copilot AI added a commit to microsoft/playwright-mcp that referenced this pull request Sep 18, 2026
## What's New

### New Tools

- **`browser_emulate_media`** — Emulate color scheme, reduced motion, forced colors, contrast, and screen/print media. Pass `null` to clear an override ([#42668](microsoft/playwright#42668)).

### Other Changes

- **Tool removal:** `browser_webmcp_list` and `browser_webmcp_call` are now skill-only and no longer exposed as MCP tools ([#42671](microsoft/playwright#42671)).

## Bug Fixes

- Failed `browser_file_upload` calls preserve the file chooser, allowing another upload attempt without reopening it ([#42713](microsoft/playwright#42713)).
- Corrected the Playwright import in the published configuration types ([#1762](#1762)).

Co-authored-by: pavelfeldman <883973+pavelfeldman@users.noreply.github.com>
Pavel Feldman (pavelfeldman) added a commit to microsoft/playwright-cli that referenced this pull request Sep 18, 2026
## ✨ Highlights

- **🎬 Smooth 60 fps, styleable videos** — `video-start --fps=60` records
smooth 60 fps videos instead of the default 25, and `video-start
--cursor` renders an animated mouse cursor that travels to each action
point and stays visible between actions. `video-show-actions` takes
`--point-style`, `--highlight-style` and `--title-style` CSS
declarations; the action point marker and the target highlight are now
only shown when styled.
([microsoft/playwright#42752](microsoft/playwright#42752),
[microsoft/playwright#42758](microsoft/playwright#42758))
- **🧰 WebMCP tools show up in the snapshot** — the tools a page
registers are listed at the top of the page snapshot with their
descriptions and input schemas, so `webmcp-call` can be used without
running `webmcp-list` first. Set `webmcp: false` in the config file (env
`PLAYWRIGHT_MCP_WEBMCP=false`) to stop collecting page-registered tools.
([microsoft/playwright#42671](microsoft/playwright#42671))
- **🌗 Switch between light and dark color scheme**
([microsoft/playwright#42243](microsoft/playwright#42243))
— an agent working on a dark theme had no way to see it mid-session. New
`set-color-scheme`, `set-reduced-motion`, `set-forced-colors`,
`set-contrast` and `set-media` commands emulate media features on the
fly, and the matching `clear-*` commands reset them.
([microsoft/playwright#42668](microsoft/playwright#42668))
- **📁 Absolute paths in results**
([microsoft/playwright#42497](microsoft/playwright#42497))
— links to snapshots, screenshots, console logs and downloads are
relative to the working directory, which a consumer without one cannot
resolve. Set `filePaths: "absolute"` in the config file (env
`PLAYWRIGHT_MCP_FILE_PATHS=absolute`) to get absolute paths instead.
([microsoft/playwright#42673](microsoft/playwright#42673))

## 🐛 Fixes

- `fix(chromium): bypass service workers on the storage state page` —
`state-save` no longer runs the site's own scripts, or fails when they
redirect, for origins with an active service worker
([microsoft/playwright#42656](microsoft/playwright#42656)).
([#42664](microsoft/playwright#42664),
[#42741](microsoft/playwright#42741))
- `fix(mcp): keep upload modal, skip short secrets and bad headers` — a
failed `upload` keeps the file chooser open so it can be retried,
secrets shorter than 4 characters no longer rewrite the whole output
with `<secret>` markers, and `route` ignores header lines that have no
name. ([#42713](microsoft/playwright#42713))

## 📦 Upgrading

```bash
npm install -g @playwright/cli@0.1.21
```
Pavel Feldman (pavelfeldman) added a commit to microsoft/playwright-mcp that referenced this pull request Sep 18, 2026
## ✨ Highlights

- **🧰 WebMCP tools become real MCP tools** — the tools a page registers
through the [WebMCP](https://webmachinelearning.github.io/webmcp/) API
now show up right in the tool list as `webmcp_<tool>`, with the page's
own input schema and annotations, so an agent can call them directly and
let the page do the work instead of driving its UI. The list follows the
current tab, and clients get a `tools/list_changed` notification when it
changes. This replaces `browser_webmcp_list` / `browser_webmcp_call`
from v0.0.81, which are no longer exposed over MCP. Tool names,
descriptions, schemas and results come from the page, so treat them as
untrusted input. Pass `--no-webmcp` (config `webmcp: false`, env
`PLAYWRIGHT_MCP_WEBMCP=false`) to opt out. WebMCP is experimental, see
[WebMCP in Chrome](https://developer.chrome.com/docs/ai/webmcp) for how
to enable it.
([microsoft/playwright#42671](microsoft/playwright#42671))
- **🌗 Switch between light and dark color scheme**
([microsoft/playwright#42243](microsoft/playwright#42243))
— an agent working on a dark theme had no way to see it mid-session. The
new **`browser_emulate_media`** tool emulates media features on the fly:
`colorScheme`, `reducedMotion`, `forcedColors`, `contrast` and the
`media` type (screen / print). Omitted parameters are left unchanged,
`null` clears an override.
([microsoft/playwright#42668](microsoft/playwright#42668))
- **📁 Absolute paths in results**
([microsoft/playwright#42497](microsoft/playwright#42497))
— links to snapshots, screenshots, console logs and downloads are
relative to the workspace root, which a client without one cannot
resolve. Pass `--file-paths=absolute` (config `filePaths: "absolute"`,
env `PLAYWRIGHT_MCP_FILE_PATHS=absolute`) to get absolute paths instead.
([microsoft/playwright#42673](microsoft/playwright#42673))

## 🐛 Fixes

- `fix(mcp): keep upload modal and reject bad headers` — a failed
`browser_file_upload` (e.g. a missing file) reports the error and keeps
the file chooser open so it can be retried, and `browser_route` (opt-in
via `--caps=network`) returns an error for a header that is not in the
`Name: Value` form instead of setting a header named `""`.
([microsoft/playwright#42713](microsoft/playwright#42713))
- `fix(chromium): bypass service workers on the storage state page` —
`browser_storage_state` (opt-in via `--caps=storage`) no longer runs the
site's own scripts, or fails when they redirect, for origins with an
active service worker
([microsoft/playwright#42656](microsoft/playwright#42656)).
([microsoft/playwright#42664](microsoft/playwright#42664),
[microsoft/playwright#42741](microsoft/playwright#42741))

## 📦 Upgrading

Configs that use `@playwright/mcp@latest` pick this release up on the
next client restart. To pin it:

```bash
npx @playwright/mcp@0.0.82
```
renovate Bot added a commit to soodoh/dotfiles that referenced this pull request Sep 19, 2026
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node)
([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node))
| [`^26.6.1` →
`^26.6.2`](https://renovatebot.com/diffs/npm/@types%2fnode/26.6.1/26.6.2)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/26.6.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/26.6.1/26.6.2?slim=true)
|
| [npm:@playwright/mcp](https://playwright.dev)
([source](https://redirect.github.com/microsoft/playwright-mcp)) |
`0.0.81` → `0.0.82` |
![age](https://developer.mend.io/api/mc/badges/age/npm/@playwright%2fmcp/0.0.82?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@playwright%2fmcp/0.0.81/0.0.82?slim=true)
|

---

### Release Notes

<details>
<summary>microsoft/playwright-mcp (npm:@&#8203;playwright/mcp)</summary>

###
[`v0.0.82`](https://redirect.github.com/microsoft/playwright-mcp/releases/tag/v0.0.82)

[Compare
Source](https://redirect.github.com/microsoft/playwright-mcp/compare/v0.0.81...v0.0.82)

#### ✨ Highlights

- **🎬 Smooth 60 fps, styleable videos** — `browser_start_video` (opt-in
via `--caps=devtools`) takes `fps`, so `fps: 60` records smooth 60 fps
videos instead of the default 25, and `cursor: true` renders an animated
mouse cursor that travels to each action point and stays visible between
actions. `browser_video_show_actions` takes a `style` with `point`,
`highlight` and `title` CSS declarations; the action point marker and
the target highlight are now only shown when styled.
([microsoft/playwright#42752](https://redirect.github.com/microsoft/playwright/pull/42752),
[microsoft/playwright#42758](https://redirect.github.com/microsoft/playwright/pull/42758))
- **🧰 WebMCP tools become real MCP tools** — the tools a page registers
through the [WebMCP](https://webmachinelearning.github.io/webmcp/) API
now show up right in the tool list as `webmcp_<tool>`, with the page's
own input schema and annotations, so an agent can call them directly and
let the page do the work instead of driving its UI. The list follows the
current tab, and clients get a `tools/list_changed` notification when it
changes. This replaces `browser_webmcp_list` / `browser_webmcp_call`
from v0.0.81, which are no longer exposed over MCP. Tool names,
descriptions, schemas and results come from the page, so treat them as
untrusted input. Pass `--no-webmcp` (config `webmcp: false`, env
`PLAYWRIGHT_MCP_WEBMCP=false`) to opt out. WebMCP is experimental, see
[WebMCP in Chrome](https://developer.chrome.com/docs/ai/webmcp) for how
to enable it.
([microsoft/playwright#42671](https://redirect.github.com/microsoft/playwright/pull/42671))
- **🌗 Switch between light and dark color scheme**
([microsoft/playwright#42243](https://redirect.github.com/microsoft/playwright/issues/42243))
— an agent working on a dark theme had no way to see it mid-session. The
new **`browser_emulate_media`** tool emulates media features on the fly:
`colorScheme`, `reducedMotion`, `forcedColors`, `contrast` and the
`media` type (screen / print). Omitted parameters are left unchanged,
`null` clears an override.
([microsoft/playwright#42668](https://redirect.github.com/microsoft/playwright/pull/42668))
- **📁 Absolute paths in results**
([microsoft/playwright#42497](https://redirect.github.com/microsoft/playwright/issues/42497))
— links to snapshots, screenshots, console logs and downloads are
relative to the workspace root, which a client without one cannot
resolve. Pass `--file-paths=absolute` (config `filePaths: "absolute"`,
env `PLAYWRIGHT_MCP_FILE_PATHS=absolute`) to get absolute paths instead.
([microsoft/playwright#42673](https://redirect.github.com/microsoft/playwright/pull/42673))

#### 🐛 Fixes

- `fix(mcp): keep upload modal and reject bad headers` — a failed
`browser_file_upload` (e.g. a missing file) reports the error and keeps
the file chooser open so it can be retried, and `browser_route` (opt-in
via `--caps=network`) returns an error for a header that is not in the
`Name: Value` form instead of setting a header named `""`.
([microsoft/playwright#42713](https://redirect.github.com/microsoft/playwright/pull/42713))
- `fix(chromium): bypass service workers on the storage state page` —
`browser_storage_state` (opt-in via `--caps=storage`) no longer runs the
site's own scripts, or fails when they redirect, for origins with an
active service worker
([microsoft/playwright#42656](https://redirect.github.com/microsoft/playwright/issues/42656)).
([microsoft/playwright#42664](https://redirect.github.com/microsoft/playwright/pull/42664),
[microsoft/playwright#42741](https://redirect.github.com/microsoft/playwright/pull/42741))

#### 📦 Upgrading

Configs that use `@playwright/mcp@latest` pick this release up on the
next client restart. To pin it:

```bash
npx @playwright/mcp@0.0.82
```

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/soodoh/dotfiles).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMDMuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjEwMy4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Paul Sorensen (paulnsorensen) added a commit to paulnsorensen/dotfiles that referenced this pull request Sep 19, 2026
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Adoption](https://docs.renovatebot.com/merge-confidence/) |
[Passing](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|---|---|
| [@playwright/mcp](https://playwright.dev)
([source](https://redirect.github.com/microsoft/playwright-mcp)) |
`0.0.81` → `0.0.82` |
![age](https://developer.mend.io/api/mc/badges/age/npm/@playwright%2fmcp/0.0.82?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@playwright%2fmcp/0.0.82?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@playwright%2fmcp/0.0.81/0.0.82?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@playwright%2fmcp/0.0.81/0.0.82?slim=true)
|

---

> [!WARNING]
> Some dependencies could not be looked up. Check the warning logs for
more information.

---

### Release Notes

<details>
<summary>microsoft/playwright-mcp (@&#8203;playwright/mcp)</summary>

###
[`v0.0.82`](https://redirect.github.com/microsoft/playwright-mcp/releases/tag/v0.0.82)

[Compare
Source](https://redirect.github.com/microsoft/playwright-mcp/compare/v0.0.81...v0.0.82)

#### ✨ Highlights

- **🎬 Smooth 60 fps, styleable videos** — `browser_start_video` (opt-in
via `--caps=devtools`) takes `fps`, so `fps: 60` records smooth 60 fps
videos instead of the default 25, and `cursor: true` renders an animated
mouse cursor that travels to each action point and stays visible between
actions. `browser_video_show_actions` takes a `style` with `point`,
`highlight` and `title` CSS declarations; the action point marker and
the target highlight are now only shown when styled.
([microsoft/playwright#42752](https://redirect.github.com/microsoft/playwright/pull/42752),
[microsoft/playwright#42758](https://redirect.github.com/microsoft/playwright/pull/42758))
- **🧰 WebMCP tools become real MCP tools** — the tools a page registers
through the [WebMCP](https://webmachinelearning.github.io/webmcp/) API
now show up right in the tool list as `webmcp_<tool>`, with the page's
own input schema and annotations, so an agent can call them directly and
let the page do the work instead of driving its UI. The list follows the
current tab, and clients get a `tools/list_changed` notification when it
changes. This replaces `browser_webmcp_list` / `browser_webmcp_call`
from v0.0.81, which are no longer exposed over MCP. Tool names,
descriptions, schemas and results come from the page, so treat them as
untrusted input. Pass `--no-webmcp` (config `webmcp: false`, env
`PLAYWRIGHT_MCP_WEBMCP=false`) to opt out. WebMCP is experimental, see
[WebMCP in Chrome](https://developer.chrome.com/docs/ai/webmcp) for how
to enable it.
([microsoft/playwright#42671](https://redirect.github.com/microsoft/playwright/pull/42671))
- **🌗 Switch between light and dark color scheme**
([microsoft/playwright#42243](https://redirect.github.com/microsoft/playwright/issues/42243))
— an agent working on a dark theme had no way to see it mid-session. The
new **`browser_emulate_media`** tool emulates media features on the fly:
`colorScheme`, `reducedMotion`, `forcedColors`, `contrast` and the
`media` type (screen / print). Omitted parameters are left unchanged,
`null` clears an override.
([microsoft/playwright#42668](https://redirect.github.com/microsoft/playwright/pull/42668))
- **📁 Absolute paths in results**
([microsoft/playwright#42497](https://redirect.github.com/microsoft/playwright/issues/42497))
— links to snapshots, screenshots, console logs and downloads are
relative to the workspace root, which a client without one cannot
resolve. Pass `--file-paths=absolute` (config `filePaths: "absolute"`,
env `PLAYWRIGHT_MCP_FILE_PATHS=absolute`) to get absolute paths instead.
([microsoft/playwright#42673](https://redirect.github.com/microsoft/playwright/pull/42673))

#### 🐛 Fixes

- `fix(mcp): keep upload modal and reject bad headers` — a failed
`browser_file_upload` (e.g. a missing file) reports the error and keeps
the file chooser open so it can be retried, and `browser_route` (opt-in
via `--caps=network`) returns an error for a header that is not in the
`Name: Value` form instead of setting a header named `""`.
([microsoft/playwright#42713](https://redirect.github.com/microsoft/playwright/pull/42713))
- `fix(chromium): bypass service workers on the storage state page` —
`browser_storage_state` (opt-in via `--caps=storage`) no longer runs the
site's own scripts, or fails when they redirect, for origins with an
active service worker
([microsoft/playwright#42656](https://redirect.github.com/microsoft/playwright/issues/42656)).
([microsoft/playwright#42664](https://redirect.github.com/microsoft/playwright/pull/42664),
[microsoft/playwright#42741](https://redirect.github.com/microsoft/playwright/pull/42741))

#### 📦 Upgrading

Configs that use `@playwright/mcp@latest` pick this release up on the
next client restart. To pin it:

```bash
npx @playwright/mcp@0.0.82
```

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/paulnsorensen/dotfiles).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMDMuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjEwMy4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **Chores**
  - Updated the Playwright MCP package to version 0.0.82.
  - Synchronized the package version used by the Codex profile test.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: dep-harvest-bot <paulnsorensen@gmail.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants