mcp-accessibility-scanner 3.3.2 → 3.5.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 (69) hide show
  1. package/README.md +146 -11
  2. package/config.d.ts +48 -3
  3. package/lib/browserContextFactory.js +15 -313
  4. package/lib/browserContextFactory.js.map +1 -1
  5. package/lib/browserServerBackend.js +11 -0
  6. package/lib/browserServerBackend.js.map +1 -1
  7. package/lib/browserSessions.js +3 -0
  8. package/lib/browserSessions.js.map +1 -1
  9. package/lib/config.js +70 -12
  10. package/lib/config.js.map +1 -1
  11. package/lib/context.js +463 -57
  12. package/lib/context.js.map +1 -1
  13. package/lib/extension/cdpRelay.js +82 -14
  14. package/lib/extension/cdpRelay.js.map +1 -1
  15. package/lib/extension/extensionContextFactory.js +15 -8
  16. package/lib/extension/extensionContextFactory.js.map +1 -1
  17. package/lib/index.js +2 -0
  18. package/lib/index.js.map +1 -1
  19. package/lib/mcp/http.js +115 -41
  20. package/lib/mcp/http.js.map +1 -1
  21. package/lib/mcp/server.js +16 -8
  22. package/lib/mcp/server.js.map +1 -1
  23. package/lib/mcp/tool.js +11 -9
  24. package/lib/mcp/tool.js.map +1 -1
  25. package/lib/program.js +28 -8
  26. package/lib/program.js.map +1 -1
  27. package/lib/response.js +22 -5
  28. package/lib/response.js.map +1 -1
  29. package/lib/sessionLog.js +66 -20
  30. package/lib/sessionLog.js.map +1 -1
  31. package/lib/tab.js +13 -7
  32. package/lib/tab.js.map +1 -1
  33. package/lib/tools/auditKeyboard.js +27 -25
  34. package/lib/tools/auditKeyboard.js.map +1 -1
  35. package/lib/tools/auditScreenReader.js +27 -18
  36. package/lib/tools/auditScreenReader.js.map +1 -1
  37. package/lib/tools/auditSite.js +88 -56
  38. package/lib/tools/auditSite.js.map +1 -1
  39. package/lib/tools/axe.js +32 -7
  40. package/lib/tools/axe.js.map +1 -1
  41. package/lib/tools/common.js +39 -1
  42. package/lib/tools/common.js.map +1 -1
  43. package/lib/tools/files.js +60 -3
  44. package/lib/tools/files.js.map +1 -1
  45. package/lib/tools/install.js +1 -1
  46. package/lib/tools/install.js.map +1 -1
  47. package/lib/tools/pdf.js +4 -2
  48. package/lib/tools/pdf.js.map +1 -1
  49. package/lib/tools/recorder.js +52 -0
  50. package/lib/tools/recorder.js.map +1 -0
  51. package/lib/tools/report.js +13 -0
  52. package/lib/tools/report.js.map +1 -0
  53. package/lib/tools/scanPageMatrix.js +20 -33
  54. package/lib/tools/scanPageMatrix.js.map +1 -1
  55. package/lib/tools/screenshot.js +7 -3
  56. package/lib/tools/screenshot.js.map +1 -1
  57. package/lib/tools/snapshot.js +10 -3
  58. package/lib/tools/snapshot.js.map +1 -1
  59. package/lib/tools.js +5 -1
  60. package/lib/tools.js.map +1 -1
  61. package/lib/vscode/browserContextFactory.js +16 -12
  62. package/lib/vscode/browserContextFactory.js.map +1 -1
  63. package/lib/vscode/host.js +25 -2
  64. package/lib/vscode/host.js.map +1 -1
  65. package/lib/vscode/main.js +15 -0
  66. package/lib/vscode/main.js.map +1 -1
  67. package/lib/vscode/validation.js +78 -0
  68. package/lib/vscode/validation.js.map +1 -0
  69. package/package.json +9 -8
package/lib/tools.js CHANGED
@@ -25,6 +25,7 @@ import mouse from './tools/mouse.js';
25
25
  import navigate from './tools/navigate.js';
26
26
  import network from './tools/network.js';
27
27
  import pdf from './tools/pdf.js';
28
+ import recorder from './tools/recorder.js';
28
29
  import session from './tools/session.js';
29
30
  import snapshot from './tools/snapshot.js';
30
31
  import tabs from './tools/tabs.js';
