Playwright E2E MCP
NPM · PLAYWRIGHT-E2E-MCP
Diagnose and fix failing Playwright tests: traces, verified fixes, flaky/order verdicts, a11y audit.
Available components
Last scanned (23 hours ago)
Scores higher than 77% of npm servers
Category Testing and QA
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 0 of 4 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to xsignon-secure/E2E). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 1 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability71
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 2967 tokens (~247/item across 12 items; 12 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management13
- Stability observed for 4 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage96
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 87% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 12 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 12 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 23 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.
- 22 Oct 26 +16
- Stability: 0.03 → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Malware scan: unverified → pass ▲ security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Schema quality: 100 → unverified ▼ functional
- Security disclosure: fail → pass ▲ functional
- Package version: 0.4.1 → 0.4.2 functional
- 21 Oct 26 +11
- Known CVEs: unverified → pass ▲ security
- Schema quality: 2565 → 2967 ▼ functional
- Dependency health: unverified → 1.00 ▲ functional
- Stability: unverified → 0.03 ▲ functional
- Package version: 0.3.2 → 0.4.1 functional
- Package version: 0.3.2 → 0.4.0 functional
- 20 Oct 26 54
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 24 Oct 2026 · Analysed npm/playwright-e2e-mcp@0.4.2
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | xsignon-secure/E2E |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/xsignon-secure/E2E/.github/workflows/publish-npm.yml@refs/tags/v0.4.2 |
| Rekor log index | 3390839309 |
| Predicate type | SLSA build provenance https://slsa.dev/provenance/v1 |
| Subject digest | sha512:093f2d22186c032a402c6da960018074c05b74ce14e8ad94ea04f8f3c37597e958216799f1be00b8eff34c70b69edf71d40f19fa089cd750a6901d0fb |
Background: How many MCP packages publish verified provenance →
Dependencies 4 packages
| Packages resolved | 4 |
|---|---|
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
analyze-history Analyze run history ~121
Analyze the local run history (.playwright-e2e-mcp/history.jsonl, written by every run): 'flaky' ranks tests that flip pass/fail and lists broken or regressed ones; 'patterns' groups failures by cause; 'test' shows one test's timeline.
| Name | Type | Req | Description |
|---|---|---|---|
| lastRuns | integer | – | Runs to analyze (default 30) |
| limit | integer | – | – |
| projectRoot | string | – | – |
| test | string | – | Filter: substring of file or title |
| view | string | – | Default 'flaky' |
No output schema declared.
No examples provided.
audit-accessibility Audit page accessibility ~317
Run axe-core on a live page (WCAG 2.2 AA by default) and return violations worst first, each with the offending elements as verified Playwright locators, the fix, and a regression check to paste into a spec. Accepts storageState/headers/actions to audit pages behind a login or after a step.
| Name | Type | Req | Description |
|---|---|---|---|
| actions | array | – | Steps run after load to reach a state (modal, step 3) |
| headers | object | – | Extra HTTP headers, e.g. Authorization |
| minImpact | string | – | Hide violations below this impact (default: minor, show all) |
| projectRoot | string | – | Project whose Playwright launches the browser (default: server root) |
| selector | string | – | CSS selector: audit only this part of the page |
| standard | string | – | Rule set: WCAG level (default wcag22aa, i.e. 2.0–2.2 A+AA), 'best-practice' adds axe's extra rules, 'all' runs everything |
| storageState | string | – | Logged-in session: storageState JSON inside the project, e.g. playwright/.auth/user.json |
| timeoutMs | integer | – | Overall audit limit in ms (default 60000) |
| url | string | yes | Full URL of the page to audit (http/https) |
| viewport | object | – | – |
| waitFor | string | – | Wait for this selector first |
| waitUntil | string | – | Navigation wait condition (default load) |
No output schema declared.
No examples provided.
compare-visual-state Compare visual state ~331
Visual regression check: screenshot a live page (or element), compare it to a stored baseline, and report how many pixels changed, WHERE they changed (bounding regions), and the average color shift ("blue → red"). First call saves the baseline; later calls compare. Writes a red-highlighted diff image for review.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | – | 'baseline' overwrites the stored baseline; 'compare' (default) compares against it |
| actions | array | – | Steps run after load to reach a state (modal, step 3) |
| fullPage | boolean | – | Capture the full scrollable page (default false) |
| headers | object | – | Extra HTTP headers, e.g. Authorization |
| name | string | yes | Baseline id, e.g. "checkout-page" or "submit-button" |
| pixelThreshold | integer | – | Combined per-pixel channel delta considered different (default 60) |
| projectRoot | string | – | Project directory; defaults to the server working directory |
| selector | string | – | Capture only this element (selector or locator) |
| storageState | string | – | Logged-in session: storageState JSON inside the project, e.g. playwright/.auth/user.json |
| timeoutMs | integer | – | – |
| tolerance | number | – | Percent of pixels that may differ before reporting a change (default 0.1) |
| url | string | yes | Full URL of the page (or element target) to capture |
| viewport | object | – | – |
| waitFor | string | – | Wait for this selector before capturing |
| waitUntil | string | – | – |
No output schema declared.
No examples provided.
diagnose-flaky Diagnose flaky test ~427
Repeat failing tests with retries disabled and return a per-test, evidence-based verdict: CONSISTENTLY FAILING (real bug), FLAKY (pass/fail counts, error-signature variance, duration spread) or NOT REPRODUCING. Runs all repetitions in one process by default. `isolate: true` also re-runs the failures with one worker to tell parallelism bugs (shared state) from flakiness inside the test; `order: true` (Playwright 1.64+) runs the files in random orders to catch tests that depend on what ran before them. Defaults to the tests that failed in the most recent run.
| Name | Type | Req | Description |
|---|---|---|---|
| browser | string | – | Playwright project name to run |
| config | string | – | playwright.config path or 1-based index when the project has several configs |
| headed | boolean | – | Run with a visible browser window |
| isolate | boolean | – | Also tell parallelism bugs from real flakiness: repeat in parallel (fully parallel, `workers` default 4), then repeat the failing tests with one worker |
| order | boolean | – | Also run the target files in `runs` random orders (Playwright 1.64+ --shuffle, one worker) to find tests that depend on what ran before them; returns the seed that reproduces it and the likely culpri… |
| projectRoot | string | – | Project directory; defaults to the server working directory |
| runs | integer | – | How many times to run the tests (default 3) |
| separateProcesses | boolean | – | Start a fresh Playwright process per run instead of one --repeat-each process (slower; use when the flake depends on global setup or a cold start) |
| testFiles | array | – | Tests to diagnose ("file:line" supported). Defaults to the tests that failed in the most recent run. |
| timeoutMs | integer | – | Hard wall-clock limit per run (default 120000); one --repeat-each process gets this × runs |
| workers | integer | – | – |
No output schema declared.
No examples provided.
generate-e2e-test Generate an E2E test ~265
Scaffold a Playwright test from a description using the project's REAL selectors. Scans the agent's recent file changes (git working tree / last commit, mtime fallback), extracts data-testid / role / label / placeholder / id locators with their source locations, optionally cross-checks them against the live page, writes a ready-to-run spec, and returns next steps.
| Name | Type | Req | Description |
|---|---|---|---|
| config | string | – | playwright.config path or 1-based index |
| description | string | yes | What the test should cover, e.g. "login with valid credentials" |
| file | string | – | Exact spec path (*.spec.ts / *.test.ts) inside the project instead of the default location |
| liveInspect | boolean | – | Verify discovered selectors against the live page (default true when a URL is known) |
| overwrite | boolean | – | Replace an existing spec at the target path (only specs this tool generated) |
| pageUrl | string | – | Page the test starts on (default: baseURL from playwright.config) |
| projectRoot | string | – | Project directory; defaults to the server working directory |
| testDir | string | – | Directory for the generated spec (default: detected testDir or tests/) |
| write | boolean | – | Write the file to disk (default true) |
No output schema declared.
No examples provided.
get-failure Analyze a test failure ~112
Analyze one failure from the most recent run-test execution: full message and code frame, expected vs actual, stack trace, failed network requests (4xx/5xx and dead endpoints), console errors, failure kind (assertion/timeout/browser-crash/syntax/config/server-unreachable) and concrete next steps. Use run-test first.
| Name | Type | Req | Description |
|---|---|---|---|
| index | integer | – | 1-based failure index from the last run (default 1) |
| projectRoot | string | – | Only used to re-read the stored report |
No output schema declared.
No examples provided.
get-run-status Check a background run ~88
Progress (tests done/total, failures so far) or the final result of a run-test background run; the result becomes the last run for get-failure. waitSeconds waits; cancel stops it. Default: the latest run.
| Name | Type | Req | Description |
|---|---|---|---|
| cancel | boolean | – | – |
| runId | string | – | – |
| waitSeconds | integer | – | Wait up to this long for it to finish |
No output schema declared.
No examples provided.
inspect-page Inspect live page DOM ~308
Open a URL headlessly and return its elements with Playwright locators proven unique on the page (role + name first), CSS selectors, visibility, text and console messages. storageState/headers open it signed in; actions click/fill first to reach a state. view 'locators' is the compact map.
| Name | Type | Req | Description |
|---|---|---|---|
| actions | array | – | Steps run after load to reach a state (modal, step 3) |
| headers | object | – | Extra HTTP headers, e.g. Authorization |
| includeHtml | boolean | – | Include the rendered HTML (truncated) |
| maxHtmlChars | integer | – | HTML cap when includeHtml is set (default 20000) |
| projectRoot | string | – | Project whose Playwright launches the browser (default: server root) |
| selector | string | – | CSS selector: inspect matches instead of the whole DOM |
| storageState | string | – | Logged-in session: storageState JSON inside the project, e.g. playwright/.auth/user.json |
| timeoutMs | integer | – | Overall inspection limit in ms (default 45000) |
| url | string | yes | Full URL of the page to open (http/https) |
| view | string | – | 'locators': compact map of interactive elements (cheapest); 'elements' (default): DOM inventory |
| viewport | object | – | – |
| waitFor | string | – | Wait for this selector first |
| waitUntil | string | – | Navigation wait condition (default domcontentloaded) |
No output schema declared.
No examples provided.
list-tests List available tests ~149
List the Playwright tests available in the project (file, line, full title, projects), with optional filtering. Uses `playwright test --list` when Playwright works and falls back to a source scan when the install or config is broken, reporting why.
| Name | Type | Req | Description |
|---|---|---|---|
| config | string | – | playwright.config path or 1-based index when the project has several configs |
| filter | string | – | Case-insensitive substring filter on "file › title" |
| limit | integer | – | Max tests to return (default 500) |
| projectRoot | string | – | Project directory; defaults to the server working directory |
| testDir | string | – | Restrict scanning to this directory (inside the project) |
No output schema declared.
No examples provided.
run-test Run E2E tests ~375
Run the project's Playwright tests: stats plus each failure's file:line, kind and message. Diagnoses missing installs, dead dev servers, syntax errors, crashes and timeouts (kills the tree, keeps partial results). Reports progress; background: true returns a run id for long suites. Runs are recorded for analyze-history.
| Name | Type | Req | Description |
|---|---|---|---|
| args | array | – | Extra Playwright flags from an allowlist, as --flag or --flag=value (e.g. --repeat-each=3, --shard=1/2, --trace=on) |
| background | boolean | – | Return a run id at once; poll get-run-status |
| browser | string | – | Playwright project name to run (matched against playwright.config projects) |
| config | string | – | playwright.config path or 1-based index when the project has several configs |
| grep | string | – | Only run tests whose title matches this regex |
| headed | boolean | – | Run with a visible browser window |
| lastFailed | boolean | – | Only re-run tests that failed in the previous run (Playwright --last-failed) — the fast fix → re-run loop |
| projectRoot | string | – | Project directory; defaults to the server working directory |
| retries | integer | – | – |
| retryOnFailure | boolean | – | Auto retry failing tests once before reporting failure (default true; ignored when retries is set) |
| testFiles | array | – | Test files/directories relative to the project root; "file:line" is supported. Omit to run the whole suite. |
| testTimeoutMs | integer | – | Per-test timeout passed to Playwright |
| timeoutMs | integer | – | Hard wall-clock limit for the whole run; the process tree is killed past it (default 120000) |
| workers | integer | – | – |
No output schema declared.
No examples provided.
suggest-fix Suggest (and apply) a fix ~253
Patch a failure from the last run: a drifted locator is matched against the DOM at failure (trace, or live url) and replaced with one proven unique; changed copy gets the new expected text. Returns a diff and confidence; apply: true writes it, re-runs the test and reverts if still red. Refuses when the element is truly missing (app bug).
| Name | Type | Req | Description |
|---|---|---|---|
| allowExpectationUpdate | boolean | – | Allow applying changed expected text (can hide regressions) |
| apply | boolean | – | Write the fix (default: diff only) |
| config | string | – | playwright.config path or 1-based index |
| headers | object | – | Extra HTTP headers, e.g. Authorization |
| index | integer | – | 1-based failure index (default 1) |
| projectRoot | string | – | – |
| storageState | string | – | Logged-in session: storageState JSON inside the project, e.g. playwright/.auth/user.json |
| timeoutMs | integer | – | Verification run limit (default 120000) |
| url | string | – | Heal against this live page instead of the trace snapshot |
| verify | boolean | – | Re-run after applying; revert if still failing (default true) |
No output schema declared.
No examples provided.
validate-selector Validate selector or locator ~221
Check a CSS selector, Playwright selector or locator (getByRole/getByTestId…, .first(), .filter()) on a live page: validity, match count (actions need exactly 1), sample matches and a sturdier verified locator for each. Accepts storageState/headers/actions.
| Name | Type | Req | Description |
|---|---|---|---|
| actions | array | – | Steps run after load to reach a state (modal, step 3) |
| headers | object | – | Extra HTTP headers, e.g. Authorization |
| projectRoot | string | – | Project whose Playwright launches the browser (default: server root) |
| selector | string | yes | Selector or locator, e.g. getByRole('button', { name: 'Save' }) |
| storageState | string | – | Logged-in session: storageState JSON inside the project, e.g. playwright/.auth/user.json |
| timeoutMs | integer | – | Overall limit in ms (default 45000) |
| url | string | yes | Full URL of the live page to test against (http/https) |
| viewport | object | – | – |
No output schema declared.
No examples provided.
How do I install the Playwright E2E MCP server?
Playwright E2E MCP runs locally as an npm package, launched with npx -y playwright-e2e-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · playwright-e2e-mcp
claude mcp add xsignon-secure-e2e -- npx -y playwright-e2e-mcp
What is the Playwright E2E MCP server?
Playwright E2E MCP is listed in the public MCP registry as io.github.xsignon-secure/E2E. Diagnose and fix failing Playwright tests: traces, verified fixes, flaky/order verdicts, a11y audit. This page covers its npm package (playwright-e2e-mcp).
Is the Playwright E2E MCP server safe to use?
Playwright E2E MCP scores 82 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 24 October 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Playwright E2E MCP server expose?
Playwright E2E MCP exposes 12 tools: run-test, get-run-status, get-failure, suggest-fix, inspect-page, and 7 more. Their descriptions and schemas cost roughly 2,967 tokens of context every time the server is loaded.
Is the Playwright E2E MCP server still maintained?
Playwright E2E MCP is still listed as active in the MCP registry. We last reached this channel on 24 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Playwright E2E MCP server under?
Playwright E2E MCP declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.