✨ Highlights
- 🎬 Smooth 60 fps, styleable videos —
browser_start_video(opt-in via--caps=devtools) takesfps, sofps: 60records smooth 60 fps videos instead of the default 25, andcursor: truerenders an animated mouse cursor that travels to each action point and stays visible between actions.browser_video_show_actionstakes astylewithpoint,highlightandtitleCSS declarations; the action point marker and the target highlight are now only shown when styled. (microsoft/playwright#42752, microsoft/playwright#42758) - 🧰 WebMCP tools become real MCP tools — the tools a page registers through the 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 atools/list_changednotification when it changes. This replacesbrowser_webmcp_list/browser_webmcp_callfrom 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(configwebmcp: false, envPLAYWRIGHT_MCP_WEBMCP=false) to opt out. WebMCP is experimental, see WebMCP in Chrome for how to enable it. (microsoft/playwright#42671) - 🌗 Switch between light and dark color scheme (microsoft/playwright#42243) — an agent working on a dark theme had no way to see it mid-session. The new
browser_emulate_mediatool emulates media features on the fly:colorScheme,reducedMotion,forcedColors,contrastand themediatype (screen / print). Omitted parameters are left unchanged,nullclears an override. (microsoft/playwright#42668) - 📁 Absolute paths in results (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(configfilePaths: "absolute", envPLAYWRIGHT_MCP_FILE_PATHS=absolute) to get absolute paths instead. (microsoft/playwright#42673)
🐛 Fixes
fix(mcp): keep upload modal and reject bad headers— a failedbrowser_file_upload(e.g. a missing file) reports the error and keeps the file chooser open so it can be retried, andbrowser_route(opt-in via--caps=network) returns an error for a header that is not in theName: Valueform instead of setting a header named"". (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#42664, microsoft/playwright#42741)
📦 Upgrading
Configs that use @playwright/mcp@latest pick this release up on the next client restart. To pin it:
npx @playwright/mcp@0.0.82