@@ -49,6 +50,7 @@ export const allTools = [
49
50
  ...network,
50
51
  ...mouse,
51
52
  ...pdf,
53
+ ...recorder,
52
54
  ...screenshot,
53
55
  ...session,
54
56
  ...snapshot,
@@ -61,7 +63,9 @@ export const allTools = [
61
63
  ...auditScreenReader,
62
64
  ];
63
65
  export function filteredTools(config) {
64
- return allTools.filter(tool => tool.capability.startsWith('core') || config.capabilities?.includes(tool.capability));
66
+ return allTools.filter(tool => tool.capability.startsWith('core')
67
+ || config.capabilities?.includes(tool.capability)
68
+ || (tool.capability === 'install' && config.capabilities?.includes('core-install')));
65
69
  }
66
70
  export const serverInstructions = [
67
71
  'This server runs automated web accessibility audits (axe-core / WCAG) and drives a real browser via Playwright.',
package/lib/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,MAAM,kBAAkB,CAAC;AACrC,OAAO,IAAI,MAAM,iBAAiB,CAAC;AACnC,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,MAAM,kBAAkB,CAAC;AACrC,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,GAAG,MAAM,gBAAgB,CAAC;AACjC,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,OAAO,IAAI,MAAM,iBAAiB,CAAC;AACnC,OAAO,UAAU,MAAM,uBAAuB,CAAC;AAC/C,OAAO,IAAI,MAAM,iBAAiB,CAAC;AACnC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,SAAS,MAAM,sBAAsB,CAAC;AAC7C,OAAO,cAAc,MAAM,2BAA2B,CAAC;AACvD,OAAO,aAAa,MAAM,0BAA0B,CAAC;AACrD,OAAO,iBAAiB,MAAM,8BAA8B,CAAC;AAK7D,sFAAsF;AACtF,MAAM,CAAC,MAAM,QAAQ,GAAgB;IACnC,GAAG,MAAM;IACT,GAAG,OAAO;IACV,GAAG,OAAO;IACV,GAAG,QAAQ;IACX,GAAG,KAAK;IACR,GAAG,IAAI;IACP,GAAG,OAAO;IACV,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,OAAO;IACV,GAAG,KAAK;IACR,GAAG,GAAG;IACN,GAAG,UAAU;IACb,GAAG,OAAO;IACV,GAAG,QAAQ;IACX,GAAG,IAAI;IACP,GAAG,IAAI;IACP,GAAG,MAAM;IACT,GAAG,SAAS;IACZ,GAAG,cAAc;IACjB,GAAG,aAAa;IAChB,GAAG,iBAAiB;CACrB,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,MAAkB;IAC9C,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AACvH,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,iHAAiH;IACjH,gHAAgH;IAChH,2GAA2G;IAC3G,kHAAkH;IAClH,6EAA6E;IAC7E,mHAAmH;IACnH,qFAAqF;IACrF,4GAA4G;IAC5G,+GAA+G;IAC/G,8GAA8G;IAC9G,uGAAuG;CACxG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,MAAM,kBAAkB,CAAC;AACrC,OAAO,IAAI,MAAM,iBAAiB,CAAC;AACnC,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,MAAM,kBAAkB,CAAC;AACrC,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,GAAG,MAAM,gBAAgB,CAAC;AACjC,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,OAAO,IAAI,MAAM,iBAAiB,CAAC;AACnC,OAAO,UAAU,MAAM,uBAAuB,CAAC;AAC/C,OAAO,IAAI,MAAM,iBAAiB,CAAC;AACnC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,SAAS,MAAM,sBAAsB,CAAC;AAC7C,OAAO,cAAc,MAAM,2BAA2B,CAAC;AACvD,OAAO,aAAa,MAAM,0BAA0B,CAAC;AACrD,OAAO,iBAAiB,MAAM,8BAA8B,CAAC;AAK7D,sFAAsF;AACtF,MAAM,CAAC,MAAM,QAAQ,GAAgB;IACnC,GAAG,MAAM;IACT,GAAG,OAAO;IACV,GAAG,OAAO;IACV,GAAG,QAAQ;IACX,GAAG,KAAK;IACR,GAAG,IAAI;IACP,GAAG,OAAO;IACV,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,OAAO;IACV,GAAG,KAAK;IACR,GAAG,GAAG;IACN,GAAG,QAAQ;IACX,GAAG,UAAU;IACb,GAAG,OAAO;IACV,GAAG,QAAQ;IACX,GAAG,IAAI;IACP,GAAG,IAAI;IACP,GAAG,MAAM;IACT,GAAG,SAAS;IACZ,GAAG,cAAc;IACjB,GAAG,aAAa;IAChB,GAAG,iBAAiB;CACrB,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,MAAkB;IAC9C,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;WAC5D,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;WAC9C,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,iHAAiH;IACjH,gHAAgH;IAChH,2GAA2G;IAC3G,kHAAkH;IAClH,6EAA6E;IAC7E,mHAAmH;IACnH,qFAAqF;IACrF,4GAA4G;IAC5G,+GAA+G;IAC/G,8GAA8G;IAC9G,uGAAuG;CACxG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC"}
@@ -13,19 +13,20 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { applyStorageStateToReusedContext, assertStorageStateDoesNotResetUserProfile } from '../browserContextFactory.js';
17
- // Shared with the host's browser_connect validation so the two never drift:
18
- // the host checks the combination before tearing down the working provider,
19
- // and the factory keeps the same check as the last line of defense.
20
- export const vscodeProfileConflictRemedy = 'Drop --user-data-dir (the state is applied inside the extension\'s own browser profile), or drop the storage state and sign in in that profile instead.';
16
+ import { assertReusedContextStorageStateSupported, assertStorageStateDoesNotResetUserProfile } from '../browserContextFactory.js';
17
+ import { validateBrowserConnectConnectionString } from './validation.js';
18
+ // Shared with the host's browser_connect validation (see validation.ts) so
19
+ // the two never drift: the host checks the combination before tearing down
20
+ // the working provider, and the factory keeps the same check as the last
21
+ // line of defense.
22
+ export const vscodeProfileConflictRemedy = 'Drop --storage-state and sign in in the profile, or use a fresh isolated browser outside the VS Code provider.';
21
23
  export class VSCodeBrowserContextFactory {
22
24
  _config;
23
25
  _playwright;
24
26
  _connectionString;
25
27
  name = 'vscode';
26
28
  description = 'Connect to a browser running in the Playwright VS Code extension';
27
- // A fresh context is created with the state; a reused extension context gets
28
- // it applied via setStorageState(), like the other reused-context factories.
29
+ // Fresh contexts accept storage state; existing extension contexts reject it.
29
30
  appliesStorageState = true;
30
31
  // Each createContext() reuses the extension browser's existing context when
31
32
  // one is present, so two sessions would end up in the same context (same
@@ -44,7 +45,9 @@ export class VSCodeBrowserContextFactory {
44
45
  // already refuses to do. Checked before connecting, so the contradiction
45
46
  // fails fast without ever reaching the browser.
46
47
  assertStorageStateDoesNotResetUserProfile(this._config, vscodeProfileConflictRemedy);
47
- let launchOptions = this._config.browser.launchOptions;
48
+ let launchOptions = { ...this._config.browser.launchOptions };
49
+ if (this._config.browser.chromiumSandboxDefaulted)
50
+ delete launchOptions.chromiumSandbox;
48
51
  if (this._config.browser.userDataDir) {
49
52
  launchOptions = {
50
53
  ...launchOptions,
@@ -52,6 +55,9 @@ export class VSCodeBrowserContextFactory {
52
55
  userDataDir: this._config.browser.userDataDir,
53
56
  };
54
57
  }
58
+ const connectionError = validateBrowserConnectConnectionString(this._connectionString);
59
+ if (connectionError)
60
+ throw new Error(connectionError);
55
61
  const connectionString = new URL(this._connectionString);
56
62
  connectionString.searchParams.set('launch-options', JSON.stringify(launchOptions));
57
63
  const browserType = this._playwright.chromium; // it could also be firefox or webkit, we just need some browser type to call `connect` on
@@ -60,10 +66,8 @@ export class VSCodeBrowserContextFactory {
60
66
  try {
61
67
  const existing = browser.contexts()[0];
62
68
  if (existing) {
63
- // Without this, a configured storage state would be silently ignored on
64
- // the reuse path while newContext() below applies it — authenticated
65
- // scans would run anonymously depending on which branch was taken.
66
- await applyStorageStateToReusedContext(this._config, existing);
69
+ // Importing into an existing context requires an unsafe rollback snapshot.
70
+ assertReusedContextStorageStateSupported(this._config);
67
71
  context = existing;
68
72
  }
69
73
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"browserContextFactory.js","sourceRoot":"","sources":["../../src/vscode/browserContextFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,gCAAgC,EAAE,yCAAyC,EAAE,MAAM,6BAA6B,CAAC;AAK1H,4EAA4E;AAC5E,4EAA4E;AAC5E,oEAAoE;AACpE,MAAM,CAAC,MAAM,2BAA2B,GAAG,yJAAyJ,CAAC;AAErM,MAAM,OAAO,2BAA2B;IAWlB,OAAO;IAAsB,WAAW;IAAuC,iBAAiB;IAVpH,IAAI,GAAG,QAAQ,CAAC;IAChB,WAAW,GAAG,kEAAkE,CAAC;IACjF,6EAA6E;IAC7E,6EAA6E;IACpE,mBAAmB,GAAG,IAAI,CAAC;IACpC,4EAA4E;IAC5E,yEAAyE;IACzE,gEAAgE;IACvD,yBAAyB,GAAG,mIAAmI,CAAC;IAEzK,YAAoB,OAAmB,EAAU,WAAwC,EAAU,iBAAyB;uBAAxG,OAAO;2BAAsB,WAAW;iCAAuC,iBAAiB;IAAW,CAAC;IAEhI,KAAK,CAAC,aAAa,CAAC,UAAsB,EAAE,WAAwB;QAClE,sEAAsE;QACtE,yEAAyE;QACzE,kEAAkE;QAClE,qEAAqE;QACrE,yEAAyE;QACzE,gDAAgD;QAChD,yCAAyC,CAAC,IAAI,CAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC;QACrF,IAAI,aAAa,GAAQ,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;QAC5D,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACrC,aAAa,GAAG;gBACd,GAAG,aAAa;gBAChB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc;gBACtC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW;aAC9C,CAAC;QACJ,CAAC;QACD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACzD,gBAAgB,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;QAEnF,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,0FAA0F;QACzI,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEvE,IAAI,OAAuB,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,QAAQ,EAAE,CAAC;gBACb,wEAAwE;gBACxE,qEAAqE;gBACrE,mEAAmE;gBACnE,MAAM,gCAAgC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAC/D,OAAO,GAAG,QAAQ,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,yEAAyE;YACzE,uDAAuD;YACvD,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACtC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,OAAO;YACL,cAAc,EAAE,OAAO;YACvB,KAAK,EAAE,KAAK,IAAI,EAAE;gBAChB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACxB,CAAC;SACF,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"browserContextFactory.js","sourceRoot":"","sources":["../../src/vscode/browserContextFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,wCAAwC,EAAE,yCAAyC,EAAE,MAAM,6BAA6B,CAAC;AAIlI,OAAO,EAAE,sCAAsC,EAAE,MAAM,iBAAiB,CAAC;AAEzE,2EAA2E;AAC3E,2EAA2E;AAC3E,yEAAyE;AACzE,mBAAmB;AACnB,MAAM,CAAC,MAAM,2BAA2B,GAAG,gHAAgH,CAAC;AAE5J,MAAM,OAAO,2BAA2B;IAUlB,OAAO;IAAsB,WAAW;IAAuC,iBAAiB;IATpH,IAAI,GAAG,QAAQ,CAAC;IAChB,WAAW,GAAG,kEAAkE,CAAC;IACjF,8EAA8E;IACrE,mBAAmB,GAAG,IAAI,CAAC;IACpC,4EAA4E;IAC5E,yEAAyE;IACzE,gEAAgE;IACvD,yBAAyB,GAAG,mIAAmI,CAAC;IAEzK,YAAoB,OAAmB,EAAU,WAAwC,EAAU,iBAAyB;uBAAxG,OAAO;2BAAsB,WAAW;iCAAuC,iBAAiB;IAAW,CAAC;IAEhI,KAAK,CAAC,aAAa,CAAC,UAAsB,EAAE,WAAwB;QAClE,sEAAsE;QACtE,yEAAyE;QACzE,kEAAkE;QAClE,qEAAqE;QACrE,yEAAyE;QACzE,gDAAgD;QAChD,yCAAyC,CAAC,IAAI,CAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC;QACrF,IAAI,aAAa,GAA4B,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QACvF,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,wBAAwB;YAC/C,OAAO,aAAa,CAAC,eAAe,CAAC;QACvC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACrC,aAAa,GAAG;gBACd,GAAG,aAAa;gBAChB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc;gBACtC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW;aAC9C,CAAC;QACJ,CAAC;QACD,MAAM,eAAe,GAAG,sCAAsC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACvF,IAAI,eAAe;YACjB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACnC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACzD,gBAAgB,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;QAEnF,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,0FAA0F;QACzI,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEvE,IAAI,OAAuB,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,QAAQ,EAAE,CAAC;gBACb,2EAA2E;gBAC3E,wCAAwC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvD,OAAO,GAAG,QAAQ,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,yEAAyE;YACzE,uDAAuD;YACvD,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACtC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,OAAO;YACL,cAAc,EAAE,OAAO;YACvB,KAAK,EAAE,KAAK,IAAI,EAAE;gBAChB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACxB,CAAC;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -28,6 +28,7 @@ import { BrowserServerBackend } from '../browserServerBackend.js';
28
28
  import { BrowserSessionRegistry } from '../browserSessions.js';
29
29
  import { assertStorageStateDoesNotResetUserProfile, contextFactory } from '../browserContextFactory.js';
30
30
  import { vscodeProfileConflictRemedy } from './browserContextFactory.js';
31
+ import { validateBrowserConnectConnectionString, validateBrowserConnectLib } from './validation.js';
31
32
  const contextSwitchOptions = z.object({
32
33
  connectionString: z.string().optional().describe('The connection string to use to connect to the browser'),
33
34
  lib: z.string().optional().describe('The library to use for the connection'),
@@ -147,6 +148,24 @@ export class VSCodeProxyBackend {
147
148
  content: [{ type: 'text', text: '### Result\nSuccessfully disconnected.\n' }],
148
149
  };
149
150
  }
151
+ // Strict allowlist validation before spawning: `lib` flows into a bare
152
+ // `import()` in the child and `connectionString` into `connect()`, so an
153
+ // unconstrained value gives any MCP caller server-side RCE/SSRF. Rejected
154
+ // here, before the working provider is torn down.
155
+ const libError = validateBrowserConnectLib(params.lib);
156
+ if (libError) {
157
+ return {
158
+ content: [{ type: 'text', text: `### Result\n${libError}\n` }],
159
+ isError: true,
160
+ };
161
+ }
162
+ const connectionError = validateBrowserConnectConnectionString(params.connectionString);
163
+ if (connectionError) {
164
+ return {
165
+ content: [{ type: 'text', text: `### Result\n${connectionError}\n` }],
166
+ isError: true,
167
+ };
168
+ }
150
169
  // The child's factory would only surface this on the first browser
151
170
  // operation — after the working provider has already been torn down,
152
171
  // leaving the session attached to a provider that can never create a
@@ -173,6 +192,7 @@ export class VSCodeProxyBackend {
173
192
  return new StdioClientTransport({
174
193
  command: process.execPath,
175
194
  cwd: process.cwd(),
195
+ env: { PLAYWRIGHT_MCP_VSCODE_ALLOW_REMOTE: process.env.PLAYWRIGHT_MCP_VSCODE_ALLOW_REMOTE ?? '' },
176
196
  args: [
177
197
  path.join(fileURLToPath(import.meta.url), '..', 'main.js'),
178
198
  // The fallback output dir is memoized on the config OBJECT, and
@@ -180,7 +200,7 @@ export class VSCodeProxyBackend {
180
200
  // materializing the resolved dir here, the spawned provider would
181
201
  // open a second temp root and scatter one run's artifacts across
182
202
  // the provider switch.
183
- JSON.stringify({ ...this._config, outputDir: resolveOutputDir(this._config) }),
203
+ JSON.stringify({ ...this._config, server: { ...this._config.server, authToken: undefined }, outputDir: resolveOutputDir(this._config) }),
184
204
  connectionString,
185
205
  lib,
186
206
  ],
@@ -227,7 +247,10 @@ export class VSCodeProxyBackend {
227
247
  inputSchema: z.toJSONSchema(contextSwitchOptions),
228
248
  annotations: {
229
249
  title: 'Connect to a browser running in VS Code.',
230
- readOnlyHint: true,
250
+ // Spawns a provider child process and tears down the working one —
251
+ // decidedly not read-only.
252
+ readOnlyHint: false,
253
+ destructiveHint: true,
231
254
  openWorldHint: false,
232
255
  },
233
256
  };
@@ -1 +1 @@
1
- {"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/vscode/host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,yCAAyC,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACxG,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAIzE,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;IAC1G,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CAC7E,CAAC,CAAC;AAEH,cAAc;AACd,MAAM,OAAO,kBAAkB;IAsBA,OAAO;IAA+B,wBAAwB;IAA6C,WAAW;IArBnJ,IAAI,GAAG,gCAAgC,CAAC;IACxC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;IAEtB,cAAc,CAAqB;IAC3C,sEAAsE;IACtE,2EAA2E;IAC3E,0EAA0E;IAClE,kBAAkB,GAAG,IAAI,CAAC;IAClC,mEAAmE;IACnE,2EAA2E;IAC3E,4EAA4E;IAC5E,yDAAyD;IACjD,uBAAuB,GAAG,KAAK,CAAC;IACxC,qEAAqE;IACrE,qEAAqE;IACrE,2DAA2D;IACnD,cAAc,CAA8B;IAC5C,kBAAkB,CAAO;IACzB,cAAc,CAAiB;IAC/B,eAAe,CAAmC;IAE1D,YAA6B,OAAmB,EAAmB,wBAAkD,EAAmB,WAA8B;uBAAzI,OAAO;wCAA+B,wBAAwB;2BAA6C,WAAW;QACjJ,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAA6B,EAAE,aAA4B;QAC1E,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,yEAAyE;QACzE,0EAA0E;QAC1E,wEAAwE;QACxE,wEAAwE;QACxE,wEAAwE;QACxE,uEAAuE;QACvE,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;QAC3C,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;YAC7B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAChC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;YACrC,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;QACxD,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAe,CAAC,SAAS,EAAE,CAAC;QACxD,OAAO;YACL,GAAG,QAAQ,CAAC,KAAK;YACjB,IAAI,CAAC,kBAAkB;SACxB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,IAA4C,EAAE,cAAiD;QAC1H,IAAI,IAAI,KAAK,IAAI,CAAC,kBAAkB,CAAC,IAAI;YACvC,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAW,EAAE,cAAc,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACrD,OAAO,MAAM,MAAM,CAAC,QAAQ,CAAC;YAC3B,IAAI;YACJ,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,cAAc,EAAE,KAAK;SAC7B,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;OAUG;IACK,KAAK,CAAC,cAAc,CAAC,IAAY,EAAE,IAA4C;QACrF,MAAM,cAAc,GAAG,IAAI,KAAK,sBAAsB,IAAI,IAAI,KAAK,uBAAuB,IAAI,OAAO,IAAI,EAAE,gBAAgB,KAAK,QAAQ,CAAC;QACzI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,uBAAuB;YACjD,OAAO,IAAI,CAAC,cAAe,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC,EAAE,CAAC;YAC5F,uEAAuE;YACvE,qEAAqE;YACrE,kDAAkD;YAClD,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE;gBAClB,IAAI,IAAI,CAAC,cAAc,KAAK,QAAQ;oBAClC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YACpC,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC;QACjC,CAAC;QACD,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC;IACnC,CAAC;IAED,YAAY;QACV,IAAI,IAAI,CAAC,kBAAkB;YACzB,KAAK,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;aACxD,IAAI,IAAI,CAAC,cAAc;YAC1B,uEAAuE;YACvE,mEAAmE;YACnE,KAAK,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACtD,qEAAqE;QACrE,uEAAuE;QACvE,KAAK,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACpF,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,MAA4C,EAAE,eAAkD;QACnI,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YAC5C,IAAI,IAAI,CAAC,WAAW;gBAClB,MAAM,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;;gBAE1C,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,wBAAwB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAClF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0CAA0C,EAAE,CAAC;aAC9E,CAAC;QACJ,CAAC;QAED,mEAAmE;QACnE,qEAAqE;QACrE,qEAAqE;QACrE,kEAAkE;QAClE,oCAAoC;QACpC,IAAI,CAAC;YACH,yCAAyC,CAAC,IAAI,CAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC;QACvF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC5G,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,WAAW;YAClB,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,gBAAiB,EAAE,MAAM,CAAC,GAAI,CAAC,CAAC,CAAC;;YAEzG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACpH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uCAAuC,EAAE,CAAC;SAC3E,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,gBAAwB,EAAE,GAAW;QACxE,OAAO,IAAI,oBAAoB,CAAC;YAC9B,OAAO,EAAE,OAAO,CAAC,QAAQ;YACzB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,IAAI,EAAE;gBACJ,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;gBAC1D,gEAAgE;gBAChE,kEAAkE;gBAClE,kEAAkE;gBAClE,iEAAiE;gBACjE,uBAAuB;gBACvB,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9E,gBAAgB;gBAChB,GAAG;aACJ;SACF,CAAC,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,sEAAsE;IACtE,0EAA0E;IAC1E,uEAAuE;IACvE,0EAA0E;IAC1E,eAAe;IACP,KAAK,CAAC,mBAAmB,CAAC,eAAuD;QACvF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC9F,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;QAChF,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;QACjF,wEAAwE;QACxE,gEAAgE;QAChE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAY,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACvI,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;YAC7B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAChC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,6DAA6D;YAC7D,oEAAoE;YACpE,IAAI,CAAC,cAAc,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC;YACvF,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACtC,CAAC;QACD,sEAAsE;QACtE,sEAAsE;QACtE,wEAAwE;QACxE,kDAAkD;QAClD,IAAI,cAAc;YAChB,MAAM,IAAI,CAAC,WAAY,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAClD,MAAM,aAAa,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACtD,MAAM,qBAAqB,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IACrH,CAAC;IAEO,wBAAwB;QAC9B,OAAO;YACL,IAAI,EAAE,iBAAiB;YACvB,WAAW,EAAE,gIAAgI;YAC7I,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,oBAAoB,CAAwB;YACxE,WAAW,EAAE;gBACX,KAAK,EAAE,0CAA0C;gBACjD,YAAY,EAAE,IAAI;gBAClB,aAAa,EAAE,KAAK;aACrB;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,SAAoB,EAAE,cAAuB,EAAE,SAAS,GAAG,KAAK;QAC9F,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3H,MAAM,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;QAErC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;QAC7B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;QACzC,MAAM,qBAAqB,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IACxG,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,SAAoB;QAC/C,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,cAAe,CAAC,CAAC;QAChD,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,MAA0B;QACvD,IAAI,CAAC,MAAM;YACT,OAAO,EAAE,CAAC;QAEZ,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QAC3C,OAAO;YACL,GAAG,KAAK;YACR,IAAI,CAAC,kBAAkB;SACxB,CAAC;IACJ,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAkB,EAAE,mBAA4D;IACnH,0EAA0E;IAC1E,qEAAqE;IACrE,0EAA0E;IAC1E,2EAA2E;IAC3E,yEAAyE;IACzE,wEAAwE;IACxE,MAAM,qBAAqB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,eAAe,GAAG,IAAI,sBAAsB,EAAE,CAAC;IACrD,+DAA+D;IAC/D,wEAAwE;IACxE,0EAA0E;IAC1E,yEAAyE;IACzE,sEAAsE;IACtE,qBAAqB;IACrB,MAAM,UAAU,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAC1C,uEAAuE;IACvE,kEAAkE;IAClE,wEAAwE;IACxE,qEAAqE;IACrE,0EAA0E;IAC1E,mBAAmB,EAAE,CAAC,KAAK,IAAI,EAAE;QAC/B,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IACH,0EAA0E;IAC1E,2EAA2E;IAC3E,2BAA2B;IAC3B,MAAM,aAAa,GAAG,CAAC,uBAAgC,EAAE,IAAuB,EAAE,EAAE,CAClF,IAAI,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC,MAAM,EAAE,qBAAqB,EAAE,eAAe,EAAE,EAAE,uBAAuB,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC7K,MAAM,oBAAoB,GAAmC;QAC3D,IAAI,EAAE,sBAAsB;QAC5B,YAAY,EAAE,mBAAmB;QACjC,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,MAAM,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC;QAClC,eAAe,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC;KACvD,CAAC;IACF,MAAM,SAAS,CAAC,KAAK,CAAC,oBAAoB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3D,OAAO;AACT,CAAC"}
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/vscode/host.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,22 @@ import { StdioServerTransport } from '@modelcontextprotocol/server/stdio';
17
17
  import * as mcpServer from '../mcp/server.js';
18
18
  import { BrowserServerBackend } from '../browserServerBackend.js';
19
19
  import { VSCodeBrowserContextFactory } from './browserContextFactory.js';
20
+ import { validateBrowserConnectConnectionString, validateBrowserConnectLib } from './validation.js';
20
21
  async function main(config, connectionString, lib) {
22
+ // Defense-in-depth: the child must not trust parent argv blindly — the
23
+ // host already validated both values before spawning (see validation.ts).
24
+ const libError = validateBrowserConnectLib(lib);
25
+ if (libError) {
26
+ // eslint-disable-next-line no-console
27
+ console.error(`browser_connect: ${libError}`);
28
+ process.exit(1);
29
+ }
30
+ const connectionError = validateBrowserConnectConnectionString(connectionString);
31
+ if (connectionError) {
32
+ // eslint-disable-next-line no-console
33
+ console.error(`browser_connect: ${connectionError}`);
34
+ process.exit(1);
35
+ }
21
36
  const playwright = await import(lib).then(mod => mod.default ?? mod);
22
37
  const factory = new VSCodeBrowserContextFactory(config, playwright, connectionString);
23
38
  await mcpServer.connect({
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/vscode/main.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAGzE,KAAK,UAAU,IAAI,CAAC,MAAkB,EAAE,gBAAwB,EAAE,GAAW;IAC3E,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,IAAI,2BAA2B,CAAC,MAAM,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;IACtF,MAAM,SAAS,CAAC,OAAO,CACnB;QACE,IAAI,EAAE,gBAAgB;QACtB,YAAY,EAAE,mBAAmB;QACjC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC;QACvD,OAAO,EAAE,QAAQ;KAClB,EACD,IAAI,oBAAoB,EAAE,EAC1B,KAAK,CACR,CAAC;AACJ,CAAC;AAED,MAAM,IAAI,CACN,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAClB,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/vscode/main.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,sCAAsC,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAGpG,KAAK,UAAU,IAAI,CAAC,MAAkB,EAAE,gBAAwB,EAAE,GAAW;IAC3E,uEAAuE;IACvE,0EAA0E;IAC1E,MAAM,QAAQ,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,QAAQ,EAAE,CAAC;QACb,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,eAAe,GAAG,sCAAsC,CAAC,gBAAgB,CAAC,CAAC;IACjF,IAAI,eAAe,EAAE,CAAC;QACpB,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,oBAAoB,eAAe,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,IAAI,2BAA2B,CAAC,MAAM,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;IACtF,MAAM,SAAS,CAAC,OAAO,CACnB;QACE,IAAI,EAAE,gBAAgB;QACtB,YAAY,EAAE,mBAAmB;QACjC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC;QACvD,OAAO,EAAE,QAAQ;KAClB,EACD,IAAI,oBAAoB,EAAE,EAC1B,KAAK,CACR,CAAC;AACJ,CAAC;AAED,MAAM,IAAI,CACN,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAClB,CAAC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Copyright (c) Microsoft Corporation.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ // Shared `browser_connect` validation for the VS Code bridge, used by the
17
+ // host (before spawning the child), the child entrypoint (before `import()`),
18
+ // and the factory (before `connect()`), so the three never drift.
19
+ const allowedBrowserConnectLibs = new Set(['playwright', 'playwright-core']);
20
+ function isRemoteBrowserConnectAllowed() {
21
+ const value = process.env.PLAYWRIGHT_MCP_VSCODE_ALLOW_REMOTE?.trim().toLowerCase();
22
+ return value === '1' || value === 'true' || value === 'yes';
23
+ }
24
+ function isLoopbackHostname(hostname) {
25
+ const normalized = hostname.trim().toLowerCase().replace(/^\[(.*)\]$/, '$1').replace(/\.$/, '');
26
+ if (normalized === 'localhost' || normalized === '127.0.0.1' || normalized === '::1')
27
+ return true;
28
+ // The URL parser canonicalizes an IPv4-mapped IPv6 loopback such as
29
+ // [::ffff:127.0.0.1] to the hex form ::ffff:7f00:1 (two 16-bit groups),
30
+ // so accept that spelling too instead of failing closed on a legitimate
31
+ // loopback.
32
+ const v4Mapped = /^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(normalized);
33
+ if (v4Mapped)
34
+ return ((Number.parseInt(v4Mapped[1], 16) << 16) | Number.parseInt(v4Mapped[2], 16)) === 0x7f000001;
35
+ return false;
36
+ }
37
+ export function validateBrowserConnectLib(lib) {
38
+ if (typeof lib !== 'string' || !lib)
39
+ return 'Invalid `lib`: expected one of "playwright", "playwright-core".';
40
+ if (lib.includes('\0'))
41
+ return 'Invalid `lib`: null bytes are not allowed.';
42
+ if (lib.includes('/') || lib.includes('\\'))
43
+ return 'Invalid `lib`: path separators are not allowed, expected one of "playwright", "playwright-core".';
44
+ // The colon check also rejects every URL scheme (`data:`, `file:`, `https:`,
45
+ // `node:`, ...) — none may reach the child's `import()`.
46
+ if (lib.includes(':'))
47
+ return 'Invalid `lib`: URL schemes are not allowed, expected one of "playwright", "playwright-core".';
48
+ if (lib.startsWith('.'))
49
+ return 'Invalid `lib`: relative paths are not allowed, expected one of "playwright", "playwright-core".';
50
+ if (!allowedBrowserConnectLibs.has(lib))
51
+ return 'Invalid `lib`: expected one of "playwright", "playwright-core".';
52
+ return undefined;
53
+ }
54
+ export function validateBrowserConnectConnectionString(connectionString) {
55
+ if (typeof connectionString !== 'string' || !connectionString)
56
+ return 'Invalid `connectionString`: expected a ws: or wss: URL.';
57
+ if (connectionString.includes('\0'))
58
+ return 'Invalid `connectionString`: null bytes are not allowed.';
59
+ let url;
60
+ try {
61
+ url = new URL(connectionString);
62
+ }
63
+ catch {
64
+ return 'Invalid `connectionString`: expected a ws: or wss: URL.';
65
+ }
66
+ if (url.protocol !== 'ws:' && url.protocol !== 'wss:')
67
+ return `Invalid \`connectionString\`: only ws: and wss: URLs are allowed (got "${url.protocol}").`;
68
+ if (url.username || url.password)
69
+ return 'Invalid `connectionString`: credentials (userinfo) are not allowed.';
70
+ if (!url.hostname)
71
+ return 'Invalid `connectionString`: missing hostname.';
72
+ if (!isRemoteBrowserConnectAllowed() && !isLoopbackHostname(url.hostname))
73
+ return 'Invalid `connectionString`: only loopback hosts (localhost, 127.0.0.1, ::1) are allowed. Set PLAYWRIGHT_MCP_VSCODE_ALLOW_REMOTE=1 to allow remote hosts.';
74
+ if (!isLoopbackHostname(url.hostname) && url.protocol !== 'wss:')
75
+ return 'Invalid `connectionString`: remote hosts require wss: to protect connection credentials.';
76
+ return undefined;
77
+ }
78
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/vscode/validation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-accessibility-scanner",
3
- "version": "3.3.2",
3
+ "version": "3.5.0",
4
4
  "mcpName": "io.github.JustasMonkev/mcp-accessibility-scanner",
5
5
  "description": "A Model Context Protocol (MCP) server for performing automated accessibility scans of web pages using Playwright and Axe-core",
6
6
  "type": "module",
@@ -35,8 +35,9 @@
35
35
  "npm-publish": "npm run clean && npm run build && npm publish",
36
36
  "test": "vitest run",
37
37
  "test:docker": "bash ./tests/docker-smoke.sh",
38
- "test:mcp": "node .claude/run-mcp-direct-harness.mjs",
39
- "test:mcp:install": "node .claude/run-mcp-direct-harness.mjs --include-install",
38
+ "test:mcp": "npm run build && node .codex/run-mcp-direct-harness.mjs",
39
+ "test:mcp:install": "npm run build && node .codex/run-mcp-direct-harness.mjs --include-install",
40
+ "test:mcp:luna": "node .codex/run-mcp-tool-loop.mjs",
40
41
  "bench": "node bench/mcp-bench.mjs",
41
42
  "bench:compare": "node bench/mcp-bench.mjs --compare",
42
43
  "test:watch": "vitest",
@@ -51,8 +52,8 @@
51
52
  "axe-core": "4.13.0",
52
53
  "commander": "^15.0.0",
53
54
  "debug": "^4.4.3",
54
- "playwright": "1.63.0-alpha-2026-08-22",
55
- "playwright-core": "1.63.0-alpha-2026-08-22",
55
+ "playwright": "1.63.0",
56
+ "playwright-core": "1.63.0",
56
57
  "re2": "^1.26.1",
57
58
  "ws": "^8.21.3",
58
59
  "zod": "^4.4.3"
@@ -64,15 +65,15 @@
64
65
  "@types/json-schema": "^7.0.15",
65
66
  "@types/node": "^26.2.0",
66
67
  "@types/ws": "^8.18.1",
67
- "@vitest/coverage-v8": "^4.1.10",
68
- "@vitest/ui": "^4.1.10",
68
+ "@vitest/coverage-v8": "^5.0.1",
69
+ "@vitest/ui": "^5.0.1",
69
70
  "eslint": "^10.8.1",
70
71
  "eslint-plugin-notice": "^1.0.0",
71
72
  "happy-dom": "^20.11.2",
72
73
  "knip": "^6.32.2",
73
74
  "oxlint": "^1.78.0",
74
75
  "typescript": "^7.0.2",
75
- "vitest": "^4.1.10"
76
+ "vitest": "^5.0.1"
76
77
  },
77
78
  "keywords": [
78
79
  "mcp",