{"_id":"@ai-coding-labs/playwright-mcp-plus","_rev":"13-bd7ac8fc0b0b4617ace4b2558145e246","name":"@ai-coding-labs/playwright-mcp-plus","dist-tags":{"latest":"0.0.44"},"versions":{"0.0.33":{"name":"@ai-coding-labs/playwright-mcp-plus","version":"0.0.33","keywords":["playwright","mcp","model-context-protocol","browser-automation","project-isolation","session-management"],"author":{"name":"AI Coding Labs"},"license":"Apache-2.0","_id":"@ai-coding-labs/playwright-mcp-plus@0.0.33","maintainers":[{"name":"cc11001100","email":"CC11001100@QQ.COM"}],"homepage":"https://github.com/ai-coding-labs/playwright-plus-mcp","bugs":{"url":"https://github.com/ai-coding-labs/playwright-plus-mcp/issues"},"bin":{"mcp-server-playwright":"cli.js"},"dist":{"shasum":"5eccab8026867180f3e235526840dffe2d985639","tarball":"https://registry.npmjs.org/@ai-coding-labs/playwright-mcp-plus/-/playwright-mcp-plus-0.0.33.tgz","fileCount":58,"integrity":"sha512-nZcbXdF/tXSgnO1CjS9AlKpRSND4xekitZKNgVXeBRXPze0bRx3Xywxtuu8eclUwVswfpD9S/gUiCDTdfsDcVg==","signatures":[{"sig":"MEUCIQCWshPcJ0RIW+kPNNuPHHH6F16wSdWXeXXx0oNestSuGQIgGAWGGhSCTDQwEqqGnSJiPXMipbSlxMlZL7inA5EYTY0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":258069},"type":"module","types":"./index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"b040513e112c4f35408b7795fa014df68fc30506","scripts":{"lint":"npm run update-readme && eslint . && tsc --noEmit","test":"playwright test","build":"tsc","clean":"rm -rf lib","ctest":"playwright test --project=chrome","ftest":"playwright test --project=firefox","watch":"tsc --watch","wtest":"playwright test --project=webkit","lint-fix":"eslint . --fix","run-server":"node lib/browserServer.js","npm-publish":"npm run clean && npm run build && npm publish","update-readme":"node utils/update-readme.js"},"_npmUser":{"name":"cc11001100","email":"CC11001100@QQ.COM"},"repository":{"url":"git+https://github.com/ai-coding-labs/playwright-plus-mcp.git","type":"git"},"_npmVersion":"11.4.2","description":"Enhanced Playwright Tools for MCP with Project Session Isolation","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ws":"^8.18.1","zod":"^3.24.1","mime":"^4.0.7","debug":"^4.4.1","dotenv":"^17.2.0","commander":"^13.1.0","playwright":"1.55.0-alpha-1753913825000","playwright-core":"1.55.0-alpha-1753913825000","zod-to-json-schema":"^3.24.4","@modelcontextprotocol/sdk":"^1.16.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.19.0","openai":"^5.10.2","esbuild":"^0.20.1","@types/ws":"^8.18.1","@eslint/js":"^9.19.0","typescript":"^5.8.2","@types/node":"^22.13.10","@types/debug":"^4.1.12","@eslint/eslintrc":"^3.2.0","@playwright/test":"1.55.0-alpha-1753913825000","@anthropic-ai/sdk":"^0.57.0","eslint-plugin-import":"^2.31.0","eslint-plugin-notice":"^1.0.0","@stylistic/eslint-plugin":"^3.0.1","@typescript-eslint/utils":"^8.26.1","@typescript-eslint/parser":"^8.26.1","@typescript-eslint/eslint-plugin":"^8.26.1"},"_npmOperationalInternal":{"tmp":"tmp/playwright-mcp-plus_0.0.33_1753985979887_0.05978238355418308","host":"s3://npm-registry-packages-npm-production"}},"0.0.34":{"name":"@ai-coding-labs/playwright-mcp-plus","version":"0.0.34","keywords":["playwright","mcp","model-context-protocol","browser-automation","project-isolation","session-management"],"author":{"name":"AI Coding Labs"},"license":"Apache-2.0","_id":"@ai-coding-labs/playwright-mcp-plus@0.0.34","maintainers":[{"name":"cc11001100","email":"CC11001100@QQ.COM"}],"homepage":"https://github.com/ai-coding-labs/playwright-plus-mcp","bugs":{"url":"https://github.com/ai-coding-labs/playwright-plus-mcp/issues"},"bin":{"mcp-server-playwright":"cli.js"},"dist":{"shasum":"7c5cffa1123084d9d23bda22580125992c4ce391","tarball":"https://registry.npmjs.org/@ai-coding-labs/playwright-mcp-plus/-/playwright-mcp-plus-0.0.34.tgz","fileCount":58,"integrity":"sha512-jD6ssAEPtFnyz0rZw28gzM02fOef58fDDGTSR8b7+NXlf6uyaHM0uPEvwLKO6kz677SMViLkGD1GkdIcEoG5Ow==","signatures":[{"sig":"MEUCIF38MLPmS7iLKdxrOisYxVAKKeR2aUrwsLaUPOXm+F0NAiEAwCNe4u7wsTmdYVefjF0FsD4dMt3lfcnhxMGrUFIC5uc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":260222},"type":"module","types":"./index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"77a781882913e3b9e07c70bc0755e8984017b0ba","scripts":{"lint":"npm run update-readme && eslint . && tsc --noEmit","test":"playwright test","build":"tsc","clean":"rm -rf lib","ctest":"playwright test --project=chrome","ftest":"playwright test --project=firefox","watch":"tsc --watch","wtest":"playwright test --project=webkit","lint-fix":"eslint . --fix","run-server":"node lib/browserServer.js","npm-publish":"npm run clean && npm run build && npm publish","update-readme":"node utils/update-readme.js"},"_npmUser":{"name":"cc11001100","email":"CC11001100@QQ.COM"},"repository":{"url":"git+https://github.com/ai-coding-labs/playwright-plus-mcp.git","type":"git"},"_npmVersion":"11.4.2","description":"Enhanced Playwright Tools for MCP with Project Session Isolation","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ws":"^8.18.1","zod":"^3.24.1","mime":"^4.0.7","debug":"^4.4.1","dotenv":"^17.2.0","commander":"^13.1.0","playwright":"1.55.0-alpha-1753913825000","playwright-core":"1.55.0-alpha-1753913825000","zod-to-json-schema":"^3.24.4","@modelcontextprotocol/sdk":"^1.16.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.19.0","openai":"^5.10.2","esbuild":"^0.20.1","@types/ws":"^8.18.1","@eslint/js":"^9.19.0","typescript":"^5.8.2","@types/node":"^22.13.10","@types/debug":"^4.1.12","@eslint/eslintrc":"^3.2.0","@playwright/test":"1.55.0-alpha-1753913825000","@anthropic-ai/sdk":"^0.57.0","eslint-plugin-import":"^2.31.0","eslint-plugin-notice":"^1.0.0","@stylistic/eslint-plugin":"^3.0.1","@typescript-eslint/utils":"^8.26.1","@typescript-eslint/parser":"^8.26.1","@typescript-eslint/eslint-plugin":"^8.26.1"},"_npmOperationalInternal":{"tmp":"tmp/playwright-mcp-plus_0.0.34_1753990789265_0.7631175287828624","host":"s3://npm-registry-packages-npm-production"}},"0.0.35":{"name":"@ai-coding-labs/playwright-mcp-plus","version":"0.0.35","keywords":["playwright","mcp","model-context-protocol","browser-automation","project-isolation","session-management"],"author":{"name":"AI Coding Labs"},"license":"Apache-2.0","_id":"@ai-coding-labs/playwright-mcp-plus@0.0.35","maintainers":[{"name":"cc11001100","email":"CC11001100@QQ.COM"}],"homepage":"https://github.com/ai-coding-labs/playwright-plus-mcp","bugs":{"url":"https://github.com/ai-coding-labs/playwright-plus-mcp/issues"},"bin":{"mcp-server-playwright":"cli.js"},"dist":{"shasum":"28ec976a5a43dfc3b8b7484d11876ed6b10c4354","tarball":"https://registry.npmjs.org/@ai-coding-labs/playwright-mcp-plus/-/playwright-mcp-plus-0.0.35.tgz","fileCount":59,"integrity":"sha512-3duPvpsIZlR1JJKtI8mKzA798J2iylnOiMrsDzW0bzksa8OgF3FhlU6kYgkPiDi5NsUhB6ckqO32HLzuGR0qaA==","signatures":[{"sig":"MEUCIQCCMHre7hGX4yW1husLYqLcm5buDvKV4lzIo0VMISwkNQIgei1BKcQk89k8p5+IfyihGg9ARrZSnaQqK6sGnpt/r8c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":302963},"type":"module","types":"./index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"b4ae65e5ea05c030ab26b8251197e3237df11f57","scripts":{"lint":"npm run update-readme && eslint . && tsc --noEmit","test":"playwright test","build":"tsc","clean":"rm -rf lib","ctest":"playwright test --project=chrome","ftest":"playwright test --project=firefox","watch":"tsc --watch","wtest":"playwright test --project=webkit","lint-fix":"eslint . --fix","run-server":"node lib/browserServer.js","npm-publish":"npm run clean && npm run build && npm publish","update-readme":"node utils/update-readme.js"},"_npmUser":{"name":"cc11001100","email":"CC11001100@QQ.COM"},"repository":{"url":"git+https://github.com/ai-coding-labs/playwright-plus-mcp.git","type":"git"},"_npmVersion":"11.4.2","description":"Enhanced Playwright Tools for MCP with Project Session Isolation","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ws":"^8.18.1","zod":"^3.24.1","mime":"^4.0.7","debug":"^4.4.1","dotenv":"^17.2.0","commander":"^13.1.0","playwright":"1.55.0-alpha-1753913825000","playwright-core":"1.55.0-alpha-1753913825000","zod-to-json-schema":"^3.24.4","@modelcontextprotocol/sdk":"^1.16.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.19.0","openai":"^5.10.2","esbuild":"^0.20.1","@types/ws":"^8.18.1","@eslint/js":"^9.19.0","typescript":"^5.8.2","@types/node":"^22.13.10","@types/debug":"^4.1.12","@eslint/eslintrc":"^3.2.0","@playwright/test":"1.55.0-alpha-1753913825000","@anthropic-ai/sdk":"^0.57.0","eslint-plugin-import":"^2.31.0","eslint-plugin-notice":"^1.0.0","@stylistic/eslint-plugin":"^3.0.1","@typescript-eslint/utils":"^8.26.1","@typescript-eslint/parser":"^8.26.1","@typescript-eslint/eslint-plugin":"^8.26.1"},"_npmOperationalInternal":{"tmp":"tmp/playwright-mcp-plus_0.0.35_1753996195840_0.45751852760741407","host":"s3://npm-registry-packages-npm-production"}},"0.0.36":{"name":"@ai-coding-labs/playwright-mcp-plus","version":"0.0.36","keywords":["playwright","mcp","model-context-protocol","browser-automation","project-isolation","session-management"],"author":{"name":"AI Coding Labs"},"license":"Apache-2.0","_id":"@ai-coding-labs/playwright-mcp-plus@0.0.36","maintainers":[{"name":"cc11001100","email":"CC11001100@QQ.COM"}],"homepage":"https://github.com/ai-coding-labs/playwright-plus-mcp","bugs":{"url":"https://github.com/ai-coding-labs/playwright-plus-mcp/issues"},"bin":{"mcp-server-playwright":"cli.js"},"dist":{"shasum":"6cd45a537ae90b8b0292b4a13319b6c71d14b5b0","tarball":"https://registry.npmjs.org/@ai-coding-labs/playwright-mcp-plus/-/playwright-mcp-plus-0.0.36.tgz","fileCount":59,"integrity":"sha512-ViJUEzhzCFkYHKFHBSNzCSFgV5LblcBjxQjB56PBb59ZQ8BWnB7z8bLoi6sxhYItoXVoJt8jWmF6WSnesB8QMw==","signatures":[{"sig":"MEQCIAH1XPcJ3PFLiQOszYem67MtMObMcnCxRwoTdycRVSORAiAuYl2bpa7T5ca7Ufjadb5vhkm43nmxiTSgYQZ8MD9Bnw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":302963},"type":"module","types":"./index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"b4ae65e5ea05c030ab26b8251197e3237df11f57","scripts":{"lint":"npm run update-readme && eslint . && tsc --noEmit","test":"playwright test","build":"tsc","clean":"rm -rf lib","ctest":"playwright test --project=chrome","ftest":"playwright test --project=firefox","watch":"tsc --watch","wtest":"playwright test --project=webkit","lint-fix":"eslint . --fix","run-server":"node lib/browserServer.js","npm-publish":"npm run clean && npm run build && npm publish","update-readme":"node utils/update-readme.js"},"_npmUser":{"name":"cc11001100","email":"CC11001100@QQ.COM"},"repository":{"url":"git+https://github.com/ai-coding-labs/playwright-plus-mcp.git","type":"git"},"_npmVersion":"11.4.2","description":"Enhanced Playwright Tools for MCP with Project Session Isolation","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ws":"^8.18.1","zod":"^3.24.1","mime":"^4.0.7","debug":"^4.4.1","dotenv":"^17.2.0","commander":"^13.1.0","playwright":"1.55.0-alpha-1753913825000","playwright-core":"1.55.0-alpha-1753913825000","zod-to-json-schema":"^3.24.4","@modelcontextprotocol/sdk":"^1.16.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.19.0","openai":"^5.10.2","esbuild":"^0.20.1","@types/ws":"^8.18.1","@eslint/js":"^9.19.0","typescript":"^5.8.2","@types/node":"^22.13.10","@types/debug":"^4.1.12","@eslint/eslintrc":"^3.2.0","@playwright/test":"1.55.0-alpha-1753913825000","@anthropic-ai/sdk":"^0.57.0","eslint-plugin-import":"^2.31.0","eslint-plugin-notice":"^1.0.0","@stylistic/eslint-plugin":"^3.0.1","@typescript-eslint/utils":"^8.26.1","@typescript-eslint/parser":"^8.26.1","@typescript-eslint/eslint-plugin":"^8.26.1"},"_npmOperationalInternal":{"tmp":"tmp/playwright-mcp-plus_0.0.36_1753996256421_0.35775198139927533","host":"s3://npm-registry-packages-npm-production"}},"0.0.37":{"name":"@ai-coding-labs/playwright-mcp-plus","version":"0.0.37","keywords":["playwright","mcp","model-context-protocol","browser-automation","project-isolation","session-management","chrome-extensions","extension-management","browser-extensions"],"author":{"name":"AI Coding Labs"},"license":"Apache-2.0","_id":"@ai-coding-labs/playwright-mcp-plus@0.0.37","maintainers":[{"name":"cc11001100","email":"CC11001100@QQ.COM"}],"homepage":"https://github.com/ai-coding-labs/playwright-plus-mcp","bugs":{"url":"https://github.com/ai-coding-labs/playwright-plus-mcp/issues"},"bin":{"mcp-server-playwright":"cli.js"},"dist":{"shasum":"7ccd5f460986edb23c1b1567f99def83bd4436e1","tarball":"https://registry.npmjs.org/@ai-coding-labs/playwright-mcp-plus/-/playwright-mcp-plus-0.0.37.tgz","fileCount":60,"integrity":"sha512-8GjWAPj6SOY1B2OoZyIP2xqzdAx9T7V4mTMSddyqWztJ73dSbZhLsASj/+MtmDNYb50HhVYIh6g9iGkiDPjQpA==","signatures":[{"sig":"MEUCIAcfEDL/ATQ13jr0b2Ou3ITaY9pc9jrhJrp5V9zloj78AiEAsZZY08utCrqJaP2xVOaSeqGsp0UzfG3rFVkGQcTCoYY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":330768},"type":"module","types":"./index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"dce95be26d64eff81a5ffb7708f3961f7fa4cefa","scripts":{"lint":"npm run update-readme && eslint . && tsc --noEmit","test":"playwright test","build":"tsc","clean":"rm -rf lib","ctest":"playwright test --project=chrome","ftest":"playwright test --project=firefox","watch":"tsc --watch","wtest":"playwright test --project=webkit","lint-fix":"eslint . --fix","run-server":"node lib/browserServer.js","npm-publish":"npm run clean && npm run build && npm publish","update-readme":"node utils/update-readme.js"},"_npmUser":{"name":"cc11001100","email":"CC11001100@QQ.COM"},"repository":{"url":"git+https://github.com/ai-coding-labs/playwright-plus-mcp.git","type":"git"},"_npmVersion":"11.5.1","description":"Enhanced Playwright Tools for MCP with Project Session Isolation","directories":{},"_nodeVersion":"24.5.0","dependencies":{"ws":"^8.18.1","zod":"^3.24.1","mime":"^4.0.7","debug":"^4.4.1","dotenv":"^17.2.0","commander":"^13.1.0","playwright":"1.55.0-alpha-1753913825000","playwright-core":"1.55.0-alpha-1753913825000","zod-to-json-schema":"^3.24.4","@modelcontextprotocol/sdk":"^1.16.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.19.0","openai":"^5.10.2","esbuild":"^0.20.1","@types/ws":"^8.18.1","@eslint/js":"^9.19.0","typescript":"^5.8.2","@types/node":"^22.13.10","@types/debug":"^4.1.12","@eslint/eslintrc":"^3.2.0","@playwright/test":"1.55.0-alpha-1753913825000","@anthropic-ai/sdk":"^0.57.0","eslint-plugin-import":"^2.31.0","eslint-plugin-notice":"^1.0.0","@stylistic/eslint-plugin":"^3.0.1","@typescript-eslint/utils":"^8.26.1","@typescript-eslint/parser":"^8.26.1","@typescript-eslint/eslint-plugin":"^8.26.1"},"_npmOperationalInternal":{"tmp":"tmp/playwright-mcp-plus_0.0.37_1754622363518_0.18142081837525703","host":"s3://npm-registry-packages-npm-production"}},"0.0.39":{"name":"@ai-coding-labs/playwright-mcp-plus","version":"0.0.39","keywords":["playwright","mcp","model-context-protocol","browser-automation","project-isolation","session-management","chrome-extensions","extension-management","browser-extensions"],"author":{"name":"AI Coding Labs"},"license":"Apache-2.0","_id":"@ai-coding-labs/playwright-mcp-plus@0.0.39","maintainers":[{"name":"cc11001100","email":"CC11001100@QQ.COM"}],"homepage":"https://github.com/ai-coding-labs/playwright-plus-mcp","bugs":{"url":"https://github.com/ai-coding-labs/playwright-plus-mcp/issues"},"bin":{"mcp-server-playwright":"cli.js"},"dist":{"shasum":"8715092d4290a371f2f0f8f5da2100592272f9d2","tarball":"https://registry.npmjs.org/@ai-coding-labs/playwright-mcp-plus/-/playwright-mcp-plus-0.0.39.tgz","fileCount":60,"integrity":"sha512-+JlAc+71AZzlwMrMPYUM9xj9G8HtEnlk49egrFHjewkA71DFuSHPd5TYD9BiaeXqZUacGtHDFnDpCNc4tNuDTA==","signatures":[{"sig":"MEUCICh2HJFvY3Yb+N1scdKZJd8BUcMfcKqqtWfsYq3po6WfAiEAyVwYIca5BqehDBkt1hMGHXXelTd3u9glkAT+f7YAt7A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":337126},"type":"module","types":"./index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"dce95be26d64eff81a5ffb7708f3961f7fa4cefa","scripts":{"lint":"npm run update-readme && eslint . && tsc --noEmit","test":"playwright test","build":"tsc","clean":"rm -rf lib","ctest":"playwright test --project=chrome","ftest":"playwright test --project=firefox","watch":"tsc --watch","wtest":"playwright test --project=webkit","lint-fix":"eslint . --fix","run-server":"node lib/browserServer.js","npm-publish":"npm run clean && npm run build && npm publish","update-readme":"node utils/update-readme.js"},"_npmUser":{"name":"cc11001100","email":"CC11001100@QQ.COM"},"repository":{"url":"git+https://github.com/ai-coding-labs/playwright-plus-mcp.git","type":"git"},"_npmVersion":"11.5.1","description":"Enhanced Playwright Tools for MCP with Project Session Isolation","directories":{},"_nodeVersion":"24.5.0","dependencies":{"ws":"^8.18.1","zod":"^3.24.1","mime":"^4.0.7","debug":"^4.4.1","dotenv":"^17.2.0","crx-util":"^1.0.0","commander":"^13.1.0","playwright":"1.55.0-alpha-1753913825000","playwright-core":"1.55.0-alpha-1753913825000","zod-to-json-schema":"^3.24.4","@modelcontextprotocol/sdk":"^1.16.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.19.0","openai":"^5.10.2","esbuild":"^0.20.1","@types/ws":"^8.18.1","@eslint/js":"^9.19.0","typescript":"^5.8.2","@types/node":"^22.13.10","@types/debug":"^4.1.12","@eslint/eslintrc":"^3.2.0","@playwright/test":"1.55.0-alpha-1753913825000","@anthropic-ai/sdk":"^0.57.0","eslint-plugin-import":"^2.31.0","eslint-plugin-notice":"^1.0.0","@stylistic/eslint-plugin":"^3.0.1","@typescript-eslint/utils":"^8.26.1","@typescript-eslint/parser":"^8.26.1","@typescript-eslint/eslint-plugin":"^8.26.1"},"_npmOperationalInternal":{"tmp":"tmp/playwright-mcp-plus_0.0.39_1754858592136_0.4475023049509388","host":"s3://npm-registry-packages-npm-production"}},"0.0.40":{"name":"@ai-coding-labs/playwright-mcp-plus","version":"0.0.40","keywords":["playwright","mcp","model-context-protocol","browser-automation","project-isolation","session-management","chrome-extensions","extension-management","browser-extensions"],"author":{"name":"AI Coding Labs"},"license":"Apache-2.0","_id":"@ai-coding-labs/playwright-mcp-plus@0.0.40","maintainers":[{"name":"cc11001100","email":"CC11001100@QQ.COM"}],"homepage":"https://github.com/ai-coding-labs/playwright-plus-mcp","bugs":{"url":"https://github.com/ai-coding-labs/playwright-plus-mcp/issues"},"bin":{"mcp-server-playwright":"cli.js"},"dist":{"shasum":"45b9bc43502fc460510ed8a9966be8bb349e7872","tarball":"https://registry.npmjs.org/@ai-coding-labs/playwright-mcp-plus/-/playwright-mcp-plus-0.0.40.tgz","fileCount":60,"integrity":"sha512-gIlXx3pJrbKmrkuyf/tKglIlIL6BkS2AqtnVYAe14P//WKXLNaZ0Am7qF5RNMQmX5frjvwtdoKAOKTAobp8dIA==","signatures":[{"sig":"MEUCIQCkrr+4ARyrvxEsFJDpv2bYXgx0qOE20qI1SeGK8j9P/wIgVUXQPG5uBmA0PrQr7bVRHMXBX3hV6Tyogy8efcyRo/g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":342250},"type":"module","types":"./index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"46420f15027378259c7ab84d2254e441d9d85c64","scripts":{"lint":"npm run update-readme && eslint . && tsc --noEmit","test":"playwright test","build":"tsc","clean":"rm -rf lib","ctest":"playwright test --project=chrome","ftest":"playwright test --project=firefox","watch":"tsc --watch","wtest":"playwright test --project=webkit","lint-fix":"eslint . --fix","run-server":"node lib/browserServer.js","npm-publish":"npm run clean && npm run build && npm publish","update-readme":"node utils/update-readme.js"},"_npmUser":{"name":"cc11001100","email":"CC11001100@QQ.COM"},"repository":{"url":"git+https://github.com/ai-coding-labs/playwright-plus-mcp.git","type":"git"},"_npmVersion":"11.5.1","description":"Enhanced Playwright Tools for MCP with Project Session Isolation","directories":{},"_nodeVersion":"24.5.0","dependencies":{"ws":"^8.18.1","zod":"^3.24.1","mime":"^4.0.7","debug":"^4.4.1","dotenv":"^17.2.0","crx-util":"^1.0.0","commander":"^13.1.0","playwright":"1.55.0-alpha-1753913825000","playwright-core":"1.55.0-alpha-1753913825000","zod-to-json-schema":"^3.24.4","@modelcontextprotocol/sdk":"^1.16.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.19.0","openai":"^5.10.2","esbuild":"^0.20.1","@types/ws":"^8.18.1","@eslint/js":"^9.19.0","typescript":"^5.8.2","@types/node":"^22.13.10","@types/debug":"^4.1.12","@eslint/eslintrc":"^3.2.0","@playwright/test":"1.55.0-alpha-1753913825000","@anthropic-ai/sdk":"^0.57.0","eslint-plugin-import":"^2.31.0","eslint-plugin-notice":"^1.0.0","@stylistic/eslint-plugin":"^3.0.1","@typescript-eslint/utils":"^8.26.1","@typescript-eslint/parser":"^8.26.1","@typescript-eslint/eslint-plugin":"^8.26.1"},"_npmOperationalInternal":{"tmp":"tmp/playwright-mcp-plus_0.0.40_1754861574006_0.08313775916395683","host":"s3://npm-registry-packages-npm-production"}},"0.0.41":{"name":"@ai-coding-labs/playwright-mcp-plus","version":"0.0.41","keywords":["playwright","mcp","model-context-protocol","browser-automation","project-isolation","session-management","chrome-extensions","extension-management","browser-extensions"],"author":{"name":"AI Coding Labs"},"license":"Apache-2.0","_id":"@ai-coding-labs/playwright-mcp-plus@0.0.41","maintainers":[{"name":"cc11001100","email":"CC11001100@QQ.COM"}],"homepage":"https://github.com/ai-coding-labs/playwright-plus-mcp","bugs":{"url":"https://github.com/ai-coding-labs/playwright-plus-mcp/issues"},"bin":{"mcp-server-playwright":"cli.js"},"dist":{"shasum":"5610d28ed7be41267219fac6f8e2fa2816a82b97","tarball":"https://registry.npmjs.org/@ai-coding-labs/playwright-mcp-plus/-/playwright-mcp-plus-0.0.41.tgz","fileCount":60,"integrity":"sha512-112waZ7zKFz4wKV49mp5VcGF3Idw0JKtD+b8oihaNuBlKkXGXRwfwpxRj1UnoT6I/klQG7+ghP4f93YmIzwkOA==","signatures":[{"sig":"MEUCIQCxYPDGBWOKMCxvsfSsU/KtToXGQd848+dpcKeh/wiZrQIgXnzyiEBPFmtGVfzLEqBZp4TBBsjMIbvYoo/RbJX7PlU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":342287},"type":"module","types":"./index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"491d8d90c0a597fae015d6911652fb59a33d6990","scripts":{"lint":"npm run update-readme && eslint . && tsc --noEmit","test":"playwright test","build":"tsc","clean":"rm -rf lib","ctest":"playwright test --project=chrome","ftest":"playwright test --project=firefox","watch":"tsc --watch","wtest":"playwright test --project=webkit","lint-fix":"eslint . --fix","run-server":"node lib/browserServer.js","npm-publish":"npm run clean && npm run build && npm publish","update-readme":"node utils/update-readme.js"},"_npmUser":{"name":"cc11001100","email":"CC11001100@QQ.COM"},"repository":{"url":"git+https://github.com/ai-coding-labs/playwright-plus-mcp.git","type":"git"},"_npmVersion":"11.5.1","description":"Enhanced Playwright Tools for MCP with Project Session Isolation","directories":{},"_nodeVersion":"24.5.0","dependencies":{"ws":"^8.18.1","zod":"^3.24.1","mime":"^4.0.7","debug":"^4.4.1","dotenv":"^17.2.0","crx-util":"^1.0.0","commander":"^13.1.0","playwright":"1.55.0-alpha-1753913825000","playwright-core":"1.55.0-alpha-1753913825000","zod-to-json-schema":"^3.24.4","@modelcontextprotocol/sdk":"^1.16.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.19.0","openai":"^5.10.2","esbuild":"^0.20.1","@types/ws":"^8.18.1","@eslint/js":"^9.19.0","typescript":"^5.8.2","@types/node":"^22.13.10","@types/debug":"^4.1.12","@eslint/eslintrc":"^3.2.0","@playwright/test":"1.55.0-alpha-1753913825000","@anthropic-ai/sdk":"^0.57.0","eslint-plugin-import":"^2.31.0","eslint-plugin-notice":"^1.0.0","@stylistic/eslint-plugin":"^3.0.1","@typescript-eslint/utils":"^8.26.1","@typescript-eslint/parser":"^8.26.1","@typescript-eslint/eslint-plugin":"^8.26.1"},"_npmOperationalInternal":{"tmp":"tmp/playwright-mcp-plus_0.0.41_1754862958322_0.730175039758227","host":"s3://npm-registry-packages-npm-production"}},"0.0.42":{"name":"@ai-coding-labs/playwright-mcp-plus","version":"0.0.42","keywords":["playwright","mcp","model-context-protocol","browser-automation","project-isolation","session-management","chrome-extensions","extension-management","browser-extensions"],"author":{"name":"AI Coding Labs"},"license":"Apache-2.0","_id":"@ai-coding-labs/playwright-mcp-plus@0.0.42","maintainers":[{"name":"cc11001100","email":"CC11001100@QQ.COM"}],"homepage":"https://github.com/ai-coding-labs/playwright-plus-mcp","bugs":{"url":"https://github.com/ai-coding-labs/playwright-plus-mcp/issues"},"bin":{"mcp-server-playwright":"cli.js"},"dist":{"shasum":"4d43f1d7018a872b4e0b1bb8b6f197c38c5c7181","tarball":"https://registry.npmjs.org/@ai-coding-labs/playwright-mcp-plus/-/playwright-mcp-plus-0.0.42.tgz","fileCount":60,"integrity":"sha512-kMagfOI7QMLUFzRFKBaoNobFa7F8TY40Y7RW4aLpMZTYYxMqX85DexVQY9UkhCXvCiMh8JkRoT5WoQ+jBT2ZVw==","signatures":[{"sig":"MEQCIHADJlLMqFcKMYX/SGuoX+8mblMVEcxj4Kf1LdRl6zCaAiBO0vjajT7RBpzQ3Rb7nKVSXfZWXb47eig4D9rg2lmp/w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":342362},"type":"module","types":"./index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"e2f9da696c055f2f58308bf4944ea83f23f41a4c","scripts":{"lint":"npm run update-readme && eslint . && tsc --noEmit","test":"playwright test","build":"tsc","clean":"rm -rf lib","ctest":"playwright test --project=chrome","ftest":"playwright test --project=firefox","watch":"tsc --watch","wtest":"playwright test --project=webkit","lint-fix":"eslint . --fix","run-server":"node lib/browserServer.js","npm-publish":"npm run clean && npm run build && npm publish","update-readme":"node utils/update-readme.js"},"_npmUser":{"name":"cc11001100","email":"CC11001100@QQ.COM"},"repository":{"url":"git+https://github.com/ai-coding-labs/playwright-plus-mcp.git","type":"git"},"_npmVersion":"11.5.1","description":"Enhanced Playwright Tools for MCP with Project Session Isolation","directories":{},"_nodeVersion":"24.5.0","dependencies":{"ws":"^8.18.1","zod":"^3.24.1","mime":"^4.0.7","debug":"^4.4.1","dotenv":"^17.2.0","crx-util":"^1.0.0","commander":"^13.1.0","playwright":"1.55.0-alpha-1753913825000","playwright-core":"1.55.0-alpha-1753913825000","zod-to-json-schema":"^3.24.4","@modelcontextprotocol/sdk":"^1.16.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.19.0","openai":"^5.10.2","esbuild":"^0.20.1","@types/ws":"^8.18.1","@eslint/js":"^9.19.0","typescript":"^5.8.2","@types/node":"^22.13.10","@types/debug":"^4.1.12","@eslint/eslintrc":"^3.2.0","@playwright/test":"1.55.0-alpha-1753913825000","@anthropic-ai/sdk":"^0.57.0","eslint-plugin-import":"^2.31.0","eslint-plugin-notice":"^1.0.0","@stylistic/eslint-plugin":"^3.0.1","@typescript-eslint/utils":"^8.26.1","@typescript-eslint/parser":"^8.26.1","@typescript-eslint/eslint-plugin":"^8.26.1"},"_npmOperationalInternal":{"tmp":"tmp/playwright-mcp-plus_0.0.42_1757634981319_0.632840301902647","host":"s3://npm-registry-packages-npm-production"}},"0.0.43":{"name":"@ai-coding-labs/playwright-mcp-plus","version":"0.0.43","keywords":["playwright","mcp","model-context-protocol","browser-automation","project-isolation","session-management","chrome-extensions","extension-management","browser-extensions"],"author":{"name":"AI Coding Labs"},"license":"Apache-2.0","_id":"@ai-coding-labs/playwright-mcp-plus@0.0.43","maintainers":[{"name":"cc11001100","email":"CC11001100@QQ.COM"}],"homepage":"https://github.com/ai-coding-labs/playwright-plus-mcp","bugs":{"url":"https://github.com/ai-coding-labs/playwright-plus-mcp/issues"},"bin":{"mcp-server-playwright":"cli.js"},"dist":{"shasum":"7a1b6c34e7c1f56a5471f76edaa4536a835ced83","tarball":"https://registry.npmjs.org/@ai-coding-labs/playwright-mcp-plus/-/playwright-mcp-plus-0.0.43.tgz","fileCount":60,"integrity":"sha512-VyypNnbNgM1ef2qUxzIOpDh1zPIngKWQwnfi3aPELsADtaPPYBhuAp68hDQFo+wVReKvhAZ/IMHjWB1x/QgZJQ==","signatures":[{"sig":"MEUCIG1gai1kk7eFeZ5Vqe9j6qcnRXn0Nfxz+GV4YQ3+f41YAiEAv0CG4iFYF1azfTBzYFeM9/n7sRctGEgrJQFyCs2slfo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":342362},"type":"module","types":"./index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"45b7b8bd30ef3418a23accf34e8524de5ce02ccf","scripts":{"lint":"npm run update-readme && eslint . && tsc --noEmit","test":"playwright test","build":"tsc","clean":"rm -rf lib","ctest":"playwright test --project=chrome","ftest":"playwright test --project=firefox","watch":"tsc --watch","wtest":"playwright test --project=webkit","lint-fix":"eslint . --fix","run-server":"node lib/browserServer.js","npm-publish":"npm run clean && npm run build && npm publish","update-readme":"node utils/update-readme.js"},"_npmUser":{"name":"cc11001100","email":"CC11001100@QQ.COM"},"repository":{"url":"git+https://github.com/ai-coding-labs/playwright-plus-mcp.git","type":"git"},"_npmVersion":"11.5.1","description":"Enhanced Playwright Tools for MCP with Project Session Isolation","directories":{},"_nodeVersion":"24.5.0","dependencies":{"ws":"^8.18.1","zod":"^3.24.1","mime":"^4.0.7","debug":"^4.4.1","dotenv":"^17.2.0","crx-util":"^1.0.0","commander":"^13.1.0","playwright":"1.55.0-alpha-1753913825000","playwright-core":"1.55.0-alpha-1753913825000","zod-to-json-schema":"^3.24.4","@modelcontextprotocol/sdk":"^1.16.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.19.0","openai":"^5.10.2","esbuild":"^0.20.1","@types/ws":"^8.18.1","@eslint/js":"^9.19.0","typescript":"^5.8.2","@types/node":"^22.13.10","@types/debug":"^4.1.12","@eslint/eslintrc":"^3.2.0","@playwright/test":"1.55.0-alpha-1753913825000","@anthropic-ai/sdk":"^0.57.0","eslint-plugin-import":"^2.31.0","eslint-plugin-notice":"^1.0.0","@stylistic/eslint-plugin":"^3.0.1","@typescript-eslint/utils":"^8.26.1","@typescript-eslint/parser":"^8.26.1","@typescript-eslint/eslint-plugin":"^8.26.1"},"_npmOperationalInternal":{"tmp":"tmp/playwright-mcp-plus_0.0.43_1757635876747_0.2867423148816943","host":"s3://npm-registry-packages-npm-production"}},"0.0.44":{"name":"@ai-coding-labs/playwright-mcp-plus","version":"0.0.44","description":"Enhanced Playwright Tools for MCP with Project Session Isolation","type":"module","repository":{"type":"git","url":"git+https://github.com/ai-coding-labs/playwright-plus-mcp.git"},"homepage":"https://github.com/ai-coding-labs/playwright-plus-mcp","engines":{"node":">=18"},"author":{"name":"AI Coding Labs"},"license":"Apache-2.0","keywords":["playwright","mcp","model-context-protocol","browser-automation","project-isolation","session-management","chrome-extensions","extension-management","browser-extensions"],"scripts":{"build":"tsc","lint":"npm run update-readme && eslint . && tsc --noEmit","lint-fix":"eslint . --fix","update-readme":"node utils/update-readme.js","watch":"tsc --watch","test":"playwright test","ctest":"playwright test --project=chrome","ftest":"playwright test --project=firefox","wtest":"playwright test --project=webkit","run-server":"node lib/browserServer.js","clean":"rm -rf lib","npm-publish":"npm run clean && npm run build && npm publish"},"exports":{"./package.json":"./package.json",".":{"types":"./index.d.ts","default":"./index.js"}},"dependencies":{"@modelcontextprotocol/sdk":"^1.16.0","commander":"^13.1.0","crx-util":"^1.0.0","debug":"^4.4.1","dotenv":"^17.2.0","mime":"^4.0.7","playwright":"1.55.0-alpha-1753913825000","playwright-core":"1.55.0-alpha-1753913825000","ws":"^8.18.1","zod":"^3.24.1","zod-to-json-schema":"^3.24.4"},"devDependencies":{"@anthropic-ai/sdk":"^0.57.0","@eslint/eslintrc":"^3.2.0","@eslint/js":"^9.19.0","@playwright/test":"1.55.0-alpha-1753913825000","@stylistic/eslint-plugin":"^3.0.1","@types/debug":"^4.1.12","@types/node":"^22.13.10","@types/ws":"^8.18.1","@typescript-eslint/eslint-plugin":"^8.26.1","@typescript-eslint/parser":"^8.26.1","@typescript-eslint/utils":"^8.26.1","esbuild":"^0.20.1","eslint":"^9.19.0","eslint-plugin-import":"^2.31.0","eslint-plugin-notice":"^1.0.0","openai":"^5.10.2","typescript":"^5.8.2"},"bin":{"mcp-server-playwright":"cli.js"},"_id":"@ai-coding-labs/playwright-mcp-plus@0.0.44","gitHead":"5010e7cd10735d08f82e573010bf2e4c1fc17682","types":"./index.d.ts","bugs":{"url":"https://github.com/ai-coding-labs/playwright-plus-mcp/issues"},"_nodeVersion":"24.10.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-PO1qJTuxvnypH+qhwHFRteSJnDr8s9TAjpRGEPHGTeSgEU0zRjJg8WmdPr7VXcLfd8OsXtGi1eH17w5FbOCL3A==","shasum":"b12c7999ce45540d4ea01a9bccbac39ec0d11e6a","tarball":"https://registry.npmjs.org/@ai-coding-labs/playwright-mcp-plus/-/playwright-mcp-plus-0.0.44.tgz","fileCount":60,"unpackedSize":343588,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCHWxO+JHJmHMm0mg0N4NB9HeOjRgfiyFg+aFUcCZpnKgIgN27Tcq4i80iST3zm1I0h7o8/EWaEqKPwuOgWFdl84UI="}]},"_npmUser":{"name":"cc11001100","email":"CC11001100@QQ.COM"},"directories":{},"maintainers":[{"name":"cc11001100","email":"CC11001100@QQ.COM"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/playwright-mcp-plus_0.0.44_1761383362456_0.7870751937889819"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-31T18:19:39.808Z","modified":"2025-10-25T09:09:22.883Z","0.0.32":"2025-07-31T17:43:13.978Z","0.0.33":"2025-07-31T18:19:40.080Z","0.0.34":"2025-07-31T19:39:49.475Z","0.0.35":"2025-07-31T21:09:56.038Z","0.0.36":"2025-07-31T21:10:56.636Z","0.0.37":"2025-08-08T03:06:03.689Z","0.0.39":"2025-08-10T20:43:12.339Z","0.0.40":"2025-08-10T21:32:54.227Z","0.0.41":"2025-08-10T21:55:58.527Z","0.0.42":"2025-09-11T23:56:21.511Z","0.0.43":"2025-09-12T00:11:16.937Z","0.0.44":"2025-10-25T09:09:22.677Z"},"bugs":{"url":"https://github.com/ai-coding-labs/playwright-plus-mcp/issues"},"author":{"name":"AI Coding Labs"},"license":"Apache-2.0","homepage":"https://github.com/ai-coding-labs/playwright-plus-mcp","keywords":["playwright","mcp","model-context-protocol","browser-automation","project-isolation","session-management","chrome-extensions","extension-management","browser-extensions"],"repository":{"type":"git","url":"git+https://github.com/ai-coding-labs/playwright-plus-mcp.git"},"description":"Enhanced Playwright Tools for MCP with Project Session Isolation","maintainers":[{"name":"cc11001100","email":"CC11001100@QQ.COM"}],"readme":"<div align=\"center\">\n\n# Playwright MCP Plus\n\n**🌐 Language / 语言:** [English](README.md) | [中文](README.zh.md)\n\n</div>\n\n---\n\n### 🎭 看看区别！\n\n#### 😫 没有 Playwright Plus MCP\n> **单浏览器限制：** 一次只能运行一个浏览器自动化会话。会话冲突会破坏你的工作流程...\n\n**📹 演示视频：**\n\n[![修复前：持续重新登录的挫败感](docs/images/before-use-playwright-plus-mcp.gif)](https://github.com/ai-coding-labs/playwright-plus-mcp/raw/main/docs/images/before-use-playwright-plus-mcp.mp4)\n\n#### 🚀 使用 Playwright Plus MCP\n> **🎯 游戏规则改变者：同时打开多个浏览器进行并发自动化测试！**\n>\n> 体验**并行浏览器自动化**的强大力量 - 同时在不同项目中运行多个自动化测试，每个都有自己的持久会话！\n\n**📹 演示视频：**\n\n[![修复后：流畅的持久会话](docs/images/after-use-playwright-plus-mcp.gif)](https://github.com/ai-coding-labs/playwright-plus-mcp/raw/main/docs/images/after-use-playwright-plus-mcp.mp4)\n\n> **💡 注意：** 这些视频展示了革命性的差异 - 从单浏览器限制到**无限并发浏览器自动化**。\n\n**🔥 你刚刚见证的：**\n- 😫 **修复前：** 只能一个浏览器。打开新项目 = 会话被销毁。每次都要手动重新登录。\n- 🚀 **修复后：** **无限并发浏览器！** 同时打开 5、10、20+ 个浏览器自动化会话。每个项目都保持自己的持久状态。**真正的大规模并行自动化测试！**\n\n## Playwright MCP Plus\n\n一个**增强版**的模型上下文协议（MCP）服务器，使用 [Playwright](https://playwright.dev) 提供浏览器自动化功能。\n\n### 🎯 **核心创新：项目级会话隔离**\n\n**⚡ 我们解决的问题：**\n- **单浏览器瓶颈：** 常规 Playwright MCP = 一次只能运行一个浏览器自动化会话\n- 打开多个项目窗口会导致灾难性的会话冲突\n- 每个新的自动化任务都会**销毁之前的浏览器会话**\n- **自动化测试在规模化时变得不可能** - 你无法运行并行测试\n- 持续的重新认证会扼杀生产力并破坏 CI/CD 工作流程\n\n**🚀 我们的革命性解决方案：**\n**🎯 无限并发浏览器自动化** - 在不同项目中同时运行多个自动化测试，每个都有隔离的持久会话！\n\n**✨ 这为你解锁了什么：**\n- 🚀 **并发自动化测试** - 同时运行 10+ 个浏览器自动化会话而不冲突\n- 🔄 **再也不会丢失登录状态** - 每个项目都维护自己的认证会话\n- 🪟 **并行项目工作流** - 同时在多个项目中自动化测试\n- 🧪 **可扩展的测试自动化** - 你的测试套件并行运行，更快更可靠\n- 💾 **会话在 IDE 重启后持久保存** - 关闭并重新打开项目，所有会话仍然完好\n- 🎯 **零配置要求** - 开箱即用，具有智能默认设置\n\n### 🚀 增强功能（相比官方 Playwright MCP）\n\n这个增强版本保持与官方 Playwright MCP **100% 向后兼容**，同时解锁**无限并发浏览器自动化**：\n\n#### **🎯 并发自动化测试**\n- **🚀 无限并行浏览器**：同时运行多个浏览器自动化会话而不冲突\n- **⚡ 可扩展测试自动化**：在多个项目中并发执行自动化测试\n- **🔄 零会话干扰**：每个浏览器会话完全与其他会话隔离\n\n#### **🔒 项目会话隔离**\n- **🏗️ 自动项目检测**：每个项目都有自己的隔离浏览器会话\n- **💾 持久登录状态**：在 IDE 重启和窗口切换时保持登录状态\n- **🚪 不再重新认证**：你的自动化测试和工作流程不间断运行\n- **📁 清洁项目目录**：默认情况下项目文件夹中没有会话文件\n- **🌍 跨平台支持**：为 Windows、macOS、Linux 智能选择存储位置\n\n#### **🛠️ 多种存储策略**\n- `system`：存储在操作系统缓存目录（推荐，用户不可见）\n- `project`：存储在项目目录（传统行为）\n- `custom`：存储在自定义位置\n\n#### **⚙️ 配置参数**\n- `--project-isolation`：启用项目级会话隔离（默认：禁用）\n- `--project-isolation-session-strategy`：选择存储策略（默认：\"system\"）\n- `--project-isolation-session-root-dir`：会话存储的自定义根目录\n\n#### **✅ 相比官方版本的革命性优势**\n- 🚀 **无限并发浏览器**：同时运行多个浏览器自动化会话（相比单会话限制）\n- ⚡ **并行自动化测试**：同时在多个项目中执行自动化测试\n- ✅ **100% 向后兼容**：官方版本的直接替代品\n- ✅ **多项目工作流**：在多个项目上工作而不会话冲突\n- ✅ **持久认证**：会话之间永不丢失登录状态\n- ✅ **可扩展测试自动化**：消除重新登录开销并启用并行测试执行\n- ✅ **清洁工作空间**：默认情况下项目目录中没有会话文件\n- ✅ **无冲突**：使用官方 Playwright 路径结构避免冲突\n- ✅ **零维护**：自动清理和管理会话数据\n\n### 核心功能\n\n- **🚀 并发浏览器自动化**。运行无限并行浏览器会话进行可扩展的自动化测试。\n- **🧩 Chrome 扩展管理**。以编程方式安装、卸载和管理 Chrome 扩展，支持自动浏览器重启。\n- **快速轻量**。使用 Playwright 的可访问性树，而不是基于像素的输入。\n- **LLM 友好**。不需要视觉模型，纯粹基于结构化数据操作。\n- **确定性工具应用**。避免基于截图方法常见的歧义。\n- **🆕 项目级隔离**。每个项目都有独立的浏览器会话和智能存储管理。\n\n### 要求\n- Node.js 18 或更新版本\n- VS Code、Cursor、Windsurf、Claude Desktop、Goose 或任何其他 MCP 客户端\n\n### 开始使用\n\n首先，在你的客户端中安装 Playwright MCP 服务器。\n\n**标准配置**（与官方 Playwright MCP 100% 兼容）：\n\n```js\n{\n  \"mcpServers\": {\n    \"playwright-plus\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@ai-coding-labs/playwright-mcp-plus@latest\"\n      ]\n    }\n  }\n}\n```\n\n**增强配置**，带项目隔离（推荐）：\n\n```js\n{\n  \"mcpServers\": {\n    \"playwright-plus\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@ai-coding-labs/playwright-mcp-plus@latest\",\n        \"--project-isolation\"\n      ]\n    }\n  }\n}\n```\n\n**高级配置**，带自定义会话存储：\n\n```js\n{\n  \"mcpServers\": {\n    \"playwright-plus\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@ai-coding-labs/playwright-mcp-plus@latest\",\n        \"--project-isolation\",\n        \"--project-isolation-session-strategy=custom\",\n        \"--project-isolation-session-root-dir=/custom/session/path\"\n      ]\n    }\n  }\n}\n```\n\n**💡 多项目工作流专业提示：**\n\n一旦启用 `--project-isolation`，你的每个项目都会自动获得自己的浏览器会话。当你调用任何浏览器工具时，只需包含项目参数：\n\n```javascript\n// 每个项目自动获得隔离的会话\nbrowser_navigate({\n  url: \"https://yourapp.com\",\n  projectDrive: \"/\",                    // macOS/Linux: \"/\"，Windows: \"C:\"\n  projectPath: \"/path/to/your/project\"  // 项目目录的绝对路径\n})\n```\n\n这确保你的登录状态、cookies 和浏览器数据在不同项目之间永不干扰！\n\n### 🎬 真实世界使用场景\n\n**修复前（官方 Playwright MCP）：**\n```bash\n# 在项目 A 上工作 - 登录管理面板\nbrowser_navigate(\"https://myapp-staging.com/admin\")\n# 用凭据登录，做一些测试...\n\n# 切换到项目 B 窗口 - 会话丢失！😱\nbrowser_navigate(\"https://different-app.com/dashboard\")\n# 项目 A 的所有登录状态都消失了，必须重新登录\n\n# 切换回项目 A - 登录又丢失了！😱\n# 每次都必须重新认证\n```\n\n**修复后（带项目隔离）：**\n```bash\n# 项目 A - 登录一次，永远保持登录\nbrowser_navigate({\n  url: \"https://myapp-staging.com/admin\",\n  projectDrive: \"/\",\n  projectPath: \"/Users/you/projects/project-a\"\n})\n\n# 项目 B - 完全独立的会话\nbrowser_navigate({\n  url: \"https://different-app.com/dashboard\",\n  projectDrive: \"/\",\n  projectPath: \"/Users/you/projects/project-b\"\n})\n\n# 切换回项目 A - 仍然登录！✨\n# 无需重新认证，会话完美保存\n```\n\n**结果：** 你的自动化测试运行速度提高 10 倍，开发工作流程不被中断，你可以同时在多个项目上工作而不会丢失认证状态。\n\n### 🧩 Chrome 扩展管理\n\nPlaywright MCP Plus 包含强大的 Chrome 扩展管理功能，允许你以编程方式安装、卸载和管理 Chrome 扩展，并支持自动浏览器重启以立即生效。\n\n**核心功能：**\n- **🚀 一键安装**：直接从 Chrome 网上应用店 URL 或扩展 ID 安装扩展\n- **🔄 自动浏览器重启**：安装后扩展立即可用\n- **🗑️ 干净卸载**：完全移除扩展并自动清理\n- **📋 扩展注册表**：跟踪所有已安装扩展的详细信息\n- **🏠 本地管理**：扩展存储在本地 `~/.mcp-extensions/` 目录中\n\n**使用示例：**\n\n```javascript\n// 通过 URL 安装扩展并立即加载\nbrowser_extension_install({\n  extensionUrl: \"https://chromewebstore.google.com/detail/json-formatter/bcjindcccaagfpapjjmafapmmgkkhgoa\",\n  loadImmediately: true,\n  projectDrive: \"/\",\n  projectPath: \"/path/to/your/project\"\n})\n\n// 通过 ID 安装扩展\nbrowser_extension_install({\n  extensionId: \"chklaanhfefbnpoihckbnefhakgolnmc\",\n  loadImmediately: true\n})\n\n// 列出所有已安装的扩展\nbrowser_extension_list()\n\n// 卸载扩展并立即生效\nbrowser_extension_uninstall({\n  extensionId: \"bcjindcccaagfpapjjmafapmmgkkhgoa\",\n  restartImmediately: true\n})\n```\n\n**完美适用于：**\n- **🧪 自动化测试**：为测试套件安装测试扩展\n- **🛠️ 开发工作流**：快速设置带有所需扩展的开发环境\n- **🔧 CI/CD 流水线**：在自动化工作流中以编程方式管理浏览器扩展\n- **📊 网页抓取**：安装增强数据提取能力的扩展\n\n[<img src=\"https://img.shields.io/badge/VS_Code-VS_Code?style=flat-square&label=Install%20Server&color=0098FF\" alt=\"在 VS Code 中安装\">](https://insiders.vscode.dev/redirect?url=vscode%3Amcp%2Finstall%3F%257B%2522name%2522%253A%2522playwright%2522%252C%2522command%2522%253A%2522npx%2522%252C%2522args%2522%253A%255B%2522%2540playwright%252Fmcp%2540latest%2522%255D%257D) [<img alt=\"在 VS Code Insiders 中安装\" src=\"https://img.shields.io/badge/VS_Code_Insiders-VS_Code_Insiders?style=flat-square&label=Install%20Server&color=24bfa5\">](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Amcp%2Finstall%3F%257B%2522name%2522%253A%2522playwright%2522%252C%2522command%2522%253A%2522npx%2522%252C%2522args%2522%253A%255B%2522%2540playwright%252Fmcp%2540latest%2522%255D%257D)\n\n<details>\n<summary>Claude Code</summary>\n\n使用 Claude Code CLI 添加增强版 Playwright MCP 服务器：\n\n**标准版本：**\n```bash\nclaude mcp add playwright-plus npx -y @ai-coding-labs/playwright-mcp-plus@latest\n```\n\n**带项目隔离（推荐）：**\n```bash\nclaude mcp add playwright-plus npx -y @ai-coding-labs/playwright-mcp-plus@latest --project-isolation\n```\n</details>\n\n<details>\n<summary>Claude Desktop</summary>\n\n按照 MCP 安装[指南](https://modelcontextprotocol.io/quickstart/user)，使用上面的标准配置。\n\n</details>\n\n<details>\n<summary>Cursor</summary>\n\n#### 点击按钮安装：\n\n[![安装 MCP 服务器](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/install-mcp?name=playwright-plus&config=eyJjb21tYW5kIjoibnB4IEBwbGF5d3JpZ2h0L21jcEBsYXRlc3QifQ%3D%3D)\n\n#### 或手动安装：\n\n转到 `Cursor Settings` -> `MCP` -> `Add new MCP Server`。随意命名，使用 `command` 类型，命令为 `npx -y @ai-coding-labs/playwright-mcp-plus --project-isolation`。你也可以通过点击 `Edit` 验证配置或添加命令参数。\n\n</details>\n\n<details>\n<summary>Gemini CLI</summary>\n\n按照 MCP 安装[指南](https://github.com/google-gemini/gemini-cli/blob/main/docs/tools/mcp-server.md#configure-the-mcp-server-in-settingsjson)，使用上面的标准配置。\n\n</details>\n\n<details>\n<summary>Goose</summary>\n\n#### 点击按钮安装：\n\n[![在 Goose 中安装](https://block.github.io/goose/img/extension-install-dark.svg)](https://block.github.io/goose/extension?cmd=npx&arg=%40playwright%2Fmcp%40latest&id=playwright-plus&name=Playwright&description=Interact%20with%20web%20pages%20through%20structured%20accessibility%20snapshots%20using%20Playwright)\n\n#### 或手动安装：\n\n转到 `Advanced settings` -> `Extensions` -> `Add custom extension`。随意命名，使用类型 `STDIO`，将 `command` 设置为 `npx -y @ai-coding-labs/playwright-mcp-plus --project-isolation`。点击 \"Add Extension\"。\n</details>\n\n<details>\n<summary>LM Studio</summary>\n\n#### 点击按钮安装：\n\n[![将 MCP 服务器 playwright-plus 添加到 LM Studio](https://files.lmstudio.ai/deeplink/mcp-install-light.svg)](https://lmstudio.ai/install-mcp?name=playwright-plus&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyJAcGxheXdyaWdodC9tY3BAbGF0ZXN0Il19)\n\n#### 或手动安装：\n\n转到右侧边栏的 `Program` -> `Install` -> `Edit mcp.json`。使用上面的标准配置。\n</details>\n\n<details>\n<summary>Qodo Gen</summary>\n\n在 VSCode 或 IntelliJ 中打开 [Qodo Gen](https://docs.qodo.ai/qodo-documentation/qodo-gen) 聊天面板 → Connect more tools → + Add new MCP → 粘贴上面的标准配置。\n\n点击 <code>Save</code>。\n</details>\n\n<details>\n<summary>VS Code</summary>\n\n#### 点击按钮安装：\n\n[<img src=\"https://img.shields.io/badge/VS_Code-VS_Code?style=flat-square&label=Install%20Server&color=0098FF\" alt=\"在 VS Code 中安装\">](https://insiders.vscode.dev/redirect?url=vscode%3Amcp%2Finstall%3F%257B%2522name%2522%253A%2522playwright%2522%252C%2522command%2522%253A%2522npx%2522%252C%2522args%2522%253A%255B%2522%2540playwright%252Fmcp%2540latest%2522%255D%257D) [<img alt=\"在 VS Code Insiders 中安装\" src=\"https://img.shields.io/badge/VS_Code_Insiders-VS_Code_Insiders?style=flat-square&label=Install%20Server&color=24bfa5\">](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Amcp%2Finstall%3F%257B%2522name%2522%253A%2522playwright%2522%252C%2522command%2522%253A%2522npx%2522%252C%2522args%2522%253A%255B%2522%2540playwright%252Fmcp%2540latest%2522%255D%257D)\n\n#### 或手动安装：\n\n按照 MCP 安装[指南](https://code.visualstudio.com/docs/copilot/chat/mcp-servers#_add-an-mcp-server)，使用上面的标准配置。你也可以使用 VS Code CLI 安装 Playwright MCP 服务器：\n\n```bash\n# 对于 VS Code\ncode --add-mcp '{\"name\":\"playwright-plus\",\"command\":\"npx\",\"args\":[\"-y\",\"@ai-coding-labs/playwright-mcp-plus@latest\",\"--project-isolation\"]}'\n```\n\n安装后，Playwright MCP 服务器将可用于 VS Code 中的 GitHub Copilot 代理。\n</details>\n\n<details>\n<summary>Windsurf</summary>\n\n按照 Windsurf MCP [文档](https://docs.windsurf.com/windsurf/cascade/mcp)。使用上面的标准配置。\n\n</details>\n\n### 配置\n\nPlaywright MCP 服务器支持以下参数。它们可以在上面的 JSON 配置中作为 `\"args\"` 列表的一部分提供：\n\n<!--- 由 update-readme.js 生成的选项 -->\n\n```\n> npx @ai-coding-labs/playwright-mcp-plus@latest --help\n  --allowed-origins <origins>                      允许浏览器请求的源的分号分隔列表。默认允许所有。\n  --blocked-origins <origins>                      阻止浏览器请求的源的分号分隔列表。阻止列表在允许列表之前评估。如果在没有允许列表的情况下使用，不匹配阻止列表的请求仍然被允许。\n  --block-service-workers                          阻止 service workers\n  --browser <browser>                              要使用的浏览器或 chrome 频道，可能的值：chrome、firefox、webkit、msedge。\n  --caps <caps>                                    要启用的附加功能的逗号分隔列表，可能的值：vision、pdf。\n  --cdp-endpoint <endpoint>                        要连接的 CDP 端点。\n  --config <path>                                  配置文件的路径。\n  --device <device>                                要模拟的设备，例如：\"iPhone 15\"\n  --executable-path <path>                         浏览器可执行文件的路径。\n  --headless                                       在无头模式下运行浏览器，默认有头\n  --host <host>                                    绑定服务器的主机。默认是 localhost。使用 0.0.0.0 绑定到所有接口。\n  --ignore-https-errors                            忽略 https 错误\n  --isolated                                       将浏览器配置文件保存在内存中，不保存到磁盘。\n  --image-responses <mode>                         是否向客户端发送图像响应。可以是 \"allow\" 或 \"omit\"，默认为 \"allow\"。\n  --no-sandbox                                     为通常沙盒化的所有进程类型禁用沙盒。\n  --output-dir <path>                              输出文件目录的路径。\n  --port <port>                                    SSE 传输监听的端口。\n  --project-isolation                              使用来自 MCP 上下文的项目路径启用项目级会话隔离。\n  --project-isolation-session-strategy <strategy>  项目隔离的会话目录策略：system、project、custom。默认为 \"system\"。(default: \"system\")\n  --project-isolation-session-root-dir <path>      使用项目隔离时会话存储的自定义根目录（仅在 --project-isolation-session-strategy=custom 时使用）。\n  --proxy-bypass <bypass>                          绕过代理的逗号分隔域，例如 \".com,chromium.org,.domain.com\"\n  --proxy-server <proxy>                           指定代理服务器，例如 \"http://myproxy:3128\" 或 \"socks5://myproxy:8080\"\n  --save-session                                   是否将 Playwright MCP 会话保存到输出目录。\n  --save-trace                                     是否将会话的 Playwright Trace 保存到输出目录。\n  --storage-state <path>                           隔离会话的存储状态文件路径。\n  --user-agent <ua string>                         指定用户代理字符串\n  --user-data-dir <path>                           用户数据目录的路径。如果未指定，将创建临时目录。\n  --viewport-size <size>                           指定浏览器视口大小（像素），例如 \"1280, 720\"\n```\n\n<!--- 选项生成部分结束 -->\n\n### 用户配置文件\n\n你可以像常规浏览器一样使用持久配置文件运行 Playwright MCP（默认），或在隔离上下文中进行测试会话。\n\n**持久配置文件**\n\n所有登录信息都将存储在持久配置文件中，如果你想清除离线状态，可以在会话之间删除它。\n持久配置文件位于以下位置，你可以使用 `--user-data-dir` 参数覆盖它。\n\n```bash\n# Windows\n%USERPROFILE%\\AppData\\Local\\ms-playwright\\mcp-{channel}-profile\n\n# macOS\n- ~/Library/Caches/ms-playwright/mcp-{channel}-profile\n\n# Linux\n- ~/.cache/ms-playwright/mcp-{channel}-profile\n```\n\n**隔离**\n\n在隔离模式下，每个会话都在隔离配置文件中启动。每次你要求 MCP 关闭浏览器时，\n会话都会关闭，此会话的所有存储状态都会丢失。你可以通过配置的 `contextOptions` 或通过 `--storage-state` 参数向浏览器提供初始存储状态。在[这里](https://playwright.dev/docs/auth)了解更多关于存储状态的信息。\n\n```js\n{\n  \"mcpServers\": {\n    \"playwright-plus\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"@ai-coding-labs/playwright-mcp-plus@latest\",\n        \"--isolated\",\n        \"--storage-state={path/to/storage.json}\"\n      ]\n    }\n  }\n}\n```\n\n### 🔒 项目隔离（增强功能）\n\n**项目隔离**允许每个项目维护自己独立的浏览器会话，具有独立的登录状态、cookies 和 localStorage。这可以防止跨项目干扰，同时保持工作空间清洁。\n\n#### **默认行为（向后兼容）**\n没有任何隔离标志时，会话在所有项目之间共享（与官方 Playwright MCP 相同）：\n\n```js\n{\n  \"mcpServers\": {\n    \"playwright-plus\": {\n      \"command\": \"npx\",\n      \"args\": [\"@ai-coding-labs/playwright-mcp-plus@latest\"]\n    }\n  }\n}\n```\n\n#### **推荐：系统策略（零配置）**\n启用项目隔离，会话存储在操作系统缓存目录中（对用户不可见）：\n\n```js\n{\n  \"mcpServers\": {\n    \"playwright-plus\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"@ai-coding-labs/playwright-mcp-plus@latest\",\n        \"--project-isolation\"\n      ]\n    }\n  }\n}\n```\n\n**按操作系统的存储位置：**\n- **Windows:** `%LOCALAPPDATA%/ms-playwright/mcp-chrome-profile/playwright-plus-mcp/project-hash/`\n- **macOS:** `~/Library/Caches/ms-playwright/mcp-chrome-profile/playwright-plus-mcp/project-hash/`\n- **Linux:** `~/.cache/ms-playwright/mcp-chrome-profile/playwright-plus-mcp/project-hash/`\n\n#### **项目策略**\n在项目目录中存储会话（创建 `.user-session-data-directory/`）：\n\n```js\n{\n  \"mcpServers\": {\n    \"playwright-plus\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"@ai-coding-labs/playwright-mcp-plus@latest\",\n        \"--project-isolation\",\n        \"--project-isolation-session-strategy=project\"\n      ]\n    }\n  }\n}\n```\n\n#### **自定义策略**\n在自定义位置存储会话：\n\n```js\n{\n  \"mcpServers\": {\n    \"playwright-plus\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"@ai-coding-labs/playwright-mcp-plus@latest\",\n        \"--project-isolation\",\n        \"--project-isolation-session-strategy=custom\",\n        \"--project-isolation-session-root-dir=/custom/sessions\"\n      ]\n    }\n  }\n}\n```\n\n#### **策略比较**\n\n| 配置 | 会话位置 | 项目目录 | 用户可见性 | 使用场景 |\n|------|----------|----------|------------|----------|\n| **无隔离**（默认） | 共享缓存 | 清洁 | 隐藏 | 向后兼容 |\n| **系统**（隔离默认） | 操作系统缓存目录 | 清洁 | 隐藏 | 最佳用户体验 |\n| **项目** | `.user-session-data-directory/` | 有会话文件 | 可见 | 传统/调试 |\n| **自定义** | 自定义路径 | 清洁 | 隐藏 | 高级设置 |\n\n### 配置文件\n\nPlaywright MCP 服务器可以使用 JSON 配置文件进行配置。你可以使用 `--config` 命令行选项指定配置文件：\n\n```bash\nnpx @ai-coding-labs/playwright-mcp-plus@latest --config path/to/config.json\n```\n\n<details>\n<summary>配置文件架构</summary>\n\n```typescript\n{\n  // 浏览器配置\n  browser?: {\n    // 要使用的浏览器类型（chromium、firefox 或 webkit）\n    browserName?: 'chromium' | 'firefox' | 'webkit';\n\n    // 将浏览器配置文件保存在内存中，不保存到磁盘。\n    isolated?: boolean;\n\n    // 浏览器配置文件持久化的用户数据目录路径\n    userDataDir?: string;\n\n    // 浏览器启动选项（参见 Playwright 文档）\n    // @see https://playwright.dev/docs/api/class-browsertype#browser-type-launch\n    launchOptions?: {\n      channel?: string;        // 浏览器频道（例如 'chrome'）\n      headless?: boolean;      // 在无头模式下运行\n      executablePath?: string; // 浏览器可执行文件路径\n      // ... 其他 Playwright 启动选项\n    };\n\n    // 浏览器上下文选项\n    // @see https://playwright.dev/docs/api/class-browser#browser-new-context\n    contextOptions?: {\n      viewport?: { width: number, height: number };\n      // ... 其他 Playwright 上下文选项\n    };\n\n    // 用于连接到现有浏览器的 CDP 端点\n    cdpEndpoint?: string;\n\n    // 远程 Playwright 服务器端点\n    remoteEndpoint?: string;\n  },\n\n  // 服务器配置\n  server?: {\n    port?: number;  // 监听端口\n    host?: string;  // 绑定主机（默认：localhost）\n  },\n\n  // 附加功能列表\n  capabilities?: Array<\n    'tabs' |    // 标签管理\n    'install' | // 浏览器安装\n    'pdf' |     // PDF 生成\n    'vision' |  // 基于坐标的交互\n  >;\n\n  // 输出文件目录\n  outputDir?: string;\n\n  // 网络配置\n  network?: {\n    // 允许浏览器请求的源列表。默认允许所有。同时匹配 `allowedOrigins` 和 `blockedOrigins` 的源将被阻止。\n    allowedOrigins?: string[];\n\n    // 阻止浏览器请求的源列表。同时匹配 `allowedOrigins` 和 `blockedOrigins` 的源将被阻止。\n    blockedOrigins?: string[];\n  };\n\n  /**\n   * 是否向客户端发送图像响应。可以是 \"allow\" 或 \"omit\"。\n   * 默认为 \"allow\"。\n   */\n  imageResponses?: 'allow' | 'omit';\n\n  /**\n   * 使用来自 MCP 上下文的项目路径启用项目级会话隔离。\n   * 启用时，每个项目都有自己的隔离浏览器会话。\n   * 默认为 false（共享会话，与官方 Playwright MCP 兼容）。\n   */\n  projectIsolation?: boolean;\n\n  /**\n   * 项目隔离的会话目录存储策略。\n   * 仅在启用 projectIsolation 时使用。\n   * - 'system'：存储在操作系统缓存目录（推荐，用户不可见）\n   * - 'project'：存储在项目目录（传统行为）\n   * - 'custom'：存储在 projectIsolationSessionRootDir 指定的自定义位置\n   * 默认为 \"system\"。\n   */\n  projectIsolationSessionStrategy?: 'system' | 'project' | 'custom';\n\n  /**\n   * 使用项目隔离时会话存储的自定义根目录。\n   * 仅在 projectIsolationSessionStrategy 为 'custom' 时使用。\n   * 示例：\"/custom/session/storage/path\"\n   */\n  projectIsolationSessionRootDir?: string;\n}\n```\n</details>\n\n### 独立 MCP 服务器\n\n在没有显示器的系统上运行有头浏览器或从 IDE 的工作进程运行时，\n从具有 DISPLAY 的环境运行 MCP 服务器并传递 `--port` 标志以启用 HTTP 传输。\n\n```bash\nnpx @ai-coding-labs/playwright-mcp-plus@latest --port 8931\n```\n\n然后在 MCP 客户端配置中，将 `url` 设置为 HTTP 端点：\n\n```js\n{\n  \"mcpServers\": {\n    \"playwright-plus\": {\n      \"url\": \"http://localhost:8931/mcp\"\n    }\n  }\n}\n```\n\n<details>\n<summary><b>Docker</b></summary>\n\n**注意：** Docker 实现目前仅支持无头 chromium。\n\n```js\n{\n  \"mcpServers\": {\n    \"playwright-plus\": {\n      \"command\": \"docker\",\n      \"args\": [\"run\", \"-i\", \"--rm\", \"--init\", \"--pull=always\", \"mcr.microsoft.com/playwright/mcp\"]\n    }\n  }\n}\n```\n\n你可以自己构建 Docker 镜像。\n\n```\ndocker build -t mcr.microsoft.com/playwright/mcp .\n```\n</details>\n\n<details>\n<summary><b>编程使用</b></summary>\n\n```js\nimport http from 'http';\n\nimport { createConnection } from '@ai-coding-labs/playwright-mcp-plus';\nimport { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';\n\nhttp.createServer(async (req, res) => {\n  // ...\n\n  // 创建带有 SSE 传输的无头 Playwright MCP 服务器\n  const connection = await createConnection({ browser: { launchOptions: { headless: true } } });\n  const transport = new SSEServerTransport('/messages', res);\n  await connection.sever.connect(transport);\n\n  // ...\n});\n```\n</details>\n\n### 工具\n\n<!--- 由 update-readme.js 生成的工具 -->\n\n<details>\n<summary><b>核心自动化</b></summary>\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_click**\n  - 标题：点击\n  - 描述：在网页上执行点击操作\n  - 参数：\n    - `element` (string)：用于获得与元素交互权限的人类可读元素描述\n    - `ref` (string)：来自页面快照的确切目标元素引用\n    - `doubleClick` (boolean, 可选)：是否执行双击而不是单击\n    - `button` (string, 可选)：要点击的按钮，默认为左键\n  - 只读：**false**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_close**\n  - 标题：关闭浏览器\n  - 描述：关闭页面\n  - 参数：\n    - `projectDrive` (string, 可选)：用于会话隔离的项目驱动器字母或根目录（例如，\"C:\"，\"/\"）\n    - `projectPath` (string, 可选)：用于会话隔离的项目根目录的绝对路径\n  - 只读：**true**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_console_messages**\n  - 标题：获取控制台消息\n  - 描述：返回所有控制台消息\n  - 参数：无\n  - 只读：**true**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_drag**\n  - 标题：拖拽鼠标\n  - 描述：在两个元素之间执行拖放操作\n  - 参数：\n    - `startElement` (string)：用于获得与元素交互权限的人类可读源元素描述\n    - `startRef` (string)：来自页面快照的确切源元素引用\n    - `endElement` (string)：用于获得与元素交互权限的人类可读目标元素描述\n    - `endRef` (string)：来自页面快照的确切目标元素引用\n  - 只读：**false**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_evaluate**\n  - 标题：执行 JavaScript\n  - 描述：在页面或元素上执行 JavaScript 表达式\n  - 参数：\n    - `function` (string)：() => { /* 代码 */ } 或当提供元素时 (element) => { /* 代码 */ }\n    - `element` (string, 可选)：用于获得与元素交互权限的人类可读元素描述\n    - `ref` (string, 可选)：来自页面快照的确切目标元素引用\n  - 只读：**false**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_file_upload**\n  - 标题：上传文件\n  - 描述：上传一个或多个文件\n  - 参数：\n    - `paths` (array)：要上传的文件的绝对路径。可以是单个文件或多个文件。\n  - 只读：**false**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_handle_dialog**\n  - 标题：处理对话框\n  - 描述：处理对话框\n  - 参数：\n    - `accept` (boolean)：是否接受对话框。\n    - `promptText` (string, 可选)：在提示对话框情况下的提示文本。\n  - 只读：**false**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_hover**\n  - 标题：悬停鼠标\n  - 描述：在页面上悬停在元素上\n  - 参数：\n    - `element` (string)：用于获得与元素交互权限的人类可读元素描述\n    - `ref` (string)：来自页面快照的确切目标元素引用\n  - 只读：**true**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_navigate**\n  - 标题：导航到 URL\n  - 描述：导航到 URL\n  - 参数：\n    - `url` (string)：要导航到的 URL\n    - `projectDrive` (string, 可选)：用于会话隔离的项目驱动器字母或根目录（例如，\"C:\"，\"/\"）\n    - `projectPath` (string, 可选)：用于会话隔离的项目根目录的绝对路径\n  - 只读：**false**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_navigate_back**\n  - 标题：后退\n  - 描述：返回到上一页\n  - 参数：无\n  - 只读：**true**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_navigate_forward**\n  - 标题：前进\n  - 描述：前进到下一页\n  - 参数：无\n  - 只读：**true**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_network_requests**\n  - 标题：列出网络请求\n  - 描述：返回自加载页面以来的所有网络请求\n  - 参数：无\n  - 只读：**true**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_press_key**\n  - 标题：按键\n  - 描述：在键盘上按键\n  - 参数：\n    - `key` (string)：要按的键的名称或要生成的字符，例如 `ArrowLeft` 或 `a`\n  - 只读：**false**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_resize**\n  - 标题：调整浏览器窗口大小\n  - 描述：调整浏览器窗口大小\n  - 参数：\n    - `width` (number)：浏览器窗口的宽度\n    - `height` (number)：浏览器窗口的高度\n  - 只读：**true**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_select_option**\n  - 标题：选择选项\n  - 描述：在下拉菜单中选择选项\n  - 参数：\n    - `element` (string)：用于获得与元素交互权限的人类可读元素描述\n    - `ref` (string)：来自页面快照的确切目标元素引用\n    - `values` (array)：在下拉菜单中选择的值数组。可以是单个值或多个值。\n  - 只读：**false**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_snapshot**\n  - 标题：页面快照\n  - 描述：捕获当前页面的可访问性快照，这比截图更好\n  - 参数：\n    - `projectDrive` (string, 可选)：用于会话隔离的项目驱动器字母或根目录（例如，\"C:\"，\"/\"）\n    - `projectPath` (string, 可选)：用于会话隔离的项目根目录的绝对路径\n  - 只读：**true**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_take_screenshot**\n  - 标题：截图\n  - 描述：对当前页面进行截图。你不能基于截图执行操作，请使用 browser_snapshot 进行操作。\n  - 参数：\n    - `type` (string, 可选)：截图的图像格式。默认为 png。\n    - `filename` (string, 可选)：保存截图的文件名。如果未指定，默认为 `page-{timestamp}.{png|jpeg}`。\n    - `element` (string, 可选)：用于获得截图元素权限的人类可读元素描述。如果未提供，将截取视口。如果提供了 element，也必须提供 ref。\n    - `ref` (string, 可选)：来自页面快照的确切目标元素引用。如果未提供，将截取视口。如果提供了 ref，也必须提供 element。\n    - `fullPage` (boolean, 可选)：当为 true 时，截取完整可滚动页面的截图，而不是当前可见的视口。不能与元素截图一起使用。\n  - 只读：**true**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_type**\n  - 标题：输入文本\n  - 描述：在可编辑元素中输入文本\n  - 参数：\n    - `element` (string)：用于获得与元素交互权限的人类可读元素描述\n    - `ref` (string)：来自页面快照的确切目标元素引用\n    - `text` (string)：要输入到元素中的文本\n    - `submit` (boolean, 可选)：是否提交输入的文本（之后按 Enter）\n    - `slowly` (boolean, 可选)：是否一次输入一个字符。对于触发页面中的键处理程序很有用。默认情况下，整个文本一次性填入。\n  - 只读：**false**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_wait_for**\n  - 标题：等待\n  - 描述：等待文本出现或消失或指定时间过去\n  - 参数：\n    - `time` (number, 可选)：等待的时间（秒）\n    - `text` (string, 可选)：要等待的文本\n    - `textGone` (string, 可选)：要等待消失的文本\n    - `projectDrive` (string, 可选)：用于会话隔离的项目驱动器字母或根目录（例如，\"C:\"，\"/\"）\n    - `projectPath` (string, 可选)：用于会话隔离的项目根目录的绝对路径\n  - 只读：**true**\n\n</details>\n\n<details>\n<summary><b>标签管理</b></summary>\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_tab_close**\n  - 标题：关闭标签\n  - 描述：关闭标签\n  - 参数：\n    - `index` (number, 可选)：要关闭的标签的索引。如果未提供，则关闭当前标签。\n  - 只读：**false**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_tab_list**\n  - 标题：列出标签\n  - 描述：列出浏览器标签\n  - 参数：\n    - `projectDrive` (string, 可选)：用于会话隔离的项目驱动器字母或根目录（例如，\"C:\"，\"/\"）\n    - `projectPath` (string, 可选)：用于会话隔离的项目根目录的绝对路径\n  - 只读：**true**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_tab_new**\n  - 标题：打开新标签\n  - 描述：打开新标签\n  - 参数：\n    - `url` (string, 可选)：在新标签中导航到的 URL。如果未提供，新标签将为空白。\n    - `projectDrive` (string, 可选)：用于会话隔离的项目驱动器字母或根目录（例如，\"C:\"，\"/\"）\n    - `projectPath` (string, 可选)：用于会话隔离的项目根目录的绝对路径\n  - 只读：**true**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_tab_select**\n  - 标题：选择标签\n  - 描述：按索引选择标签\n  - 参数：\n    - `index` (number)：要选择的标签的索引\n  - 只读：**true**\n\n</details>\n\n<details>\n<summary><b>浏览器安装</b></summary>\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_install**\n  - 标题：安装配置中指定的浏览器\n  - 描述：安装配置中指定的浏览器。如果你收到关于浏览器未安装的错误，请调用此功能。\n  - 参数：\n    - `projectDrive` (string, 可选)：用于会话隔离的项目驱动器字母或根目录（例如，\"C:\"，\"/\"）\n    - `projectPath` (string, 可选)：用于会话隔离的项目根目录的绝对路径\n  - 只读：**false**\n\n</details>\n\n<details>\n<summary><b>基于坐标（通过 --caps=vision 选择加入）</b></summary>\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_mouse_click_xy**\n  - 标题：点击\n  - 描述：在给定位置点击鼠标左键\n  - 参数：\n    - `element` (string)：用于获得与元素交互权限的人类可读元素描述\n    - `x` (number)：X 坐标\n    - `y` (number)：Y 坐标\n  - 只读：**false**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_mouse_drag_xy**\n  - 标题：拖拽鼠标\n  - 描述：将鼠标左键拖拽到给定位置\n  - 参数：\n    - `element` (string)：用于获得与元素交互权限的人类可读元素描述\n    - `startX` (number)：起始 X 坐标\n    - `startY` (number)：起始 Y 坐标\n    - `endX` (number)：结束 X 坐标\n    - `endY` (number)：结束 Y 坐标\n  - 只读：**false**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_mouse_move_xy**\n  - 标题：移动鼠标\n  - 描述：将鼠标移动到给定位置\n  - 参数：\n    - `element` (string)：用于获得与元素交互权限的人类可读元素描述\n    - `x` (number)：X 坐标\n    - `y` (number)：Y 坐标\n  - 只读：**true**\n\n</details>\n\n<details>\n<summary><b>Chrome 扩展管理</b></summary>\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_extension_install**\n  - 标题：安装 Chrome 扩展\n  - 描述：通过下载并本地管理从 Chrome 网上应用店安装 Chrome 扩展\n  - 参数：\n    - `extensionId` (string, 可选)：Chrome 扩展 ID（例如，\"cjpalhdlnbpafiamejdnhcphjbkeiagm\"）\n    - `extensionUrl` (string, 可选)：扩展的完整 Chrome 网上应用店 URL\n    - `waitForInstall` (boolean, 可选)：是否等待安装完成（默认：true）\n    - `loadImmediately` (boolean, 可选)：是否重启浏览器以立即加载扩展（默认：true）\n    - `projectDrive` (string, 可选)：用于会话隔离的项目驱动器字母或根目录（例如，\"C:\"，\"/\"）\n    - `projectPath` (string, 可选)：用于会话隔离的项目根目录的绝对路径\n  - 只读：**false**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_extension_uninstall**\n  - 标题：卸载 Chrome 扩展\n  - 描述：从 MCP 管理中卸载 Chrome 扩展并重启浏览器\n  - 参数：\n    - `extensionId` (string)：要卸载的 Chrome 扩展 ID（例如，\"bcjindcccaagfpapjjmafapmmgkkhgoa\"）\n    - `restartImmediately` (boolean, 可选)：是否在卸载后立即重启浏览器（默认：true）\n    - `projectDrive` (string, 可选)：用于会话隔离的项目驱动器字母或根目录（例如，\"C:\"，\"/\"）\n    - `projectPath` (string, 可选)：用于会话隔离的项目根目录的绝对路径\n  - 只读：**false**\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_extension_list**\n  - 标题：列出已安装的扩展\n  - 描述：列出所有 MCP 管理的 Chrome 扩展\n  - 参数：\n    - `projectDrive` (string, 可选)：用于会话隔离的项目驱动器字母或根目录（例如，\"C:\"，\"/\"）\n    - `projectPath` (string, 可选)：用于会话隔离的项目根目录的绝对路径\n  - 只读：**true**\n\n</details>\n\n<details>\n<summary><b>PDF 生成（通过 --caps=pdf 选择加入）</b></summary>\n\n<!-- 注意：这是通过 update-readme.js 生成的 -->\n\n- **browser_pdf_save**\n  - 标题：保存为 PDF\n  - 描述：将页面保存为 PDF\n  - 参数：\n    - `filename` (string, 可选)：保存 PDF 的文件名。如果未指定，默认为 `page-{timestamp}.pdf`。\n  - 只读：**true**\n\n</details>\n\n\n<!--- 工具生成部分结束 -->\n\n### 配置文件\n\nPlaywright MCP 服务器可以使用 JSON 配置文件进行配置。你可以使用 `--config` 命令行选项指定配置文件：\n\n```bash\nnpx @ai-coding-labs/playwright-mcp-plus@latest --config path/to/config.json\n```\n\n<details>\n<summary>配置文件架构</summary>\n\n```typescript\n{\n  // 浏览器配置\n  browser?: {\n    // 要使用的浏览器类型（chromium、firefox 或 webkit）\n    browserName?: 'chromium' | 'firefox' | 'webkit';\n\n    // 将浏览器配置文件保存在内存中，不保存到磁盘。\n    isolated?: boolean;\n\n    // 浏览器配置文件持久化的用户数据目录路径\n    userDataDir?: string;\n\n    // 浏览器启动选项（参见 Playwright 文档）\n    // @see https://playwright.dev/docs/api/class-browsertype#browser-type-launch\n    launchOptions?: {\n      channel?: string;        // 浏览器频道（例如 'chrome'）\n      headless?: boolean;      // 在无头模式下运行\n      executablePath?: string; // 浏览器可执行文件路径\n      // ... 其他 Playwright 启动选项\n    };\n\n    // 浏览器上下文选项\n    // @see https://playwright.dev/docs/api/class-browser#browser-new-context\n    contextOptions?: {\n      viewport?: { width: number, height: number };\n      // ... 其他 Playwright 上下文选项\n    };\n\n    // 用于连接到现有浏览器的 CDP 端点\n    cdpEndpoint?: string;\n\n    // 远程 Playwright 服务器端点\n    remoteEndpoint?: string;\n  },\n\n  // 服务器配置\n  server?: {\n    port?: number;  // 监听端口\n    host?: string;  // 绑定主机（默认：localhost）\n  },\n\n  // 附加功能列表\n  capabilities?: Array<\n    'tabs' |    // 标签管理\n    'install' | // 浏览器安装\n    'pdf' |     // PDF 生成\n    'vision' |  // 基于坐标的交互\n  >;\n\n  // 输出文件目录\n  outputDir?: string;\n\n  // 网络配置\n  network?: {\n    // 允许浏览器请求的源列表。默认允许所有。同时匹配 `allowedOrigins` 和 `blockedOrigins` 的源将被阻止。\n    allowedOrigins?: string[];\n\n    // 阻止浏览器请求的源列表。同时匹配 `allowedOrigins` 和 `blockedOrigins` 的源将被阻止。\n    blockedOrigins?: string[];\n  };\n\n  /**\n   * 是否向客户端发送图像响应。可以是 \"allow\" 或 \"omit\"。\n   * 默认为 \"allow\"。\n   */\n  imageResponses?: 'allow' | 'omit';\n\n  /**\n   * 使用来自 MCP 上下文的项目路径启用项目级会话隔离。\n   * 启用时，每个项目都有自己的隔离浏览器会话。\n   * 默认为 false（共享会话，与官方 Playwright MCP 兼容）。\n   */\n  projectIsolation?: boolean;\n\n  /**\n   * 项目隔离的会话目录存储策略。\n   * 仅在启用 projectIsolation 时使用。\n   * - 'system'：存储在操作系统缓存目录（推荐，用户不可见）\n   * - 'project'：存储在项目目录（传统行为）\n   * - 'custom'：存储在 projectIsolationSessionRootDir 指定的自定义位置\n   * 默认为 \"system\"。\n   */\n  projectIsolationSessionStrategy?: 'system' | 'project' | 'custom';\n\n  /**\n   * 使用项目隔离时会话存储的自定义根目录。\n   * 仅在 projectIsolationSessionStrategy 为 'custom' 时使用。\n   * 示例：\"/custom/session/storage/path\"\n   */\n  projectIsolationSessionRootDir?: string;\n}\n```\n</details>\n\n### 独立 MCP 服务器\n\n在没有显示器的系统上运行有头浏览器或从 IDE 的工作进程运行时，\n从具有 DISPLAY 的环境运行 MCP 服务器并传递 `--port` 标志以启用 HTTP 传输。\n\n```bash\nnpx @ai-coding-labs/playwright-mcp-plus@latest --port 8931\n```\n\n然后在 MCP 客户端配置中，将 `url` 设置为 HTTP 端点：\n\n```js\n{\n  \"mcpServers\": {\n    \"playwright-plus\": {\n      \"url\": \"http://localhost:8931/mcp\"\n    }\n  }\n}\n```\n\n<details>\n<summary><b>Docker</b></summary>\n\n**注意：** Docker 实现目前仅支持无头 chromium。\n\n```js\n{\n  \"mcpServers\": {\n    \"playwright-plus\": {\n      \"command\": \"docker\",\n      \"args\": [\"run\", \"-i\", \"--rm\", \"--init\", \"--pull=always\", \"mcr.microsoft.com/playwright/mcp\"]\n    }\n  }\n}\n```\n\n你可以自己构建 Docker 镜像。\n\n```\ndocker build -t mcr.microsoft.com/playwright/mcp .\n```\n</details>\n\n<details>\n<summary><b>编程使用</b></summary>\n\n```js\nimport http from 'http';\n\nimport { createConnection } from '@ai-coding-labs/playwright-mcp-plus';\nimport { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';\n\nhttp.createServer(async (req, res) => {\n  // ...\n\n  // 创建带有 SSE 传输的无头 Playwright MCP 服务器\n  const connection = await createConnection({ browser: { launchOptions: { headless: true } } });\n  const transport = new SSEServerTransport('/messages', res);\n  await connection.sever.connect(transport);\n\n  // ...\n});\n```\n</details>\n","readmeFilename":"README.zh.md"}