chrome-devtools-mcp 0.15.1 → 0.17.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.
@@ -194,7 +194,6 @@ export const fill = defineTool({
194
194
  },
195
195
  handler: async (request, response, context) => {
196
196
  await context.waitForEventsAfterAction(async () => {
197
- await context.getSelectedPage().keyboard.type(request.params.value);
198
197
  await fillFormElement(request.params.uid, request.params.value, context);
199
198
  });
200
199
  response.appendResponseLine(`Successfully filled out the element`);
@@ -4,7 +4,8 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import zlib from 'node:zlib';
7
- import { zod } from '../third_party/index.js';
7
+ import { logger } from '../logger.js';
8
+ import { zod, DevTools } from '../third_party/index.js';
8
9
  import { parseRawTraceBuffer, traceResultIsSuccess, } from '../trace-processing/parse.js';
9
10
  import { ToolCategory } from './categories.js';
10
11
  import { defineTool } from './ToolDefinition.js';
@@ -145,6 +146,9 @@ async function stopTracingAndAppendOutput(page, response, context, filePath) {
145
146
  const result = await parseRawTraceBuffer(traceEventsBuffer);
146
147
  response.appendResponseLine('The performance trace has been stopped.');
147
148
  if (traceResultIsSuccess(result)) {
149
+ if (context.isCruxEnabled()) {
150
+ await populateCruxData(result);
151
+ }
148
152
  context.storeTraceRecording(result);
149
153
  response.attachTraceSummary(result);
150
154
  }
@@ -156,3 +160,29 @@ async function stopTracingAndAppendOutput(page, response, context, filePath) {
156
160
  context.setIsRunningPerformanceTrace(false);
157
161
  }
158
162
  }
163
+ /** We tell CrUXManager to fetch data so it's available when DevTools.PerformanceTraceFormatter is invoked */
164
+ async function populateCruxData(result) {
165
+ logger('populateCruxData called');
166
+ const cruxManager = DevTools.CrUXManager.instance();
167
+ // go/jtfbx. Yes, we're aware this API key is public. ;)
168
+ cruxManager.setEndpointForTesting('https://chromeuxreport.googleapis.com/v1/records:queryRecord?key=AIzaSyBn5gimNjhiEyA_euicSKko6IlD3HdgUfk');
169
+ const cruxSetting = DevTools.Common.Settings.Settings.instance().createSetting('field-data', {
170
+ enabled: true,
171
+ });
172
+ cruxSetting.set({ enabled: true });
173
+ // Gather URLs to fetch CrUX data for
174
+ const urls = [...(result.parsedTrace.insights?.values() ?? [])].map(c => c.url.toString());
175
+ urls.push(result.parsedTrace.data.Meta.mainFrameURL);
176
+ const urlSet = new Set(urls);
177
+ if (urlSet.size === 0) {
178
+ logger('No URLs found for CrUX data');
179
+ return;
180
+ }
181
+ logger(`Fetching CrUX data for ${urlSet.size} URLs: ${Array.from(urlSet).join(', ')}`);
182
+ const cruxData = await Promise.all(Array.from(urlSet).map(async (url) => {
183
+ const data = await cruxManager.getFieldDataForPage(url);
184
+ logger(`CrUX data for ${url}: ${data ? 'found' : 'not found'}`);
185
+ return data;
186
+ }));
187
+ result.parsedTrace.metadata.cruxFieldData = cruxData;
188
+ }
@@ -8,8 +8,8 @@ import { ToolCategory } from './categories.js';
8
8
  import { defineTool } from './ToolDefinition.js';
9
9
  export const evaluateScript = defineTool({
10
10
  name: 'evaluate_script',
11
- description: `Evaluate a JavaScript function inside the currently selected page. Returns the response as JSON
12
- so returned values have to JSON-serializable.`,
11
+ description: `Evaluate a JavaScript function inside the currently selected page. Returns the response as JSON,
12
+ so returned values have to be JSON-serializable.`,
13
13
  annotations: {
14
14
  category: ToolCategory.DEBUGGING,
15
15
  readOnlyHint: false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chrome-devtools-mcp",
3
- "version": "0.15.1",
3
+ "version": "0.17.0",
4
4
  "description": "MCP server for Chrome DevTools",
5
5
  "type": "module",
6
6
  "bin": "./build/src/index.js",
@@ -42,7 +42,7 @@
42
42
  "devDependencies": {
43
43
  "@eslint/js": "^9.35.0",
44
44
  "@google/genai": "^1.37.0",
45
- "@modelcontextprotocol/sdk": "1.25.3",
45
+ "@modelcontextprotocol/sdk": "1.26.0",
46
46
  "@rollup/plugin-commonjs": "^29.0.0",
47
47
  "@rollup/plugin-json": "^6.1.0",
48
48
  "@rollup/plugin-node-resolve": "^16.0.3",
@@ -54,7 +54,7 @@
54
54
  "@types/yargs": "^17.0.33",
55
55
  "@typescript-eslint/eslint-plugin": "^8.43.0",
56
56
  "@typescript-eslint/parser": "^8.43.0",
57
- "chrome-devtools-frontend": "1.0.1575174",
57
+ "chrome-devtools-frontend": "1.0.1581449",
58
58
  "core-js": "3.48.0",
59
59
  "debug": "4.4.3",
60
60
  "eslint": "^9.35.0",
@@ -62,8 +62,8 @@
62
62
  "eslint-plugin-import": "^2.32.0",
63
63
  "globals": "^17.0.0",
64
64
  "prettier": "^3.6.2",
65
- "puppeteer": "24.36.1",
66
- "rollup": "4.57.0",
65
+ "puppeteer": "24.37.2",
66
+ "rollup": "4.57.1",
67
67
  "rollup-plugin-cleanup": "^3.2.1",
68
68
  "rollup-plugin-license": "^3.6.0",
69
69
  "sinon": "^21.0.0",