playwright-e2e-mcp 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/README.md +134 -25
  2. package/dist/cli/doctor.d.ts +12 -1
  3. package/dist/cli/doctor.js +34 -4
  4. package/dist/cli/doctor.js.map +1 -1
  5. package/dist/cli/upload.d.ts +6 -5
  6. package/dist/cli/upload.js +20 -17
  7. package/dist/cli/upload.js.map +1 -1
  8. package/dist/discovery.d.ts +61 -0
  9. package/dist/discovery.js +108 -0
  10. package/dist/discovery.js.map +1 -0
  11. package/dist/http.d.ts +9 -0
  12. package/dist/http.js +49 -3
  13. package/dist/http.js.map +1 -1
  14. package/dist/index.js +8 -3
  15. package/dist/index.js.map +1 -1
  16. package/dist/oauth.d.ts +2 -0
  17. package/dist/oauth.js +1 -1
  18. package/dist/oauth.js.map +1 -1
  19. package/dist/server.d.ts +23 -3
  20. package/dist/server.js +55 -10
  21. package/dist/server.js.map +1 -1
  22. package/dist/skills.d.ts +23 -0
  23. package/dist/skills.js +101 -0
  24. package/dist/skills.js.map +1 -0
  25. package/dist/tools/analyze-history.js +9 -9
  26. package/dist/tools/analyze-history.js.map +1 -1
  27. package/dist/tools/audit-accessibility.d.ts +6 -0
  28. package/dist/tools/audit-performance.d.ts +6 -0
  29. package/dist/tools/compare-visual-state.d.ts +6 -0
  30. package/dist/tools/diagnose-flaky.js +5 -1
  31. package/dist/tools/diagnose-flaky.js.map +1 -1
  32. package/dist/tools/generate-e2e-test.d.ts +3 -0
  33. package/dist/tools/generate-e2e-test.js +3 -0
  34. package/dist/tools/generate-e2e-test.js.map +1 -1
  35. package/dist/tools/get-failure.js +3 -1
  36. package/dist/tools/get-failure.js.map +1 -1
  37. package/dist/tools/inspect-page.d.ts +6 -0
  38. package/dist/tools/inspect-page.js +3 -1
  39. package/dist/tools/inspect-page.js.map +1 -1
  40. package/dist/tools/list-tests.js +16 -12
  41. package/dist/tools/list-tests.js.map +1 -1
  42. package/dist/tools/probe-script.js +88 -14
  43. package/dist/tools/probe-script.js.map +1 -1
  44. package/dist/tools/run-test.js +2 -1
  45. package/dist/tools/run-test.js.map +1 -1
  46. package/dist/tools/save-login.d.ts +3 -0
  47. package/dist/tools/shared.d.ts +25 -1
  48. package/dist/tools/shared.js +56 -5
  49. package/dist/tools/shared.js.map +1 -1
  50. package/dist/tools/suggest-fix.js +4 -0
  51. package/dist/tools/suggest-fix.js.map +1 -1
  52. package/dist/tools/validate-selector.d.ts +6 -0
  53. package/dist/tools/validate-selector.js +10 -2
  54. package/dist/tools/validate-selector.js.map +1 -1
  55. package/dist/types/index.d.ts +1 -1
  56. package/dist/utils/history-client.d.ts +32 -0
  57. package/dist/utils/{pro-client.js → history-client.js} +27 -20
  58. package/dist/utils/history-client.js.map +1 -0
  59. package/dist/utils/live-reporter.d.ts +29 -0
  60. package/dist/utils/live-reporter.js +145 -0
  61. package/dist/utils/live-reporter.js.map +1 -0
  62. package/dist/utils/playwright-runner.js +36 -14
  63. package/dist/utils/playwright-runner.js.map +1 -1
  64. package/dist/utils/pytest-runner.d.ts +102 -0
  65. package/dist/utils/pytest-runner.js +715 -0
  66. package/dist/utils/pytest-runner.js.map +1 -0
  67. package/dist/utils/test-change-guard.d.ts +21 -0
  68. package/dist/utils/test-change-guard.js +128 -3
  69. package/dist/utils/test-change-guard.js.map +1 -1
  70. package/dist/utils/update-check.d.ts +50 -0
  71. package/dist/utils/update-check.js +75 -0
  72. package/dist/utils/update-check.js.map +1 -0
  73. package/examples/github-actions/playwright-e2e.yml +81 -0
  74. package/examples/gitlab-ci/playwright-e2e.yml +71 -0
  75. package/package.json +2 -2
  76. package/skill/playwright-e2e-mcp/SKILL.md +10 -4
  77. package/skill/playwright-e2e-mcp/references/setup.md +7 -2
  78. package/skill/playwright-e2e-mcp/references/tools.md +1 -1
  79. package/dist/utils/pro-client.d.ts +0 -29
  80. package/dist/utils/pro-client.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: playwright-e2e-mcp
