diff --git a/README.md b/README.md index d48cf6e..d150fb3 100644 --- a/README.md +++ b/README.md @@ -270,15 +270,6 @@ Playwright MCP server supports following arguments. They can be provided in the server is allowed to serve from. Defaults to the host the server is bound to. Pass '*' to disable the host check. - --allowed-origins semicolon-separated list of origins to - allow the browser to request. Default is - to allow all. - --blocked-origins semicolon-separated list of origins to - block the browser from requesting. - Blocklist is evaluated before allowlist. - If used without the allowlist, requests - not matching the blocklist are still - allowed. --block-service-workers block service workers --browser browser or chrome channel to use, possible values: chrome, firefox, @@ -307,6 +298,8 @@ Playwright MCP server supports following arguments. They can be provided in the localhost. Use 0.0.0.0 to bind to all interfaces. --ignore-https-errors ignore https errors + --init-page path to TypeScript file to evaluate on + Playwright page object --init-script path to JavaScript file to add as an initialization script. The script will be evaluated in every page before any of @@ -402,6 +395,35 @@ state [here](https://playwright.dev/docs/auth). The Playwright MCP Chrome Extension allows you to connect to existing browser tabs and leverage your logged-in sessions and browser state. See [extension/README.md](extension/README.md) for installation and setup instructions. +### Initial state + +There are multiple ways to provide the initial state to the browser context or a page. + +For the storage state, you can either: +- Start with a user data directory using the `--user-data-dir` argument. This will persist all browser data between the sessions. +- Start with a storage state file using the `--storage-state` argument. This will load cookies and local storage from the file into an isolated browser context. + +For the page state, you can use: + +- `--init-page` to point to a TypeScript file that will be evaluated on the Playwright page object. This allows you to run arbitrary code to set up the page. + +```ts +// init-page.ts +export default async ({ page }) => { + await page.context().grantPermissions(['geolocation']); + await page.context().setGeolocation({ latitude: 37.7749, longitude: -122.4194 }); + await page.setViewportSize({ width: 1280, height: 720 }); +}; +``` + +- `--init-script` to point to a JavaScript file that will be added as an initialization script. The script will be evaluated in every page before any of the page's scripts. +This is useful for overriding browser APIs or setting up the environment. + +```js +// init-script.js +window.isPlaywrightMCP = true; +``` + ### Configuration file The Playwright MCP server can be configured using a JSON configuration file. You can specify the configuration file @@ -708,6 +730,15 @@ http.createServer(async (req, res) => { +- **browser_run_code** + - Title: Run Playwright code + - Description: Run Playwright code snippet + - Parameters: + - `code` (string): Playwright code snippet to run. The snippet should access the `page` object to interact with the page. Can make multiple statements. For example: `await page.getByRole('button', { name: 'Submit' }).click();` + - Read-only: **false** + + + - **browser_select_option** - Title: Select option - Description: Select an option in a dropdown diff --git a/extension/manifest.json b/extension/manifest.json index 2efe81e..2897380 100644 --- a/extension/manifest.json +++ b/extension/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "Playwright MCP Bridge", - "version": "0.0.46", + "version": "0.0.47", "description": "Share browser tabs with Playwright MCP server", "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9nMS2b0WCohjVHPGb8D9qAdkbIngDqoAjTeSccHJijgcONejge+OJxOQOMLu7b0ovt1c9BiEJa5JcpM+EHFVGL1vluBxK71zmBy1m2f9vZF3HG0LSCp7YRkum9rAIEthDwbkxx6XTvpmAY5rjFa/NON6b9Hlbo+8peUSkoOK7HTwYnnI36asZ9eUTiveIf+DMPLojW2UX33vDWG2UKvMVDewzclb4+uLxAYshY7Mx8we/b44xu+Anb/EBLKjOPk9Yh541xJ5Ozc8EiP/5yxOp9c/lRiYUHaRW+4r0HKZyFt0eZ52ti2iM4Nfk7jRXR7an3JPsUIf5deC/1cVM/+1ZQIDAQAB", "permissions": [ diff --git a/extension/package-lock.json b/extension/package-lock.json index 313e31c..cf0e088 100644 --- a/extension/package-lock.json +++ b/extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "@playwright/mcp-extension", - "version": "0.0.46", + "version": "0.0.47", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@playwright/mcp-extension", - "version": "0.0.46", + "version": "0.0.47", "license": "Apache-2.0", "devDependencies": { "@types/chrome": "^0.0.315", diff --git a/extension/package.json b/extension/package.json index e37e112..34110d0 100644 --- a/extension/package.json +++ b/extension/package.json @@ -1,6 +1,6 @@ { "name": "@playwright/mcp-extension", - "version": "0.0.46", + "version": "0.0.47", "description": "Playwright MCP Browser Extension", "private": true, "repository": { diff --git a/package-lock.json b/package-lock.json index 4c434b7..9de01d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,23 +1,23 @@ { "name": "@playwright/mcp", - "version": "0.0.46", + "version": "0.0.47", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@playwright/mcp", - "version": "0.0.46", + "version": "0.0.47", "license": "Apache-2.0", "dependencies": { - "playwright": "1.57.0-alpha-2025-11-07", - "playwright-core": "1.57.0-alpha-2025-11-07" + "playwright": "1.57.0-alpha-2025-11-14", + "playwright-core": "1.57.0-alpha-2025-11-14" }, "bin": { "mcp-server-playwright": "cli.js" }, "devDependencies": { "@modelcontextprotocol/sdk": "^1.17.5", - "@playwright/test": "1.57.0-alpha-2025-11-07", + "@playwright/test": "1.57.0-alpha-2025-11-14", "@types/node": "^24.3.0", "zod-to-json-schema": "^3.24.6" }, @@ -50,13 +50,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.57.0-alpha-2025-11-07", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.57.0-alpha-2025-11-07.tgz", - "integrity": "sha512-dnSCKdVigPMHRVnBhiu4jh6GkKQfgtlHKBLxAYQUtIC0FmwryoxTFRtK5hNtcscfnRjy/LceSJlSwfDTTtbyBA==", + "version": "1.57.0-alpha-2025-11-14", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.57.0-alpha-2025-11-14.tgz", + "integrity": "sha512-CtIvv2qi3Wji3G2Oiwj26QeGosdj6z6IgzQyw3Jp2t8uVWDTQtNekdHi8Q8ONJqlJID8Lf45DMl4o31uOMzVOw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.57.0-alpha-2025-11-07" + "playwright": "1.57.0-alpha-2025-11-14" }, "bin": { "playwright": "cli.js" @@ -825,12 +825,12 @@ } }, "node_modules/playwright": { - "version": "1.57.0-alpha-2025-11-07", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.57.0-alpha-2025-11-07.tgz", - "integrity": "sha512-E5fgekU+NuIfE16bjL9xIffhmag2cInC/KDfXwvVGkCka5TpZfiWhHvCYIRW6/hEGr+eJS3jPHR91cyPO3gQgA==", + "version": "1.57.0-alpha-2025-11-14", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.57.0-alpha-2025-11-14.tgz", + "integrity": "sha512-B91cAwJw+dlsPi6GnJD6bAUfso/ygmrxsXHnbFqOd5UmGo8bZzFf7WvSkB/47lOSYIP+9szVXwMwIsZ4Fj+rAQ==", "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.57.0-alpha-2025-11-07" + "playwright-core": "1.57.0-alpha-2025-11-14" }, "bin": { "playwright": "cli.js" @@ -843,9 +843,9 @@ } }, "node_modules/playwright-core": { - "version": "1.57.0-alpha-2025-11-07", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.57.0-alpha-2025-11-07.tgz", - "integrity": "sha512-p61pk1XLuFBSia+37jfeuw62HbAi/KaXOGvjUoAiPdnDgO6AOj/DfodbWkZ1fqLZbW+q6Mja30YnzhD0CaePEQ==", + "version": "1.57.0-alpha-2025-11-14", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.57.0-alpha-2025-11-14.tgz", + "integrity": "sha512-Elz1kUiW8naXjunmfgaYh9inaqxT04FjR/CDOi2IH7ZBDTov6tTcNV4bObNeHSBV76YVPHsRK/96v3kG9F+5sQ==", "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" diff --git a/package.json b/package.json index 80cce32..2e2a305 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@playwright/mcp", - "version": "0.0.46", + "version": "0.0.47", "description": "Playwright Tools for MCP", "repository": { "type": "git", @@ -37,15 +37,15 @@ } }, "dependencies": { - "playwright": "1.57.0-alpha-2025-11-07", - "playwright-core": "1.57.0-alpha-2025-11-07" + "playwright": "1.57.0-alpha-2025-11-14", + "playwright-core": "1.57.0-alpha-2025-11-14" }, "bin": { "mcp-server-playwright": "cli.js" }, "devDependencies": { "@modelcontextprotocol/sdk": "^1.17.5", - "@playwright/test": "1.57.0-alpha-2025-11-07", + "@playwright/test": "1.57.0-alpha-2025-11-14", "@types/node": "^24.3.0", "zod-to-json-schema": "^3.24.6" } diff --git a/tests/capabilities.spec.ts b/tests/capabilities.spec.ts index 7ec699a..f7bc620 100644 --- a/tests/capabilities.spec.ts +++ b/tests/capabilities.spec.ts @@ -36,6 +36,7 @@ test('test snapshot tool list', async ({ client }) => { 'browser_network_requests', 'browser_press_key', 'browser_resize', + 'browser_run_code', 'browser_snapshot', 'browser_tabs', 'browser_take_screenshot', @@ -67,6 +68,7 @@ test('test tool list proxy mode', async ({ startClient }) => { 'browser_network_requests', 'browser_press_key', 'browser_resize', + 'browser_run_code', 'browser_snapshot', 'browser_tabs', 'browser_take_screenshot',