---
schema_version: 1
route: /t/chrome-devtools-mcp.md
tool: "chrome-devtools-mcp"
---

# sincecutoff.com /t/chrome-devtools-mcp — Chrome DevTools MCP

- name: Chrome DevTools MCP
- kind: mcp
- children: none
- homepage: <https://github.com/ChromeDevTools/chrome-devtools-mcp>

Changes to the tools coding agents drive, since a model's training cutoff, each linked to its first-party source. Check installed versions and limitations before acting; a cutoff date does not establish what a model knows.
Original editorial content: [Apache 2.0](https://sincecutoff.com/v1/data-license.txt), by [0xPatrick](https://0xpatrick.dev). Preserve applicable license and [NOTICE](https://sincecutoff.com/notice.txt) attribution when redistributing. Third-party source text and examples retain their own rights. [License scope and attribution](https://sincecutoff.com/v1/license.json).
To stay current, read the changes feed: [`/v1/changes.md?tool=chrome-devtools-mcp`](https://sincecutoff.com/v1/changes.md?tool=chrome-devtools-mcp) (or `.json`), adding `since=YYYY-MM-DD` for your training cutoff. Entries for registered children are included; the registry itself is `/v1/tools.json`. How to page and save your place: [llms.txt](https://sincecutoff.com/llms.txt).

### analyze_heapsnapshot_contexts finds closure contexts retaining dead fields (2026-10-15)
- slug: analyze-heapsnapshot-contexts-finds-closure-contexts-retaining-dead-fields-66aa0a5514fe
- score: 0.98

How to use it:

When diagnosing retained memory from a heap snapshot, use `analyze_heapsnapshot_contexts` to rank closure contexts holding dead captured fields; it requires `--memoryDebugging=true`. The retained-size score is a prioritizing heuristic, not an exact measure of reclaimable bytes.

Examples:

```
analyze_heapsnapshot_contexts({"filePath":"<path-to-file.heapsnapshot>"})
```

```
analyze_heapsnapshot_contexts({"filePath":"<path-to-file.heapsnapshot>","pageIdx":0,"pageSize":20,"retainedSize":"1MB-2MB"})
```

```
analyze_heapsnapshot_contexts({"filePath":"<path-to-file.heapsnapshot>","scopeInfoNodeId":<scope-info-node-id>})
```

- why_it_matters: When diagnosing retained memory from a heap snapshot, identify closure contexts holding dead captured variables.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.11.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2791>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/190aeee80f91f2a9797b8e686e3cfefc436bf0e0/docs/tool-reference.md>
- gotchas: "Version: 1.11.0"; "filePath (required): Path to a `.heapsnapshot` file to read."; "pageIdx: Zero-based page index; defaults to 0."; "pageSize: Contexts returned per page; defaults to 20."; "retainedSize: Inclusive range for the dead-field score (for example, `10KB`, `1MB-2MB`, `-1MB`, or `1MB-`); one value is treated as a minimum."; "scopeInfoNodeId: Limit results to contexts declared by this ScopeInfo node ID, as reported in a previous call."; "--memoryDebugging=true (required): Required server flag to enable this tool."; "Prerequisite: Enable the MCP server flag `--memoryDebugging=true`."; "Requires `--memoryDebugging=true`."; "`filePath` must identify a `.heapsnapshot` file."; "`pageIdx` defaults to 0; `pageSize` defaults to 20."; "The retained-size score is a prioritizing heuristic, not an exact measure of reclaimable bytes."

### compare_heapsnapshots paginates summary diffs (2026-10-15)
- slug: compare-heapsnapshots-paginates-summary-diffs-9026fe57625c
- score: 0.95

How to use it:

When reviewing a large comparison, call `compare_heapsnapshots` with the two snapshot paths and `pageIdx`/`pageSize`; the summary diff returns the requested class page with indexes and an overall class total.

Examples:

```
compare_heapsnapshots({"baseFilePath":"<earlier-snapshot.heapsnapshot>","currentFilePath":"<later-snapshot.heapsnapshot>","pageIdx":0,"pageSize":20})
```

- why_it_matters: When reviewing a large heap snapshot comparison, retrieve the summary diff in pages and retain the overall class total.
- before: Previously, the method returned `HeapSnapshotClassDiff[]`; the release note says the paginated implementation returns classes with an index and an overall total in a `HeapSnapshotDiff` object.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.11.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/3140>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/daebfd1f6fe8fb276c31b02c85ccb143d3d1e9e8/docs/tool-reference.md>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/daebfd1f6fe8fb276b02c85ccb143d3d1e9e8/docs/tool-reference.md>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/commit/daebfd1f6fe8fb276c31b02c85ccb143d3d1e9e8>
- gotchas: "Version: 1.11.0"; "baseFilePath (required): Path to the earlier, base `.heapsnapshot` file."; "currentFilePath (required): Path to the later, current `.heapsnapshot` file."; "pageIdx: Page index for pagination."; "pageSize: Page size for pagination."; "classIndex: 0-based index of a summary class; when provided, returns that class's detailed diff."; "Prerequisite: Requires `--memoryDebugging=true`."; "Pagination applies to the summary diff; the detailed case is deferred to a follow-up."

### Emulate additional CSS media features (2026-10-15)
- slug: emulate-additional-css-media-features-0321123ed122
- score: 0.98

How to use it:

When checking a page’s accessibility or motion preferences, call `emulate` with the desired media feature value(s). Set any feature to `auto` to reset it; include all desired emulation settings in one call because each call replaces them.

Examples:

```
{"pageId": <pageId>, "forcedColors": "active"}
```

```
{"pageId": <pageId>, "prefersContrast": "more"}
```

```
{"pageId": <pageId>, "prefersReducedMotion": "reduce"}
```

- why_it_matters: When checking a page under accessibility and motion preferences, emulate the relevant CSS media features.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.11.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2929>, <https://raw.githubusercontent.com/ChromeDevTools/chrome-devtools-mcp/chrome-devtools-mcp-v1.11.0/docs/tool-reference.md>
- gotchas: "Version: 1.11.0"; "pageId (required): Targets a specific page by ID."; "forcedColors: Emulates `forced-colors`; allowed: `active`, `none`, `auto`. `auto` resets to default."; "prefersContrast: Emulates `prefers-contrast`; allowed: `more`, `less`, `custom`, `no-preference`, `auto`. `auto` resets to default."; "prefersReducedMotion: Emulates `prefers-reduced-motion`; allowed: `reduce`, `no-preference`, `auto`. `auto` resets to default."; "`forcedColors` accepts `active`, `none`, or `auto`."; "`prefersContrast` accepts `more`, `less`, `custom`, `no-preference`, or `auto`."; "`prefersReducedMotion` accepts `reduce`, `no-preference`, or `auto`."

### evaluate_script loads source code from local files (2026-10-15)
- slug: evaluate-script-loads-source-code-from-local-files-b869af245e37
- score: 0.98

How to use it:

When evaluating repository JavaScript in a target page, pass its local file path with `--sourcePath` and choose `--format` for how to interpret the source. Provide `sourcePath` or `function`, never both.

Examples:

```
chrome-devtools evaluate_script --pageId 1 --sourcePath /path/to/script.js --format script
```

- why_it_matters: When evaluating repository JavaScript in a target page, load the script from a local file and select its interpretation mode.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.11.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2606>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/9cf47a44558dd6873a2bb011d2cda73aca117833/skills/chrome-devtools-cli/SKILL.md>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/9cf47a44558dd6873a2bb011d2cda73aca117833/docs/tool-reference.md>
- gotchas: "Version: 1.11.0"; "pageId (required): Targets a specific page by ID."; "sourcePath: Absolute or relative path to a JavaScript file on the MCP server's local filesystem; provide this or `function`, but not both."; "function: JavaScript source to execute; provide this or `sourcePath`, but not both."; "format: `function` interprets source as a function declaration and supports `args`; `script` evaluates classic JavaScript and does not support `args`. Defaults to `function`; ECMAScript modules are unsupported. Values are alternatives."; "args: Optional arguments passed to the function; supported with `format: function`."; "`sourcePath` is an absolute or relative path on the MCP server's local filesystem."; "Provide either `sourcePath` or `function`, but not both."; "`function` format treats the source as a function declaration and supports args; `script` evaluates classic JavaScript and does not support args."; "ECMAScript modules are not supported."; "Returned values must be JSON-serializable."; "Local source paths are validated through MCP roots."

### get_heapsnapshot_details truncates class names and changes aggregate output (2026-10-15)
- slug: get-heapsnapshot-details-truncates-class-names-and-changes-aggregate-output-8c6abd3cabdc
- score: 0.95

How to use it:

When inspecting a heap snapshot, call `get_heapsnapshot_details` with the snapshot path and optional `maxNameLength` to truncate long names (default 100). Read `className` in CSV output and `heapSnapshotAggregates` in structured content; aggregate sizes are raw bytes.

Examples:

```
get_heapsnapshot_details({"filePath":"<path-to-heapsnapshot>","maxNameLength":100})
```

- why_it_matters: When inspecting heap snapshot details, limit long class names and consume the updated aggregate output fields.
- before: Read the CSV `name` header and `heapSnapshotData` structured content, with sizes formatted as kB strings; class names were not truncated.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.11.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/3137>, <https://raw.githubusercontent.com/ChromeDevTools/chrome-devtools-mcp/chrome-devtools-mcp-v1.11.0/docs/tool-reference.md>
- gotchas: "Version: 1.11.0"; "filePath (required): Path to a .heapsnapshot file to read."; "maxNameLength: Maximum name length before truncation; defaults to 100."; "pageIdx: Page index for aggregate pagination."; "pageSize: Page size for aggregate pagination."; "CSV header `className`: CSV output column label replacing `name`."; "Structured field `heapSnapshotAggregates`: Structured content field replacing `heapSnapshotData`; aggregate sizes are raw bytes."; "Prerequisite: Requires `--memoryDebugging=true`."; "`maxNameLength` defaults to 100 characters."

### performance_start_trace supports cold-load traces with ignoreCache (2026-10-15)
- slug: performance-start-trace-supports-cold-load-traces-with-ignorecache-77dd8a7e3e06
- score: 0.98

How to use it:

For a cold page-load trace, first navigate to the target URL, then call `performance_start_trace` with `reload: true` and `ignoreCache: true`.

Examples:

```
performance_start_trace({"pageId": <pageId>, "reload": true, "ignoreCache": true})
```

- why_it_matters: When measuring a cold page load, start a trace that reloads the page with the HTTP cache bypassed.
- before: Previously, a cold trace required starting the trace without reload, then calling `navigate_page({ignoreCache: true})` separately.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.11.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2931>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/3467d40da8f27aecf779ce325549e4b2436761ae/docs/tool-reference.md>
- gotchas: "Version: 1.11.0"; "pageId (required): Targets a specific page by ID."; "reload: Automatically reloads the target page after tracing starts."; "ignoreCache: Bypasses the HTTP cache on reload to measure a cold page load; only applies when `reload` is true."; "Prerequisite: Navigate to the target URL with `navigate_page` before starting the trace when `reload` is true."; "`ignoreCache` has no effect unless `reload` is true."

### screencast_start and screencast_stop use built-in recording by default (2026-10-15)
- slug: screencast-start-and-screencast-stop-use-built-in-recording-by-default-8036f981d89c
- score: 0.97

How to use it:

When recording a page without ffmpeg, call `screencast_start` and then `screencast_stop`; the built-in recorder writes MP4. To set the frame rate, configure `--screencast-fps=<positive-integer>` (the old `--experimental-screencast-fps` name remains an alias).

Examples:

```
screencast_start({"pageId": <page-id>, "filePath": "<output.mp4>"})
screencast_stop({"pageId": <page-id>})
```

```
npx chrome-devtools-mcp@1.11.0 --screencast-fps=<positive-integer>
```

- why_it_matters: When recording a page without an ffmpeg dependency, use the default screencast tools and set the recording frame rate if needed.
- before: Use the legacy ffmpeg-based screencast implementation, which requires ffmpeg available in the MCP server PATH and `--experimental-screencast`.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.11.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/3123>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/8953ea5159e38dfe8c6c553c02991a45fb8c5655/docs/tool-reference.md>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/8953ea5159e38dfe8c6c553c02991a45fb8c5655/docs/configuration.md>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/8953ea5159e38dfe8c6c553c02991a45fb8c5655/src/config/mcp-options.ts>
- gotchas: "Version: 1.11.0"; "pageId (required): Identifies the page to record or stop recording."; "filePath: Optional output path; the recorder generates a unique path when omitted. Built-in recording outputs MP4."; "--screencast-fps: Frame rate; must be a positive integer. `--experimental-screencast-fps` is an alias."; "--experimental-screencast: Selects legacy ffmpeg-based screencast tools; requires ffmpeg installed and available in the MCP server PATH. Not needed for built-in recording or the frame-rate flag."; "Prerequisite: Install and configure chrome-devtools-mcp; the tools require a target page ID."; "Prerequisite: For the legacy implementation only, install ffmpeg and make it available in the MCP server PATH."; "The legacy ffmpeg-based implementation remains available behind `--experimental-screencast`."; "The new built-in recorder always writes MP4."; "The fps flag no longer requires `--experimental-screencast`."; "Docs conflict: The commit-pinned tool reference still says screencast tools require `--experimentalScreencast=true` and lists WebM as supported. This conflicts with the release note's default built-in MP4 recorder behavior; omitted those claims."

### WebMCP debugging tools appear in third-party developer tools (2026-10-15)
- slug: webmcp-debugging-tools-appear-in-third-party-developer-tools-5f63778c3187
- score: 0.91

How to use it:

When a page exposes WebMCP tools, enable the WebMCP category and Chrome’s WebMCP feature; enable the third-party category to list and execute tools marked `annotations.debugging === true`. Use the regular WebMCP tools for other WebMCP tools.

Examples:

```
list_3p_developer_tools({"pageId": <pageId>}) → execute_3p_developer_tool({"pageId": <pageId>, "toolName": "<toolName>", "params": "<JSON-stringified parameters>"})
```

```
list_webmcp_tools({"pageId": <pageId>}) → execute_webmcp_tool({"pageId": <pageId>, "toolName": "<toolName>", "input": "<JSON-stringified parameters>"})
```

```
npx chrome-devtools-mcp@1.11.0 --categoryExperimentalThirdParty=true --categoryExperimentalWebmcp=true --chromeArg=--enable-features=WebMCP
```

- why_it_matters: When debugging a page that exposes WebMCP debugging tools, list and execute those tools through the third-party developer tools category.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.11.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2900>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/0db519f079336df8265ee5ccae47ae5c57695e51/docs/tool-reference.md>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/0db519f079336df8265ee5ccae47ae5c57695e51/docs/configuration.md>
- gotchas: "Version: 1.11.0"; "--categoryExperimentalThirdParty=true (required): Enables third-party developer tools exposed by the inspected page, including debugging WebMCP tools."; "--categoryExperimentalWebmcp=true (required): Enables WebMCP tools, excluding debugging tools served by the third-party category."; "--enable-features=WebMCP (required): Chrome launch flag required to enable WebMCP; the docs specify Chrome 150+."; "pageId (required): Targets a specific page by ID for listing or execution."; "toolName (required): Name of the tool to execute."; "params: JSON-stringified parameters passed to a third-party developer tool."; "input: JSON-stringified parameters passed to a WebMCP tool."; "Prerequisite: Use Chrome 150+ and launch it with `--enable-features=WebMCP`."; "Prerequisite: Enable `--categoryExperimentalThirdParty=true` for third-party/debugging WebMCP tools and `--categoryExperimentalWebmcp=true` for regular WebMCP tools. Both categories are disabled by default."; "WebMCP tools require Chrome 150+ with `--enable-features=WebMCP`."; "WebMCP tools require `--categoryExperimentalWebmcp=true`; debugging tools are exposed under the third-party developer tools category."; "Third-party developer tools require `--categoryExperimentalThirdParty=true`."

### chrome-devtools-mcp config file support (2026-09-23)
- slug: chrome-devtools-mcp-config-file-support-d9f1361c0bfc
- score: 0.96

How to use it:

When configuring chrome-devtools-mcp for a repository workflow, put the desired server options in a JSON object and pass its path with `--config` when starting the server.

Examples:

```
npx -y chrome-devtools-mcp@1.10.0 --config <path-to-config.json>
```

```
{"headless":true,"categoryInput":false,"blockedUrlPattern":["https://example.com/*"]}
```

- why_it_matters: Configure chrome-devtools-mcp for a repository's development workflow.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.10.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v1.10.0/docs/configuration.md>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/commit/314a5fabfec56f3067c8bd754a945e9e76bea4fb>
- gotchas: "Version: 1.10.0"; "--config <path> (required): Path to a JSON configuration file; the file must contain a JSON object."; "headless: Boolean; run Chrome without a UI."; "categoryInput: Boolean; set to false to exclude input tools."; "blockedUrlPattern: Array of URL patterns to block for browser network access."

### chrome-devtools-mcp get_css_styles formats CSS rules for debugging (2026-09-23)
- slug: chrome-devtools-mcp-get-css-styles-formats-css-rules-for-debugging-21389e7a2963
- score: 0.95

How to use it:

When debugging why an element’s styles apply, are overridden, or conflict, get its UID from `take_snapshot`, then call `get_css_styles` with the page ID and UID. Page through results with `pageIdx`; each page returns 10 rules by default.

Examples:

```
chrome-devtools get_css_styles <pageId> "<uid>"
```

```
chrome-devtools get_css_styles <pageId> "<uid>" --pageSize 20 --pageIdx 0
```

- why_it_matters: Inspect matched, inherited, or pseudo-element CSS rules for an element while debugging why its styles apply or conflict.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.10.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2707>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2612>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2799>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2717>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2715>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2713>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2716>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2718>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v1.10.0/skills/chrome-devtools-cli/SKILL.md>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v1.10.0/docs/tool-reference.md>
- gotchas: "Version: 1.10.0"; "pageId (required): Targets a specific page by ID."; "uid (required): Snapshot element UID to inspect."; "pageIdx: Zero-based result page; defaults to 0."; "pageSize: Maximum rules per page; defaults to 10."; "Prerequisite: A UID from `take_snapshot` is required."; "Requires a UID from `take_snapshot`."; "Returns 10 rules per page by default; `pageIdx` is 0-based and defaults to 0 (the first page)."

### Configure filesystem roots for Chrome DevTools MCP (2026-09-08)
- slug: configure-filesystem-roots-for-chrome-devtools-mcp-d4032d37da16
- score: 0.98

How to use it:

When starting Chrome DevTools MCP and you want filesystem tools limited to selected directories, repeat `--workspace` for each allowed directory. The CLI docs say `--allow-unrestricted-paths` cannot be combined with `--workspace`; server configuration also accepts `--filesystemRoot` or `--filesystem-root`.

Examples:

```
chrome-devtools start --workspace=<repository-directory> --workspace=<output-directory>
```

```
{"mcpServers":{"chrome-devtools":{"command":"npx","args":["chrome-devtools-mcp@<version>","--filesystem-root=<allowed-directory>","--filesystem-root=<another-allowed-directory>"]}}}
```

- why_it_matters: Limit filesystem tools to repository and output directories while starting Chrome DevTools MCP.
- before: The CLI enables unrestricted filesystem access by default; use `--allow-unrestricted-paths` to retain that behavior for compatibility, but do not combine it with `--workspace`.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.9.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2605>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/d00e6f8239d9377fba60f19be635b1bef36ade33/docs/cli.md>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/d00e6f8239d9377fba60f19be635b1bef36ade33/docs/configuration.md>
- gotchas: "Version: 1.9.0"; "--workspace: Directory filesystem tools may access; repeat for each directory. Cannot be combined with `--allow-unrestricted-paths`."; "--filesystemRoot / --filesystem-root: Array of directories filesystem tools may access; may be specified more than once. Default: OS temp directory."; "--allow-unrestricted-paths: CLI compatibility option; cannot be combined with `--workspace`."; "Prerequisite: Install the CLI globally with `npm i chrome-devtools-mcp@latest -g` to make the `chrome-devtools` command available."; "The CLI enables unrestricted filesystem access by default."; "`--workspace` may be repeated for multiple directories."; "`--allow-unrestricted-paths` still works on its own for compatibility but cannot be combined with `--workspace`."; "The default `--filesystemRoot` is the OS temp directory."; "Configured roots work together with roots sent by the MCP client; temp directory access stays the same."

### Disable JavaScript evaluation tools (2026-09-08)
- slug: disable-javascript-evaluation-tools-eb11bc69637d
- score: 0.92

How to use it:

When a workflow must not expose JavaScript evaluation, start Chrome DevTools MCP with `--javascript-evaluation=false` (or `--javascriptEvaluation=false`).

Examples:

```
npx -y chrome-devtools-mcp@1.9.0 --javascript-evaluation=false
```

- why_it_matters: Disable script evaluation tools when running Chrome DevTools MCP for a workflow that must not expose JavaScript evaluation.
- before: Leave the option at its default, `true`, and JavaScript evaluation tools remain available.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.9.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2627>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v1.9.0/docs/configuration.md>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v1.9.0/README.md>
- gotchas: "Version: 1.9.0"; "--javascriptEvaluation / --javascript-evaluation: Boolean; defaults to `true`. Set to `false` to disable evaluation tools, `navigate_page`'s `initScript` parameter, and navigation to `javascript:`, `data:`, or `vbscript:` URLs."; "Prerequisite: Node.js LTS, npm, and current stable Chrome or newer are listed as requirements."; "The option is boolean and defaults to `true`."

### chrome-devtools-mcp evaluate_script waitForStableDom option (2026-08-25)
- slug: chrome-devtools-mcp-evaluate-script-waitforstabledom-option-8d2a1f8664ed
- score: 0.95

How to use it:

For a read-only script that does not need to wait for DOM settling, call `evaluate_script` with `waitForStableDom: false`.

Examples:

```
evaluate_script({"pageId": <pageId>, "function": "() => document.title", "waitForStableDom": false})
```

- why_it_matters: Evaluate a read-only script on a page that does not need to wait for the DOM to settle.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.8.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2346>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v1.8.0/docs/tool-reference.md>
- gotchas: "Version: 1.8.0"; "function (required): JavaScript function declaration to execute in the target page; result must be JSON-serializable."; "pageId (required): ID of the target page."; "waitForStableDom: Whether to wait for DOM settling; defaults to true. Set false for read-only scripts."; "`waitForStableDom` defaults to true."; "The option skips only the stable DOM wait; navigation probing and dialog handling remain active."; "Service worker evaluations always skip the stable DOM wait."

### chrome-devtools-mcp get_heapsnapshot_edges filters and sorting (2026-08-25)
- slug: chrome-devtools-mcp-get-heapsnapshot-edges-filters-and-sorting-5905264f56ce
- score: 0.91

How to use it:

When inspecting a node’s outgoing heap snapshot edges, call `get_heapsnapshot_edges` with the snapshot path and node ID. Set `excludePrimitives: false` to include primitive targets; optionally filter by minimum retained bytes or choose an edge sort order.

Examples:

```
get_heapsnapshot_edges({"filePath":"<path-to-heapsnapshot>","nodeId":<node-id>,"excludePrimitives":false,"minRetainedSize":<bytes>,"sortBy":"name"})
```

- why_it_matters: Inspect heap snapshot edges while filtering primitive targets or ordering edges by size or name.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.8.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2561>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/b58c613f4b05ade36bbf0d6ba44d5a525ec4d19a/docs/tool-reference.md>
- gotchas: "Version: 1.8.0"; "filePath (required): Path to the .heapsnapshot file to read."; "nodeId (required): Node ID whose outgoing edges to return."; "excludePrimitives: Whether to exclude primitive target nodes; defaults to true. Set false to include them."; "minRetainedSize: Minimum retained size in bytes for target nodes."; "sortBy: Sort edges by retainedSize, selfSize, or name; defaults to retainedSize. Values are alternatives."; "Prerequisite: Enable memory debugging with `--memoryDebugging=true`."; "`minRetainedSize` is measured in bytes."; "`sortBy` accepts `retainedSize`, `selfSize`, or `name`."; "Docs conflict: The newer v1.8.0 tag documentation lists `retainedSize` instead of `minRetainedSize` and omits `minRetainedSize`; this conflicts with the release note. Use the release-note parameter only as documented at the feature commit."

### chrome-devtools-mcp heap snapshot size range filters (2026-08-25)
- slug: chrome-devtools-mcp-heap-snapshot-size-range-filters-91780f590fda
- score: 0.94

How to use it:

When filtering heap snapshot objects or outgoing edges by size, pass a size range string to the relevant tool. Enable memory debugging; edge filtering currently applies only the lower bound.

Examples:

```
query_heapsnapshot_objects({"filePath":"<snapshot.heapsnapshot>","retainedSize":"1MB-2MB","selfSize":"-1MiB"})
```

```
get_heapsnapshot_edges({"filePath":"<snapshot.heapsnapshot>","nodeId":<node-id>,"retainedSize":"1MB-"})
```

- why_it_matters: Filter heap snapshot objects and edges by retained or self size while investigating memory use.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.8.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2589>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/61e312f59314907bca32dfeb63cb002601a76cea/docs/tool-reference.md>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/61e312f59314907bca32dfeb63cb002601a76cea/src/utils/bytes.ts>
- gotchas: "Version: 1.8.0"; "query_heapsnapshot_objects.filePath (required): Path to the heap snapshot file to read."; "query_heapsnapshot_objects.retainedSize: Inclusive retained-size range for target nodes; a bare size is a minimum."; "query_heapsnapshot_objects.selfSize: Inclusive self-size range; a bare size is a minimum."; "get_heapsnapshot_edges.filePath (required): Path to the heap snapshot file to read."; "get_heapsnapshot_edges.nodeId (required): Node ID whose outgoing edges to return."; "get_heapsnapshot_edges.retainedSize: Inclusive retained-size range for target nodes; only the lower bound is currently applied."; "size range syntax: A single size is a minimum; ranges accept forms such as 1MB-2MB, -1MB, and 1MB-. Supported units include B, KB, KiB, MB, MiB, GB, GiB, TB, and TiB. Object keys are independent filters; docs do not state they are mutually exclusive."; "Prerequisite: Enable memory debugging with --memoryDebugging=true."; "Ranges are inclusive."; "A single value is treated as a minimum."; "The documentation says only the lower bound is currently applied for `get_heapsnapshot_edges`."

### chrome-devtools-mcp list_console_messages includes optional stack traces (2026-08-25)
- slug: chrome-devtools-mcp-list-console-messages-includes-optional-stack-traces-fbb7591d9b56
- score: 0.97

How to use it:

When identifying where console errors originate, call `list_console_messages` with `includeStackTraces: true` to include available stack traces in the results. Frames are source-mapped and ignore-list-filtered.

Examples:

```
{"name":"list_console_messages","arguments":{"includeStackTraces":true}}
```

- why_it_matters: Identify the source location of console errors while debugging a page.
- before: The release note says the list output previously provided plain message text, requiring a `get_console_message` call for each message to obtain its source location.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.8.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2505>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/85c73a0abc85a2a4e8b7705955dddcede543ebae/docs/tool-reference.md>
- gotchas: "Version: 1.8.0"; "includeStackTraces: Boolean; set true to include available stack traces. Increases response size; defaults to false. Stack traces appear as indented frames in text and as a pre-formatted `stackTrace` string in `structuredContent`."; "Prerequisite: Use a connected Chrome DevTools MCP server and select the page to inspect; this tool lists messages for the currently selected page since its last navigation."; "Stack traces are included only when available."; "`includeStackTraces` defaults to false and increases response size."; "Stack frames are source-mapped and ignore-list-filtered."

### chrome-devtools-mcp query_heapsnapshot_objects (2026-08-25)
- slug: chrome-devtools-mcp-query-heapsnapshot-objects-c8cdc2930ea3
- score: 0.93

How to use it:

When investigating memory use or detached DOM nodes, start chrome-devtools-mcp with memory debugging enabled, then call `query_heapsnapshot_objects` on a `.heapsnapshot` file with the needed filters and pagination.

Examples:

```
query_heapsnapshot_objects({"filePath":"<path>.heapsnapshot","className":"<class name or regex>","isDetached":true,"pageIdx":0,"pageSize":20})
```

```
query_heapsnapshot_objects({"filePath":"<path>.heapsnapshot","propertyName":"<property>","nodeType":"<V8 node type>","minRetainedSize":<bytes>,"maxRetainedSize":<bytes>,"minSelfSize":<bytes>,"maxSelfSize":<bytes>,"sortBy":"retainedSize","pageIdx":0,"pageSize":20})
```

```
npx chrome-devtools-mcp@1.8.0 --memoryDebugging=true
```

- why_it_matters: Filter and sort objects in a heap snapshot while investigating memory use or detached DOM nodes.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.8.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2553>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/fadbf41d96db84cea12e379592bc13b005c053b4/docs/tool-reference.md>
- gotchas: "Version: 1.8.0"; "filePath (required): Path to a `.heapsnapshot` file to read."; "className: Regex or text matching the object class name."; "propertyName: Filter on outgoing reference edge property name."; "nodeType: V8 node type filter, e.g. object, closure, string, array, code."; "isDetached: Filter for detached DOM nodes."; "minRetainedSize: Minimum retained size in bytes."; "maxRetainedSize: Maximum retained size in bytes."; "minSelfSize: Minimum self size in bytes."; "maxSelfSize: Maximum self size in bytes."; "pageIdx: Page index for pagination."; "pageSize: Page size for pagination."; "sortBy: Sort by `retainedSize`, `selfSize`, or `id`; defaults to `retainedSize`."; "Prerequisite: Start the server with `--memoryDebugging=true` to enable this tool."; "Prerequisite: Supply a `.heapsnapshot` file path."; "`filePath` must point to a `.heapsnapshot` file."; "`sortBy` accepts `retainedSize`, `selfSize`, or `id`; it defaults to `retainedSize`."; "Size filters are measured in bytes."

### chrome-devtools-mcp upload_file accepts multiple paths (2026-08-25)
- slug: chrome-devtools-mcp-upload-file-accepts-multiple-paths-cd80ac5f5224
- score: 0.97

How to use it:

When a file input supports multiple selections, call `upload_file` with an array of local paths. Use a string path for a single-file upload.

Examples:

```
{"name":"upload_file","arguments":{"uid":"<file-input-uid>","filePaths":["<local-path-1>","<local-path-2>"]}}
```

```
{"name":"upload_file","arguments":{"uid":"<file-input-uid>","filePaths":"<local-path>"}}
```

- why_it_matters: Upload multiple files through a file input that supports multiple selections.
- before: The release note says `upload_file` accepted only one path.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.8.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2257>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/c8a2393df63da6f62bc76dcc3dc6c288c5fd5911/docs/tool-reference.md>
- gotchas: "Version: 1.8.0"; "uid (required): Snapshot uid of the file input or an element that opens the page's file chooser."; "filePaths (required): One or more local file paths to upload; accepts an array, and the release note says a string remains supported for one file."; "includeSnapshot: Whether to include a snapshot in the response; defaults to false."; "The CLI cannot pass arrays and exposes only the single-value form."

### chrome-devtools-mcp adds get_heapsnapshot_object_details (2026-08-10)
- slug: chrome-devtools-mcp-adds-get-heapsnapshot-object-details-e468b2cbdcc4
- score: 0.95

How to use it:

When debugging memory use, enable memory debugging and call `get_heapsnapshot_object_details` with a `.heapsnapshot` path and node ID to retrieve the object's size, type, distance, and DOM detachedness.

Examples:

```
get_heapsnapshot_object_details({"filePath":"<path-to-file.heapsnapshot>","nodeId":<node-id>})
```

- why_it_matters: Inspect a specific object in a heap snapshot while debugging memory use.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.7.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2374>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v1.7.0/docs/tool-reference.md>
- gotchas: "Version: 1.7.0"; "--memoryDebugging=true (required): Enables memory debugging tools."; "filePath (required): Path to a `.heapsnapshot` file to read."; "nodeId (required): Node ID of the object to inspect."; "Prerequisite: Start the MCP server with `--memoryDebugging=true` enabled."; "Prerequisite: Provide a path to a `.heapsnapshot` file and the target node ID."; "Requires the `--memoryDebugging=true` flag."; "Requires a path to a `.heapsnapshot` file and a node ID."

### get_heapsnapshot_details filters by native context (2026-08-10)
- slug: get-heapsnapshot-details-filters-by-native-context-5c861ccc987c
- score: 0.97

How to use it:

When investigating memory use with a loaded heap snapshot, call `get_heapsnapshot_details` with an applicable native-context `filterName` to narrow aggregates. For `attributedToSpecificNativeContext`, also pass that context’s `objectId`.

Examples:

```
get_heapsnapshot_details({"filePath":"<path-to-heapsnapshot>","filterName":"sharedNativeContext"})
```

```
get_heapsnapshot_details({"filePath":"<path-to-heapsnapshot>","filterName":"attributedToSpecificNativeContext","objectId":<context-node-id>})
```

- why_it_matters: Narrow heap snapshot object or aggregate results to a native context while investigating memory use.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.7.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2377>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/76fd2424984827802867672fcc8d0e0036f4a3af/docs/tool-reference.md>
- gotchas: "Version: 1.7.0"; "filePath (required): Path to the .heapsnapshot file to read."; "filterName: Optional aggregate filter. Allowed: objectsRetainedByDetachedDomNodes, objectsRetainedByConsole, objectsRetainedByEventHandlers, objectsRetainedByContexts, sharedNativeContext, noNativeContext, attributedToSpecificNativeContext."; "objectId: Specific native context object ID (nodeId), used when filterName is attributedToSpecificNativeContext."; "Prerequisite: Requires `--memoryDebugging=true`."; "The `filterName` and `objectId` parameters are optional."; "`objectId` is for the `attributedToSpecificNativeContext` filter."; "The documented filters apply to nodes or aggregates."

### Heap snapshot tools accept named filters (2026-07-14)
- slug: heap-snapshot-tools-accept-named-filters-3fcb9bb72259
- score: 0.93

How to use it:

When inspecting aggregates or class nodes retained through a named source, pass the matching optional `filterName` to the corresponding heap snapshot tool.

Examples:

```
get_heapsnapshot_details({"filePath":"<path-to-heapsnapshot>","filterName":"objectsRetainedByDetachedDomNodes"})
```

```
get_heapsnapshot_class_nodes({"filePath":"<path-to-heapsnapshot>","id":<class-id>,"filterName":"objectsRetainedByConsole"})
```

- why_it_matters: When inspecting heap snapshot nodes or aggregates retained through a specific source, apply the matching named filter.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.6.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2323>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/2812902ba9dca67a320f00983e54d03b741388ce/docs/tool-reference.md>
- gotchas: "Version: 1.6.0"; "filePath (required): Path to the .heapsnapshot file to read."; "id (required): Class ID obtained from details; required by get_heapsnapshot_class_nodes."; "filterName: Filter to apply to nodes or aggregates. Allowed: objectsRetainedByDetachedDomNodes, objectsRetainedByConsole, objectsRetainedByEventHandlers, objectsRetainedByContexts."; "Prerequisite: Enable heap snapshot tools with --memoryDebugging=true."; "filterName is optional and applies to nodes or aggregates."

### chrome-devtools-mcp adds get_heapsnapshot_duplicate_strings (2026-07-03)
- slug: chrome-devtools-mcp-adds-get-heapsnapshot-duplicate-strings-6c55386972f0
- score: 0.94

How to use it:

When memory debugging is enabled, call `get_heapsnapshot_duplicate_strings` on a `.heapsnapshot` file to group duplicate strings by value. Add `pageIdx` and `pageSize` to paginate results when needed.

Examples:

```
chrome-devtools get_heapsnapshot_duplicate_strings "<path>.heapsnapshot"
```

```
get_heapsnapshot_duplicate_strings({"filePath":"<path>.heapsnapshot","pageIdx":<index>,"pageSize":<count>})
```

- why_it_matters: Inspect a saved Chrome memory heapsnapshot to find repeated strings.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.5.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2280>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v1.5.0/skills/chrome-devtools-cli/SKILL.md>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v1.5.0/docs/tool-reference.md>
- gotchas: "Version: 1.5.0"; "filePath (required): Path to a `.heapsnapshot` file to read."; "pageIdx: Page index for pagination."; "pageSize: Page size for pagination."; "Prerequisite: Enable memory debugging with `--memoryDebugging=true`."; "Requires `--memoryDebugging=true`."; "`filePath` must point to a `.heapsnapshot` file."

### chrome-devtools-mcp adds heap snapshot comparison tools (2026-07-03)
- slug: chrome-devtools-mcp-adds-heap-snapshot-comparison-tools-e8e596e54337
- score: 0.97

How to use it:

When memory debugging is enabled, compare the earlier and later `.heapsnapshot` files to get a class summary, then inspect a class by its 0-based summary index. The v1.5.0 tool reference documents this as one `compare_heapsnapshots` tool; it does not document the two tool names in the card.

- why_it_matters: Compare saved Chrome memory heapsnapshots to identify changed classes and inspect changed objects for a class.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.5.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2198>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v1.5.0/src/bin/chrome-devtools-cli-options.ts>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v1.5.0/docs/tool-reference.md>
- gotchas: "Version: 1.5.0"; "--memoryDebugging=true (required): Enables memory debugging tools."; "baseFilePath (required): Path to the base `.heapsnapshot` file (earlier snapshot)."; "currentFilePath (required): Path to the current `.heapsnapshot` file (later snapshot)."; "classIndex: Optional 0-based index of a class in the summary list; supplying it returns that class’s individual-object diff."; "Prerequisite: Enable memory debugging with `--memoryDebugging=true`."; "Requires `--memoryDebugging=true`."; "Both snapshot path parameters must identify `.heapsnapshot` files."; "`classIndex` is a 0-based index in the summary list."; "Docs conflict: The v1.5.0 tool reference documents `compare_heapsnapshots` with optional `classIndex` for summary or class detail. It does not document `compare_heapsnapshots_summary` or `compare_heapsnapshots_class_nodes`. Per instruction, no usage for the conflicting tool names is provided."

### chrome-devtools-mcp adds get_heapsnapshot_dominators (2026-06-18)
- slug: chrome-devtools-mcp-adds-get-heapsnapshot-dominators-1c3f8d4e7847
- score: 0.97

How to use it:

When investigating why an object in a captured heap snapshot remains alive, call `get_heapsnapshot_dominators` with the snapshot path and target node ID to retrieve its dominator chain.

Examples:

```
get_heapsnapshot_dominators({"filePath":"<path-to-file.heapsnapshot>","nodeId":<node-id>})
```

- why_it_matters: When investigating why an object in a captured heap snapshot remains alive, retrieve its dominator chain.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.3.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2215>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v1.3.0/docs/tool-reference.md>
- gotchas: "Version: 1.3.0"; "filePath (required): Path to a `.heapsnapshot` file to read."; "nodeId (required): Node ID to retrieve the dominator chain for."; "Prerequisite: Enable memory debugging with `--memoryDebugging=true`."; "Requires `--memoryDebugging=true`."; "Requires a `.heapsnapshot` file path and a node ID."

### chrome-devtools-mcp adds get_heapsnapshot_edges (2026-06-18)
- slug: chrome-devtools-mcp-adds-get-heapsnapshot-edges-f3f3a597a6d3
- score: 0.95

How to use it:

When memory debugging is enabled, call `get_heapsnapshot_edges` with a `.heapsnapshot` file path and the target node ID to retrieve its outgoing references; add pagination parameters when needed.

Examples:

```
get_heapsnapshot_edges({"filePath":"<path>.heapsnapshot","nodeId":<nodeId>})
```

```
get_heapsnapshot_edges({"filePath":"<path>.heapsnapshot","nodeId":<nodeId>,"pageIdx":<pageIdx>,"pageSize":<pageSize>})
```

- why_it_matters: When inspecting a node in a heap snapshot, retrieve its outgoing references.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.3.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2180>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v1.3.0/docs/tool-reference.md>
- gotchas: "Version: 1.3.0"; "filePath (required): Path to a `.heapsnapshot` file to read."; "nodeId (required): Node ID whose outgoing edges to retrieve."; "pageIdx: Page index for pagination."; "pageSize: Page size for pagination."; "Prerequisite: Enable memory debugging with `--memoryDebugging=true`."; "Requires `--memoryDebugging=true`."; "Requires a `.heapsnapshot` file path and a node ID."

### chrome-devtools-mcp adds get_heapsnapshot_retaining_paths (2026-06-18)
- slug: chrome-devtools-mcp-adds-get-heapsnapshot-retaining-paths-8b8825d37b7d
- score: 0.97

How to use it:

When a heap snapshot object is not being garbage collected, use `get_heapsnapshot_retaining_paths` to find its retaining paths to GC roots. Start the MCP server with `--memoryDebugging=true`, then pass the snapshot path and node ID; optionally bound the search with `maxDepth`, `maxNodes`, or `maxSiblings`.

Examples:

```
get_heapsnapshot_retaining_paths({"filePath":"<path>.heapsnapshot","nodeId":<node-id>})
```

```
get_heapsnapshot_retaining_paths({"filePath":"<path>.heapsnapshot","nodeId":<node-id>,"maxDepth":<depth>,"maxNodes":<count>,"maxSiblings":<count>})
```

- why_it_matters: When debugging why a heap snapshot object is not garbage collected, find its retaining paths to the GC roots.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.3.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2187>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v1.3.0/docs/tool-reference.md>
- gotchas: "Version: 1.3.0"; "filePath (required): Path to a .heapsnapshot file to read."; "nodeId (required): Node ID to get retaining paths for."; "maxDepth: Maximum depth to search for retaining paths."; "maxNodes: Maximum number of nodes to return."; "maxSiblings: Maximum number of siblings to return."; "Prerequisite: Enable memory debugging with `--memoryDebugging=true`."; "Prerequisite: Provide a `.heapsnapshot` file path and a node ID."; "Requires `--memoryDebugging=true`."; "Requires a `.heapsnapshot` file path and a node ID."

### chrome-devtools-mcp take_screenshot accepts size and format caps (2026-06-18)
- slug: chrome-devtools-mcp-take-screenshot-accepts-size-and-format-caps-835ba83b7b5a
- score: 0.98

How to use it:

When screenshots make MCP responses too large or exceed image dimension limits, start `chrome-devtools-mcp` with the needed screenshot caps; `take_screenshot` then uses them when the caller omits its own format or quality.

Examples:

```
npx -y chrome-devtools-mcp@1.3.0 --screenshot-format=webp --screenshot-quality=80 --screenshot-max-width=2000 --screenshot-max-height=2000
```

- why_it_matters: When captures inflate MCP response payloads or exceed the consuming API's image dimension limits, configure screenshot format, quality, and size caps.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.3.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/1823>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/55c8a541d4f842056db6bc843e54117b07bf06c/README.md>
- gotchas: "Version: 1.3.0"; "--screenshot-format: Output format: `jpeg`, `png`, or `webp`; unset preserves the `png` default."; "--screenshot-quality: Compression quality 0–100 for JPEG and WebP; ignored for PNG. Unset preserves the Puppeteer default."; "--screenshot-max-width: Maximum screenshot width in pixels; wider captures are downscaled with aspect ratio preserved. Unset means no resize."; "--screenshot-max-height: Maximum screenshot height in pixels; taller captures are downscaled with aspect ratio preserved. Can be combined with max-width; the smaller scale factor wins. Unset means no resize."; "Prerequisite: Node.js LTS, Chrome current stable or newer, and npm are listed as requirements."; "All flags are opt-in."; "Unset format preserves the existing `png` default."; "Unset quality preserves the Puppeteer default; quality applies to JPEG and WebP and is ignored for PNG."; "Unset width or height means no resize."; "Downscaling preserves aspect ratio; when width and height caps are combined, the smaller scale factor wins."

### chrome-devtools-mcp collects extension service worker console messages (2026-06-08)
- slug: chrome-devtools-mcp-collects-extension-service-worker-console-messages-e21b7ceacd66
- score: 0.96

How to use it:

When debugging browser extension service worker output, call `list_console_messages`; set `serviceWorkerId` to filter messages to that worker.

Examples:

```
list_console_messages({"serviceWorkerId":"<service-worker-id>"})
```

- why_it_matters: Debug console output produced by a browser extension service worker.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.2.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/1915>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v1.2.0/docs/tool-reference.md>
- gotchas: "Version: 1.2.0"; "serviceWorkerId: String; filters messages to the specified service worker."; "serviceWorkerId is optional and filters messages to the specified service worker."

### chrome-devtools-mcp URL pattern network restrictions (2026-06-08)
- slug: chrome-devtools-mcp-url-pattern-network-restrictions-414cdf0e9d79
- score: 0.96

How to use it:

When investigating or testing browser behavior, configure the MCP server with a URL pattern list to restrict network access. Use either `--blocked-url-pattern` to block matches or `--allowed-url-pattern` to allow matches; targets with disallowed URLs are detached, and violating runtime requests are blocked.

Examples:

```
npx -y chrome-devtools-mcp@1.2.0 --blocked-url-pattern="<URL-pattern>"
```

```
npx -y chrome-devtools-mcp@1.2.0 --allowed-url-pattern="<URL-pattern>"
```

```
{"blockedUrlPattern":["<URL-pattern>"]}
```

- why_it_matters: Restrict a Chrome debugging session's network access while investigating or testing a repository's browser behavior.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.2.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2037>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v1.2.0/README.md>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/main/docs/configuration.md>
- gotchas: "Version: 1.2.0"; "Availability: `--allowed-url-pattern` requires Chrome 149+; `--blocked-url-pattern` works on Chrome versions older than 149, but Chrome 149+ is highly recommended."; "--blocked-url-pattern / --blockedUrlPattern: Array of URLPattern Standard patterns to block. Silently detaches from targets matching blocked URLs upon connection and blocks violating runtime requests, including navigations and subresources. Cannot be configured with the allowlist option."; "--allowed-url-pattern / --allowedUrlPattern: Array of URLPattern Standard patterns to allow; other target URLs are silently detached upon connection and violating runtime requests, including navigations and subresources, are blocked. Cannot be configured with the blocklist option."; "blockedUrlPattern: JSON configuration key for an array of URL patterns to block; mutually exclusive with allowedUrlPattern."; "Prerequisite: `--allowed-url-pattern` requires Chrome 149+. The release note says Chrome 149+ is highly recommended for `--blocked-url-pattern`."; "Prerequisite: Network throttling is disabled when a network blocklist or allowlist is configured."; "The two options conflict and cannot be configured simultaneously."; "Both options accept an array of URL patterns and use the URLPattern Standard."; "Network throttling is disabled when a network blocklist or allowlist is configured."

### chrome-devtools-mcp emulate supports extra HTTP headers (2026-05-26)
- slug: chrome-devtools-mcp-emulate-supports-extra-http-headers-ce2a30672a51
- score: 0.97

How to use it:

When testing or debugging a page with custom request headers, call `emulate` on the selected page with `extraHttpHeaders` as a JSON string. Headers persist across navigations; pass an empty string to clear them, and omit the parameter to leave them unchanged.

Examples:

```
emulate({"extraHttpHeaders":"{\"X-Custom\":\"value\",\"Authorization\":\"Bearer <token>\"}"})
```

```
emulate({"extraHttpHeaders":""})
```

- why_it_matters: Set page-level HTTP headers while testing or debugging a web application in Chrome.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.1.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/1176>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v1.1.0/docs/tool-reference.md>
- gotchas: "Version: 1.1.0"; "extraHttpHeaders: JSON string object of extra HTTP headers; headers are sent on every HTTP request from the page and persist across navigations until cleared. Empty string clears all extra headers."; "Headers apply to HTTP requests originating from the page and persist across navigations until cleared."; "Docs conflict: Card says parameter is `extraHTTPHeaders` and clearing uses `{}`; v1.1.0 reference documents `extraHttpHeaders` (lowercase `ttp`) as a JSON string, and says to clear with an empty string. It does not document omission behavior."

### chrome-devtools-mcp evaluate_script saves output with filePath (2026-05-18)
- slug: chrome-devtools-mcp-evaluate-script-saves-output-with-filepath-e3d4c7ed82a7
- score: 0.95

How to use it:

When evaluating a page script and its output should be saved, pass `filePath` to `evaluate_script`; omitting it returns the output inline.

Examples:

```
evaluate_script({"pageId": <pageId>, "function": "() => document.title", "filePath": "<absolute-or-relative-path>"})
```

- why_it_matters: When evaluating a script whose output should be saved to a repository file, provide `filePath` to `evaluate_script`.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v1.0.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/2054>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/main/docs/tool-reference.md>
- gotchas: "Version: 1.0.0"; "pageId (required): Targets a specific page by ID."; "function: JavaScript source to execute; provide either this or `sourcePath`, not both."; "filePath: Absolute or relative path to save the script output; if omitted, output is returned inline."; "`filePath` accepts an absolute or relative path."; "The `filePath` parameter is optional."; "The supplied description says the path is validated."

### chrome-devtools-mcp navigate calls support an experimental URL allowlist (2026-04-22)
- slug: chrome-devtools-mcp-navigate-calls-support-an-experimental-url-allowlist-95a1f4ea8a0e
- score: 0.91

How to use it:

When using v0.23.0 and navigation destinations must be restricted, start the server with `--experimentalNavigationAllowlist`, then configure its URLPatterns list; if navigation is declined, update the list and retry.

Examples:

```
npx -y chrome-devtools-mcp@0.23.0 --experimentalNavigationAllowlist
```

```
navigate_page({"pageId":1,"type":"url","url":"<approved-url>"})
```

- why_it_matters: Restrict page navigations made through the navigate tool to an approved set of URLs.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v0.23.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/1935>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/d50255778a6dcb30fb702755f0dd38f8ee2cd858/src/bin/chrome-devtools-mcp-cli-options.ts>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/d50255778a6dcb30fb702755f0dd38f8ee2cd858/src/tools/pages.ts>
- gotchas: "Version: 0.23.0"; "Availability: Experimental; off by default."; "--experimentalNavigationAllowlist: Enables the experimental navigate allowlist; off by default."; "URLPatterns (required): List of URL patterns used to decide which navigation destinations are allowed. Pattern syntax and configuration mechanism were not found in the v0.23.0 documentation/source inspected."; "pageId (required): ID of the page to navigate."; "type: Navigation mode; `url` navigates to a URL."; "url: Target URL; used only when `type` is `url`."; "The allowlist declines navigations that land on disallowed URLs."; "It does not restrict subresources or JavaScript/iframe navigations."; "The allowlist can be updated and the navigation retried after a decline."

### chrome-devtools-mcp screencast supports WebM and uses filePath (2026-04-22)
- slug: chrome-devtools-mcp-screencast-supports-webm-and-uses-filepath-4b2401135413
- score: 0.90

How to use it:

When saving an experimental screencast, start recording with `screencast_start` and a `.webm` `filePath`, then stop it with `screencast_stop`.

Examples:

```
screencast_start({"pageId": <pageId>, "filePath": "<output>.webm"})
```

```
screencast_stop({"pageId": <pageId>})
```

- why_it_matters: Save an experimental screencast as a WebM file.
- before: The release note says the parameter was previously named `path`.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v0.23.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/1934>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v0.23.0/src/tools/screencast.ts>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/main/docs/tool-reference.md>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/main/docs/configuration.md>
- gotchas: "Version: 0.23.0"; "Availability: Experimental screencast command."; "pageId (required): ID of the target page."; "filePath: Output file path; `.webm` and `.mp4` are supported. A unique path is generated if omitted."; "--experimentalScreencast (required): Enables the experimental screencast tools; defaults to false."; "--experimentalFfmpegPath: Path to the ffmpeg executable."; "Prerequisite: Enable `--experimentalScreencast`; install ffmpeg and ensure it is available in the MCP server PATH."; "The screencast command supports `.webm` in addition to `.mp4`."

### chrome-devtools-mcp adds Chrome extension debugging tools (2026-04-21)
- slug: chrome-devtools-mcp-adds-chrome-extension-debugging-tools-387be4c39120
- score: 0.98

How to use it:

When debugging an unpacked Chrome extension, start chrome-devtools-mcp with the extensions category enabled, then install or inspect/manage the extension using its documented MCP tools. The extension tools require a pipe connection; autoConnect, browserUrl, and wsEndpoint are unsupported with this feature until Chrome 149 is released.

Examples:

```
npx chrome-devtools-mcp@0.22.0 --category-extensions=true
```

```
install_extension({"path":"<absolute-path-to-unpacked-extension-folder>"})
```

```
list_extensions({})
reload_extension({"id":"<extension-id>"})
trigger_extension_action({"id":"<extension-id>"})
uninstall_extension({"id":"<extension-id>"})
```

- why_it_matters: When debugging an unpacked Chrome extension, enable the extension tool category and use its tools to manage and inspect extensions.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v0.22.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/1922>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/3ff21cf30dae19a6af85d836b1b55314f53ff401/README.md>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/3ff21cf30dae19a6af85d836b1b55314f53ff401/docs/tool-reference.md>
- gotchas: "Version: 0.22.0"; "--category-extensions / --categoryExtensions: Boolean; set true to include extension tools. Default false."; "install_extension.path (required): Absolute path to the unpacked extension folder."; "reload_extension.id (required): ID of the extension to reload."; "trigger_extension_action.id (required): ID of the extension whose default action to trigger."; "uninstall_extension.id (required): ID of the extension to uninstall."; "Prerequisite: Extension tools are inactive by default; enable them with --category-extensions=true."; "Prerequisite: This feature is supported only with a pipe connection. autoConnect, browserUrl, and wsEndpoint are unsupported until Chrome 149 is released."; "Extension tools are not active by default."; "This feature is currently only supported with a pipe connection."; "autoConnect, browserUrl, and wsEndpoint are not supported with this feature until 149 will be released."; "install_extension requires an absolute path to the unpacked extension folder."

### experimental-vision enables click_at(x,y) (2026-04-21)
- slug: experimental-vision-enables-click-at-x-y-f616f263914f
- score: 0.94

How to use it:

When a computer-use model must click by screenshot coordinates, start chrome-devtools-mcp with `--experimentalVision` to enable `click_at`.

Examples:

```
npx -y chrome-devtools-mcp@0.22.0 --experimentalVision
```

```
click_at({"pageId": <pageId>, "x": <x>, "y": <y>})
```

- why_it_matters: When using a computer-use model to click by screenshot coordinates, enable the experimental vision tools.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v0.22.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/1788>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/c4f54710d9d7c3d1167628e5135b4cf92beaec45/README.md>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/c4f54710d9d7c3d1167628e5135b4cf92beaec45/src/tools/input.ts>
- gotchas: "Version: 0.22.0"; "Availability: Experimental."; "--experimentalVision / --experimental-vision: Boolean flag; enables coordinate-based tools such as `click_at(x,y)`."; "pageId (required): Targets the page to click."; "x (required): The x coordinate."; "y (required): The y coordinate."; "dblClick: When true, double-clicks; otherwise performs a single click."; "includeSnapshot: When true, includes a page snapshot in the response."; "Prerequisite: Node.js v20.19 or newer maintenance LTS, current stable Chrome or newer, and npm."; "Prerequisite: Accurate screenshot coordinates usually require a computer-use model capable of producing them."; "Usually requires a computer-use model able to produce accurate coordinates from screenshots."

### script tool handles dialogs during evaluation (2026-04-21)
- slug: script-tool-handles-dialogs-during-evaluation-f3b1921cb0b9
- score: 0.92

How to use it:

When evaluating a page script that opens a browser dialog, set `dialogAction` to `accept`, `dismiss`, or a response string for `window.prompt`; it defaults to `accept`.

Examples:

```
evaluate_script({"function":"() => { window.prompt('Enter value'); return document.title; }","dialogAction":"<accept|dismiss|prompt response>"})
```

- why_it_matters: When evaluating page scripts that trigger browser dialogs, pass a dialog action to control the dialog while the script runs.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v0.22.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/1839>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/da33cb5b957fb87bbbab67e4c1521535065881f/docs/tool-reference.md>
- gotchas: "Version: 0.22.0"; "function (required): JavaScript function declaration to execute in the selected page; return values must be JSON-serializable."; "dialogAction: Dialog handling during execution: `accept`, `dismiss`, or a string response for `window.prompt`; defaults to `accept`."; "args: Optional list of arguments to pass to the function."

### chrome-devtools-mcp adds the lighthouse_audit tool (2026-03-05)
- slug: chrome-devtools-mcp-adds-the-lighthouse-audit-tool-eef75e562db0
- score: 0.99

How to use it:

When reviewing a page for accessibility, SEO, or best practices, call `lighthouse_audit` with `device` set to `desktop` or `mobile` and `mode` set to `navigation` to reload and audit, or `snapshot` to audit the current state.

Examples:

```
{"device":"desktop","mode":"navigation"}
```

```
{"device":"mobile","mode":"snapshot","outputDirPath":"<reports-directory>"}
```

- why_it_matters: When reviewing a page in a repository's development workflow, run an accessibility, SEO, or best-practices audit.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v0.19.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/831>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/dfdac2648e560d756a8711ad3bb1fa470be8e7c9/docs/tool-reference.md>
- gotchas: "Version: 0.19.0"; "device: Device to emulate; allowed values: `desktop`, `mobile`."; "mode: Audit mode; `navigation` reloads and audits, `snapshot` analyzes the current state."; "outputDirPath: Directory for reports; omitted means temporary files are used."; "Performance audits are handled by existing tools."; "If `outputDirPath` is omitted, temporary files are used."

### chrome-devtools-mcp adds experimental screencast recording tools (2026-02-25)
- slug: chrome-devtools-mcp-adds-experimental-screencast-recording-tools-0515f8b21bdd
- score: 0.97

How to use it:

When recording a page during debugging, start chrome-devtools-mcp with `--experimentalScreencast` enabled and ffmpeg available on the server PATH. Call `screencast_start` with optional `path`, then `screencast_stop`; the stop response reports the saved path.

Examples:

```
Start the MCP server with `--experimentalScreencast`, then call `screencast_start` with `{ "path": "<output>.mp4" }` and `screencast_stop` with `{}`.
```

- why_it_matters: When recording a page during browser debugging, enable the experimental screencast tools and capture then save the recording.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v0.18.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/941>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v0.18.0/src/tools/screencast.ts>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/main/docs/configuration.md>
- gotchas: "Version: 0.18.0"; "Availability: Experimental; enabled only when the `--experimental-screencast` command line option is provided."; "Requires Install ffmpeg and ensure it is available in the MCP server PATH."; "--experimentalScreencast / --experimental-screencast: Boolean server option; exposes the experimental screencast tools. Default is false."; "screencast_start.path: Output path; when omitted, a unique temporary path is generated. v0.18.0 records in MP4 format."; "screencast_stop parameters: No parameters."; "Prerequisite: Install ffmpeg and ensure it is available in the MCP server PATH."; "Recording is saved in mp4 format."; "If no `path` is provided, a temporary file with the correct extension is created."; "Requires ffmpeg; an error is reported if ffmpeg is not installed."; "Docs conflict: The current tool reference and current source use `filePath` and describe WebM support, while v0.18.0 source uses `path` and MP4. The v0.18.0 source was used for the version-specific tool parameters."

### chrome-devtools-mcp adds take_memory_snapshot (2026-02-25)
- slug: chrome-devtools-mcp-adds-take-memory-snapshot-ffbb9a952ca5
- score: 0.98

How to use it:

When debugging a memory leak, call `take_memory_snapshot` to save a heap snapshot of the currently selected page. Provide a `.heapsnapshot` path in `filePath`.

Examples:

```
take_memory_snapshot({"filePath":"<path>.heapsnapshot"})
```

- why_it_matters: When debugging a memory leak in a page, capture its heap snapshot to a file for inspection.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v0.18.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/1023>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/7ffdc5ee4d9df9f62f03354fa758fb4d022c3b08/docs/tool-reference.md>
- gotchas: "Version: 0.18.0"; "filePath (required, string) (required): Path to the `.heapsnapshot` file where the snapshot is saved."; "The `filePath` parameter is required and must identify a `.heapsnapshot` file."; "The snapshot is of the currently selected page."

### chrome-devtools-mcp adds type_text (2026-02-25)
- slug: chrome-devtools-mcp-adds-type-text-82055ee62ab0
- score: 0.97

How to use it:

When testing keyboard input or focus changes, if the target input is already focused, call `type_text` to type with the keyboard; use `submitKey` to press a key after typing if needed.

Examples:

```
type_text({"text":"<text>","submitKey":"Enter"})
```

- why_it_matters: When testing keyboard input or focus changes on a page without accessibility identifiers, type into the already focused input.
- before: Use the `fill` tools, which require a uid and force a focus change.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v0.18.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/1026>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/b5d01b5fe65fa20f9b76555b86a749960a5d1738/docs/tool-reference.md>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/b5d01b5fe65fa20f9b76555a5d1738/docs/tool-reference.md>
- gotchas: "Version: 0.18.0"; "text (required): String to type."; "submitKey: Key to press after typing; examples: Enter, Tab, Escape."; "The input must already be focused."; "The `submitKey` parameter is optional."

### chrome-devtools-mcp new_page supports isolated browser contexts (2026-02-25)
- slug: chrome-devtools-mcp-new-page-supports-isolated-browser-contexts-85e24abf1ca1
- score: 0.96

How to use it:

For multi-user browser testing that needs separate storage, call `new_page` with a distinct `isolatedContext` name for each user; pages with the same name share cookies and storage, while different names are isolated.

Examples:

```
new_page({"url":"<page URL>","isolatedContext":"<user context name>"})
```

- why_it_matters: When testing multi-user browser behavior such as chat or collaborative editing, create pages in named isolated contexts to separate their storage.
- before: Create pages in the default browser context, where pages share cookies and storage.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v0.18.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/991>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/59f6477a70eb07585e9a510089f1dfc840a012fd/docs/tool-reference.md>
- gotchas: "Version: 0.18.0"; "url (required): URL to load in the new page."; "isolatedContext: Context name; pages with the same name share cookies and storage, while pages in different browser contexts are fully isolated."; "The `isolatedContext` parameter is optional."; "Omitting it uses the default browser context; existing behavior is unchanged."

### chrome-devtools-mcp wait_for accepts any-match text arrays (2026-02-25)
- slug: chrome-devtools-mcp-wait-for-accepts-any-match-text-arrays-6f6544e1788c
- score: 0.98

How to use it:

When a page flow can end with any of several text outcomes, call `wait_for` with `text` set to a non-empty list of candidate strings; it resolves when any listed text appears.

Examples:

```
{"name":"wait_for","arguments":{"pageId":<page_id>,"text":["Complete","Error"],"timeout":<milliseconds>}}
```

- why_it_matters: When a page flow may end with any of several text outcomes, wait for the first matching text.
- before: Call `wait_for` with one expected string, so a flow that ends in a different text outcome can keep waiting until timeout.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v0.18.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/1011>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/496ab1b45f7a283a1432643777e0795a17f33667/docs/tool-reference.md>
- gotchas: "Version: 0.18.0"; "pageId (required): Targets a specific page by ID."; "text (required): Non-empty list of texts; resolves when any value appears on the page."; "timeout: Maximum wait time in milliseconds; 0 uses the default timeout."; "The text list must be non-empty."; "`timeout` is an optional integer in milliseconds; 0 keeps default behavior."

### chrome-devtools-mcp performance summaries include CrUX field data (2026-02-10)
- slug: chrome-devtools-mcp-performance-summaries-include-crux-field-data-df8467bc1091
- score: 0.98

How to use it:

When reviewing a repository page’s performance, record a trace and inspect the stopped trace summary for CrUX field metrics alongside lab data. Set `--performance-crux=false` (or use `--no-performance-crux`) at server startup to disable sending trace URLs to the CrUX API.

Examples:

```
navigate_page({"type":"url","url":"<repository-page-url>"})
```

```
performance_start_trace({"autoStop":false,"reload":false})
```

```
performance_stop_trace({})
```

- why_it_matters: Review a performance trace for a repository page and compare lab metrics with real-user field metrics.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v0.17.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/733>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v0.17.0/docs/tool-reference.md>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v0.17.0/README.md>
- gotchas: "Version: 0.17.0"; "autoStop (required): Whether to stop the trace automatically."; "reload (required): Whether to reload the selected page after tracing starts."; "--performanceCrux / --performance-crux: Boolean; defaults to true. Set false to disable sending URLs from performance traces to the CrUX API for field data."; "--no-performance-crux: Disable sending trace URLs to the CrUX API."; "filePath: For start/stop trace tools, path to save raw trace data; may be absolute or relative to the working directory."; "Prerequisite: Node.js v20.19 or newer maintenance LTS, Chrome current stable or newer, and npm."; "Prerequisite: Navigate to the desired URL before starting a trace if `reload` or `autoStop` is true."; "The server extracts primary navigation URLs from the trace, determined by insightSets."; "It fetches field metrics for each unique URL or origin."; "The `--performanceCrux`/`--performance-crux` boolean defaults to `true`."; "Performance tools may send trace URLs to the Google CrUX API."

### chrome-devtools-mcp emulation supports colorScheme (2026-01-29)
- slug: chrome-devtools-mcp-emulation-supports-colorscheme-2274f480ff19
- score: 0.98

How to use it:

When testing a page in light or dark mode, call `emulate` with `colorScheme` set to `"light"` or `"dark"`. Set it to `"auto"` to reset to the default.

Examples:

```
emulate({"colorScheme":"dark"})
```

- why_it_matters: Test a page's appearance under light or dark color scheme settings.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v0.15.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/858>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v0.15.0/docs/tool-reference.md>
- gotchas: "Version: 0.15.0"; "colorScheme: Enum `\"dark\"`, `\"light\"`, or `\"auto\"`; emulates dark or light mode, with `\"auto\"` resetting to default."; "Accepted colorScheme values are \"dark\", \"light\", and \"auto\"."

### chrome-devtools-mcp page navigation accepts initScript (2026-01-29)
- slug: chrome-devtools-mcp-page-navigation-accepts-initscript-7dafabaa6ff2
- score: 0.97

How to use it:

When navigating to a new document, set `initScript` on `navigate_page` to run JavaScript before the page’s other scripts.

Examples:

```
navigate_page({"pageId": <pageId>, "type": "url", "url": "<url>", "initScript": "<JavaScript>"})
```

- why_it_matters: Run setup code on each new document before the page's own scripts during a navigation.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v0.15.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/568>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v0.15.0/docs/tool-reference.md>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/main/docs/configuration.md>
- gotchas: "Version: 0.15.0"; "pageId (required): ID of the target page."; "initScript: JavaScript executed on each new document before other scripts for the next navigation."; "type: Navigation action; use `url` to navigate by URL."; "url: Target URL; required when `type` is `url`."; "Prerequisite: Use version 0.15.0 or later for this feature."; "Prerequisite: JavaScript evaluation must be enabled; the `--javascriptEvaluation` option defaults to true, and setting it to false disables `initScript`."; "Runs on each new document before any other scripts for the next navigation."

### Emulate device viewport and user agent (2026-01-27)
- slug: emulate-device-viewport-and-user-agent-f91aff788a2d
- score: 0.96

How to use it:

When checking a page under a mobile or different desktop device configuration, call `emulate` with `viewport` and/or `userAgent`; set either to null to reset its override.

Examples:

```
emulate({"viewport": <viewport-value>, "userAgent": <user-agent-string>})
```

- why_it_matters: Check a web page under a mobile or different desktop device configuration.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v0.14.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/798>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/a8169676f920f88965a2574f53affe15c1278b43/docs/tool-reference.md>
- gotchas: "Version: 0.14.0"; "viewport: Viewport override; set to null to reset to the default viewport. Its value format is not specified in this version's docs."; "userAgent: User-agent override; set to null to clear it."; "Both attributes are optional."; "The recommended way is to emulate via the MCP server instead of a parallel DevTools session."; "Docs conflict: Current official docs describe viewport as a formatted string and clearing userAgent with an empty string; the version 0.14.0 docs instead specify unknown value types and null resets. This card follows the 0.14.0 behavior."

### Input tools default to omitting snapshots (2026-01-27)
- slug: input-tools-default-to-omitting-snapshots-d6b44ec44b30
- score: 0.91

How to use it:

When an input action does not need an updated page snapshot, call the input tool without `includeSnapshot`; set `includeSnapshot: true` to include one in the response.

Examples:

```
click({uid: "<element-uid>"})
```

```
fill({uid: "<element-uid>", value: "<text>"})
```

```
click({uid: "<element-uid>", includeSnapshot: true})
```

- why_it_matters: Use browser input tools when an updated page snapshot is unnecessary.
- before: Use the input tool with its default behavior, which regenerated snapshots.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v0.14.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/821>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/4b8e9f287572e0a95c30b5ca612acf08bf79595b/docs/tool-reference.md>
- gotchas: "Version: 0.14.0"; "includeSnapshot: Whether to include a snapshot in the response; defaults to false."; "`includeSnapshot` is optional and defaults to false."

### new_page accepts a background parameter (2026-01-27)
- slug: new-page-accepts-a-background-parameter-403d65c995c2
- score: 0.95

How to use it:

When opening a page while keeping the current page in front, call `new_page` with `background: true`. Provide the URL to load.

Examples:

```
new_page({"url":"<URL>","background":true})
```

- why_it_matters: Open a new browser page while keeping the current page in front.
- before: Call `new_page` to open a page in the foreground.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v0.14.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/837>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/main/docs/tool-reference.md>
- gotchas: "Version: 0.14.0"; "url (required): URL to load in a new page."; "background: Whether to open the page in the background without bringing it to the front; defaults to false (foreground)."; "The optional boolean parameter defaults to false (foreground)."

### Save network request and response bodies to files (2026-01-27)
- slug: save-network-request-and-response-bodies-to-files-46b6f442a75a
- score: 0.93

How to use it:

When debugging a web app, call `get_network_request` for the target page and set `requestFilePath` and/or `responseFilePath` to save bodies; omit either path to return that body inline.

Examples:

```
get_network_request({"pageId": <pageId>, "reqid": <requestId>, "requestFilePath": "<request-path>", "responseFilePath": "<response-path>"})
```

- why_it_matters: Inspect or retain network request and response bodies while debugging a repository's web application.
- before: Retrieve the body inline by omitting `requestFilePath` and `responseFilePath`.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v0.14.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/795>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/6d0e4cab28a8498c2783c1c0c6436c655de7b336/docs/tool-reference.md>
- gotchas: "Version: 0.14.0"; "pageId (required): ID of the target page."; "reqid: Request ID; omit to use the currently selected request in the DevTools Network panel."; "requestFilePath: Absolute or relative path to save the request body; omit to return it inline."; "responseFilePath: Absolute or relative path to save the response body; omit to return it inline."; "Both path parameters are optional and accept absolute or relative paths."

### chrome-devtools-mcp can selectively ignore default Chrome launch arguments (2026-01-15)
- slug: chrome-devtools-mcp-can-selectively-ignore-default-chrome-launch-arguments-a4cbab763318
- score: 0.90

How to use it:

When the MCP server launches Chrome and you need to omit selected Puppeteer default flags, repeat `--ignore-default-chrome-arg` for each flag to ignore. The option does not apply when connecting to an already running Chrome.

Examples:

```
{"mcpServers":{"chrome-devtools":{"command":"npx","args":["-y","chrome-devtools-mcp@0.13.0","--ignore-default-chrome-arg=--enable-automation","--ignore-default-chrome-arg=--disable-extensions"]}}}
```

- why_it_matters: When debugging or testing requires Chrome to launch without selected Puppeteer defaults, configure chrome-devtools-mcp with the arguments to ignore.
- before: There was no way to opt out of Puppeteer's default Chrome launch arguments.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v0.13.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/729>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/9a51af219fc9216cd463bef9363716283f41f36a/README.md>
- gotchas: "Version: 0.13.0"; "--ignore-default-chrome-arg / --ignoreDefaultChromeArg: Array option; explicitly disables selected default Chrome arguments. Only applies when chrome-devtools-mcp launches Chrome. Repeat for each argument to ignore."; "Prerequisite: Node.js v20.19 or newer maintenance LTS, Chrome current stable or newer, and npm."; "Only applies when Chrome is launched by chrome-devtools-mcp."; "The option is an array and allows selectively ignoring specific default Chrome launch arguments."

### chrome-devtools-mcp performance tools accept filePath for raw trace output (2026-01-15)
- slug: chrome-devtools-mcp-performance-tools-accept-filepath-for-raw-trace-output-e4d9c470b72a
- score: 0.95

How to use it:

When profiling a web application, set `filePath` on `performance_start_trace` or `performance_stop_trace` to save the raw trace; use `.json.gz` for compressed output or `.json` for uncompressed output.

Examples:

```
performance_start_trace({"pageId": <pageId>, "filePath": "<trace.json.gz>"})
```

```
performance_stop_trace({"pageId": <pageId>, "filePath": "<trace.json>"})
```

- why_it_matters: When profiling a repository's web application, save raw performance trace data to a file for inspection.
- sources: <https://github.com/ChromeDevTools/chrome-devtools-mcp/releases/tag/chrome-devtools-mcp-v0.13.0>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/686>, <https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/chrome-devtools-mcp-v0.13.0/docs/tool-reference.md>
- gotchas: "Version: 0.13.0"; "pageId (required): ID of the target page."; "filePath: Absolute path or path relative to the current working directory for raw trace output; `.json.gz` is compressed and `.json` is uncompressed."; "autoStop (required): On `performance_start_trace`, determines whether recording stops automatically."; "reload (required): On `performance_start_trace`, determines whether the target page reloads after tracing starts."; "Prerequisite: If `reload` or `autoStop` is true, navigate to the right URL before starting the trace."; "`filePath` is optional."; "The path may be absolute or relative to the current working directory."
