From 793215ac07ad785f900e88d32eb3ca0503ba437b Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Fri, 13 Feb 2026 18:28:41 -0800 Subject: [PATCH] chore: roll 1.59.0-alpha-1771028105000 (#1400) --- README.md | 4 +-- package-lock.json | 39 ++++++++++++++-------- package.json | 2 +- packages/extension/README.md | 11 ++---- packages/extension/package.json | 1 + packages/extension/tests/extension.spec.ts | 15 +++++---- packages/playwright-mcp/cli.js | 4 +-- packages/playwright-mcp/package.json | 4 +-- 8 files changed, 44 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index 5c773c5..2c4e925 100644 --- a/README.md +++ b/README.md @@ -344,6 +344,8 @@ Playwright MCP server supports following arguments. They can be provided in the | --cdp-endpoint | CDP endpoint to connect to.
*env* `PLAYWRIGHT_MCP_CDP_ENDPOINT` | | --cdp-header | CDP headers to send with the connect request, multiple can be specified.
*env* `PLAYWRIGHT_MCP_CDP_HEADER` | | --cdp-timeout | timeout in milliseconds for connecting to CDP endpoint, defaults to 30000ms
*env* `PLAYWRIGHT_MCP_CDP_TIMEOUT` | +| --chromium-sandbox | enable the chromium sandbox. disable with --no-chromium-sandbox.
*env* `PLAYWRIGHT_MCP_CHROMIUM_SANDBOX` | +| --no-chromium-sandbox | disable the chromium sandbox.
*env* `PLAYWRIGHT_MCP_NO_CHROMIUM_SANDBOX` | | --codegen | specify the language to use for code generation, possible values: "typescript", "none". Default is "typescript".
*env* `PLAYWRIGHT_MCP_CODEGEN` | | --config | path to the configuration file.
*env* `PLAYWRIGHT_MCP_CONFIG` | | --console-level | level of console messages to return: "error", "warning", "info", "debug". Each level includes the messages of more severe levels.
*env* `PLAYWRIGHT_MCP_CONSOLE_LEVEL` | @@ -358,13 +360,11 @@ Playwright MCP server supports following arguments. They can be provided in the | --init-script | path to JavaScript file to add as an initialization script. The script will be evaluated in every page before any of the page's scripts. Can be specified multiple times.
*env* `PLAYWRIGHT_MCP_INIT_SCRIPT` | | --isolated | keep the browser profile in memory, do not save it to disk.
*env* `PLAYWRIGHT_MCP_ISOLATED` | | --image-responses | whether to send image responses to the client. Can be "allow" or "omit", Defaults to "allow".
*env* `PLAYWRIGHT_MCP_IMAGE_RESPONSES` | -| --no-sandbox | disable the sandbox for all process types that are normally sandboxed.
*env* `PLAYWRIGHT_MCP_NO_SANDBOX` | | --output-dir | path to the directory for output files.
*env* `PLAYWRIGHT_MCP_OUTPUT_DIR` | | --output-mode | whether to save snapshots, console messages, network logs to a file or to the standard output. Can be "file" or "stdout". Default is "stdout".
*env* `PLAYWRIGHT_MCP_OUTPUT_MODE` | | --port | port to listen on for SSE transport.
*env* `PLAYWRIGHT_MCP_PORT` | | --proxy-bypass | comma-separated domains to bypass proxy, for example ".com,chromium.org,.domain.com"
*env* `PLAYWRIGHT_MCP_PROXY_BYPASS` | | --proxy-server | specify proxy server, for example "http://myproxy:3128" or "socks5://myproxy:8080"
*env* `PLAYWRIGHT_MCP_PROXY_SERVER` | -| --sandbox | enable the sandbox for all process types that are normally not sandboxed.
*env* `PLAYWRIGHT_MCP_SANDBOX` | | --save-session | Whether to save the Playwright MCP session into the output directory.
*env* `PLAYWRIGHT_MCP_SAVE_SESSION` | | --save-trace | Whether to save the Playwright Trace of the session into the output directory.
*env* `PLAYWRIGHT_MCP_SAVE_TRACE` | | --save-video | Whether to save the video of the session into the output directory. For example "--save-video=800x600"
*env* `PLAYWRIGHT_MCP_SAVE_VIDEO` | diff --git a/package-lock.json b/package-lock.json index c088f23..d45b697 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ ], "devDependencies": { "@modelcontextprotocol/sdk": "^1.25.2", - "@playwright/test": "1.59.0-alpha-1770400094000", + "@playwright/test": "1.59.0-alpha-1771028105000", "@types/node": "^24.3.0" } }, @@ -854,13 +854,13 @@ "link": true }, "node_modules/@playwright/test": { - "version": "1.59.0-alpha-1770400094000", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.0-alpha-1770400094000.tgz", - "integrity": "sha512-P0Jv0WouOb4dOhi6hrl6qa/3hszJp/RliFE1PzCd+Gw0k+aPiEFBzh8qVmur3P32kszv+pG9UPsivcsMcTpHNg==", + "version": "1.59.0-alpha-1771028105000", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.0-alpha-1771028105000.tgz", + "integrity": "sha512-chMidCR7qg6ExeTrYP3isJ5fzIgD0bXldX4aQo1vVWPb0su5xJL0UcA5hD1qsmuP1dkUlkI4Qf2wfuxuCfxdyg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.59.0-alpha-1770400094000" + "playwright": "1.59.0-alpha-1771028105000" }, "bin": { "playwright": "cli.js" @@ -2442,6 +2442,16 @@ "url": "https://opencollective.com/express" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -2616,12 +2626,12 @@ } }, "node_modules/playwright": { - "version": "1.59.0-alpha-1770400094000", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.0-alpha-1770400094000.tgz", - "integrity": "sha512-49P817plxhSzZfn3lvB6G92KGgj7jb7cO39sqDQhqlI9mTJWM+slZrfokw1vL1H4ZZkYMoedRE14rUcn8cNl9g==", + "version": "1.59.0-alpha-1771028105000", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.0-alpha-1771028105000.tgz", + "integrity": "sha512-tSRYmBZlJt32Q0CKNlVyavvobXt+P7kFUJN+ak9wkcUo+hRSHqyAUcp6G9pRG/vilraanrS6gmAIs3cjUwwxhA==", "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.59.0-alpha-1770400094000" + "playwright-core": "1.59.0-alpha-1771028105000" }, "bin": { "playwright": "cli.js" @@ -2638,9 +2648,9 @@ "link": true }, "node_modules/playwright-core": { - "version": "1.59.0-alpha-1770400094000", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.0-alpha-1770400094000.tgz", - "integrity": "sha512-hfQOLT2s7cKLvOx8BT4IB9CFAFAxsxKuZokmyESf6vWQesQ+lbeNCo8ogGJYYszTK1ojm9pNKNBM961QNqZ4+w==", + "version": "1.59.0-alpha-1771028105000", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.0-alpha-1771028105000.tgz", + "integrity": "sha512-yEIjYyIGSWw8cuaw1hSkAQ+1EBQSdYW2RaHOgHLVAKW8iw7gs8tpY9Wr/75oGazhohRyZNNDom41SO7ktuTUcA==", "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" @@ -3417,6 +3427,7 @@ "@types/react": "^18.2.66", "@types/react-dom": "^18.2.22", "@vitejs/plugin-react": "^4.0.0", + "minimist": "^1.2.5", "react": "^18.2.0", "react-dom": "^18.2.0", "typescript": "^5.8.2", @@ -3437,8 +3448,8 @@ "version": "0.0.66", "license": "Apache-2.0", "dependencies": { - "playwright": "1.59.0-alpha-1770400094000", - "playwright-core": "1.59.0-alpha-1770400094000" + "playwright": "1.59.0-alpha-1771028105000", + "playwright-core": "1.59.0-alpha-1771028105000" }, "bin": { "playwright-mcp": "cli.js" diff --git a/package.json b/package.json index 55a1707..ee9c2da 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ ], "devDependencies": { "@modelcontextprotocol/sdk": "^1.25.2", - "@playwright/test": "1.59.0-alpha-1770400094000", + "@playwright/test": "1.59.0-alpha-1771028105000", "@types/node": "^24.3.0" } } diff --git a/packages/extension/README.md b/packages/extension/README.md index 9c411a4..e126419 100644 --- a/packages/extension/README.md +++ b/packages/extension/README.md @@ -10,16 +10,9 @@ The Playwright MCP Chrome Extension allows you to connect to pages in your exist ## Installation Steps -### Download the Extension +### Install the Extension -Download the latest Chrome extension from GitHub: -- **Download link**: https://github.com/microsoft/playwright-mcp/releases - -### Load Chrome Extension - -1. Open Chrome and navigate to `chrome://extensions/` -2. Enable "Developer mode" (toggle in the top right corner) -3. Click "Load unpacked" and select the extension directory +Install [Playwright MCP Bridge](https://chromewebstore.google.com/detail/playwright-mcp-bridge/mmlmfjhmonkocbjadbfplnigmagldckm) from the Chrome Web Store. ### Configure Playwright MCP server diff --git a/packages/extension/package.json b/packages/extension/package.json index c0961ef..2a5e44b 100644 --- a/packages/extension/package.json +++ b/packages/extension/package.json @@ -27,6 +27,7 @@ "@types/react": "^18.2.66", "@types/react-dom": "^18.2.22", "@vitejs/plugin-react": "^4.0.0", + "minimist": "^1.2.5", "react": "^18.2.0", "react-dom": "^18.2.0", "typescript": "^5.8.2", diff --git a/packages/extension/tests/extension.spec.ts b/packages/extension/tests/extension.spec.ts index 7d557f6..e78470d 100644 --- a/packages/extension/tests/extension.spec.ts +++ b/packages/extension/tests/extension.spec.ts @@ -42,8 +42,8 @@ type TestFixtures = { cli: (...args: string[]) => Promise; }; -const extensionPublicKey = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9nMS2b0WCohjVHPGb8D9qAdkbIngDqoAjTeSccHJijgcONejge+OJxOQOMLu7b0ovt1c9BiEJa5JcpM+EHFVGL1vluBxK71zmBy1m2f9vZF3HG0LSCp7YRkum9rAIEthDwbkxx6XTvpmAY5rjFa/NON6b9Hlbo+8peUSkoOK7HTwYnnI36asZ9eUTiveIf+DMPLojW2UX33vDWG2UKvMVDewzclb4+uLxAYshY7Mx8we/b44xu+Anb/EBLKjOPk9Yh541xJ5Ozc8EiP/5yxOp9c/lRiYUHaRW+4r0HKZyFt0eZ52ti2iM4Nfk7jRXR7an3JPsUIf5deC/1cVM/+1ZQIDAQAB'; -const extensionId = 'jakfalbnbhgkpmoaakfflhflbfpkailf'; +const extensionPublicKey = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwRsUUO4mmbCi4JpmrIoIw31iVW9+xUJRZ6nSzya17PQkaUPDxe1IpgM+vpd/xB6mJWlJSyE1Lj95c0sbomGfVY1M0zUeKbaRVcAb+/a6m59gNR+ubFlmTX0nK9/8fE2FpRB9D+4N5jyeIPQuASW/0oswI2/ijK7hH5NTRX8gWc/ROMSgUj7rKhTAgBrICt/NsStgDPsxRTPPJnhJ/ViJtM1P5KsSYswE987DPoFnpmkFpq8g1ae0eYbQfXy55ieaacC4QWyJPj3daU2kMfBQw7MXnnk0H/WDxouMOIHnd8MlQxpEMqAihj7KpuONH+MUhuj9HEQo4df6bSaIuQ0b4QIDAQAB'; +const extensionId = 'mmlmfjhmonkocbjadbfplnigmagldckm'; const test = base.extend({ pathToExtension: async ({}, use, testInfo) => { @@ -52,6 +52,9 @@ const test = base.extend({ await fs.cp(srcDir, extensionDir, { recursive: true }); const manifestPath = path.join(extensionDir, 'manifest.json'); const manifest = JSON.parse(await fs.readFile(manifestPath, 'utf8')); + // We don't hardcode the key in manifest, but for the tests we set the key field + // to ensure that locally installed extension has the same id as the one published + // in the store. manifest.key = extensionPublicKey; await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 2)); await use(extensionDir); @@ -113,7 +116,7 @@ const test = base.extend({ }); // Cleanup sessions - await runCli(['session-stop-all'], { mcpBrowser, testInfo }).catch(() => {}); + await runCli(['close-all'], { mcpBrowser, testInfo }).catch(() => {}); const daemonDir = path.join(testInfo.outputDir, 'daemon'); await fs.rm(daemonDir, { recursive: true, force: true }).catch(() => {}); @@ -130,7 +133,7 @@ async function runCli( const testInfo = options.testInfo; // Path to the terminal CLI - const cliPath = path.join(__dirname, '../../../node_modules/playwright/lib/mcp/terminal/cli.js'); + const cliPath = path.join(__dirname, '../../../node_modules/playwright/lib/cli/client/program.js'); return new Promise((resolve, reject) => { let stdout = ''; @@ -405,8 +408,8 @@ test.describe('CLI with extension', () => { // Wait for the confirmation page to appear const confirmationPage = await confirmationPagePromise; - // Click the Allow button - await confirmationPage.getByRole('button', { name: 'Allow' }).click(); + // Click the Connect button + await confirmationPage.locator('.tab-item', { hasText: 'Playwright MCP extension' }).getByRole('button', { name: 'Connect' }).click(); // Wait for the CLI command to complete const { output } = await cliPromise; diff --git a/packages/playwright-mcp/cli.js b/packages/playwright-mcp/cli.js index 46689fe..ffab11e 100755 --- a/packages/playwright-mcp/cli.js +++ b/packages/playwright-mcp/cli.js @@ -16,9 +16,9 @@ */ const { program } = require('playwright-core/lib/utilsBundle'); -const { decorateCommand } = require('playwright/lib/mcp/program'); +const { decorateMCPCommand } = require('playwright/lib/mcp/program'); const packageJSON = require('./package.json'); const p = program.version('Version ' + packageJSON.version).name('Playwright MCP'); -decorateCommand(p, packageJSON.version) +decorateMCPCommand(p, packageJSON.version) void program.parseAsync(process.argv); diff --git a/packages/playwright-mcp/package.json b/packages/playwright-mcp/package.json index cd02597..df8ed8c 100644 --- a/packages/playwright-mcp/package.json +++ b/packages/playwright-mcp/package.json @@ -32,8 +32,8 @@ } }, "dependencies": { - "playwright": "1.59.0-alpha-1770400094000", - "playwright-core": "1.59.0-alpha-1770400094000" + "playwright": "1.59.0-alpha-1771028105000", + "playwright-core": "1.59.0-alpha-1771028105000" }, "bin": { "playwright-mcp": "cli.js"