playwriter 0.0.4 โ†’ 0.0.6

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.
@@ -1,12 +1,11 @@
1
- export declare function startPlayWriterCDPRelayServer({ port, logger }?: {
1
+ export declare function startPlayWriterCDPRelayServer({ port, host, logger }?: {
2
2
  port?: number;
3
+ host?: string;
3
4
  logger?: {
4
5
  log(...args: any[]): void;
5
6
  error(...args: any[]): void;
6
7
  };
7
8
  }): Promise<{
8
- cdpEndpoint: string;
9
- extensionEndpoint: string;
10
9
  close(): void;
11
10
  }>;
12
11
  //# sourceMappingURL=cdp-relay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cdp-relay.d.ts","sourceRoot":"","sources":["../../src/extension/cdp-relay.ts"],"names":[],"mappings":"AAsBA,wBAAsB,6BAA6B,CAAC,EAAE,IAAY,EAAE,MAAgB,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE;QAAE,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;KAAE,CAAA;CAAO;;;;GAyclL"}
1
+ {"version":3,"file":"cdp-relay.d.ts","sourceRoot":"","sources":["../../src/extension/cdp-relay.ts"],"names":[],"mappings":"AAsBA,wBAAsB,6BAA6B,CAAC,EAAE,IAAY,EAAE,IAAkB,EAAE,MAAgB,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE;QAAE,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;KAAE,CAAA;CAAO;;GAgdrN"}
@@ -2,7 +2,7 @@ import { Hono } from 'hono';
2
2
  import { serve } from '@hono/node-server';
3
3
  import { createNodeWebSocket } from '@hono/node-ws';
4
4
  import chalk from 'chalk';
5
- export async function startPlayWriterCDPRelayServer({ port = 19988, logger = console } = {}) {
5
+ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127.0.0.1', logger = console } = {}) {
6
6
  const connectedTargets = new Map();
7
7
  const playwrightClients = new Map();
8
8
  let extensionWs = null;
@@ -149,6 +149,12 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, logger = con
149
149
  params: { method, params }
150
150
  });
151
151
  }
152
+ case 'Playwriter.activateTab': {
153
+ return await sendToExtension({
154
+ method: 'activateTab',
155
+ params
156
+ });
157
+ }
152
158
  }
153
159
  return await sendToExtension({
154
160
  method: 'forwardCDPCommand',
@@ -354,17 +360,17 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, logger = con
354
360
  }
355
361
  };
356
362
  }));
357
- const server = serve({ fetch: app.fetch, port });
363
+ const server = serve({ fetch: app.fetch, port, hostname: host });
358
364
  injectWebSocket(server);
359
- const wsHost = `ws://localhost:${port}`;
365
+ const wsHost = `ws://${host}:${port}`;
360
366
  const cdpEndpoint = `${wsHost}/cdp`;
361
367
  const extensionEndpoint = `${wsHost}/extension`;
362
368
  logger.log('CDP relay server started');
369
+ logger.log('Host:', host);
370
+ logger.log('Port:', port);
363
371
  logger.log('Extension endpoint:', extensionEndpoint);
364
372
  logger.log('CDP endpoint:', cdpEndpoint);
