关于 Playwright E2E MCP
Playwright E2E MCP 是为编码 Agent 提供的 Playwright 测试诊断与修复 MCP 服务,并附带 Agent skill。它会分析失败现场、提出修复并重新运行测试验证,还可检查 CI 报告、测试历史和不稳定用例。
主要功能
- 01运行 Playwright 测试并定位失败原因
- 02读取 CI 报告、Trace 和失败现场
- 03验证修复并在失败时撤销
- 04分析不稳定测试与运行历史
- 05审计测试并查找引入故障的提交
- 06检查可访问性与 Web Vitals
适用场景
- 01根据 Trace 诊断测试失败和应用错误
- 02修复定位器并重跑测试确认结果
- 03调查 CI 失败或定位回归提交
- 04识别不稳定测试并审查测试改动
MCP 相关
作为 MCP 服务和 Agent skill,它向兼容客户端提供 Playwright 测试运行、诊断、修复和审计工具。可通过本地命令配置接入多种 MCP 客户端;README 也提及面向远程客户端的 Streamable HTTP 桥接方案。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
playwright-e2e-mcp
AI Agent 的测试医生。
你的 Playwright 测试失败了。你的 AI 会查明原因、修复问题,并验证修复有效。
⭐ 如果它帮你省下了一次调试,点个星标,让更多 Playwright 用户发现它。
快速开始 · 工具 · 工具参考 · GitHub Action · 配置 · 更新日志 · 参与贡献
这是一个 MCP 服务和 Agent 技能,为你的 AI 助手 (Claude、Cursor、VS Code Copilot、Gemini、Codex)提供完整的 Playwright 工具包:测试运行器、 失败侦查工具和能检查自身工作结果的修复工具。其他工具让 AI 在浏览器里四处点击,而这个工具能让它保持你的测试套件全部通过。
❌ 没有它 / ✅ 有它
没有它,你的 Agent 看到 Timeout 5000ms exceeded waiting for getByTestId('checkout'),
就猜一个新选择器、修改测试,然后祈祷能成功。或者,它会围绕真实缺陷“修复”测试。
有了它,你的 Agent 会读取测试失败时的页面状态,换成一个已验证在该页面上唯一的定位器, 重新运行测试,并且只有测试通过才保留修改。如果按钮真的不见了,它会告诉你这是应用程序的缺陷。
run-test ──────┐
load-report ───┴─▶ get-failure ──▶ suggest-fix (apply + re-run) ──▶ green
(CI job report) │ └─ refuses when the element is really gone (app bug)
└─ DOM at failure, failed requests, console errors
every run ──▶ analyze-history (flaky / broken / slow / which commit broke it)
test code ──▶ audit-tests (flake risks, ranked by history, verified rewrites)
red at HEAD ─▶ bisect-failure (runs it across git history, names the breaking commit)
主要功能
- 修复有验证,不靠猜测。 每次修复都会重新运行测试,通过后才保留;如果测试仍然失败,就会撤销修复。
- 诚实可靠。 不会掩盖真正的 Bug 来让测试通过。
- 也适用于 CI 失败。 加载 CI 作业的报告和跟踪记录,即可获得相同的诊断和修复。
- 有证据的脆弱性分析。 指出脆弱测试的名称、问题是竞态、共享状态还是测试顺序,以及能复现问题的种子值。
- 轻量。 使用
core工具集时,查找并修复失效定位器约耗费 5,500 个令牌;使用 Playwright MCP 加 shell 则约耗费 7,900 个令牌。全部 19 个工具的定义会为每个请求增加约 16k 个令牌,因此只加载你会用到的配置方案(参见基准测试)。 - 免费且开源。 采用 MIT 许可证,无需账户或 API 密钥,也不收集遥测数据。所有工具均免费;可选的付费 Pro 仅增加托管 CI 历史记录功能。
🚀 只有这个 MCP 能做到的事
大多数测试 MCP 都能让 AI 操控浏览器:Microsoft 的 Playwright MCP、Chrome DevTools MCP、 ExecuteAutomation 的 mcp-playwright 和 Selenium MCP。它们都很适合用来点击浏览页面。截至 2026 年 10 月,它们都无法做到以下这些事,而这个 MCP 可以:
| 能力 | 你将获得什么 |
|---|---|
| 🛡️ 防止“修复”降低检查力度 | check-test-change 会将更改后的测试与原测试进行对比,阻止通过删除断言、跳过测试或添加 .only 来让测试变绿的修复;对于较弱的匹配器、硬等待、强制点击和吞掉错误等情况则会发出警告。同样的检查也会通过 guard 在 CI 中运行 |
| 🧊 隔离并注明负责人和到期时间 | quarantine 会让脆弱测试继续运行并报告结果,同时让其失败不再阻止构建,并注明由谁修复、原因以及重新阻止构建的日期 |
| 🎯 找到导致测试失败的提交 | bisect-failure 会在你的 git 历史记录中运行测试,并使用不会影响当前检出内容的临时工作树,找出首个有问题的提交及其差异和失败信息 |
| 🧪 审查测试代码的脆弱性风险 | audit-tests 会查找硬等待、一次性断言、缺少 await 的情况和脆弱选择器。它会根据这些测试实际出现脆弱问题的频率进行排序,然后应用安全的重写并重新运行测试加以验证 |
| ✅ 能自证有效的修复 | suggest-fix 会换用在失败时的 DOM 中已验证为唯一的定位器,重新运行测试;若测试仍然失败,就会撤销修复。它不会掩盖应用中的真正 Bug |
| 🔬 附带证据的脆弱测试判定 | diagnose-flaky 会在关闭重试的情况下重复运行测试,判断问题来自竞态、共享状态还是测试顺序,并指出相关测试及能复现问题的种子值 |
| 📈 记录每次运行 | analyze-history 会对脆弱、回归和失败的测试进行排序,按原因归类失败,跟踪运行缓慢的测试,并指出每个测试首次出问题的提交 |
| 🏗️ 在本地诊断 CI 失败 | load-report 会加载 CI 作业的报告和跟踪记录(也支持分片),因此同样的诊断和经过验证的修复也适用于 CI 中的失败 |
| 💬 一键修复拉取请求 | GitHub Action 会在 CI 中验证每项修复,并将其作为建议更改发布,审查者可一键应用 |
| ♿⚡ 审查后提供可用测试 | 无障碍(axe-core)和 Web Vitals 审查会为每个问题返回经过验证的定位器,以及可直接使用的回归测试或预算测试 |
它与浏览器 MCP 配合使用,而不是取代后者:浏览器 MCP 操控页面,这个 MCP 则确保测试套件保持全绿。
可以让它做什么
| 你向 AI 提出请求…… | 它会…… | |
|---|---|---|
| 🏃 | “运行我的测试” | 运行测试套件,并报告每个失败项的文件、行号、原因和修复提示。一个根本原因导致 30 项测试失败时,只会显示为一个问题。 |
| 🔍 | “为什么会失败?” | 读取 Playwright 的跟踪记录:失败时的页面、出错的请求、控制台错误。不靠猜测。 |
| 🛠️ | “修复它” | 换用已确认在页面上唯一的定位器,重新运行测试;如果仍然失败,则撤销修改。如果按钮确实已消失,它会告诉你这是应用程序的 bug,而不是掩盖问题。 |
| 🎲 | “这个测试不稳定吗?” | 以多种方式重新运行它(重复运行、单独运行、随机顺序运行),并指出导致不稳定的具体测试和随机种子。 |
| 📈 | “最近有哪些问题?” | 保存本地运行历史,并区分不稳定、新近失败和始终失败的测试;显示最慢的测试、每日稳定性,以及每个测试开始出问题的提交。 |
| ☁️ | “CI 为什么失败?” | 加载 CI 任务的报告(或合并分片 Blob 报告),将报告中的路径映射到你的检出目录,并在下载的制品中查找跟踪记录,让你也能用同样的方式诊断和修复 CI 失败。 |
| ✍️ | “为这个流程编写测试” | 先在实时页面上逐步执行操作,再编写一个可重放这些操作的规范,并断言流程最终到达的位置(URL 和无障碍快照),然后运行一次以验证通过。 |
| ♿ | “检查这个页面的无障碍情况” | 运行 axe-core(WCAG 2.2 AA),并为每个问题提供可直接粘贴使用的定位器和回归测试。 |
| ⚡ | “这个页面为什么这么慢?” | 在桌面设备或限速手机上测量 Web Vitals(LCP、CLS、INP、TBT),指出缓慢元素和发生跳动的元素,并提供预算测试。 |
| 🧪 | “显示错误状态” | 模拟 API 响应(500 错误、空列表、缓慢调用),让 AI 检查、审计或测量难以触达的状态。 |
| 🔑 | “登录并保存会话” | 登录一次(密码来自环境变量,身份验证器代码由 TOTP 密钥生成),检查会话是否有效,并将其保存供测试和页面工具使用;会话过期前重复使用。密码绝不会经过聊天传递。 |
| 🛡️ | “这个修复是不是投机取巧?” | 将已更改的测试与 git 进行比较,并阻止通过删除断言或跳过测试来让测试通过的修复。 |
| 🧊 | “隔离这个不稳定的测试” | 继续运行并报告该测试,但不让它导致构建失败;同时设置负责人和到期日期。 |
| 🔐 | “测试登录后的页面” | 使用已保存的会话、请求头以及点击/填写步骤,在 Chromium、Firefox 或 WebKit 中测试登录后的页面;还可以从 HAR 文件记录或重放网络流量。 |
| 🤖 | “在 CI 中运行” | GitHub Action 和 ci 命令会在你的 PR 中发布诊断结果、不稳定性判定和修复差异。 |
要求
- Node.js 22 或更高版本
- 使用
@playwright/test的项目,并已安装浏览器(npx playwright install chromium) - Claude Code、Claude Desktop、Cursor、VS Code、Windsurf、Codex、Gemini CLI 或任何其他 MCP 客户端
开始使用
**最快方式:**在项目根目录运行以下命令。它会将服务添加到找到的每个客户端配置中 (Claude Code、Cursor、VS Code、Gemini CLI、Codex),并安装 Agent 技能,不会影响你的 其他服务:
npx -y playwright-e2e-mcp init # --client all | cursor,vscode … · --dry-run
npx -y playwright-e2e-mcp doctor # checks Node, Playwright, browsers and client setup
**或者让你的 Agent 来安装。**将以下内容粘贴到任意编码 Agent 中:
按照以下说明安装 playwright-e2e-mcp 服务和技能: https://raw.githubusercontent.com/xsignon-secure/E2E/main/llms-install.md
标准配置适用于大多数客户端:
{
"mcpServers": {
"playwright-e2e": {
"command": "npx",
"args": ["-y", "playwright-e2e-mcp"]
}
}
}
该服务会将其工作目录用作项目根目录。如果你的客户端在其他位置(例如你的主目录)启动它,
请添加 "env": { "PW_MCP_PROJECT_ROOT": "/path/to/your/project" }。
Claude Code
作为插件安装服务和技能:
/plugin marketplace add xsignon-secure/E2E
/plugin install playwright-e2e-mcp@xsignon-secure
或者仅安装服务:
claude mcp add playwright-e2e -- npx -y playwright-e2e-mcp
Claude Desktop
从[最新版本](https://github.com/xsignon-secure/E2E/releases/latest)下载 `.mcpb` 扩展并双击。它自带依赖项,因此无需配置 Node。安装时会询问你的**项目根目录**:请选择项目文件夹,而不是主目录。你也可以将标准配置添加到 claude_desktop_config.json。
Cursor
点击在 Cursor 中安装,或前往 Settings → MCP → Add new MCP server 并粘贴标准配置。若仅用于一个项目,请将其放入 .cursor/mcp.json。
VS Code / GitHub Copilot
点击上方的 Install in VS Code 按钮,或运行:
code --add-mcp '{"name":"playwright-e2e","command":"npx","args":["-y","playwright-e2e-mcp"]}'
Codex
codex mcp add playwright-e2e -- npx -y playwright-e2e-mcp
带重试的 Playwright 运行可能超过 Codex 默认的 60 s 工具超时时间。请在 ~/.codex/config.toml 中调高超时时间:
[mcp_servers.playwright-e2e]
command = "npx"
args = ["-y", "playwright-e2e-mcp"]
startup_timeout_sec = 60
tool_timeout_sec = 600
Gemini CLI / Qwen Code
作为扩展安装服务和技能:
gemini extensions install https://github.com/xsignon-secure/E2E
或者将标准配置粘贴到 .gemini/settings.json(Qwen Code:.qwen/settings.json)。
Windsurf、Cline、Zed 和其他客户端
将标准配置添加到客户端的 MCP 配置文件中(Cline:MCP Servers → Configure)。对于需要指定命令的客户端(如 Zed),请使用参数 -y playwright-e2e-mcp 运行 npx。
Freebuff / Codebuff
在项目的 .agents/ 文件夹中放入一个包含标准配置的 mcp.json。此代码库已附带 .agents/mcp.json,因此打开此代码库即可在整个工作区中连接服务。Freebuff 首次运行时会要求你信任仓库的 .agents/。
ChatGPT 和其他仅支持远程服务的客户端
有些客户端只接受远程 HTTPS 服务。此代码库附带一个 Streamable HTTP 桥接服务,可免费托管在 Vercel 上,并为 claude.ai 连接器提供 OAuth 登录。请参阅托管端点。在 Vercel 上,页面工具(检查页面、检查选择器、执行可访问性和 Web Vitals 审计)会使用打包的 Chromium 检查公共 URL。运行和修复你自己的测试需要你的项目,因此请使用本地安装。
其他安装方式
| 方式 | 操作 |
|---|---|
| 仅安装技能,适用于任意 Agent | npx skills add xsignon-secure/E2E |
| MCP Registry | io.github.xsignon-secure/E2E (列表);支持注册表的客户端可在此找到它 |
| 直接从 GitHub 安装,无需 npm | npx -y github:xsignon-secure/E2E#v0.7.0(固定到一个版本标签) |
| 版本压缩包 | npm install -D https://github.com/xsignon-secure/E2E/releases/download/v0.7.0/playwright-e2e-mcp-0.7.0.tgz |
| Docker | docker run -i --rm -v "$PWD:/work" ghcr.io/xsignon-secure/playwright-e2e-mcp(每次发布都会推送;请参阅开发) |
| 本地检出 | "command": "node", "args": ["/path/to/E2E/dist/index.js"] |
你的第一个提示词
重启客户端,然后询问:
Run my Playwright tests and fix whatever fails.
你的 Agent 应运行测试套件、读取失败信息,并提出一个已重新运行验证过的修复方案。如需在没有自己的测试时检查配置,请让它运行此代码库中的 examples/sample-test.spec.ts。
0.7 版新功能
- 安全地登录一次:
save-login使用从环境中读取的密钥登录(包括 2FA 验证码),验证会话并将其保存为storageState文件;会话失效前会重复使用。 - 防护修复回退:
check-test-change和playwright-e2e-mcp guard会阻止通过减少检查来通过测试的“修复”(例如删除断言、跳过测试、使用.only)。 - 隔离不稳定测试:
quarantine会在指定时间内阻止已知的不稳定测试导致构建失败,并记录负责人和原因,同时继续运行并报告该测试。
0.6 版新功能
- 找出导致测试失败的提交:
bisect-failure会在临时工作树中跨 Git 历史运行测试,并指出第一个有问题的提交、该提交的变更以及当时的失败情况。 - 不稳定风险审计:
audit-tests会找出硬等待、一次性断言、缺少await和脆弱的选择器,按实际不稳定程度排序,并应用安全的改写后运行验证。 - 一键修复拉取请求: GitHub Action 会在 CI 中验证每项修复,并以建议的变更形式发布。
doctor:npx playwright-e2e-mcp doctor会检查 Node、Playwright、浏览器和客户端设置。- 结构化结果: 每个工具都会返回 JSON 和 Markdown,并附带输出架构。
- 手机、平板、Chrome 和 Edge: 所有页面工具均支持
device预设和channel,并提供托管在ghcr.io的 Docker 镜像。 - 现在要求使用 Node 22 或更高版本,托管端点也会限制对其密钥的猜测。
工具
| 工具 | 用途 |
|---|---|
run-test | 运行 Playwright 测试并返回统计数据、失败项、诊断信息和提示;报告进度,对于较长的测试套件,background: true 会返回运行 ID |
get-run-status | 查看后台运行的进度或最终结果;可以等待运行完成,也可以取消运行 |
get-failure | 深入分析单个失败项:堆栈、预期值/实际值、失败时的 DOM 快照(来自 Playwright 跟踪记录)、失败的请求、控制台错误和后续步骤 |
load-report | 从 CI 加载一次运行:JSON 报告或分片 blob 报告文件夹;CI 路径会映射到当前检出目录,并会在解包后的构建产物中查找跟踪记录,因此 get-failure、suggest-fix 和 diagnose-flaky 都可以处理这些报告;该运行还会连同其提交记录加入历史记录 |
suggest-fix | 修补失败项:将已偏移的定位器替换为在失败时的 DOM 上经验证具有唯一性的定位器;对于有歧义的定位器(严格模式违规),使用预期匹配项的唯一定位器;对于已更改的文案,更新预期文本;apply: true 会写入修补内容、重新运行测试,并在测试仍失败时还原 |
inspect-page | 无头打开一个 URL(可选择登录并执行后续步骤),并返回带有经验证的 Playwright 定位器的元素、CSS 选择器、可见性、文本和控制台输出;或者返回无障碍快照,以及可直接使用的 toMatchAriaSnapshot 断言 |
list-tests | 列出可用测试(file、line、完整标题、项目),并支持筛选 |
validate-selector | 检查 CSS 选择器、Playwright 选择器或定位器表达式在实时页面上的有效性和匹配数量,并为每个匹配项提供更稳健且经验证的定位器 |
generate-e2e-test | 根据描述搭建 Playwright 测试,使用项目中的实际选择器和从实时页面验证过的定位器;或者在实时页面上逐步执行一个流程,并编写一个会运行一次以验证通过的测试规范 |
compare-visual-state | 视觉回归:对比更改前后的屏幕截图,并报告移动了什么以及颜色如何变化 |
audit-accessibility | 在页面上运行 axe-core(默认采用 WCAG 2.2 AA),可选择登录或执行后续步骤;按严重程度从高到低返回违规项,为违规元素提供经验证的定位器,并进行回归检查 |
audit-performance | 测量实验室环境中的 Web Vitals(LCP、CLS、TBT、FCP、TTFB、步骤执行期间的 INP),可选择使用限速手机配置和多次运行的中位数;评定指标或检查预算,将 LCP 元素和发生位移的元素列为经验证的定位器,列出体积较大和阻塞渲染的请求,并返回预算测试 |
diagnose-flaky | 禁用重试,运行失败的测试 2–10 次,并根据证据给出判定:CONSISTENTLY FAILING、FLAKY 或 NOT REPRODUCING;区分并行执行和测试顺序导致的竞争问题 |
analyze-history | 根据本地运行历史对不稳定、回归和已损坏的测试进行排序,按原因对失败项分组,列出最慢的测试,显示每天的稳定性,指出每个测试开始出问题的提交,或显示单个测试的时间线 |
audit-tests | 审查测试代码中的不稳定风险(硬等待、使用一次性断言而非 Web 优先断言、缺少 await、.only、强制点击、networkidle、元素句柄、布局选择器),并根据这些测试在运行历史中的不稳定程度排序;fix: true 会重写可机械修复的问题,重新运行相关文件,并在失败时还原 |
save-login | 登录一次并保存会话(storageState):支持使用 {{env:E2E_PASSWORD}} 和 {{totp}}(来自环境中密钥的身份验证器代码)配置步骤、检查会话是否有效,并在会话过期前重复使用;机密信息绝不会经由聊天传递 |
check-test-change | 修复保护机制:将更改后的测试与 git 比较(或将拟议的修复与文件比较),并阻止删除断言、跳过或移除测试以及 .only;对于匹配器变弱、硬等待、force: true、吞掉错误以及增加超时或重试次数的情况发出警告 |
quarantine | 隔离不稳定的测试,并设置负责人、原因和过期时间(默认 14 天):测试仍会运行并报告,但条目过期前,其失败不会导致 run-test 或 ci 失败。数据存储在 playwright-quarantine.json 中 |
bisect-failure | 查找导致测试失败的提交:在正常提交和异常提交之间对 git 历史进行二分搜索,在临时工作树中逐步运行测试(不会改动当前检出目录),并报告首个异常提交、该提交的改动内容和测试失败方式 |
| 两个提示词封装了客户端可作为斜杠命令展示的主要工作流: | |
fix-failing-test 和 triage-flaky-tests。 |
所有参数和输出示例都在**工具参考**中。所有工具都带有 MCP 工具注释(readOnlyHint、destructiveHint,……),因此客户端可以展示准确的安全提示。
只需要修复循环? --tools=core(或 PW_MCP_TOOLS=core)会开放七个工具,并将工具定义上下文减少约四分之三。其他配置:triage、inspect、author。
典型工作流
- 调用
run-test{ "testFiles": ["tests/checkout.spec.ts"] },如果套件运行时间较长,则传入{ "background": true },然后调用get-run-status{ "waitSeconds": 30 },直到运行结束。对于 CI 中的失败,下载作业的产物,然后改为调用load-report{ "report": "ci-artifacts/results.json" }。 - 调用
get-failure{ "index": 1 },读取代码片段、预期值与实际值、失败时的 DOM 快照、失败的网络请求和页面控制台错误。 - 对于定位器或文案更改,调用
suggest-fix{ "index": 1 }:检查差异,然后调用{ "index": 1, "apply": true }写入更改,并通过重新运行进行验证。如果它报告元素缺失,请修复应用,而不是测试。 - 对于无法自动修复的问题:调用
inspect-page{ "url": "…", "view": "locators" }(添加storageState或actions以进入正确页面),然后调用validate-selector在编辑前验证新定位器。 - 如果失败看起来是偶发的:调用
diagnose-flaky{ "runs": 3 }获取最新证据,并调用analyze-history查看测试在之前运行中的表现 ({ "view": "commits" }会指出它开始出问题的提交)。 - 更改 CSS 或组件后:调用
compare-visual-state{ "url": "…", "name": "checkout" }。 - 调用
run-test{ "lastFailed": true },仅重新运行失败的测试,直到全部通过。
要编写新测试,先调用 inspect-page { "view": "locators" } 查找定位器,然后调用
generate-e2e-test,并传入流程的 description 和 steps;它会在实时页面上逐步执行,写入测试规范并运行一次。要检查页面的速度或无障碍性,请使用 audit-performance 和 audit-accessibility。
CI:GitHub Action 和 ci 命令
无需 Agent 也能运行相同的诊断。playwright-e2e-mcp ci 会运行套件(自动重试一次,因此偶发测试会报告为偶发,而不是失败),可选择为失败项生成 suggest-fix 差异和偶发性判定,并将一份 Markdown 报告写入标准输出、--output 指定的位置,以及设置了 GITHUB_STEP_SUMMARY 时的 GitHub 作业摘要。退出码:0 表示通过,1 表示测试失败,2 表示运行本身失败。
npx -y playwright-e2e-mcp ci --flaky-runs 3 --suggest 2 --output report.md
npx -y playwright-e2e-mcp ci --help
作为 GitHub Action,它会将报告添加到作业摘要中,并在运行失败时持续更新一条 PR 评论。在拉取请求中,它还会使用建议的修复重新运行每个失败的测试,并将通过的修复作为失败代码行上的建议更改发布,这样审查者可以点击提交建议按钮来应用(仅限 PR 中更改过的代码行;其余内容仍保留在报告中):
permissions:
contents: read
pull-requests: write # for the PR comment and the suggested fixes
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with: { node-version: 24 }
- run: npm ci && npx playwright install --with-deps chromium
- uses: xsignon-secure/[email protected]
with:
flaky-runs: 3 # 0 skips the flaky verdict
suggest: 2 # suggest-fix diffs for the first 2 failures
# args: --browser chromium tests/checkout
完整且可直接复制的工作流见 examples/github-actions/playwright-e2e.yml,其中包括产物上传,以及 guard: true 和 Pro Cloud 的注释选项。
输入:project-root、args、flaky-runs、suggest、comment、review、
verify-fixes、guard、pro-key、pro-url、fail-on-failure、version、github-token。输出:exit-code、
report、guard。
此处同样会遵循隔离测试(playwright-quarantine.json,见 quarantine):如果所有失败项都已隔离且尚未过期,ci 会以 0 退出,并在报告中列出这些测试。
CI 中的修复防护。 guard: true 会先对照基础分支检查 PR 中更改的测试;如果测试是通过减少检查内容而通过的,则作业会失败。不使用 Action 时:
npx -y playwright-e2e-mcp guard --base origin/main # exit 1 on BLOCK; --strict fails on warnings too
配置
环境变量
| 环境变量 | 默认值 | 用途 |
|---|---|---|
PW_MCP_PROJECT_ROOT | server cwd | 每个工具的默认项目根目录 |
PW_MCP_TOOLS | all | 要公开的工具,以工具名称和/或配置组指定,多个值以逗号分隔(与 --tools= 标志相同)。配置组:core(run、status、failure、fix、flaky、heal guard、list)、triage(run、status、failure、CI report、flaky、history、test audit、bisect、quarantine、heal guard、list)、inspect(page、selector、accessibility、performance、visual、login)、author(list、page、selector、generate、run、login、heal guard)。全部 19 个工具定义每个请求约占用 16k 个上下文 token;core 约占用 5k(设置 PW_MCP_OUTPUT_SCHEMAS=0 后分别为 12k 和 2.6k) |
PW_MCP_OUTPUT_SCHEMAS | on | 设置为 0 时,不在工具列表中包含输出架构,以节省上下文。结果仍包含 structuredContent(参见结构化结果) |
PW_MCP_STORAGE_STATE | — | 页面工具的默认 storageState 文件(位于项目内) |
PW_MCP_SHUFFLE_SEEDS | random | 以逗号分隔的种子,用于 diagnose-flaky 的 order 阶段,重放诊断报告中的顺序 |
PW_MCP_LOGIN_ENV | — | save-login 可通过 {{env:NAME}} 输入的额外环境变量,多个值以逗号分隔。未设置时,仅允许使用 E2E_*、TEST_*、PW_*、PLAYWRIGHT_* 和 LOGIN_* |
PW_MCP_PRO_KEY / PW_MCP_PRO_URL | — | 可选,付费:Pro 密钥和 Pro Cloud 地址。CI 运行结果通过 playwright-e2e-mcp upload(或 Action 的 pro-key / pro-url 输入项)上传,analyze-history 会将其与本地运行结果合并。默认未设置时,不会向任何地方发送任何内容 |
PW_MCP_HISTORY | on | 设置为 0 时,停止将运行记录写入 .playwright-e2e-mcp/history.jsonl |
PW_MCP_ALLOWED_ROOTS | — | 调用方可作为 projectRoot 传入的额外目录(以 : 分隔;Windows 上以 ; 分隔)。默认根目录及这些目录之外的路径均会被拒绝 |
PW_MCP_HTTP_TOKEN | — | 仅限 HTTP 桥接:解锁所有工具的 bearer token;长度至少为 16 个字符,建议至少 32 个字符(参见托管端点) |
PW_MCP_ALLOWED_HOSTS | localhost + 未设置 token 时的 Vercel 主机名 | 仅限 HTTP 桥接:以逗号分隔的 Host 允许列表;* 表示接受任何主机 |
PW_MCP_MAX_FAILED_AUTH | 20 | 仅限 HTTP 桥接:单个客户端地址在 15 分钟内可发送的错误 token 或访问密钥数量上限,超过后会收到 429 |
PW_MCP_OAUTH_REDIRECT_HOSTS | any https host | 仅限 HTTP 桥接:以逗号分隔的 OAuth 应用可跳转至的主机,例如 claude.ai,chatgpt.com;.example.com 包含其子域名;localhost 始终可用 |
PW_MCP_TRUST_PROXY | off (on for Vercel) | 仅限 HTTP 桥接:设置为 1 时,信任前置反向代理提供的 X-Real-IP / X-Forwarded-For,使登录限制按客户端而非代理计数 |
PW_MCP_PASSTHROUGH_ENV | — | 仅限 HTTP 桥接:以逗号分隔的额外变量,传递给测试运行(例如 BASE_URL) |
PW_MCP_MAX_CHILDREN | 4 | 仅限 HTTP 桥接:可同时运行的测试运行和浏览器探测数量 |
PW_MCP_BLOCK_PRIVATE_URLS | off (on for the HTTP bridge) | 设置为 1 时,URL 工具会拒绝环回、专用网络和云元数据地址,包括重定向和子资源 |
PW_MCP_SERVERLESS_CHROMIUM | on for Vercel | 使用捆绑的无服务器 Chromium(@sparticuz/chromium,Linux x64,Node 22+)启动页面工具;设置为 0 可关闭,设置为 1 可在其他环境中启用 |
LOG_LEVEL / MCP_LOG_LEVEL | info | debug | info | warn | error | silent;两者同时设置时以 LOG_LEVEL 为准 |
LOG_FORMAT / MCP_LOG_FORMAT | text | text,或 json(也可为 ndjson),每行输出一个结构化 JSON 对象,可直接供日志采集器使用 |
日志始终写入 stderr——stdout 专供 MCP 协议使用。无法识别的值会回退到默认值,因此,LOG_LEVEL 中的拼写错误会让日志级别变为 info,而 LOG_FORMAT 中的拼写错误会让日志采用文本格式,而不是让服务静默运行。设置 LOG_FORMAT=json 后,每行都是一个独立对象(包含 time、level、message 和上下文): |
{"time":"2026-10-07T08:00:00.000Z","level":"info","message":"server ready","name":"playwright-e2e-mcp"}
基准测试
bench/token-benchmark.mjs 会破坏商店页面中结账按钮的测试 ID,并通过两种方式修复:使用此服务(run-test → suggest-fix → 应用)和使用 Playwright MCP 加 shell(playwright test、browser_navigate + browser_snapshot、编辑、重新运行)。最新结果(完整输出):
| 步骤 | playwright-e2e-mcp(core 工具) | playwright-e2e-mcp(所有工具) | Playwright MCP + shell |
|---|---|---|---|
| 工具定义(随每次请求发送) | 4,826 | 16,121 | 5,225 |
| 运行失败的测试 | 244 | 244 | 323 |
| 查找元素 / 提出修复方案 | 232 | 232 | 2,286 |
| 应用并验证(重新运行) | 230 | 230 | 34 |
| 修复一次的总计 | 5,532 | 16,827 | 7,868 |
Token 数量按字符数 ÷ 4 计算。此处实际工作(运行、诊断、修复、验证)约需 700 个 token,而使用 Playwright MCP 则约需 2,600 个;但工具定义会随每次请求发送:加载全部 19 个工具时,定义所占用的 token 会超过节省的数量,因此,如果只修复失败的测试,请设置 PW_MCP_TOOLS=core(或其他配置)。Playwright MCP 方案提供的是较低估值:它假设 Agent 首次尝试就能从快照中选出正确的定位器,而此处服务能代为完成。使用 0.7.0 和 Playwright 1.64.1,于 2026-10-28 运行;可通过 npm run build && node bench/token-benchmark.mjs 重新运行。
演示
通过 stdio 调用 npx -y playwright-e2e-mcp,针对捆绑的 examples/sample-test.spec.ts 运行真实的 run-test(实际输出,未经编辑):

免费且开源
- 采用 MIT 许可证。 可使用、修改,并用于商业项目;不收取费用,也不会限制任何功能。可选的 Pro 方案提供托管服务(跨机器的 CI 运行历史),不包含工具;此处的任何功能都不需要 Pro。
- 无需账户、API 密钥或注册。 运行
npx -y playwright-e2e-mcp init即可完成全部设置。 - 无遥测。 它不会向外发送任何数据;除非设置 Pro 密钥并上传,否则测试、跟踪记录和运行历史都保留在本机。
- 依赖项均免费: MCP SDK(Apache-2.0)、zod(MIT)、axe-core(MPL-2.0),以及项目已有的 Playwright(Apache-2.0)。
- 也可免费自行托管: HTTP 桥接服务可部署到免费的 Vercel 账户(请参阅托管端点)。
它不会做什么: 它不会逐步驱动探索式浏览会话,也不会取代 VS Code 中 Playwright 自带的 Test Agents。交互式浏览请使用 Playwright MCP,运行、诊断和修复测试套件请使用此服务。两者可以配合使用。
更多文档
- 工具参考:每个参数、输出示例及已处理的边缘情况
- 托管端点:供 ChatGPT 和 claude.ai 连接器使用的 HTTP 桥接服务
- 安全:安全模型及漏洞报告方式
- 开发:构建、测试、Docker、签名和发布
- 贡献指南 · 行为准则
许可证
MIT。如果它帮你省下了一次调试,不妨给仓库点个 ⭐,让更多 Playwright 用户发现它。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。