✨ Highlights
- 👥 Separate sessions in one browser — work with multiple accounts without sharing their cookies or storage.
browser_tabswithaction: "new"now acceptsisolatedContext: "<name>": tabs with the same name share a context, while different names stay isolated. Omit it or use"default"for the default context. Cookie and storage tools operate on the current tab's context. (microsoft/playwright#43087) - 🙈 Redact runtime values in URLs (#1791) — session and grant values minted at runtime cannot be listed in a secrets file ahead of time.
--redact-url-params=access_token,code(configredactUrlParams, envPLAYWRIGHT_MCP_REDACT_URL_PARAMS) replaces the named query and fragment parameter values with<redacted>in tool responses. Likesecrets, this is a convenience, not a security feature. The extension also removes its connection token from the connect page URL after reading it. (microsoft/playwright#43258) - 🔎 Bound find results (microsoft/playwright#42077) — common search terms no longer have to fill the response with every match.
browser_findaccepts a positive integermaxResults, returns the first matching items with their context, and reports the total match count. Omit it to keep returning all matches; ancestor paths are unchanged. (microsoft/playwright#42947) - 🌐 Inspect requests across navigations (microsoft/playwright-cli#479) — requests from the previous page are no longer lost as soon as a flow navigates.
browser_network_requestsacceptsall: trueto include retained history, keeping up to 200 requests from earlier navigations. Request indexes stay stable across navigations forbrowser_network_request.browser_console_messagesalso reports counts consistent with its existingalloption. (microsoft/playwright#43526) - 🎯 Use locators in your language (#1797) — element tools such as
browser_clicknow accept JavaScript, Python, Java and C# locators intarget, alongside snapshot refs and CSS selectors. Invalid targets get an actionable error, including a reminder to pass the bare ref rather thanbutton [ref=e5]. (microsoft/playwright#43539) - 📂 Skip unsupported workspace-root requests (#1798) — clients that advertise roots but cannot answer
roots/listcan stall the first tool call. Pass--ignore-roots(configignoreRoots: true, envPLAYWRIGHT_MCP_IGNORE_ROOTS=true) to skip that request and use the server's current working directory as the workspace root. (microsoft/playwright#43532) - 🍪 Delete cookies by domain and path — deleting a cookie by name no longer has to remove every cookie with that name.
browser_cookie_delete(opt-in via--caps=storage) accepts optionaldomainandpathfilters to leave other domains and paths untouched. (microsoft/playwright#43319)
🐛 Fixes
fix(mcp): allow combining time, text and textGone in browser_wait_for— when combined with a text condition,timeis its timeout (capped at 30 seconds), not a delay before checking it. Supplying bothtextandtextGonenow waits for the first condition to happen, rather than both in sequence. (microsoft/playwright#43011)fix(mcp): allow loopback hosts by default for all bind addresses— HTTP clients can connect throughlocalhost,127.0.0.1or[::1]regardless of the bind address. Other hosts still require--allowed-hosts; binding to0.0.0.0prints a usable localhost URL. (microsoft/playwright#42993)fix(mcp): pass credentials from --proxy-server as proxy username/password— credentials embedded in the proxy URL are now passed to the browser as proxy authentication settings. (microsoft/playwright#43071)fix(mcp): race browser_navigate_back against modal states—browser_navigate_backreports a dialog opened during history navigation instead of timing out. (microsoft/playwright#43252)fix(mcp): normalize bare host URLs and loopback IP addresses—browser_navigatehandles scheme-less hosts with ports and uses HTTP for loopback addresses such as127.0.0.1:3000and[::1]:3000. (microsoft/playwright#43264)fix(mcp): do not close the browser twice when the client disconnects— stdio disconnects let the browser close gracefully instead of force-killing it through a second close request. Dashboard annotation processes also exit when their parent goes away. (microsoft/playwright#43174)fix(mcp): give each isolated client its own idle timer— with HTTP transport and--isolated, an idle client's context now expires even while another client keeps the shared browser busy. (microsoft/playwright#43527)fix(mcp): apply route headers without bypassing origin filters—browser_route(opt-in via--caps=network) matches added request header names case-insensitively, includes custom headers in mocked responses, and preserves origin filters and other routes when modifying request headers. (microsoft/playwright#43227, microsoft/playwright#43244, microsoft/playwright#43637)fix(mcp): correct cookie filtering and missing-domain errors—browser_cookie_list(opt-in via--caps=storage) matches domain and path boundaries instead of unrelated names such asnotexample.comor/apiary.browser_cookie_setasks for an explicitdomainwhen the current page has no hostname, such asabout:blank. (microsoft/playwright#43316, microsoft/playwright#43368, microsoft/playwright#43318)fix(mcp): accept Windows paths in browser_resume location—browser_resume(opt-in via--caps=devtools) no longer mistakes a Windows drive-letter colon for the line-number separator. (microsoft/playwright#43349)fix(mcp): report run-code route handler exceptions once and verbatim—browser_run_code_unsafereports a route handler's thrown value without duplicating it or wrapping non-Error values in another error. (microsoft/playwright#43203)fix(extension): release debugger when attach completes after connection close— disconnecting whilebrowser_tabsattaches to a new tab no longer leaves that tab attached to the extension's debugger. (microsoft/playwright#43025)fix(chromium): close pages that crashed before connecting over CDP— connecting through--cdp-endpointno longer stalls on an already crashed or discarded page; those pages are omitted from the tab list. (microsoft/playwright#43075)fix(aria): skip text nodes that are not rendered—browser_snapshotand accessible names omit unrendered text, including unslotted shadow-host text and text directly inside closed<details>. (microsoft/playwright#43150)fix(a11y): treat inert elements and content outside of modal dialogs as hidden— snapshots exclude inert content and content outside the topmost modal<dialog>. Click and fill actions wait for targets to stop being inert instead of silently misfiring. (microsoft/playwright#43211)fix(aria): do not count whitespace-only contributors as name sources— snapshots retain button names when whitespace around a hidden icon previously caused the name to disappear. (microsoft/playwright#43317)fix(aria): resolve label references consistently— snapshots and role locators recognize tab- or newline-separated label IDs and labels assigned throughariaLabelledByElements, while retaining attribute-based labels in older browsers. (microsoft/playwright#43361, microsoft/playwright#43577, microsoft/playwright#43722)fix(aria): quote ~, .inf and .nan in aria snapshots— YAML-like names remain strings rather than being parsed as null or special floating-point values. (microsoft/playwright#43469)fix(aria): preserve iframe snapshots with fallback text— snapshots retain an iframe's contents when the iframe element also contains fallback text. (microsoft/playwright#43635)fix(aria): match mixed-case roles and states— snapshots and role locators recognize mixed-caseroleand ARIA state values, including checked, pressed and expanded states. (microsoft/playwright#43727)
📦 Upgrading
Configs that use @playwright/mcp@latest pick this release up on the next client restart. To pin it:
npx @playwright/mcp@0.0.84