3
- description: Runs, debugs and fixes Playwright end-to-end tests through the playwright-e2e-mcp server: run results grouped by root cause, trace-based failure diagnostics, verified locators, self-healing fixes that re-run and revert if still red, a heal guard that blocks fixes which pass by checking less, per-test flaky verdicts (parallelism, test order, timing), an owned, expiring flaky-test quarantine, saved logins with 2FA codes, signed-in page inspection with network mocks, tests written by walking the flow, CI report diagnosis, accessibility and Web Vitals audits and run history with the commit that broke each test. Use when the user asks to run Playwright tests, fix a failing or broken e2e test, find out why CI failed, find flaky, unstable or slow tests, repair a selector, write or review a Playwright test, log in for tests, or check a page for accessibility, performance or visual regressions.
3
+ description: "Runs, debugs and fixes Playwright end-to-end tests through the playwright-e2e-mcp server: run results grouped by root cause, trace-based failure diagnostics, verified locators, self-healing fixes that re-run and revert if still red, a heal guard that blocks fixes which pass by checking less, per-test flaky verdicts (parallelism, test order, timing), an owned, expiring flaky-test quarantine, saved logins with 2FA codes, signed-in page inspection with network mocks, tests written by walking the flow, CI report diagnosis, accessibility and Web Vitals audits and run history with the commit that broke each test. Use when the user asks to run Playwright tests, fix a failing or broken e2e test, find out why CI failed, find flaky, unstable or slow tests, repair a selector, write or review a Playwright test, log in for tests, or check a page for accessibility, performance or visual regressions."
4
4
  ---
5
5
 
6
6
  # Playwright E2E with playwright-e2e-mcp
@@ -13,7 +13,7 @@ and concrete next steps. It can also propose and apply a verified fix for a brok
13
13
  locator, inspect pages behind a login, run long suites in the background and keep
14
14
  a local history of every run.
15
15
 
16
- This skill is written for playwright-e2e-mcp 0.7.0 and works with 0.2.0 or
16
+ This skill is written for playwright-e2e-mcp 0.9.0 and works with 0.2.0 or
17
17
  newer. If `suggest-fix`, `get-run-status` or `analyze-history` is missing, the
18
18
  server is older than 0.2.0: use the steps that do not need those tools and tell
19
19
  the user to update it. `diagnose-flaky`'s per-test table and `isolate` option
@@ -22,7 +22,13 @@ root-cause grouping in `run-test` arrived in 0.4.0; `audit-performance`,
22
22
  `load-report`, network mocks (`routes`), `har`, `browser`, `inspect-page`'s
23
23
  `view: "aria"`, `generate-e2e-test`'s `steps`, the `slow`, `trend` and `commits`
24
24
  history views and strict-mode fixes in `suggest-fix` arrived in 0.5.0;
