cdp-mcp-server 5.0.1 → 5.0.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.
package/README.md ADDED
@@ -0,0 +1,60 @@
1
+ # CDP Browser MCP Server
2
+
3
+ Connects AI agents to your **real running Chrome** — your cookies, logins, and
4
+ extensions stay intact. 14 tools / 90+ actions over the Chrome DevTools
5
+ Protocol: navigation, accessibility snapshots, element interaction, smart form
6
+ filling, network interception, device emulation, cookies/storage, and a full
7
+ JS debugger.
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ npm install -g cdp-mcp-server
13
+ ```
14
+
15
+ Or reference it directly in any MCP client (no global install needed):
16
+
17
+ ```json
18
+ {
19
+ "mcpServers": {
20
+ "cdp-browser": {
21
+ "command": "npx",
22
+ "args": ["-y", "cdp-mcp-server@latest"]
23
+ }
24
+ }
25
+ }
26
+ ```
27
+
28
+ ## One-time Chrome setup
29
+
30
+ Chrome must expose the DevTools protocol. Pick one:
31
+
32
+ 1. Open `chrome://flags/#enable-remote-debugging`, set **Enabled**, relaunch
33
+ (persists across restarts — recommended)
34
+ 2. Or launch Chrome with the flag:
35
+ `chrome.exe --remote-debugging-port=9222`
36
+
37
+ Verify it works: open `http://localhost:9222/json/version` — you should see
38
+ JSON output.
39
+
40
+ The server auto-connects to Chrome on your first tool call. Edge and Brave
41
+ work the same way (same protocol).
42
+
43
+ ## Highlights
44
+
45
+ - Stable element refs that survive DOM changes
46
+ - Smart form filling (React/Greenhouse comboboxes, country codes, dates)
47
+ - Auto-waiting after every action (no "click and pray")
48
+ - Token-optimized accessibility snapshots (~15KB)
49
+ - Multi-agent safe: per-agent session isolation + exclusive tab locks
50
+ - Network mocking via request interception
51
+ - Playwright-compatible slim mode for small-context models
52
+
53
+ ## Documentation
54
+
55
+ Full tool reference, environment variables, and guides:
56
+ https://github.com/Tushar49/cdp-browser-mcp#readme
57
+
58
+ ## License
59
+
60
+ MIT
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env node
1
2
  /**
2
3
  * Entry point for the CDP Browser MCP Server v5.
3
4
  *
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env node
1
2
  /**
2
3
  * Entry point for the CDP Browser MCP Server v5.
3
4
  *
@@ -49,7 +50,7 @@ import { registerDebugTools } from './tools/debug.js';
49
50
  import { registerFormTools } from './tools/form.js';
50
51
  import { getSlimTools, mapSlimToFull } from './tools/slim-mode.js';
51
52
  // ─── Bootstrap ──────────────────────────────────────────────────────
52
- const VERSION = '5.0.1';
53
+ const VERSION = '5.0.2';
53
54
  const config = loadConfig();
54
55
  const cdpClient = new CDPClient({ commandTimeout: config.globalTimeout });
55
56
  // Lazy initialization: HealthMonitor is created but doesn't discover browsers
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -141,38 +141,38 @@ async function fillText(ctx, sess, uid, value, tabId) {
141
141
  const axInfo = await getAXNodeInfo(ctx, sess, uid, tabId);
142
142
  // Focus, clear, and set value using React-compatible approach
143
143
  await ctx.sendCommand('Runtime.callFunctionOn', {
144
- functionDeclaration: `function() {
145
- this.scrollIntoView({ block: "center" });
146
- this.focus();
147
- // Clear existing value
148
- if ('value' in this) {
149
- const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
150
- || Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
151
- if (nativeSetter) nativeSetter.call(this, '');
152
- else this.value = '';
153
- this.dispatchEvent(new Event('input', { bubbles: true }));
154
- } else if (this.isContentEditable) {
155
- this.textContent = '';
156
- }
144
+ functionDeclaration: `function() {
145
+ this.scrollIntoView({ block: "center" });
146
+ this.focus();
147
+ // Clear existing value
148
+ if ('value' in this) {
149
+ const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
150
+ || Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
151
+ if (nativeSetter) nativeSetter.call(this, '');
152
+ else this.value = '';
153
+ this.dispatchEvent(new Event('input', { bubbles: true }));
154
+ } else if (this.isContentEditable) {
155
+ this.textContent = '';
156
+ }
157
157
  }`,
158
158
  objectId,
159
159
  returnByValue: true,
160
160
  }, sess);
161
161
  // Set the value using native setter for React/Angular compatibility
162
162
  const result = await ctx.sendCommand('Runtime.callFunctionOn', {
163
- functionDeclaration: `function() {
164
- const val = ${JSON.stringify(value)};
165
- if ('value' in this) {
166
- const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
167
- || Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
168
- if (nativeSetter) nativeSetter.call(this, val);
169
- else this.value = val;
170
- } else if (this.isContentEditable) {
171
- this.textContent = val;
172
- }
173
- this.dispatchEvent(new Event('input', { bubbles: true }));
174
- this.dispatchEvent(new Event('change', { bubbles: true }));
175
- return { ok: true };
163
+ functionDeclaration: `function() {
164
+ const val = ${JSON.stringify(value)};
165
+ if ('value' in this) {
166
+ const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
167
+ || Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
168
+ if (nativeSetter) nativeSetter.call(this, val);
169
+ else this.value = val;
170
+ } else if (this.isContentEditable) {
171
+ this.textContent = val;
172
+ }
173
+ this.dispatchEvent(new Event('input', { bubbles: true }));
174
+ this.dispatchEvent(new Event('change', { bubbles: true }));
175
+ return { ok: true };
176
176
  }`,
177
177
  objectId,
178
178
  returnByValue: true,
@@ -200,16 +200,16 @@ async function fillCombobox(ctx, sess, uid, value, tabId) {
200
200
  const axInfo = await getAXNodeInfo(ctx, sess, uid, tabId);
201
201
  // 1. Focus and clear the combobox
202
202
  await ctx.sendCommand('Runtime.callFunctionOn', {
203
- functionDeclaration: `function() {
204
- this.scrollIntoView({ block: "center" });
205
- this.focus();
206
- if ('value' in this) {
207
- const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
208
- || Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
209
- if (nativeSetter) nativeSetter.call(this, '');
210
- else this.value = '';
211
- this.dispatchEvent(new Event('input', { bubbles: true }));
212
- }
203
+ functionDeclaration: `function() {
204
+ this.scrollIntoView({ block: "center" });
205
+ this.focus();
206
+ if ('value' in this) {
207
+ const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
208
+ || Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
209
+ if (nativeSetter) nativeSetter.call(this, '');
210
+ else this.value = '';
211
+ this.dispatchEvent(new Event('input', { bubbles: true }));
212
+ }
213
213
  }`,
214
214
  objectId,
215
215
  returnByValue: true,
@@ -228,8 +228,8 @@ async function fillCombobox(ctx, sess, uid, value, tabId) {
228
228
  let controlledListboxId = null;
229
229
  try {
230
230
  const controlsResult = await ctx.sendCommand('Runtime.callFunctionOn', {
231
- functionDeclaration: `function() {
232
- return this.getAttribute('aria-controls') || this.getAttribute('aria-owns') || '';
231
+ functionDeclaration: `function() {
232
+ return this.getAttribute('aria-controls') || this.getAttribute('aria-owns') || '';
233
233
  }`,
234
234
  objectId,
235
235
  returnByValue: true,
@@ -363,14 +363,14 @@ async function fillCombobox(ctx, sess, uid, value, tabId) {
363
363
  const shortValue = value.substring(0, 3);
364
364
  // Clear and retype with shorter prefix
365
365
  await ctx.sendCommand('Runtime.callFunctionOn', {
366
- functionDeclaration: `function() {
367
- if ('value' in this) {
368
- const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
369
- || Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
370
- if (nativeSetter) nativeSetter.call(this, '');
371
- else this.value = '';
372
- this.dispatchEvent(new Event('input', { bubbles: true }));
373
- }
366
+ functionDeclaration: `function() {
367
+ if ('value' in this) {
368
+ const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
369
+ || Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
370
+ if (nativeSetter) nativeSetter.call(this, '');
371
+ else this.value = '';
372
+ this.dispatchEvent(new Event('input', { bubbles: true }));
373
+ }
374
374
  }`,
375
375
  objectId,
376
376
  returnByValue: true,
@@ -413,9 +413,9 @@ async function fillCombobox(ctx, sess, uid, value, tabId) {
413
413
  }, sess);
414
414
  if (resolved?.object?.objectId) {
415
415
  await ctx.sendCommand('Runtime.callFunctionOn', {
416
- functionDeclaration: `function() {
417
- this.scrollIntoView({ block: "center" });
418
- this.click();
416
+ functionDeclaration: `function() {
417
+ this.scrollIntoView({ block: "center" });
418
+ this.click();
419
419
  }`,
420
420
  objectId: resolved.object.objectId,
421
421
  returnByValue: true,
@@ -489,15 +489,15 @@ async function fillCheckbox(ctx, sess, uid, value, tabId) {
489
489
  const axInfo = await getAXNodeInfo(ctx, sess, uid, tabId);
490
490
  const desired = value === 'true' || value === '1' || value === 'yes';
491
491
  const result = await ctx.sendCommand('Runtime.callFunctionOn', {
492
- functionDeclaration: `function() {
493
- this.scrollIntoView({ block: "center" });
494
- const desired = ${desired};
495
- const current = this.checked || this.getAttribute('aria-checked') === 'true';
496
- if (current !== desired) {
497
- this.click();
498
- this.dispatchEvent(new Event('change', { bubbles: true }));
499
- }
500
- return { checked: desired };
492
+ functionDeclaration: `function() {
493
+ this.scrollIntoView({ block: "center" });
494
+ const desired = ${desired};
495
+ const current = this.checked || this.getAttribute('aria-checked') === 'true';
496
+ if (current !== desired) {
497
+ this.click();
498
+ this.dispatchEvent(new Event('change', { bubbles: true }));
499
+ }
500
+ return { checked: desired };
501
501
  }`,
502
502
  objectId,
503
503
  returnByValue: true,
@@ -516,10 +516,10 @@ async function fillRadio(ctx, sess, uid, value, tabId) {
516
516
  const { objectId } = await resolveUidToObjectId(ctx, sess, uid, tabId);
517
517
  const axInfo = await getAXNodeInfo(ctx, sess, uid, tabId);
518
518
  await ctx.sendCommand('Runtime.callFunctionOn', {
519
- functionDeclaration: `function() {
520
- this.scrollIntoView({ block: "center" });
521
- this.click();
522
- this.dispatchEvent(new Event('change', { bubbles: true }));
519
+ functionDeclaration: `function() {
520
+ this.scrollIntoView({ block: "center" });
521
+ this.click();
522
+ this.dispatchEvent(new Event('change', { bubbles: true }));
523
523
  }`,
524
524
  objectId,
525
525
  returnByValue: true,
@@ -538,36 +538,36 @@ async function fillSelect(ctx, sess, uid, value, tabId) {
538
538
  const { objectId } = await resolveUidToObjectId(ctx, sess, uid, tabId);
539
539
  const axInfo = await getAXNodeInfo(ctx, sess, uid, tabId);
540
540
  const result = await ctx.sendCommand('Runtime.callFunctionOn', {
541
- functionDeclaration: `function() {
542
- this.scrollIntoView({ block: "center" });
543
- const val = ${JSON.stringify(value)};
544
-
545
- if (this.tagName === 'SELECT') {
546
- let opt = Array.from(this.options).find(o => o.value === val || o.textContent.trim() === val);
547
- if (!opt) {
548
- // Case-insensitive match
549
- opt = Array.from(this.options).find(o =>
550
- o.value.toLowerCase() === val.toLowerCase() ||
551
- o.textContent.trim().toLowerCase() === val.toLowerCase()
552
- );
553
- }
554
- if (!opt) {
555
- const available = Array.from(this.options).map(o => o.textContent.trim()).filter(Boolean);
556
- return { error: "Option not found: " + val, available };
557
- }
558
-
559
- const nativeSetter = Object.getOwnPropertyDescriptor(HTMLSelectElement.prototype, 'value')?.set;
560
- if (nativeSetter) nativeSetter.call(this, opt.value);
561
- else this.value = opt.value;
562
-
563
- this.dispatchEvent(new Event('input', { bubbles: true }));
564
- this.dispatchEvent(new Event('change', { bubbles: true }));
565
- return { selected: opt.textContent.trim() };
566
- }
567
-
568
- // Custom dropdown — click to open, then look for matching option
569
- this.click();
570
- return { customDropdown: true };
541
+ functionDeclaration: `function() {
542
+ this.scrollIntoView({ block: "center" });
543
+ const val = ${JSON.stringify(value)};
544
+
545
+ if (this.tagName === 'SELECT') {
546
+ let opt = Array.from(this.options).find(o => o.value === val || o.textContent.trim() === val);
547
+ if (!opt) {
548
+ // Case-insensitive match
549
+ opt = Array.from(this.options).find(o =>
550
+ o.value.toLowerCase() === val.toLowerCase() ||
551
+ o.textContent.trim().toLowerCase() === val.toLowerCase()
552
+ );
553
+ }
554
+ if (!opt) {
555
+ const available = Array.from(this.options).map(o => o.textContent.trim()).filter(Boolean);
556
+ return { error: "Option not found: " + val, available };
557
+ }
558
+
559
+ const nativeSetter = Object.getOwnPropertyDescriptor(HTMLSelectElement.prototype, 'value')?.set;
560
+ if (nativeSetter) nativeSetter.call(this, opt.value);
561
+ else this.value = opt.value;
562
+
563
+ this.dispatchEvent(new Event('input', { bubbles: true }));
564
+ this.dispatchEvent(new Event('change', { bubbles: true }));
565
+ return { selected: opt.textContent.trim() };
566
+ }
567
+
568
+ // Custom dropdown — click to open, then look for matching option
569
+ this.click();
570
+ return { customDropdown: true };
571
571
  }`,
572
572
  objectId,
573
573
  returnByValue: true,
@@ -586,21 +586,21 @@ async function fillSelect(ctx, sess, uid, value, tabId) {
586
586
  // Wait for dropdown to open, then find and click the option
587
587
  await sleep(300);
588
588
  const clickResult = await ctx.sendCommand('Runtime.evaluate', {
589
- expression: `(() => {
590
- const val = ${JSON.stringify(value)};
591
- const valLower = val.toLowerCase();
592
- const options = document.querySelectorAll('[role="option"], [role="listitem"], li[data-value], .MuiMenuItem-root, .ant-select-item, [class*="option"]');
593
- for (const opt of options) {
594
- const text = opt.textContent.trim();
595
- const optValue = opt.getAttribute("data-value") || opt.getAttribute("value") || "";
596
- if (text === val || optValue === val || text.toLowerCase() === valLower) {
597
- opt.scrollIntoView({ block: "center" });
598
- opt.click();
599
- return { selected: text };
600
- }
601
- }
602
- const available = Array.from(options).slice(0, 10).map(o => o.textContent.trim());
603
- return { error: "Option not found in custom dropdown", available };
589
+ expression: `(() => {
590
+ const val = ${JSON.stringify(value)};
591
+ const valLower = val.toLowerCase();
592
+ const options = document.querySelectorAll('[role="option"], [role="listitem"], li[data-value], .MuiMenuItem-root, .ant-select-item, [class*="option"]');
593
+ for (const opt of options) {
594
+ const text = opt.textContent.trim();
595
+ const optValue = opt.getAttribute("data-value") || opt.getAttribute("value") || "";
596
+ if (text === val || optValue === val || text.toLowerCase() === valLower) {
597
+ opt.scrollIntoView({ block: "center" });
598
+ opt.click();
599
+ return { selected: text };
600
+ }
601
+ }
602
+ const available = Array.from(options).slice(0, 10).map(o => o.textContent.trim());
603
+ return { error: "Option not found in custom dropdown", available };
604
604
  })()`,
605
605
  returnByValue: true,
606
606
  }, sess);
@@ -620,19 +620,19 @@ async function fillDate(ctx, sess, uid, value, tabId) {
620
620
  const { objectId } = await resolveUidToObjectId(ctx, sess, uid, tabId);
621
621
  const axInfo = await getAXNodeInfo(ctx, sess, uid, tabId);
622
622
  const result = await ctx.sendCommand('Runtime.callFunctionOn', {
623
- functionDeclaration: `function() {
624
- this.scrollIntoView({ block: "center" });
625
- this.focus();
626
- const val = ${JSON.stringify(value)};
627
-
628
- // Native date input
629
- const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set;
630
- if (nativeSetter) nativeSetter.call(this, val);
631
- else this.value = val;
632
-
633
- this.dispatchEvent(new Event('input', { bubbles: true }));
634
- this.dispatchEvent(new Event('change', { bubbles: true }));
635
- return { ok: true };
623
+ functionDeclaration: `function() {
624
+ this.scrollIntoView({ block: "center" });
625
+ this.focus();
626
+ const val = ${JSON.stringify(value)};
627
+
628
+ // Native date input
629
+ const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set;
630
+ if (nativeSetter) nativeSetter.call(this, val);
631
+ else this.value = val;
632
+
633
+ this.dispatchEvent(new Event('input', { bubbles: true }));
634
+ this.dispatchEvent(new Event('change', { bubbles: true }));
635
+ return { ok: true };
636
636
  }`,
637
637
  objectId,
638
638
  returnByValue: true,
@@ -705,16 +705,16 @@ async function fillLocation(ctx, sess, uid, value, tabId) {
705
705
  const axInfo = await getAXNodeInfo(ctx, sess, uid, tabId);
706
706
  // Focus and clear
707
707
  await ctx.sendCommand('Runtime.callFunctionOn', {
708
- functionDeclaration: `function() {
709
- this.scrollIntoView({ block: "center" });
710
- this.focus();
711
- if ('value' in this) {
712
- const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
713
- || Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
714
- if (nativeSetter) nativeSetter.call(this, '');
715
- else this.value = '';
716
- this.dispatchEvent(new Event('input', { bubbles: true }));
717
- }
708
+ functionDeclaration: `function() {
709
+ this.scrollIntoView({ block: "center" });
710
+ this.focus();
711
+ if ('value' in this) {
712
+ const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
713
+ || Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
714
+ if (nativeSetter) nativeSetter.call(this, '');
715
+ else this.value = '';
716
+ this.dispatchEvent(new Event('input', { bubbles: true }));
717
+ }
718
718
  }`,
719
719
  objectId,
720
720
  returnByValue: true,
@@ -753,9 +753,9 @@ async function fillLocation(ctx, sess, uid, value, tabId) {
753
753
  }, sess);
754
754
  if (resolved?.object?.objectId) {
755
755
  await ctx.sendCommand('Runtime.callFunctionOn', {
756
- functionDeclaration: `function() {
757
- this.scrollIntoView({ block: "center" });
758
- this.click();
756
+ functionDeclaration: `function() {
757
+ this.scrollIntoView({ block: "center" });
758
+ this.click();
759
759
  }`,
760
760
  objectId: resolved.object.objectId,
761
761
  returnByValue: true,
@@ -849,11 +849,11 @@ async function clearFields(ctx, sess, fields, tabId) {
849
849
  if (type === 'checkbox') {
850
850
  // Uncheck if checked
851
851
  await ctx.sendCommand('Runtime.callFunctionOn', {
852
- functionDeclaration: `function() {
853
- if (this.checked || this.getAttribute('aria-checked') === 'true') {
854
- this.click();
855
- this.dispatchEvent(new Event('change', { bubbles: true }));
856
- }
852
+ functionDeclaration: `function() {
853
+ if (this.checked || this.getAttribute('aria-checked') === 'true') {
854
+ this.click();
855
+ this.dispatchEvent(new Event('change', { bubbles: true }));
856
+ }
857
857
  }`,
858
858
  objectId,
859
859
  returnByValue: true,
@@ -863,18 +863,18 @@ async function clearFields(ctx, sess, fields, tabId) {
863
863
  else {
864
864
  // Clear text-like fields
865
865
  await ctx.sendCommand('Runtime.callFunctionOn', {
866
- functionDeclaration: `function() {
867
- this.focus();
868
- if ('value' in this) {
869
- const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
870
- || Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
871
- if (nativeSetter) nativeSetter.call(this, '');
872
- else this.value = '';
873
- } else if (this.isContentEditable) {
874
- this.textContent = '';
875
- }
876
- this.dispatchEvent(new Event('input', { bubbles: true }));
877
- this.dispatchEvent(new Event('change', { bubbles: true }));
866
+ functionDeclaration: `function() {
867
+ this.focus();
868
+ if ('value' in this) {
869
+ const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
870
+ || Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
871
+ if (nativeSetter) nativeSetter.call(this, '');
872
+ else this.value = '';
873
+ } else if (this.isContentEditable) {
874
+ this.textContent = '';
875
+ }
876
+ this.dispatchEvent(new Event('input', { bubbles: true }));
877
+ this.dispatchEvent(new Event('change', { bubbles: true }));
878
878
  }`,
879
879
  objectId,
880
880
  returnByValue: true,
@@ -199,12 +199,12 @@ async function handleType(ctx, args) {
199
199
  }, retryTimeout);
200
200
  // Clear existing content if requested (default: true)
201
201
  const clearCode = args.clear !== false
202
- ? `if ('value' in this) {
203
- const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
204
- || Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
205
- if (nativeSetter) nativeSetter.call(this, '');
206
- else this.value = '';
207
- this.dispatchEvent(new Event('input', {bubbles:true}));
202
+ ? `if ('value' in this) {
203
+ const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
204
+ || Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
205
+ if (nativeSetter) nativeSetter.call(this, '');
206
+ else this.value = '';
207
+ this.dispatchEvent(new Event('input', {bubbles:true}));
208
208
  } else if (this.isContentEditable) { this.textContent = ''; }`
209
209
  : '';
210
210
  await ctx.sendCommand('Runtime.callFunctionOn', {
@@ -264,20 +264,20 @@ async function handleType(ctx, args) {
264
264
  else {
265
265
  // Instant fill using nativeInputValueSetter for React/Angular compatibility
266
266
  await ctx.sendCommand('Runtime.evaluate', {
267
- expression: `(() => {
268
- const el = document.activeElement;
269
- if (!el) return;
270
- const val = ${JSON.stringify(args.text)};
271
- if ('value' in el) {
272
- const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
273
- || Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
274
- if (nativeSetter) nativeSetter.call(el, val);
275
- else el.value = val;
276
- } else if (el.isContentEditable) {
277
- document.execCommand('insertText', false, val);
278
- }
279
- el.dispatchEvent(new Event('input', {bubbles:true}));
280
- el.dispatchEvent(new Event('change', {bubbles:true}));
267
+ expression: `(() => {
268
+ const el = document.activeElement;
269
+ if (!el) return;
270
+ const val = ${JSON.stringify(args.text)};
271
+ if ('value' in el) {
272
+ const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
273
+ || Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
274
+ if (nativeSetter) nativeSetter.call(el, val);
275
+ else el.value = val;
276
+ } else if (el.isContentEditable) {
277
+ document.execCommand('insertText', false, val);
278
+ }
279
+ el.dispatchEvent(new Event('input', {bubbles:true}));
280
+ el.dispatchEvent(new Event('change', {bubbles:true}));
281
281
  })()`,
282
282
  }, sess);
283
283
  }
@@ -308,38 +308,38 @@ async function handleFill(ctx, args) {
308
308
  }, retryTimeout);
309
309
  const fieldType = field.type || 'text';
310
310
  const r = await ctx.sendCommand('Runtime.callFunctionOn', {
311
- functionDeclaration: `function() {
312
- this.scrollIntoView({ block: "center" });
313
- const type = ${JSON.stringify(fieldType)};
314
- const val = ${JSON.stringify(field.value)};
315
- if (type === "checkbox") {
316
- const wanted = val === "true" || val === "1";
317
- if (this.checked !== wanted) this.click();
318
- return { ok: true, value: String(this.checked) };
319
- }
320
- if (type === "radio") { this.click(); return { ok: true, value: val }; }
321
- if (type === "select") {
322
- let opt = Array.from(this.options).find(o => o.value === val || o.textContent.trim() === val);
323
- if (!opt) return { error: "Option not found: " + val };
324
- const nativeSetter = Object.getOwnPropertyDescriptor(HTMLSelectElement.prototype, 'value')?.set;
325
- if (nativeSetter) nativeSetter.call(this, opt.value);
326
- else this.value = opt.value;
327
- this.dispatchEvent(new Event('input', {bubbles:true}));
328
- this.dispatchEvent(new Event('change', {bubbles:true}));
329
- return { ok: true, value: opt.textContent.trim() };
330
- }
331
- this.focus();
332
- if ('value' in this) {
333
- const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
334
- || Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
335
- if (nativeSetter) nativeSetter.call(this, val);
336
- else this.value = val;
337
- } else if (this.isContentEditable) {
338
- this.textContent = val;
339
- }
340
- this.dispatchEvent(new Event('input', {bubbles:true}));
341
- this.dispatchEvent(new Event('change', {bubbles:true}));
342
- return { ok: true, value: val.substring(0, 40) };
311
+ functionDeclaration: `function() {
312
+ this.scrollIntoView({ block: "center" });
313
+ const type = ${JSON.stringify(fieldType)};
314
+ const val = ${JSON.stringify(field.value)};
315
+ if (type === "checkbox") {
316
+ const wanted = val === "true" || val === "1";
317
+ if (this.checked !== wanted) this.click();
318
+ return { ok: true, value: String(this.checked) };
319
+ }
320
+ if (type === "radio") { this.click(); return { ok: true, value: val }; }
321
+ if (type === "select") {
322
+ let opt = Array.from(this.options).find(o => o.value === val || o.textContent.trim() === val);
323
+ if (!opt) return { error: "Option not found: " + val };
324
+ const nativeSetter = Object.getOwnPropertyDescriptor(HTMLSelectElement.prototype, 'value')?.set;
325
+ if (nativeSetter) nativeSetter.call(this, opt.value);
326
+ else this.value = opt.value;
327
+ this.dispatchEvent(new Event('input', {bubbles:true}));
328
+ this.dispatchEvent(new Event('change', {bubbles:true}));
329
+ return { ok: true, value: opt.textContent.trim() };
330
+ }
331
+ this.focus();
332
+ if ('value' in this) {
333
+ const nativeSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set
334
+ || Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set;
335
+ if (nativeSetter) nativeSetter.call(this, val);
336
+ else this.value = val;
337
+ } else if (this.isContentEditable) {
338
+ this.textContent = val;
339
+ }
340
+ this.dispatchEvent(new Event('input', {bubbles:true}));
341
+ this.dispatchEvent(new Event('change', {bubbles:true}));
342
+ return { ok: true, value: val.substring(0, 40) };
343
343
  }`,
344
344
  objectId,
345
345
  returnByValue: true,
@@ -363,35 +363,35 @@ async function handleSelect(ctx, args) {
363
363
  return resolveElementObjectId(ctx, sess, args.uid, args.selector, args.tabId);
364
364
  }, retryTimeout);
365
365
  const result = await ctx.sendCommand('Runtime.callFunctionOn', {
366
- functionDeclaration: `function() {
367
- const sel = this;
368
- if (sel.tagName === "SELECT") {
369
- const targetVal = ${JSON.stringify(args.value)};
370
- let opt = Array.from(sel.options).find(o => o.value === targetVal);
371
- if (!opt) opt = Array.from(sel.options).find(o => o.textContent.trim() === targetVal);
372
- if (!opt) return { error: "Option not found: " + targetVal + ". Available: " + Array.from(sel.options).map(o => o.textContent.trim()).join(", ") };
373
-
374
- const nativeSetter = Object.getOwnPropertyDescriptor(HTMLSelectElement.prototype, 'value')?.set;
375
- if (nativeSetter) nativeSetter.call(sel, opt.value);
376
- else sel.value = opt.value;
377
-
378
- sel.dispatchEvent(new Event("input", { bubbles: true }));
379
- sel.dispatchEvent(new Event("change", { bubbles: true }));
380
- return { selected: opt.textContent.trim(), value: opt.value };
381
- }
382
-
383
- const role = sel.getAttribute("role");
384
- const isCustomDropdown = role === "combobox" || role === "listbox" ||
385
- sel.getAttribute("aria-haspopup") ||
386
- sel.classList.toString().match(/MuiSelect|ant-select|react-select|Select/i);
387
-
388
- if (isCustomDropdown) {
389
- sel.scrollIntoView({ block: "center" });
390
- sel.click();
391
- return { customDropdown: true, message: "Custom dropdown opened — click the matching option" };
392
- }
393
-
394
- return { error: "Not a <select> element and not a recognized custom dropdown. Element: <" + sel.tagName.toLowerCase() + ">" };
366
+ functionDeclaration: `function() {
367
+ const sel = this;
368
+ if (sel.tagName === "SELECT") {
369
+ const targetVal = ${JSON.stringify(args.value)};
370
+ let opt = Array.from(sel.options).find(o => o.value === targetVal);
371
+ if (!opt) opt = Array.from(sel.options).find(o => o.textContent.trim() === targetVal);
372
+ if (!opt) return { error: "Option not found: " + targetVal + ". Available: " + Array.from(sel.options).map(o => o.textContent.trim()).join(", ") };
373
+
374
+ const nativeSetter = Object.getOwnPropertyDescriptor(HTMLSelectElement.prototype, 'value')?.set;
375
+ if (nativeSetter) nativeSetter.call(sel, opt.value);
376
+ else sel.value = opt.value;
377
+
378
+ sel.dispatchEvent(new Event("input", { bubbles: true }));
379
+ sel.dispatchEvent(new Event("change", { bubbles: true }));
380
+ return { selected: opt.textContent.trim(), value: opt.value };
381
+ }
382
+
383
+ const role = sel.getAttribute("role");
384
+ const isCustomDropdown = role === "combobox" || role === "listbox" ||
385
+ sel.getAttribute("aria-haspopup") ||
386
+ sel.classList.toString().match(/MuiSelect|ant-select|react-select|Select/i);
387
+
388
+ if (isCustomDropdown) {
389
+ sel.scrollIntoView({ block: "center" });
390
+ sel.click();
391
+ return { customDropdown: true, message: "Custom dropdown opened — click the matching option" };
392
+ }
393
+
394
+ return { error: "Not a <select> element and not a recognized custom dropdown. Element: <" + sel.tagName.toLowerCase() + ">" };
395
395
  }`,
396
396
  objectId,
397
397
  returnByValue: true,
@@ -403,19 +403,19 @@ async function handleSelect(ctx, args) {
403
403
  if (v?.customDropdown) {
404
404
  await sleep(300);
405
405
  const clickResult = await ctx.sendCommand('Runtime.evaluate', {
406
- expression: `(() => {
407
- const val = ${JSON.stringify(args.value)};
408
- const options = document.querySelectorAll('[role="option"], [role="listitem"], li[data-value], .MuiMenuItem-root, .ant-select-item, [class*="option"]');
409
- for (const opt of options) {
410
- const text = opt.textContent.trim();
411
- const value = opt.getAttribute("data-value") || opt.getAttribute("value") || "";
412
- if (text === val || value === val || text.toLowerCase() === val.toLowerCase()) {
413
- opt.scrollIntoView({ block: "center" });
414
- opt.click();
415
- return { selected: text, value: value || text };
416
- }
417
- }
418
- return { error: "Option not found in custom dropdown: " + val + ". Visible options: " + Array.from(options).slice(0, 10).map(o => o.textContent.trim()).join(", ") };
406
+ expression: `(() => {
407
+ const val = ${JSON.stringify(args.value)};
408
+ const options = document.querySelectorAll('[role="option"], [role="listitem"], li[data-value], .MuiMenuItem-root, .ant-select-item, [class*="option"]');
409
+ for (const opt of options) {
410
+ const text = opt.textContent.trim();
411
+ const value = opt.getAttribute("data-value") || opt.getAttribute("value") || "";
412
+ if (text === val || value === val || text.toLowerCase() === val.toLowerCase()) {
413
+ opt.scrollIntoView({ block: "center" });
414
+ opt.click();
415
+ return { selected: text, value: value || text };
416
+ }
417
+ }
418
+ return { error: "Option not found in custom dropdown: " + val + ". Visible options: " + Array.from(options).slice(0, 10).map(o => o.textContent.trim()).join(", ") };
419
419
  })()`,
420
420
  returnByValue: true,
421
421
  }, sess);
@@ -696,10 +696,10 @@ async function handleFocus(ctx, args) {
696
696
  const retryTimeout = args.timeout || ctx.config.actionTimeout;
697
697
  const { objectId, resolvedSession } = await withRetry(() => resolveElementObjectId(ctx, sess, args.uid, args.selector, args.tabId), retryTimeout);
698
698
  const result = await ctx.sendCommand('Runtime.callFunctionOn', {
699
- functionDeclaration: `function() {
700
- this.scrollIntoView({ block: "center" });
701
- this.focus();
702
- return { tag: this.tagName.toLowerCase(), label: (this.getAttribute("aria-label") || this.textContent || "").trim().substring(0, 60) };
699
+ functionDeclaration: `function() {
700
+ this.scrollIntoView({ block: "center" });
701
+ this.focus();
702
+ return { tag: this.tagName.toLowerCase(), label: (this.getAttribute("aria-label") || this.textContent || "").trim().substring(0, 60) };
703
703
  }`,
704
704
  objectId,
705
705
  returnByValue: true,
@@ -719,14 +719,14 @@ async function handleCheck(ctx, args) {
719
719
  return resolveElementObjectId(ctx, sess, args.uid, args.selector, args.tabId);
720
720
  }, retryTimeout);
721
721
  await ctx.sendCommand('Runtime.callFunctionOn', {
722
- functionDeclaration: `function() {
723
- this.scrollIntoView({ block: "center" });
724
- const desired = ${args.checked === true};
725
- if (this.checked !== desired) {
726
- this.click();
727
- this.dispatchEvent(new Event('change', { bubbles: true }));
728
- }
729
- return { checked: this.checked };
722
+ functionDeclaration: `function() {
723
+ this.scrollIntoView({ block: "center" });
724
+ const desired = ${args.checked === true};
725
+ if (this.checked !== desired) {
726
+ this.click();
727
+ this.dispatchEvent(new Event('change', { bubbles: true }));
728
+ }
729
+ return { checked: this.checked };
730
730
  }`,
731
731
  objectId,
732
732
  returnByValue: true,
@@ -785,14 +785,14 @@ async function resolveElement(ctx, sess, uid, selector, tabId) {
785
785
  throw Errors.staleRef(uid);
786
786
  // Get bounding rect and element info via JS
787
787
  const info = await ctx.sendCommand('Runtime.callFunctionOn', {
788
- functionDeclaration: `function() {
789
- const r = this.getBoundingClientRect();
790
- return {
791
- x: r.x + r.width / 2, y: r.y + r.height / 2,
792
- w: r.width, h: r.height,
793
- tag: this.tagName.toLowerCase(),
794
- label: (this.getAttribute('aria-label') || this.textContent || '').trim().substring(0, 60),
795
- };
788
+ functionDeclaration: `function() {
789
+ const r = this.getBoundingClientRect();
790
+ return {
791
+ x: r.x + r.width / 2, y: r.y + r.height / 2,
792
+ w: r.width, h: r.height,
793
+ tag: this.tagName.toLowerCase(),
794
+ label: (this.getAttribute('aria-label') || this.textContent || '').trim().substring(0, 60),
795
+ };
796
796
  }`,
797
797
  objectId: object.objectId,
798
798
  returnByValue: true,
@@ -804,16 +804,16 @@ async function resolveElement(ctx, sess, uid, selector, tabId) {
804
804
  if (!selector)
805
805
  throw new Error('Provide uid or selector to identify the element.');
806
806
  const result = await ctx.sendCommand('Runtime.evaluate', {
807
- expression: `(() => {
808
- const el = document.querySelector(${JSON.stringify(selector)});
809
- if (!el) return null;
810
- const r = el.getBoundingClientRect();
811
- return {
812
- x: r.x + r.width / 2, y: r.y + r.height / 2,
813
- w: r.width, h: r.height,
814
- tag: el.tagName.toLowerCase(),
815
- label: (el.getAttribute('aria-label') || el.textContent || '').trim().substring(0, 60),
816
- };
807
+ expression: `(() => {
808
+ const el = document.querySelector(${JSON.stringify(selector)});
809
+ if (!el) return null;
810
+ const r = el.getBoundingClientRect();
811
+ return {
812
+ x: r.x + r.width / 2, y: r.y + r.height / 2,
813
+ w: r.width, h: r.height,
814
+ tag: el.tagName.toLowerCase(),
815
+ label: (el.getAttribute('aria-label') || el.textContent || '').trim().substring(0, 60),
816
+ };
817
817
  })()`,
818
818
  returnByValue: true,
819
819
  }, sess);
@@ -969,16 +969,16 @@ function getAdjacentKey(char) {
969
969
  async function findAndSetFileInput(ctx, sess, files) {
970
970
  try {
971
971
  const inputObj = await ctx.sendCommand('Runtime.evaluate', {
972
- expression: `(() => {
973
- function find(root) {
974
- const el = root.querySelector('input[type="file"]');
975
- if (el) return el;
976
- for (const s of root.querySelectorAll('*')) {
977
- if (s.shadowRoot) { const f = find(s.shadowRoot); if (f) return f; }
978
- }
979
- return null;
980
- }
981
- return find(document);
972
+ expression: `(() => {
973
+ function find(root) {
974
+ const el = root.querySelector('input[type="file"]');
975
+ if (el) return el;
976
+ for (const s of root.querySelectorAll('*')) {
977
+ if (s.shadowRoot) { const f = find(s.shadowRoot); if (f) return f; }
978
+ }
979
+ return null;
980
+ }
981
+ return find(document);
982
982
  })()`,
983
983
  returnByValue: false,
984
984
  }, sess);
@@ -992,9 +992,9 @@ async function findAndSetFileInput(ctx, sess, files) {
992
992
  }, sess);
993
993
  // Dispatch change+input events
994
994
  await ctx.sendCommand('Runtime.callFunctionOn', {
995
- functionDeclaration: `function() {
996
- this.dispatchEvent(new Event('change', { bubbles: true }));
997
- this.dispatchEvent(new Event('input', { bubbles: true }));
995
+ functionDeclaration: `function() {
996
+ this.dispatchEvent(new Event('change', { bubbles: true }));
997
+ this.dispatchEvent(new Event('input', { bubbles: true }));
998
998
  }`,
999
999
  objectId: inputObj.result.objectId,
1000
1000
  }, sess).catch(() => { });
@@ -253,9 +253,9 @@ export async function handleNew(ctx, args) {
253
253
  // Phase 5: Wait for load
254
254
  try {
255
255
  await ctx.sendCommand('Runtime.evaluate', {
256
- expression: `new Promise(resolve => {
257
- if (document.readyState === 'complete') return resolve(true);
258
- window.addEventListener('load', () => resolve(true), { once: true });
256
+ expression: `new Promise(resolve => {
257
+ if (document.readyState === 'complete') return resolve(true);
258
+ window.addEventListener('load', () => resolve(true), { once: true });
259
259
  })`,
260
260
  awaitPromise: true,
261
261
  returnByValue: true,
package/package.json CHANGED
@@ -1,10 +1,13 @@
1
1
  {
2
2
  "name": "cdp-mcp-server",
3
- "version": "5.0.1",
3
+ "version": "5.0.2",
4
4
  "description": "The power user's browser MCP — connects to your real Chrome/Edge/Brave with full DevTools capabilities",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "cdp-mcp-server": "dist/index.js"
10
+ },
8
11
  "author": "Tushar Agarwal",
9
12
  "license": "MIT",
10
13
  "repository": {
@@ -25,18 +28,9 @@
25
28
  "browser-mcp"
26
29
  ],
27
30
  "engines": {
28
- "node": ">=18"
29
- },
30
- "dependencies": {
31
- "@modelcontextprotocol/sdk": "^1.0.0",
32
- "ws": "^8.0.0"
33
- },
34
- "devDependencies": {
35
- "@types/node": "^20.19.39",
36
- "@types/ws": "^8.18.1",
37
- "typescript": "^5.9.3",
38
- "vitest": "^2.1.9"
31
+ "node": ">=20"
39
32
  },
33
+ "packageManager": "pnpm@12.6.0",
40
34
  "scripts": {
41
35
  "build": "tsc",
42
36
  "start": "node dist/index.js",
@@ -48,5 +42,15 @@
48
42
  "lint": "tsc --noEmit",
49
43
  "typecheck": "tsc --noEmit",
50
44
  "clean": "node -e \"const fs=require('fs');fs.rmSync('dist',{recursive:true,force:true})\""
45
+ },
46
+ "dependencies": {
47
+ "@modelcontextprotocol/sdk": "^1.0.0",
48
+ "ws": "^8.0.0"
49
+ },
50
+ "devDependencies": {
51
+ "@types/node": "^20.19.39",
52
+ "@types/ws": "^8.18.1",
53
+ "typescript": "^5.9.3",
54
+ "vitest": "^2.1.9"
51
55
  }
52
- }
56
+ }