365
373
  return {
366
- cdpEndpoint,
367
- extensionEndpoint,
368
374
  close() {
369
375
  for (const client of playwrightClients.values()) {
370
376
  client.ws.close(1000, 'Server stopped');
@@ -1 +1 @@
1
- {"version":3,"file":"cdp-relay.js","sourceRoot":"","sources":["../../src/extension/cdp-relay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cdp-relay.js","sourceRoot":"","sources":["../../src/extension/cdp-relay.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,12 @@ export type ExtensionCommandMessage = {
11
11
  sessionId?: string;
12
12
  params?: any;
13
13
  };
14
+ } | {
15
+ id: number;
16
+ method: 'activateTab';
17
+ params: {
18
+ targetId: string;
19
+ };
14
20
  };
15
21
  export type ExtensionResponseMessage = {
16
22
  id: number;
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/extension/protocol.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,IAAI,CAAA;AAExB,MAAM,MAAM,uBAAuB,GAC/B;IACE,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,aAAa,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GACD;IACE,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,mBAAmB,CAAA;IAC3B,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,MAAM,CAAC,EAAE,GAAG,CAAA;KACb,CAAA;CACF,CAAA;AAEL,MAAM,MAAM,wBAAwB,GAAG;IACrC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,iBAAiB,CAAA;IACzB,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,MAAM,CAAC,EAAE,GAAG,CAAA;KACb,CAAA;CACF,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,wBAAwB,GAAG,qBAAqB,CAAA"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/extension/protocol.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,IAAI,CAAA;AAExB,MAAM,MAAM,uBAAuB,GAC/B;IACE,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,aAAa,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GACD;IACE,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,mBAAmB,CAAA;IAC3B,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,MAAM,CAAC,EAAE,GAAG,CAAA;KACb,CAAA;CACF,GACD;IACE,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,aAAa,CAAA;IACrB,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;CACF,CAAA;AAEL,MAAM,MAAM,wBAAwB,GAAG;IACrC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,iBAAiB,CAAA;IACzB,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,MAAM,CAAC,EAAE,GAAG,CAAA;KACb,CAAA;CACF,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,wBAAwB,GAAG,qBAAqB,CAAA"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './extension/cdp-relay.js';
2
+ export * from './utils.js';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,YAAY,CAAA"}
package/dist/index.js CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './extension/cdp-relay.js';
2
+ export * from './utils.js';
2
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,YAAY,CAAA"}
package/dist/mcp.js CHANGED
@@ -7,6 +7,7 @@ import path from 'node:path';
7
7
  import { spawn } from 'node:child_process';
8
8
  import { createRequire } from 'node:module';
9
9
  import vm from 'node:vm';
10
+ import { getCdpUrl } from './utils.js';
10
11
  const require = createRequire(import.meta.url);
11
12
  const state = {
12
13
  isConnected: false,
@@ -46,7 +47,7 @@ async function ensureConnection() {
46
47
  return { browser: state.browser, page: state.page };
47
48
  }
48
49
  await ensureRelayServer();
49
- const cdpEndpoint = `ws://localhost:${RELAY_PORT}/cdp/${Date.now()}`;
50
+ const cdpEndpoint = getCdpUrl({ port: RELAY_PORT });
50
51
  const browser = await chromium.connectOverCDP(cdpEndpoint);
51
52
  const contexts = browser.contexts();
52
53
  const context = contexts.length > 0 ? contexts[0] : await browser.newContext();
@@ -75,16 +76,42 @@ async function getCurrentPage() {
75
76
  }
76
77
  throw new Error('No page available');
77
78
  }
79
+ async function resetConnection() {
80
+ if (state.browser) {
81
+ try {
82
+ await state.browser.close();
83
+ }
84
+ catch (e) {
85
+ console.error('Error closing browser:', e);
86
+ }
87
+ }
88
+ state.browser = null;
89
+ state.page = null;
90
+ state.context = null;
91
+ state.isConnected = false;
92
+ await ensureRelayServer();
93
+ const cdpEndpoint = getCdpUrl({ port: RELAY_PORT });
94
+ const browser = await chromium.connectOverCDP(cdpEndpoint);
95
+ const contexts = browser.contexts();
96
+ const context = contexts.length > 0 ? contexts[0] : await browser.newContext();
97
+ const pages = context.pages();
98
+ const page = pages.length > 0 ? pages[0] : await context.newPage();
99
+ state.browser = browser;
100
+ state.page = page;
101
+ state.context = context;
102
+ state.isConnected = true;
103
+ return { browser, page, context };
104
+ }
78
105
  const server = new McpServer({
79
106
  name: 'playwriter',
80
- title: 'Playwright MCP Server',
107
+ title: 'The better playwright MCP: works as a browser extension. No context bloat. More capable.',
81
108
  version: '1.0.0',
82
109
  });
83
110
  const promptContent = fs.readFileSync(path.join(path.dirname(new URL(import.meta.url).pathname), 'prompt.md'), 'utf-8');
84
111
  server.tool('execute', promptContent, {
85
112
  code: z
86
113
  .string()
87
- .describe('JavaScript code to execute with page and context in scope. Should be one line, using ; to execute multiple statements. To execute complex actions call execute multiple times. '),
114
+ .describe('JavaScript code to execute with page, state, context in scope. Should be one line, using ; to execute multiple statements. To execute complex actions call execute multiple times. '),
88
115
  timeout: z.number().default(3000).describe('Timeout in milliseconds for code execution (default: 3000ms)'),
89
116
  }, async ({ code, timeout }) => {
90
117
  await ensureConnection();
@@ -110,12 +137,48 @@ server.tool('execute', promptContent, {
110
137
  consoleLogs.push({ method: 'debug', args });
111
138
  },
112
139
  };
113
- const vmContext = vm.createContext({
140
+ const accessibilitySnapshot = async (targetPage) => {
141
+ if (targetPage._snapshotForAI) {
142
+ const snapshot = await targetPage._snapshotForAI();
143
+ const snapshotStr = typeof snapshot === 'string'
144
+ ? snapshot
145
+ : JSON.stringify(snapshot, null, 2);
146
+ return snapshotStr;
147
+ }
148
+ throw new Error('accessibilitySnapshot is not available on this page');
149
+ };
150
+ const activateTab = async (targetPage) => {
151
+ const cdp = await context.newCDPSession(targetPage);
152
+ const { targetInfo } = await cdp.send('Target.getTargetInfo');
153
+ const targetId = targetInfo.targetId;
154
+ await cdp.send('Playwriter.activateTab', { targetId });
155
+ await cdp.detach();
156
+ };
157
+ let vmContextObj = {
114
158
  page,
115
159
  context,
116
160
  state,
117
161
  console: customConsole,
118
- });
162
+ accessibilitySnapshot,
163
+ activateTab,
164
+ resetPlaywright: async () => {
165
+ const { page: newPage, context: newContext } = await resetConnection();
166
+ Object.keys(state).forEach(key => delete state[key]);
167
+ const resetObj = {
168
+ page: newPage,
169
+ context: newContext,
170
+ state,
171
+ console: customConsole,
172
+ accessibilitySnapshot,
173
+ activateTab,
174
+ resetPlaywright: vmContextObj.resetPlaywright
175
+ };
176
+ Object.keys(vmContextObj).forEach(key => delete vmContextObj[key]);
177
+ Object.assign(vmContextObj, resetObj);
178
+ return { page: newPage, context: newContext };
179
+ }
180
+ };
181
+ const vmContext = vm.createContext(vmContextObj);
119
182
  const wrappedCode = `(async () => { ${code} })()`;
120
183
  const result = await Promise.race([
121
184
  vm.runInContext(wrappedCode, vmContext, {
package/dist/mcp.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
package/dist/prompt.md CHANGED
@@ -1,24 +1,36 @@
1
- execute tool let you run playwright code to control user Chrome window
1
+ playwriter execute is a tool to control the user browser instance via extension also called playwriter MCP.
2
2
 
3
- it will control an existing user Chrome window. The execute command will be executed in a sandbox with some variables in context:
3
+ if you get an error Extension not running tell user to install and enable the playwriter extension first, clicking on the extension icon on the tab the user wants to control
4
4
 
5
- - context: the playwright browser context. you can do things like `await context.pages()`
5
+ execute tool let you run playwright js code snippets to control user Chrome window, these js code snippets are preferred to be in a single line to make them more readable in agent interface. separating statements with semicolons
6
+
7
+ it will control an existing user Chrome window. The js code will be run in a sandbox with some variables in context:
8
+
9
+ - state: an object shared between runs that you can mutate to persist functions and objects. for example `state.requests = []` to monitor network requests between runs
10
+ - context: the playwright browser context. you can do things like `await context.pages()` to see user connected pages
6
11
  - page, the first page the user opened and made it accessible to this MCP. do things like `page.url()` to see current url. assume the user wants you to use this page for your playwright code
7
12
 
8
- the window can have more than one page. you can see other pages with `context.pages().find((p) => p.url().includes('localhost'))`
13
+ the chrome window can have more than one page. you can see other pages with `context.pages().find((p) => p.url().includes('localhost'))`. you can also open and close pages: `state.newPage = await context.newPage()`. store the page in state so that you can reuse it later
9
14
 
10
- you can control the browser in collaboration with the user. for example the user can help you get unstuck for things like captchas or difficult to find elements or reproducing a bug
15
+ you can control the browser in collaboration with the user. the user can help you get unstuck from captchas or difficult to find elements or reproducing a bug
11
16
 
12
17
  ## rules
13
18
 
14
19
  - only call `page.close()` if the user asks you so or if you previously created this page yourself with `newPage`. do not close user created pages unless asked
15
- -
20
+ - try to never sleep or run `page.waitForTimeout` unless you have to. there are better ways to wait for an element
21
+ - never close browser or context. NEVER call `browser.close()`
22
+
23
+ ## event listeners
24
+
25
+ always detach event listener you create at the end of a message using `page.removeAllListeners()` or similar so that you never leak them in future messages
16
26
 
17
27
  ## utility functions
18
28
 
19
29
  you have access to some functions in addition to playwright methods:
20
30
 
21
31
  - `async accessibilitySnapshot(page)`: gets a human readable snapshot of clickable elements on the page. useful to see the overall structure of the page and what elements you can interact with
32
+ - `async activateTab(page)`: activates (brings to front and focuses) the browser tab for the given page
33
+ - `async resetPlaywright()`: recreates the CDP connection and resets the browser/page/context. Use this when the MCP stops responding, you get connection errors, assertion failures, or timeout issues. After calling this, the page and context variables are automatically updated in the execution environment. IMPORTANT: this completely resets the execution context, removing any custom properties you may have added to the global scope AND clearing all keys from the `state` object. Only `page`, `context`, `state` (empty), `console`, and utility functions will remain
22
34
 
23
35
  example:
24
36
 
@@ -36,14 +48,6 @@ example:
36
48
  - /url: /docs/installation
37
49
  - link "Components" [ref=e14] [cursor=pointer]:
38
50
  - /url: /docs/components
39
- - link "Blocks" [ref=e15] [cursor=pointer]:
40
- - /url: /blocks
41
- - link "Charts" [ref=e16] [cursor=pointer]:
42
- - /url: /charts/area
43
- - link "Themes" [ref=e17] [cursor=pointer]:
44
- - /url: /themes
45
- - link "Colors" [ref=e18] [cursor=pointer]:
46
- - /url: /colors
47
51
  ```
48
52
 
49
53
  Then you can use `page.locator(`aria-ref=${ref}`)` to get an element with a specific `ref` and interact with it.
@@ -52,7 +56,7 @@ Then you can use `page.locator(`aria-ref=${ref}`)` to get an element with a spec
52
56
 
53
57
  ## getting outputs of code execution
54
58
 
55
- You can use `console.log` to print values you want to see in the tool call result
59
+ You can use `console.log` to print values you want to see in the tool call result. For seeing logs across runs you can store then in `state.logs` and then print them later, filtering and paginating them too.
56
60
 
57
61
  ## using page.evaluate
58
62
 
@@ -71,12 +75,10 @@ const pageInfo = await page.evaluate(() => ({
71
75
  buttonCount: document.querySelectorAll('button').length,
72
76
  readyState: document.readyState,
73
77
  }))
74
- console.log('Page URL:', pageInfo.url)
75
- console.log('Number of buttons:', pageInfo.buttonCount)
76
- console.log('Page ready state:', pageInfo.readyState)
78
+ console.log(pageInfo)
77
79
  ```
78
80
 
79
- ## read for logs during interactions
81
+ ## read logs during interactions
80
82
 
81
83
  you can see logs during interactions with `page.on('console', msg => console.log(`Browser log: [${msg.type()}] ${msg.text()}`))`
82
84
 
@@ -84,10 +86,10 @@ then remember to call `context.removeAllListeners()` or `page.removeAllListeners
84
86
 
85
87
  ## reading past logs
86
88
 
87
- you can keep track of logs using `globalThis.logs = []; page.on('console', msg => globalThis.logs.push({ type: msg.type(), text: msg.text() }))`
89
+ you can keep track of logs using `state.logs = []; page.on('console', msg => state.logs.push({ type: msg.type(), text: msg.text() }))`
88
90
 
89
91
  later, you can read logs that you care about. For example, to get the last 100 logs that contain the word "error":
90
92
 
91
- `console.log('errors:'); globalThis.logs.filter(log => log.type === 'error').slice(-100).forEach(x => console.log(x))`
93
+ `console.log('errors:'); state.logs.filter(log => log.type === 'error').slice(-100).forEach(x => console.log(x))`
92
94
 
93
- then to reset logs: `globalThis.logs = []` and to stop listening: `page.removeAllListeners('console')`
95
+ then to reset logs: `state.logs = []` and to stop listening: `page.removeAllListeners('console')`
@@ -1,8 +1,6 @@
1
1
  export declare function startServer({ port }?: {
2
2
  port?: number;
3
3
  }): Promise<{
4
- cdpEndpoint: string;
5
- extensionEndpoint: string;
6
4
  close(): void;
7
5
  }>;
8
6
  //# sourceMappingURL=start-relay-server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"start-relay-server.d.ts","sourceRoot":"","sources":["../src/start-relay-server.ts"],"names":[],"mappings":"AAsBA,wBAAsB,WAAW,CAAC,EAAE,IAAY,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO;;;;GAmBzE"}
1
+ {"version":3,"file":"start-relay-server.d.ts","sourceRoot":"","sources":["../src/start-relay-server.ts"],"names":[],"mappings":"AAsBA,wBAAsB,WAAW,CAAC,EAAE,IAAY,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO;;GAmBzE"}
@@ -0,0 +1,6 @@
1
+ export declare function getCdpUrl({ port, host, clientId }?: {
2
+ port?: number;
3
+ host?: string;
4
+ clientId?: string;
5
+ }): string;
6
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,EAAE,IAAY,EAAE,IAAkB,EAAE,QAAQ,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,UAGjI"}
package/dist/utils.js ADDED
@@ -0,0 +1,5 @@
1
+ export function getCdpUrl({ port = 19988, host = '127.0.0.1', clientId } = {}) {
2
+ const id = clientId || Date.now().toString();
3
+ return `ws://${host}:${port}/cdp/${id}`;
4
+ }
5
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CAAC,EAAE,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,WAAW,EAAE,QAAQ,KAA0D,EAAE;IAChI,MAAM,EAAE,GAAG,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAA;IAC5C,OAAO,QAAQ,IAAI,IAAI,IAAI,QAAQ,EAAE,EAAE,CAAA;AACzC,CAAC"}
package/package.json CHANGED
@@ -1,9 +1,11 @@
1
1
  {
2
2
  "name": "playwriter",
3
3
  "description": "",
4
- "version": "0.0.4",
4
+ "version": "0.0.6",
5
5
  "type": "module",
6
- "repository": "https://github.com/remorses/",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "repository": "https://github.com/remorses/playwriter",
7
9
  "scripts": {
8
10
  "build": "rm -rf dist *.tsbuildinfo && mkdir dist && cp src/resource.md src/prompt.md dist/ && tsc",
9
11
  "prepublishOnly": "pnpm build",
@@ -20,7 +20,7 @@ type PlaywrightClient = {
20
20
  ws: WSContext
21
21
  }
22
22
 
23
- export async function startPlayWriterCDPRelayServer({ port = 19988, logger = console }: { port?: number; logger?: { log(...args: any[]): void; error(...args: any[]): void } } = {}) {
23
+ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127.0.0.1', logger = console }: { port?: number; host?: string; logger?: { log(...args: any[]): void; error(...args: any[]): void } } = {}) {
24
24
  const connectedTargets = new Map<string, ConnectedTarget>()
25
25
 
26
26
  const playwrightClients = new Map<string, PlaywrightClient>()
@@ -219,6 +219,13 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, logger = con
219
219
  params: { method, params }
220
220
  })
221
221
  }
222
+
223
+ case 'Playwriter.activateTab': {
224
+ return await sendToExtension({
225
+ method: 'activateTab',
226
+ params
227
+ })
228
+ }
222
229
  }
223
230
 
224
231
  return await sendToExtension({
@@ -454,20 +461,20 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, logger = con
454
461
  }
455
462
  }))
456
463
 
457
- const server = serve({ fetch: app.fetch, port })
464
+ const server = serve({ fetch: app.fetch, port, hostname: host })
458
465
  injectWebSocket(server)
459
466
 
460
- const wsHost = `ws://localhost:${port}`
467
+ const wsHost = `ws://${host}:${port}`
461
468
  const cdpEndpoint = `${wsHost}/cdp`
462
469
  const extensionEndpoint = `${wsHost}/extension`
463
470
 
464
471
  logger.log('CDP relay server started')
472
+ logger.log('Host:', host)
473
+ logger.log('Port:', port)
465
474
  logger.log('Extension endpoint:', extensionEndpoint)
466
475
  logger.log('CDP endpoint:', cdpEndpoint)
467
476
 
468
477
  return {
469
- cdpEndpoint,
470
- extensionEndpoint,
471
478
  close() {
472
479
  for (const client of playwrightClients.values()) {
473
480
  client.ws.close(1000, 'Server stopped')
@@ -15,6 +15,13 @@ export type ExtensionCommandMessage =
15
15
  params?: any
16
16
  }
17
17
  }
18
+ | {
19
+ id: number
20
+ method: 'activateTab'
21
+ params: {
22
+ targetId: string
23
+ }
24
+ }
18
25
 
19
26
  export type ExtensionResponseMessage = {
20
27
  id: number
package/src/index.ts CHANGED
@@ -1 +1,2 @@
1
1
  export * from './extension/cdp-relay.js'
2
+ export * from './utils.js'
package/src/mcp.ts CHANGED
@@ -7,6 +7,7 @@ import path from 'node:path'
7
7
  import { spawn } from 'node:child_process'
8
8
  import { createRequire } from 'node:module'
9
9
  import vm from 'node:vm'
10
+ import { getCdpUrl } from './utils.js'
10
11
 
11
12
  const require = createRequire(import.meta.url)
12
13
 
@@ -17,6 +18,22 @@ interface State {
17
18
  context: BrowserContext | null
18
19
  }
19
20
 
21
+ interface VMContext {
22
+ page: Page
23
+ context: BrowserContext
24
+ state: Record<string, any>
25
+ console: {
26
+ log: (...args: any[]) => void
27
+ info: (...args: any[]) => void
28
+ warn: (...args: any[]) => void
29
+ error: (...args: any[]) => void
30
+ debug: (...args: any[]) => void
31
+ }
32
+ accessibilitySnapshot: (page: Page) => Promise<string>
33
+ activateTab: (page: Page) => Promise<void>
34
+ resetPlaywright: () => Promise<{ page: Page; context: BrowserContext }>
35
+ }
36
+
20
37
  const state: State = {
21
38
  isConnected: false,
22
39
  page: null,
@@ -67,7 +84,7 @@ async function ensureConnection(): Promise<{ browser: Browser; page: Page }> {
67
84
 
68
85
  await ensureRelayServer()
69
86
 
70
- const cdpEndpoint = `ws://localhost:${RELAY_PORT}/cdp/${Date.now()}`
87
+ const cdpEndpoint = getCdpUrl({ port: RELAY_PORT })
71
88
  const browser = await chromium.connectOverCDP(cdpEndpoint)
72
89
 
73
90
  const contexts = browser.contexts()
@@ -105,9 +122,42 @@ async function getCurrentPage() {
105
122
  throw new Error('No page available')
106
123
  }
107
124
 
125
+ async function resetConnection(): Promise<{ browser: Browser; page: Page; context: BrowserContext }> {
126
+ if (state.browser) {
127
+ try {
128
+ await state.browser.close()
129
+ } catch (e) {
130
+ console.error('Error closing browser:', e)
131
+ }
132
+ }
133
+
134
+ state.browser = null
135
+ state.page = null
136
+ state.context = null
137
+ state.isConnected = false
138
+
139
+ await ensureRelayServer()
140
+
141
+ const cdpEndpoint = getCdpUrl({ port: RELAY_PORT })
142
+ const browser = await chromium.connectOverCDP(cdpEndpoint)
143
+
144
+ const contexts = browser.contexts()
145
+ const context = contexts.length > 0 ? contexts[0] : await browser.newContext()
146
+
147
+ const pages = context.pages()
148
+ const page = pages.length > 0 ? pages[0] : await context.newPage()
149
+
150
+ state.browser = browser
151
+ state.page = page
152
+ state.context = context
153
+ state.isConnected = true
154
+
155
+ return { browser, page, context }
156
+ }
157
+
108
158
  const server = new McpServer({
109
159
  name: 'playwriter',
110
- title: 'Playwright MCP Server',
160
+ title: 'The better playwright MCP: works as a browser extension. No context bloat. More capable.',
111
161
  version: '1.0.0',
112
162
  })
113
163
 
@@ -120,7 +170,7 @@ server.tool(
120
170
  code: z
121
171
  .string()
122
172
  .describe(
123
- 'JavaScript code to execute with page and context in scope. Should be one line, using ; to execute multiple statements. To execute complex actions call execute multiple times. ',
173
+ 'JavaScript code to execute with page, state, context in scope. Should be one line, using ; to execute multiple statements. To execute complex actions call execute multiple times. ',
124
174
  ),
125
175
  timeout: z.number().default(3000).describe('Timeout in milliseconds for code execution (default: 3000ms)'),
126
176
  },
@@ -152,12 +202,54 @@ server.tool(
152
202
  },
153
203
  }
154
204
 
155
- const vmContext = vm.createContext({
205
+ const accessibilitySnapshot = async (targetPage: Page) => {
206
+ if ((targetPage as any)._snapshotForAI) {
207
+ const snapshot = await (targetPage as any)._snapshotForAI()
208
+ const snapshotStr =
209
+ typeof snapshot === 'string'
210
+ ? snapshot
211
+ : JSON.stringify(snapshot, null, 2)
212
+ return snapshotStr
213
+ }
214
+ throw new Error('accessibilitySnapshot is not available on this page')
215
+ }
216
+
217
+ const activateTab = async (targetPage: Page) => {
218
+ const cdp = await context.newCDPSession(targetPage)
219
+ const { targetInfo } = await cdp.send('Target.getTargetInfo')
220
+ const targetId = targetInfo.targetId
221
+ await cdp.send('Playwriter.activateTab' as any, { targetId })
222
+ await cdp.detach()
223
+ }
224
+
225
+ let vmContextObj: VMContext = {
156
226
  page,
157
227
  context,
158
228
  state,
159
229
  console: customConsole,
160
- })
230
+ accessibilitySnapshot,
231
+ activateTab,
232
+ resetPlaywright: async () => {
233
+ const { page: newPage, context: newContext } = await resetConnection()
234
+
235
+ Object.keys(state).forEach(key => delete state[key])
236
+
237
+ const resetObj: VMContext = {
238
+ page: newPage,
239
+ context: newContext,
240
+ state,
241
+ console: customConsole,
242
+ accessibilitySnapshot,
243
+ activateTab,
244
+ resetPlaywright: vmContextObj.resetPlaywright
245
+ }
246
+ Object.keys(vmContextObj).forEach(key => delete (vmContextObj as any)[key])
247
+ Object.assign(vmContextObj, resetObj)
248
+ return { page: newPage, context: newContext }
249
+ }
250
+ }
251
+
252
+ const vmContext = vm.createContext(vmContextObj)
161
253
 
162
254
  const wrappedCode = `(async () => { ${code} })()`
163
255
 
package/src/prompt.md CHANGED
@@ -1,24 +1,36 @@
1
- execute tool let you run playwright code to control user Chrome window
1
+ playwriter execute is a tool to control the user browser instance via extension also called playwriter MCP.
2
2
 
3
- it will control an existing user Chrome window. The execute command will be executed in a sandbox with some variables in context:
3
+ if you get an error Extension not running tell user to install and enable the playwriter extension first, clicking on the extension icon on the tab the user wants to control
4
4
 
5
- - context: the playwright browser context. you can do things like `await context.pages()`
5
+ execute tool let you run playwright js code snippets to control user Chrome window, these js code snippets are preferred to be in a single line to make them more readable in agent interface. separating statements with semicolons
6
+
7
+ it will control an existing user Chrome window. The js code will be run in a sandbox with some variables in context:
8
+
9
+ - state: an object shared between runs that you can mutate to persist functions and objects. for example `state.requests = []` to monitor network requests between runs
10
+ - context: the playwright browser context. you can do things like `await context.pages()` to see user connected pages
6
11
  - page, the first page the user opened and made it accessible to this MCP. do things like `page.url()` to see current url. assume the user wants you to use this page for your playwright code
7
12
 
8
- the window can have more than one page. you can see other pages with `context.pages().find((p) => p.url().includes('localhost'))`
13
+ the chrome window can have more than one page. you can see other pages with `context.pages().find((p) => p.url().includes('localhost'))`. you can also open and close pages: `state.newPage = await context.newPage()`. store the page in state so that you can reuse it later
9
14
 
10
- you can control the browser in collaboration with the user. for example the user can help you get unstuck for things like captchas or difficult to find elements or reproducing a bug
15
+ you can control the browser in collaboration with the user. the user can help you get unstuck from captchas or difficult to find elements or reproducing a bug
11
16
 
12
17
  ## rules
13
18
 
14
19
  - only call `page.close()` if the user asks you so or if you previously created this page yourself with `newPage`. do not close user created pages unless asked
15
- -
20
+ - try to never sleep or run `page.waitForTimeout` unless you have to. there are better ways to wait for an element
21
+ - never close browser or context. NEVER call `browser.close()`
22
+
23
+ ## event listeners
24
+
25
+ always detach event listener you create at the end of a message using `page.removeAllListeners()` or similar so that you never leak them in future messages
16
26
 
17
27
  ## utility functions
18
28
 
19
29
  you have access to some functions in addition to playwright methods:
20
30
 
21
31
  - `async accessibilitySnapshot(page)`: gets a human readable snapshot of clickable elements on the page. useful to see the overall structure of the page and what elements you can interact with
32
+ - `async activateTab(page)`: activates (brings to front and focuses) the browser tab for the given page
33
+ - `async resetPlaywright()`: recreates the CDP connection and resets the browser/page/context. Use this when the MCP stops responding, you get connection errors, assertion failures, or timeout issues. After calling this, the page and context variables are automatically updated in the execution environment. IMPORTANT: this completely resets the execution context, removing any custom properties you may have added to the global scope AND clearing all keys from the `state` object. Only `page`, `context`, `state` (empty), `console`, and utility functions will remain
22
34
 
23
35
  example:
24
36
 
@@ -36,14 +48,6 @@ example:
36
48
  - /url: /docs/installation
37
49
  - link "Components" [ref=e14] [cursor=pointer]:
38
50
  - /url: /docs/components
39
- - link "Blocks" [ref=e15] [cursor=pointer]:
40
- - /url: /blocks
41
- - link "Charts" [ref=e16] [cursor=pointer]:
42
- - /url: /charts/area
43
- - link "Themes" [ref=e17] [cursor=pointer]:
44
- - /url: /themes
45
- - link "Colors" [ref=e18] [cursor=pointer]:
46
- - /url: /colors
47
51
  ```
48
52
 
49
53
  Then you can use `page.locator(`aria-ref=${ref}`)` to get an element with a specific `ref` and interact with it.
@@ -52,7 +56,7 @@ Then you can use `page.locator(`aria-ref=${ref}`)` to get an element with a spec
52
56
 
53
57
  ## getting outputs of code execution
54
58
 
55
- You can use `console.log` to print values you want to see in the tool call result
59
+ You can use `console.log` to print values you want to see in the tool call result. For seeing logs across runs you can store then in `state.logs` and then print them later, filtering and paginating them too.
56
60
 
57
61
  ## using page.evaluate
58
62
 
@@ -71,12 +75,10 @@ const pageInfo = await page.evaluate(() => ({
71
75
  buttonCount: document.querySelectorAll('button').length,
72
76
  readyState: document.readyState,
73
77
  }))
74
- console.log('Page URL:', pageInfo.url)
75
- console.log('Number of buttons:', pageInfo.buttonCount)
76
- console.log('Page ready state:', pageInfo.readyState)
78
+ console.log(pageInfo)
77
79
  ```
78
80
 
79
- ## read for logs during interactions
81
+ ## read logs during interactions
80
82
 
81
83
  you can see logs during interactions with `page.on('console', msg => console.log(`Browser log: [${msg.type()}] ${msg.text()}`))`
82
84
 
@@ -84,10 +86,10 @@ then remember to call `context.removeAllListeners()` or `page.removeAllListeners
84
86
 
85
87
  ## reading past logs
86
88
 
87
- you can keep track of logs using `globalThis.logs = []; page.on('console', msg => globalThis.logs.push({ type: msg.type(), text: msg.text() }))`
89
+ you can keep track of logs using `state.logs = []; page.on('console', msg => state.logs.push({ type: msg.type(), text: msg.text() }))`
88
90
 
89
91
  later, you can read logs that you care about. For example, to get the last 100 logs that contain the word "error":
90
92
 
91
- `console.log('errors:'); globalThis.logs.filter(log => log.type === 'error').slice(-100).forEach(x => console.log(x))`
93
+ `console.log('errors:'); state.logs.filter(log => log.type === 'error').slice(-100).forEach(x => console.log(x))`
92
94
 
93
- then to reset logs: `globalThis.logs = []` and to stop listening: `page.removeAllListeners('console')`
95
+ then to reset logs: `state.logs = []` and to stop listening: `page.removeAllListeners('console')`
package/src/utils.ts ADDED
@@ -0,0 +1,4 @@
1
+ export function getCdpUrl({ port = 19988, host = '127.0.0.1', clientId }: { port?: number; host?: string; clientId?: string } = {}) {
2
+ const id = clientId || Date.now().toString()
3
+ return `ws://${host}:${port}/cdp/${id}`
4
+ }
package/README.md DELETED
@@ -1,60 +0,0 @@
1
- # PlayWriter MCP
2
-
3
- A powerful browser automation MCP (Model Context Protocol) server that provides persistent browser sessions with advanced automation capabilities through Playwright.
4
-
5
- ## Key Differences from playwright-mcp
6
-
7
- ### ๐Ÿ”’ Persistent Data Directory
8
- PlayWriter MCP maintains a persistent user data directory between runs. This enables:
9
- - Login sessions with Google and other OAuth providers
10
- - Website authentication that persists across sessions
11
- - Test automation without repeated logins
12
- - Preserved cookies, local storage, and browser state
13
-
14
- ### ๐Ÿ›ก๏ธ Anti-Detection Features
15
- Built-in detection prevention mechanisms allow automation on websites with bot protection:
16
- - Works seamlessly with Google and other major platforms
17
- - User-agent rotation
18
- - Automation flag removal
19
- - Realistic browser fingerprinting
20
-
21
- ### ๐ŸŒ Shared Chrome Instance
22
- - Single Chrome instance shared between all agents
23
- - Each agent operates in its own tab
24
- - Can reuse existing pages/tabs via `context.pages()` in the execute tool
25
- - Find and switch between pages by URL or other criteria
26
- - Efficient resource usage
27
- - Better performance for multi-agent workflows
28
-
29
- ### ๐Ÿš€ Single Powerful Execute Tool
30
- Instead of many granular tools, PlayWriter provides one flexible `execute` tool:
31
- - Direct access to Playwright `page` and `context` objects
32
- - Write complex automation logic with loops and conditions
33
- - Full JavaScript execution capabilities
34
- - Custom wait conditions and complex interactions
35
-
36
- Example:
37
- ```javascript
38
- // Complex wait logic with custom conditions
39
- while (!(await page.isVisible('.success-message'))) {
40
- await page.click('.retry-button');
41
- await page.waitForTimeout(1000);
42
- }
43
- ```
44
-
45
- ### ๐Ÿ”ง Additional Tools
46
- - `new_page` - Create a new browser tab/page
47
- - `accessibility_snapshot` - Get page structure as JSON
48
- - `console_logs` - Retrieve browser console messages
49
- - `network_history` - Monitor network requests
50
-
51
- ## Roadmap
52
-
53
- - โ˜๏ธ Cloud service integration for shared persistent state
54
- - ๐Ÿงช Quality assertion tests in CI/CD pipelines
55
- - ๐Ÿค– Multi-agent collaboration features
56
- - ๐Ÿ“Š Advanced debugging and monitoring capabilities
57
-
58
- ## Installation
59
-
60
- See the main project documentation for installation and setup instructions.