playwright-e2e-mcp 0.2.1 → 0.2.2

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 (2) hide show
  1. package/README.md +55 -9
  2. package/package.json +3 -1
package/README.md CHANGED
@@ -67,7 +67,7 @@ and every other MCP client — pick whichever route fits:
67
67
  | --- | --- |
68
68
  | **npm (canonical, fastest)** | `npx -y playwright-e2e-mcp` |
69
69
  | **MCP Registry** (registry-aware clients discover it automatically) | `io.github.trajectiq-ai/E2E` — [listing](https://registry.modelcontextprotocol.io/) |
70
- | **Any client, no npm account needed** | `npx -y github:trajectiq-ai/E2E#v0.2.1` (pin a release tag) |
70
+ | **Any client, no npm account needed** | `npx -y github:trajectiq-ai/E2E#v0.2.2` (pin a release tag) |
71
71
  | **Claude Desktop, zero Node setup** | double-click the [`.mcpb` extension](https://github.com/trajectiq-ai/E2E/releases) |
72
72
  | **Remote-only clients (ChatGPT connectors)** | `https://playwright-e2e-mcp.vercel.app/api/mcp` |
73
73
 
@@ -370,8 +370,8 @@ builds `dist/` automatically on install). Pin a release tag: an unpinned
370
370
  `github:trajectiq-ai/E2E` runs whatever is on the default branch at that moment.
371
371
 
372
372
  ```bash
373
- npx -y github:trajectiq-ai/E2E#v0.2.1
374
- npm install -D github:trajectiq-ai/E2E#v0.2.1 @playwright/test # or as a project dependency
373
+ npx -y github:trajectiq-ai/E2E#v0.2.2
374
+ npm install -D github:trajectiq-ai/E2E#v0.2.2 @playwright/test # or as a project dependency
375
375
  npx playwright install chromium
376
376
  ```
377
377
 
@@ -379,7 +379,7 @@ Or grab the packaged tarball from the repo's **GitHub Releases** page and instal
379
379
  it locally:
380
380
 
381
381
  ```bash
382
- npm install -D https://github.com/trajectiq-ai/E2E/releases/download/v0.2.1/playwright-e2e-mcp-0.2.1.tgz
382
+ npm install -D https://github.com/trajectiq-ai/E2E/releases/download/v0.2.2/playwright-e2e-mcp-0.2.2.tgz
383
383
  ```
384
384
 
385
385
  Listed in the **official [MCP Registry](https://registry.modelcontextprotocol.io/)** as
@@ -395,7 +395,7 @@ Listed in the **official [MCP Registry](https://registry.modelcontextprotocol.io
395
395
  "mcpServers": {
396
396
  "playwright-e2e": {
397
397
  "command": "npx",
398
- "args": ["-y", "github:trajectiq-ai/E2E#v0.2.1"],
398
+ "args": ["-y", "github:trajectiq-ai/E2E#v0.2.2"],
399
399
  "env": { "PW_MCP_PROJECT_ROOT": "/absolute/path/to/your/project" }
400
400
  }
401
401
  }
@@ -409,8 +409,8 @@ when the client launches it somewhere else (e.g. your home directory).
409
409
  **Codex / VS Code / Copilot CLIs:**
410
410
 
411
411
  ```bash
412
- codex mcp add playwright-e2e -- npx -y github:trajectiq-ai/E2E#v0.2.1
413
- code --add-mcp '{"name":"playwright-e2e","command":"npx","args":["-y","github:trajectiq-ai/E2E#v0.2.1"]}'
412
+ codex mcp add playwright-e2e -- npx -y github:trajectiq-ai/E2E#v0.2.2
413
+ code --add-mcp '{"name":"playwright-e2e","command":"npx","args":["-y","github:trajectiq-ai/E2E#v0.2.2"]}'
414
414
  ```
415
415
 
416
416
  Codex's defaults fight this server: the first launch clones the repo and runs
@@ -421,7 +421,7 @@ Codex's defaults fight this server: the first launch clones the repo and runs
421
421
  ```toml
422
422
  [mcp_servers.playwright-e2e]
423
423
  command = "npx"
424
- args = ["-y", "github:trajectiq-ai/E2E#v0.2.1"]
424
+ args = ["-y", "github:trajectiq-ai/E2E#v0.2.2"]
425
425
  startup_timeout_sec = 60
426
426
  tool_timeout_sec = 600
427
427
  ```
@@ -436,7 +436,7 @@ into `PW_MCP_PROJECT_ROOT`, so the tools point at a real project from the first
436
436
  **Claude Code:**
437
437
 
438
438
  ```bash
439
- claude mcp add playwright-e2e -- npx -y github:trajectiq-ai/E2E#v0.2.1
439
+ claude mcp add playwright-e2e -- npx -y github:trajectiq-ai/E2E#v0.2.2
440
440
  ```
441
441
 
442
442
  **Gemini CLI / Qwen Code:** paste the `mcpServers` block above into
@@ -685,6 +685,7 @@ npm test # build + test/run-tests.mjs (unit tests, any Node ≥20)
685
685
  npm run e2e # build + e2e/run.mjs: live MCP ↔ Playwright integration suite
686
686
  npm run mcpb # build + bundle dist/ into playwright-e2e-mcp-<version>.mcpb (+ .sha256)
687
687
  npm run mcpb:smoke # ...then install that bundle in a temp dir, launch it and assert the handshake
688
+ npm run mcpb:sign # ...then sign it with MCPB_CERT/MCPB_KEY → <version>.signed.mcpb
688
689
  ```
689
690
 
690
691
  Tests cover the report parser (sample Playwright JSON, trace attachments), path utils
@@ -725,6 +726,51 @@ that only appear end-to-end:
725
726
  First run needs the browser once: `npx playwright install chromium`.
726
727
  CI runs the suite on Ubuntu and Windows (see `.github/workflows/ci.yml`).
727
728
 
729
+ ### Signing the bundle
730
+
731
+ ```bash
732
+ MCPB_CERT=~/signing/cert.pem MCPB_KEY=~/signing/key.pem npm run mcpb:sign
733
+ ```
734
+
735
+ Signing appends a PKCS#7 signature block to the bundle, so the signed file is
736
+ *the reproducible bundle plus that block*. That ordering is the point: the bytes
737
+ CI proved identical across platforms stay inside the signed file, and
738
+ `mcpb unsign` returns them exactly. `scripts/sign-mcpb.mjs` asserts that round
739
+ trip on every run and deletes its output if it fails, which is what keeps
740
+ `<version>.signed.mcpb` tied to `<version>.mcpb`.
741
+
742
+ The private key is read from a path you pass in (`--cert`/`--key` or
743
+ `MCPB_CERT`/`MCPB_KEY`) and never from the repository — keep it outside version
744
+ control, and back it up: the same key across releases is what makes the signer
745
+ recognisable.
746
+
747
+ What signing does and does not buy you is decided by the certificate, not by
748
+ this script. `mcpb verify` and `mcpb info` accept a signature only when the
749
+ certificate chains to something in the OS trust store, so with a self-signed
750
+ certificate a host still reports **Not signed** — the signature is real
751
+ integrity and key continuity, verifiable by the fingerprint the script prints,
752
+ but not third-party identity. A certificate issued by a public CA, or an
753
+ internal one installed on your machines, is what makes hosts report it as
754
+ signed.
755
+
756
+ ### Verifying a published release
757
+
758
+ ```bash
759
+ git checkout v0.2.2 && npm ci && npm run mcpb
760
+ npm run release:verify -- v0.2.2
761
+ ```
762
+
763
+ The release notes promise that the tag rebuilds the published bundle byte for
764
+ byte. `scripts/verify-release.mjs` checks that promise from a checkout of the
765
+ tag: the published bundle against your fresh build, every checksum the release
766
+ publishes (and that nothing shippable is missing from `SHA256SUMS.txt`), a
767
+ **signed** bundle against the bytes its signature wraps, and that the published
768
+ archive still extracts with that version's manifest.
769
+ `.github/workflows/verify-release.yml` runs it on every published release and on
770
+ demand for any past tag. The `.tgz` is checked for download integrity only: npm
771
+ records the packer's line endings, so a tarball packed locally on another OS is
772
+ legitimately different.
773
+
728
774
  ### Try the example
729
775
 
730
776
  With Playwright installed in your project:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "playwright-e2e-mcp",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "MCP server that runs, diagnoses and fixes failing Playwright end-to-end tests: trace analysis, verified locator fixes, flaky ranking",
5
5
  "author": "trajectiq-ai <trajectiq@gmail.com>",
6
6
  "mcpName": "io.github.trajectiq-ai/E2E",
@@ -51,6 +51,8 @@
51
51
  "e2e": "npm run build && node e2e/run.mjs",
52
52
  "mcpb": "npm run build && node scripts/build-mcpb.mjs",
53
53
  "mcpb:smoke": "npm run mcpb && node scripts/mcpb-launch-sim.mjs && node scripts/mcpb-client-check.mjs",
54
+ "mcpb:sign": "npm run mcpb && node scripts/sign-mcpb.mjs",
55
+ "release:verify": "node scripts/verify-release.mjs",
54
56
  "prepublishOnly": "npm test"
55
57
  },
56
58
  "engines": {