feat(mcp): add --file-paths=absolute for absolute paths in tool results - #42673
Conversation
| options.executablePath = envToString(e.PLAYWRIGHT_MCP_EXECUTABLE_PATH); | ||
| options.extension = envToBoolean(e.PLAYWRIGHT_MCP_EXTENSION); | ||
| if (e.PLAYWRIGHT_MCP_FILE_PATHS) | ||
| options.filePaths = enumParser<'relative' | 'absolute'>('--file-paths', ['relative', 'absolute'], e.PLAYWRIGHT_MCP_FILE_PATHS); |
There was a problem hiding this comment.
| options.filePaths = enumParser<'relative' | 'absolute'>('--file-paths', ['relative', 'absolute'], e.PLAYWRIGHT_MCP_FILE_PATHS); | |
| options.filePaths = enumParser<'relative' | 'absolute'>('PLAYWRIGHT_MCP_FILE_PATHS', ['relative', 'absolute'], e.PLAYWRIGHT_MCP_FILE_PATHS); |
|
Copilot resolve the merge conflicts in this pull request |
This comment has been minimized.
This comment has been minimized.
0a6193b to
a6dd5ad
Compare
Test results for "MCP"2 failed 8575 passed, 1446 skipped Merge workflow run. |
🟢 Both failures are known Windows/Firefox flakes — the PR is clearHi, I'm the Playwright bot and I triaged the CI failures here. Both reds are on DetailsThe diff is confined to how paths are formatted in MCP tool results ( Pre-existing flake / infra
Both look like timing margins on the Windows/Firefox bot rather than anything this PR introduced. Triaged by the Playwright bot - agent run |
49d290a
into
microsoft:main
…s red @playwright/mcp 0.0.81 pins playwright-core 1.64.0-alpha-2026-09-14 exactly, and the first build carrying --file-paths=absolute, the filePaths config key and PLAYWRIGHT_MCP_FILE_PATHS is 1.64.0-alpha-2026-09-17 (microsoft/playwright#42673, merged 2026-09-16, closing this project's own ask #42497). build/payload/package.json now carries an npm `overrides` entry that pulls that one build forward underneath the wrapper. That collides with "everything floats and the build freezes it; never pin to work around a break", so it is taken as a DATED EXCEPTION with a written exit rather than absorbed: the entry is deleted the day @playwright/mcp `latest` pins a playwright-core at or above the override. Two independent instruments hold the exit, and both were watched red. PayloadTests.TheDatedPlaywrightCoreOverrideIsStillNeeded reads the committed lock, so it runs from a clean clone on every build; build/Build-Payload.ps1 reads the live resolution and refuses to assemble a payload past the exit. Each carries its own ordering of upstream's two published shapes and refuses any third rather than guessing a shape it cannot order is lower. Planted red twice. The test, against a lock doctored so the wrapper already pins the override: TheDatedPlaywrightCoreOverrideIsStillNeeded and TheAssembledManifestDeclaresWhatTheCommittedLockRecords both failed, the first naming the file and the key to delete. The script, against an override lowered to the declared pin: exit 1 with THE OVERRIDE'S EXIT HAS FIRED. Both green on the real files, 12 passed / 0 failed / 0 skipped. TheLockRecordsUpstreamsOwnExactPinOfPlaywrightCore keeps the half the override rests on -- upstream still pinning EXACTLY -- and its `declared == resolved` half moved to TheResolvedPlaywrightCoreIsWhateverTheOverrideSays, which is where the override is compared. npm writes no `overrides` block into the lock, measured 2026-09-17, so the manifest is the only record that one is in force. Resolution proved rather than assumed: the lock names playwright-core 1.64.0-alpha-2026-09-17 with npm's own integrity hash, coreBundle.js holds 2 occurrences of PLAYWRIGHT_MCP_FILE_PATHS against 0 at the old pin, and the running child's --help carries `--file-paths <mode>`.
The daily check, and the first one taken with playwright-core resolving through an override rather than through the wrapper's own pin. NO DRIFT on any of the five and none on the vendored pin either, which is the third consecutive day with nothing moving. THE ROW THAT CHANGED SHAPE RATHER THAN VALUE is playwright-core. The build reads it from overrides.playwright-core in build/payload/package.json -- 1.64.0-alpha-2026-09-17 -- and the lock beside it agrees to the character at packages['node_modules/playwright-core'].version. The npm read that used to answer this row now answers two other questions, and both are recorded beside it rather than instead of it, because that is the watch item the maintainer asked for. WHAT THE WRAPPER DECLARES TODAY: @playwright/mcp latest is 0.0.81 and its own dependencies object still declares playwright-core 1.64.0-alpha-2026-09-14. It cannot have moved, and that is a fact rather than an assurance: no @playwright/mcp has published since 0.0.81 on 2026-09-14T21:25:54Z. It declares playwright at the same version and that one is NOT overridden, so the payload ships playwright 1.64.0-alpha-2026-09-14 beside playwright-core 1.64.0-alpha-2026-09-17 -- two Playwright versions at once, which is what the override buys. THE EXIT HAS NOT FIRED. The exit is a wrapper pin at or above the override, and 2026-09-14 is below 2026-09-17. Nobody has to remember that: PayloadTests.The- DatedPlaywrightCoreOverrideIsStillNeeded and build/Build-Payload.ps1 both go red on the day it fires and both are green today. AND A THIRD READING THAT IS INFORMATION RATHER THAN DRIFT: playwright-core's npm next tag reads 1.64.0-alpha-2026-09-18, one day past what the override pins. The override is an exact pin at the first build carrying microsoft/playwright#42673, not a float, so a newer daily alpha existing is not drift and does not license a bump. The oldest shape of the same trap is unmoved too: npm latest for playwright-core reads 1.63.0, a stable release BEHIND the alpha that ships. The other four came back identical to upstream-review.json. @playwright/mcp 0.0.81 across 434 versions, next still 0.0.79-alpha-1787869812000 and two releases behind. ModelContextProtocol 2.2.0, still the newest entry on that feed in any form across 47 versions, so this read has no positive control of its own and borrows Velopack's. Velopack 1.2.0, whose newest entry in any form is still the 1.2.110-ge826545 prerelease across 118 -- that IS the control. node v24.21.0, still the newest entry carrying an lts field; the Current line is unmoved at v26.9.0 and still not tracked. SQLite was read from the same machine-readable PRODUCT line and is unmoved in all three fields: 3.53.4, 2946650 bytes, SHA3-256 628a44cf. Because playwright-core did not move the browser revisions cannot have, and browsers.json still reads chromium 1245, firefox 1548, webkit 2361, ffmpeg 1011 and winldd 1007 -- what the 2026-09-17 re-verification measurements were taken against, so nothing in that table is re-owed by this check.
## ✨ 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 ```
## ✨ 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 ```
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) |  |  | | [npm:@playwright/mcp](https://playwright.dev) ([source](https://redirect.github.com/microsoft/playwright-mcp)) | `0.0.81` → `0.0.82` |  |  | --- ### Release Notes <details> <summary>microsoft/playwright-mcp (npm:@​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>
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` |  |  |  |  | --- > [!WARNING] > Some dependencies could not be looked up. Check the warning logs for more information. --- ### Release Notes <details> <summary>microsoft/playwright-mcp (@​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>
Summary
--file-paths <mode>option,relative(default) orabsolute, also available asfilePathsin the config file and viaPLAYWRIGHT_MCP_FILE_PATHSabsolute, file links, the console log link, the download line and the paused location are rendered as absolute pathsFixes #42497