25
- `save-login`, `check-test-change` and `quarantine` arrived in 0.7.0.
25
+ `save-login`, `check-test-change` and `quarantine` arrived in 0.7.0; the
26
+ `switchTab` page step, `blockWrites`, recovery of crashed runs and
27
+ pytest-playwright projects (`run-test`, `get-failure`, `list-tests`) arrived in
28
+ 0.8.0; the free self-hosted history server (`PW_MCP_HISTORY_URL` /
29
+ `PW_MCP_HISTORY_TOKEN`, replacing the old Pro settings, which still work) arrived
30
+ in 0.9.0. If `doctor` says a newer version is out, pass its upgrade command on to
31
+ the user.
26
32
 
27
33
  ## Before you start
28
34
 
@@ -277,7 +283,7 @@ with the commit it tested. `analyze-history` views:
277
283
  `selector` for one region) returns the accessibility snapshot and a
278
284
  `toMatchAriaSnapshot` assertion to paste into a spec.
279
285
  - **Set up CI:** when the user wants the same diagnosis on every pull request,
280
- point them to the GitHub Action (`uses: xsignon-secure/E2E@v0.7.0`) or the
286
+ point them to the GitHub Action (`uses: xsignon-secure/E2E@v0.9.0`) or the
281
287
  `npx -y playwright-e2e-mcp ci` command in `references/setup.md`. It writes the
282
288
  run, flaky verdicts and fix diffs to the job summary and one PR comment.
283
289
  - **Accessibility:** `audit-accessibility` with `url` runs axe-core against
@@ -83,7 +83,12 @@ Set these in the server's `env` block. None of them are secrets except
83
83
  | `PW_MCP_STORAGE_STATE` | none | Default Playwright storageState JSON (inside the project) for the page tools, so signed-in pages open logged in |
84
84
  | `PW_MCP_SHUFFLE_SEEDS` | random | Seeds for `diagnose-flaky`'s `order` pass (comma separated), to replay reported orders |
85
85
  | `PW_MCP_LOGIN_ENV` | — | Extra variables `save-login` may type through `{{env:NAME}}`, comma separated (default: only `E2E_*`, `TEST_*`, `PW_*`, `PLAYWRIGHT_*`, `LOGIN_*`) |
86
- | `PW_MCP_PRO_KEY` / `PW_MCP_PRO_URL` | — | Optional paid Pro: CI runs uploaded with `upload` show up in `analyze-history` (`source: both`). Unset = no network calls |
86
+ | `PW_MCP_HISTORY_URL` / `PW_MCP_HISTORY_TOKEN` | — | Optional, free: the team's self-hosted history server (`history-server/` in the repo). CI runs uploaded with `upload` show up in `analyze-history` (`source: both`). Unset = no network calls. Old names `PW_MCP_PRO_KEY` / `PW_MCP_PRO_URL` still work |
87
+ | `PW_MCP_BLOCK_WRITES` | off | `1` makes the page tools abort POST, PUT, PATCH and DELETE requests that no mock or HAR answers (0.8.0+) |
88
+ | `PW_MCP_PYTHON` | project venv, then `python3` | The Python used for pytest-playwright projects (0.8.0+) |
89
+ | `PW_MCP_PROTOCOL` | both | `legacy` stops offering the 2026-07-28 MCP revision (0.8.0+) |
90
+ | `PW_MCP_SKILLS` | on | `0` stops serving this skill over the MCP Skills extension (0.8.0+) |
91
+ | `PW_MCP_NO_UPDATE_CHECK` | off | `1` stops `doctor` asking npm whether a newer version is out (0.8.0+) |
87
92
  | `PW_MCP_HISTORY` | on | `0` stops recording runs to `<project>/.playwright-e2e-mcp/history.jsonl` (this turns off `analyze-history`) |
88
93
  | `LOG_LEVEL` | `info` | `debug`, `info`, `warn`, `error` or `silent` |
89
94
  | `PW_MCP_HTTP_TOKEN` | none | HTTP bridge only: bearer token that unlocks all tools |
@@ -114,7 +119,7 @@ Exit code 0 means passed, 1 tests failed, 2 the run itself failed. On GitHub
114
119
  Actions it also writes to the job summary. As an Action:
115
120
 
116
121
  ```yaml
117
- - uses: xsignon-secure/E2E@v0.7.0
122
+ - uses: xsignon-secure/E2E@v0.9.0
118
123
  with:
119
124
  flaky-runs: 3
120
125
  suggest: 2
@@ -68,7 +68,7 @@ becomes the last run for `get-failure`, `suggest-fix` and `diagnose-flaky`.
68
68
  | `view` | `elements` \| `locators` \| `aria` | `locators`: compact map of interactive elements with verified locators; `aria` (0.5.0+): accessibility snapshot of the page or of `selector`, with a `toMatchAriaSnapshot` assertion |
69
69
  | `storageState` | string | Playwright storageState JSON inside the project (signed-in session); defaults to `PW_MCP_STORAGE_STATE` |
70
70
  | `headers` | object | Extra HTTP headers |
71
- | `actions` | array | Up to 20 steps after load: `{ type: click\|dblclick\|fill\|press\|check\|uncheck\|select\|hover\|wait\|goto, locator?, value?, url?, ms? }`. Locators may start with `frameLocator('#frame')` or use `.contentFrame()` for iframes (0.6.1+) |
71
+ | `actions` | array | Up to 20 steps after load: `{ type: click\|dblclick\|fill\|press\|check\|uncheck\|select\|hover\|wait\|goto, locator?, value?, url?, ms? }`. Locators may start with `frameLocator('#frame')` or use `.contentFrame()` for iframes (0.6.1+). `{ type: 'switchTab', value?: 'last'\|'first'\|'2'\|text in URL or title }` moves to a popup or new tab (0.8.0+) |
72
72
  | `actionTimeoutMs` | number | How long each action waits for its element (0.6.1+, default 10000) |
73
73
  | `routes` | array | Up to 20 network mocks before load, first match wins: `{ url (glob), method?, status?, json? \| body?, contentType?, headers?, abort?, delayMs? }` (0.5.0+). The result reports hits per mock |
74
74
  | `har` | object | `{ path, mode?: replay\|record, url?, notFound?: abort\|fallback }` (0.5.0+): replay requests from a HAR inside the project, or record the traffic to one. `routes` still win |
@@ -1,29 +0,0 @@
1
- /**
2
- * Pro Cloud client: shared CI run history for teams that subscribe to Pro.
3
- *
4
- * Strictly opt-in. Nothing here makes a network call unless
5
- * PW_MCP_PRO_KEY is set; without it the server behaves exactly as before.
6
- * The key is the license key from the Pro subscription; PW_MCP_PRO_URL
7
- * points at the Pro Cloud deployment. There is deliberately no built-in
8
- * default URL: the key only ever goes where the user pointed it.
9
- */
10
- import type { HistoryEntry } from './run-history.js';
11
- export interface ProSettings {
12
- key: string;
13
- url: string;
14
- }
15
- /** The Pro settings, or undefined when Pro is not configured (the normal case). */
16
- export declare function proSettings(env?: NodeJS.ProcessEnv): ProSettings | undefined;
17
- /**
18
- * The project name runs are filed under: PW_MCP_PRO_PROJECT, else the
19
- * GitHub repository (owner/name, from CI or the origin remote), else the
20
- * folder name. The same rule on CI and laptops, so both see one history.
21
- */
22
- export declare function proProjectName(root: string, env?: NodeJS.ProcessEnv): Promise<string>;
23
- export declare function uploadRuns(settings: ProSettings, project: string, runs: HistoryEntry[]): Promise<{
24
- stored: number;
25
- skipped: number;
26
- }>;
27
- export declare function fetchRuns(settings: ProSettings, project: string, limit: number): Promise<HistoryEntry[]>;
28
- /** Local and cloud runs together, oldest first, without duplicates. */
29
- export declare function mergeRuns(local: HistoryEntry[], cloud: HistoryEntry[], last: number): HistoryEntry[];
@@ -1 +0,0 @@
1
- {"version":3,"file":"pro-client.js","sourceRoot":"","sources":["../../src/utils/pro-client.ts"],"names":[],"mappings":"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"}