Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
e450369
fix: warn on unknown CLI args (#2577)
Lightning00Blade Aug 14, 2026
5d02839
refactor: move config files out of bin (#2578)
Lightning00Blade Aug 14, 2026
fce756a
fix(clI): print the errror message alone instead of JSON in the CLI (…
dinfuehr Aug 16, 2026
1c8ee68
chore(deps): bump third_party/devtools-frontend from `eaad249` to `9c…
dependabot[bot] Aug 17, 2026
b750168
fix: require .heapsnapshot (or .heaptimeline) as file extension (#2579)
dinfuehr Aug 17, 2026
57adfa9
refactor: make validatePath return resolved url (#2572)
OrKoN Aug 17, 2026
1c92ba0
fix(cli): enable tools which require --memoryDebugging on the CLI (#2…
dinfuehr Aug 17, 2026
fadbf41
feat: Add query_heapsnapshot MCP tool (#2553)
dinfuehr Aug 17, 2026
fd0b7e1
chore(deps-dev): bump the dev-dependencies group across 1 directory w…
dependabot[bot] Aug 18, 2026
6506425
fix: do not append page url when the previously selected page is gone…
yulunz Aug 19, 2026
9bd78c0
chore(deps): bump third_party/devtools-frontend from `9cf264b` to `9e…
dependabot[bot] Aug 19, 2026
61e312f
feat: Use ranges with human readable sizes (#2589)
dinfuehr Aug 19, 2026
dbe0942
chore(deps-dev): bump the bundled group across 1 directory with 2 upd…
dependabot[bot] Aug 19, 2026
adacf23
chore(telemetry): add more mcp client name matchers. (#2591)
yulunz Aug 19, 2026
49c35cd
test: update tests (#2593)
nroscino Aug 19, 2026
1bac85c
fix: puppeteer actions would not follow symlinks anymore (#2592)
OrKoN Aug 19, 2026
c6cff23
fix(cli): adjust chrome-devtools start defaults (#2597)
OrKoN Aug 20, 2026
8f25f69
chore(deps): bump third_party/devtools-frontend from `9e32095` to `23…
dependabot[bot] Aug 20, 2026
2ce42f8
chore(deps): bump third_party/devtools-frontend from `23cccaa` to `6f…
dependabot[bot] Aug 21, 2026
ebf58f2
fix: respect screenshot bounds on HiDPI displays (#2536)
shixi-li Aug 21, 2026
50a16fa
feat: make pageId required for page-scoped tools by default (#1777)
bcfmtolgahan Aug 24, 2026
6dba5c7
fix: new flags for page id routing moved to the end of metrics json (…
samiyac Aug 25, 2026
45f187b
chore(main): release chrome-devtools-mcp 1.8.0 (#2528)
browser-automation-bot Aug 25, 2026
2dc104c
feat: Add --allow-unrestricted-paths by default for CLI (#2618)
dinfuehr Aug 26, 2026
46c3e05
fix(memory): expliclity mention the need of a flag (#2620)
Lightning00Blade Aug 27, 2026
d1baa90
feat(performance): set default trace buffer size to match DevTools (1…
jackfranklin Aug 27, 2026
d1e73ff
fix: do not enable the DevTools frontend Audits subscription (#2625)
mvanhorn Aug 28, 2026
fd67970
docs: update SECURITY.md (#2626)
OrKoN Aug 28, 2026
a78566e
feat: add an option to turn off js execution tools (#2627)
OrKoN Aug 31, 2026
73ae257
chore(deps-dev): bump the dev-dependencies group across 1 directory w…
dependabot[bot] Aug 31, 2026
1a092ff
refactor: wrap Server into a class (#2633)
Lightning00Blade Sep 1, 2026
6a67552
feat: Add cookie-debugging skill and improve network/pages tool descr…
natorion Sep 1, 2026
552c870
fix: truncate long urls in concise network request output (#2513)
ZayanKhan-12 Sep 1, 2026
2e641d8
feat: add screencast fps option (#2312)
mturac Sep 1, 2026
5463101
docs: split the docs in separate files (#2600)
Lightning00Blade Sep 2, 2026
1b2c0e5
fix: detect scheduled script navigations (#2622)
Elioooon Sep 2, 2026
05d9e55
feat: add Agent Plugins 1.0 package (#2623)
777genius Sep 2, 2026
c575777
docs: correct what --screenshotFormat reduces (#2617)
thomasbachem Sep 2, 2026
446bc2e
chore(deps): bump third_party/devtools-frontend from `6fdb53e` to `f2…
dependabot[bot] Sep 2, 2026
f0058d5
refactor: move transform logic to Clearcut level (#2637)
Lightning00Blade Sep 2, 2026
24e3e7c
test: stabilize delayed navigation timing (#2635)
777genius Sep 2, 2026
4993a0f
feat: extend --no-javascript-evaluation to cover navigations and init…
OrKoN Sep 2, 2026
3626ce5
chore(deps-dev): bump puppeteer from 25.8.0 to 25.9.0 in the bundled …
dependabot[bot] Sep 2, 2026
23839b3
chore(deps): bump fast-uri from 3.1.5 to 3.1.7 (#2642)
dependabot[bot] Sep 2, 2026
b2007ab
chore(deps-dev): bump @humanfs/node from 0.16.7 to 0.16.8 (#2643)
dependabot[bot] Sep 2, 2026
d00e6f8
feat: support configurable filesystem roots (#2605)
joebasrawi Sep 3, 2026
90b0c88
chore(deps): bump third_party/devtools-frontend from `f2496da` to `de…
dependabot[bot] Sep 3, 2026
dad58bc
test: revert stabilize delayed navigation timing (#2640)
OrKoN Sep 3, 2026
020c048
fix: filter out Chrome webui targets by default (#2648)
OrKoN Sep 3, 2026
e7ecca4
test: delete a flaky test (#2653)
OrKoN Sep 3, 2026
401a119
refactor: extract category config into a seprate file (#2652)
Lightning00Blade Sep 3, 2026
fc6a000
chore(deps): bump third_party/devtools-frontend from `de0546b` to `33…
dependabot[bot] Sep 4, 2026
f215c82
fix: honor background when new_page uses isolatedContext (#2658)
baishiwen9 Sep 4, 2026
18ca912
docs: update agents.md for testing (#2660)
OrKoN Sep 4, 2026
808aed6
fix: validate viewport and geolocation inputs in emulate tool (#2663)
baishiwen9 Sep 4, 2026
086299a
test: add sinon mock utils and emulate tool unit tests (#2641)
maheshsingh20 Sep 4, 2026
757b1fe
chore(deps-dev): bump puppeteer from 25.9.0 to 25.10.0 in the bundled…
dependabot[bot] Sep 7, 2026
4430a76
feat: option to disable source maps (#2628)
OrKoN Sep 7, 2026
dc1d559
chore: disable prettier ignore for files updated by release-please (#…
OrKoN Sep 7, 2026
d4fa58b
test: migrate emulation tests off withMcpContext to unit tests (#2665)
maheshsingh20 Sep 7, 2026
d820bd7
build: fix devtools-frontend dependabot ignore rule (#2681)
OrKoN Sep 7, 2026
a918b7b
refactor: extract browser options (#2654)
Lightning00Blade Sep 7, 2026
bf9d0a4
chore(deps): bump third_party/devtools-frontend from `330f6aa` to `d1…
dependabot[bot] Sep 8, 2026
02c5911
test: migrate screencast tests off withMcpContext to unit tests (#2683)
maheshsingh20 Sep 8, 2026
1cec9cd
chore(main): release chrome-devtools-mcp 1.9.0 (#2619)
browser-automation-bot Sep 8, 2026
314a5fa
feat: support config file (#2661)
Lightning00Blade Sep 8, 2026
6e53015
chore: bucketize days_since_last_active. (#2697)
yulunz Sep 8, 2026
4a3f6fc
chore(deps-dev): bump the dev-dependencies group across 1 directory w…
dependabot[bot] Sep 8, 2026
66137b6
chore(deps): bump third_party/devtools-frontend from `d1a4fbf` to `2a…
dependabot[bot] Sep 9, 2026
9fd461a
chore: add hidden devtoolsComments flag (#2692)
OrKoN Sep 9, 2026
7504cff
chore: add comments and open_devtools tools without implementation (#…
OrKoN Sep 9, 2026
7a46acf
test: migrate snapshot tests to unit tests and move waitForTextOnPage…
maheshsingh20 Sep 9, 2026
8a0b894
chore(intake): merge upstream/main (v1.9.0) into opera fork
mateuszk-opera Sep 9, 2026
c82d7a9
fix: update assertion string from chrome-devtools to opera-devtools a…
mateuszk-opera Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "devtools-for-agents",
"description": "Help your agent build, debug, and verify your code correctly. With Chrome DevTools for agents, your AI agent can interact with the Chrome browser to test code, emulate users, and catch bugs using Chrome DevTools’ capabilities before shipping.",
"version": "1.7.0",
"version": "1.9.0",
"author": {
"name": "Google Chrome"
},
Expand All @@ -12,7 +12,7 @@
"chrome-devtools": {
"command": "npx",
"args": [
"chrome-devtools-mcp@1.7.0"
"chrome-devtools-mcp@1.9.0"
]
}
}
Expand Down
3 changes: 2 additions & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ src/version.ts merge=opera-ours
# Generated artifacts: never hand-merge, always `npm run gen` after the merge.
package-lock.json merge=opera-ours
docs/tool-reference.md merge=opera-ours
src/bin/chrome-devtools-cli-options.ts merge=opera-ours
docs/configuration.md merge=opera-ours
src/config/cli-options.ts merge=opera-ours
src/telemetry/tool_call_metrics.json merge=opera-ours
src/telemetry/flag_usage_metrics.json merge=opera-ours
2 changes: 1 addition & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,5 +61,5 @@ updates:
ignore:
# Ignore tagged releases to fall back to branch commits.
# Untagged commits get versions like `0.0.0-0.<index>`.
- dependency-name: 'devtools-frontend'
- dependency-name: 'third_party/devtools-frontend'
versions: ['> 0.0.0']
4 changes: 3 additions & 1 deletion .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ CHANGELOG.md
src/third_party/lighthouse-devtools-mcp-bundle.js
third_party/devtools-frontend

# Release-please formatting brakes CI checks
# Release-please formatting breaks CI checks
.claude-plugin/plugin.json
.cursor-plugin/plugin.json
.github/plugin/plugin.json
gemini-extension.json
mcp.json
plugin.json
6 changes: 3 additions & 3 deletions SECURITY.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
## Security policy

The Chrome DevTools MCP project takes security very seriously. Please use [Chromium’s process to report security issues](https://www.chromium.org/Home/chromium-security/reporting-security-bugs/).
The Chrome DevTools MCP project takes security very seriously. Please use [Google Open Source Software Vulnerability Reward Program](https://bughunters.google.com/about/rules/open-source/google-open-source-software-vulnerability-reward-program-rules) to report any security issues.

### Scope

In general, it is the expectation that the AI agent or client using this MCP server validates any input (including tool calls and parameters) before sending it. The server provides powerful capabilities for browser automation and inspection, and it is the responsibility of the calling agent to ensure these are used safely and as intended.

Several tools in this project have the ability to perform actions such as writing files to disk (e.g., via browser downloads or screenshots) or dynamically loading Chrome extensions. These are intentional, documented features and are not vulnerabilities.
Several tools in this project have the ability to perform actions such as writing files to disk (e.g., via browser downloads or screenshots), loading source maps, or dynamically loading Chrome extensions. These are intentional, documented features and are not vulnerabilities.

The server returns web content to the client as text (Markdown-like) or
structured data (`--experimentalStructuredContent`). The web content is returned
Expand All @@ -26,5 +26,5 @@ filesystem sandboxing, we recommend using OS sandbox mechanisms.

### Network guardrails

Optional `--allowed-url-pattern` and `--blocked-url-pattern` arguments configure the browser to reject access to the identified URLs. Note that this is not a complete network sandbox and it only applies to Chrome DevTools targets while `chrome-devtools-mcp` is attached to them.
Optional `--allowed-url-pattern` and `--blocked-url-pattern` arguments configure the **browser** to reject access to the identified URLs. Note that this is not a complete network sandbox and it only applies to Chrome DevTools targets while `chrome-devtools-mcp` is attached to them.
To have a full network sandbox, we recommend using a separate OS/VM sandbox mechanism.
45 changes: 25 additions & 20 deletions docs/UPSTREAM.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
This document is the registry of every intentional divergence from upstream.
`scripts/verify-upstream-seam.ts` enforces it: unregistered drift in an upstream-owned file fails CI.

- Current fork base: `ec014d1` (upstream, v1.7.0).
- Current fork base: `7a46acf` (upstream, v1.9.0).
- Upstream remote: `git remote add upstream https://github.com/ChromeDevTools/chrome-devtools-mcp.git`

## Intake runbook
Expand Down Expand Up @@ -89,7 +89,9 @@ a result:
| `src/daemon/utils.ts` | App name + index script path from branding | yes |
| `src/utils/check-for-updates.ts` | Env key + cache dir from branding | yes |
| `src/bin/check-latest-version.ts` | Package name from branding (keep upstream's `getRegistry()`) | yes |
| `src/bin/chrome-devtools-mcp-cli-options.ts` | Branding strings; `performanceCrux` + `usageStatistics` default/help text from `opera/policy.ts` | yes |
| `src/config/mcp-options.ts` | Branding strings; `performanceCrux` + `usageStatistics` default/help text from `opera/policy.ts` | yes |
| `src/config/browser-options.ts` | Branding references (`REPO_URL`, `CACHE_DIR_NAME`, `MCP_BIN_NAME`) in the browser-option help text | yes |
| `src/config/category-options.ts` | Adds the `ToolCategory.OPERA` entry so the generated category flags include `categoryOpera` | yes |
| `src/bin/chrome-devtools-mcp-main.ts` | Branding strings; calls `enforceTelemetryPolicy()` from `opera/policy.ts` | yes |
| `src/bin/chrome-devtools-mcp.ts`, `src/bin/chrome-devtools.ts` | Branding strings | yes |
| `src/telemetry/transformation.ts` | Adds `ZodRecord` to the supported telemetry zod types (used by `parameters` on `opera_call_mcp_tool`); maps it to a `_count` metric | yes |
Expand All @@ -104,16 +106,17 @@ These are name changes, not behaviour changes: the fork's binary, package and en
so the assertion strings do too. A test that needs a behavioural change indicates the seam is in the
wrong place.

| Path | Divergence |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| `tests/utils.ts` | `CLI_PATH` and the daemon status strings use the Opera names |
| `tests/index.test.ts` | Opera bin path + env var key |
| `tests/cli.test.ts` | Opera package name; `performanceCrux`/`usageStatistics` expected to default to `false` |
| `tests/utils/check-for-updates.test.ts` | Opera env var key; drops upstream's downgrade case (see `src/utils/check-for-updates.ts`) |
| `tests/daemon/utils.test.ts` | `APP_NAME` uses the Opera package name |
| `tests/ToolHandler.test.ts` | Opera env var keys, plus coverage for the `OperaToolHooks` seam |
| `tests/telemetry/transformation.test.ts` | Adds coverage for `ZodRecord` telemetry handling (count of record keys) |
| `tests/McpPage.test.ts` | Adds coverage for `resolveElementHandle` distinguishing a rejected lookup from a resolved-but-absent element |
| Path | Divergence |
| ------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| `tests/utils.ts` | `CLI_PATH` and the daemon status strings use the Opera names |
| `tests/cli.test.ts` | Opera package name; `performanceCrux`/`usageStatistics` default to `false`; `categoryOpera` flag on by default |
| `tests/index.test.ts` | Opera bin path + env var key |
| `tests/utils/check-for-updates.test.ts` | Opera env var key; drops upstream's downgrade case (see `src/utils/check-for-updates.ts`) |
| `tests/daemon/utils.test.ts` | `APP_NAME` uses the Opera package name |
| `tests/ToolHandler.test.ts` | Opera env var keys, plus coverage for the `OperaToolHooks` seam |
| `tests/telemetry/transformation.test.ts` | Adds coverage for `ZodRecord` telemetry handling (count of record keys) |
| `tests/McpPage.test.ts` | Adds coverage for `resolveElementHandle` distinguishing a rejected lookup from a resolved-but-absent element |
| `tests/e2e/opera-devtools-commands.test.ts` | Inline assertion strings use `opera-devtools` binary name in restart-command suggestions |

### Upstream files we rename or delete

Expand All @@ -122,17 +125,19 @@ resolve by hand, keeping the Opera side. Git leaves upstream's copy in the tree
reflexive `git add -A` brings the file back — `npm run verify-upstream-seam` fails if any path in
this table reappears.

| Path | What we did |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
| `tests/e2e/chrome-devtools-commands.test.ts`, `tests/e2e/chrome-devtools-disclaimers.test.ts`, `tests/e2e/chrome-devtools-start-stop.test.ts`, `tests/e2e/chrome-devtools-status.test.ts` | Renamed to `opera-devtools-*`; they drive the Opera-named bin |
| `tests/e2e/telemetry.test.ts` | Deleted — Opera forces telemetry off, so there is no upload path left to assert |
| `AGENTS.md` | Deleted in favour of Opera's own agent docs |
| `server.json`, `scripts/verify-server-json-version.ts`, `.github/workflows/publish-to-mcp-registry-on-tag.yml` | Deleted — the fork publishes to npm only, never to the MCP registry |
| Path | What we did |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| `tests/e2e/chrome-devtools-commands.test.ts`, `tests/e2e/chrome-devtools-disclaimers.test.ts`, `tests/e2e/chrome-devtools-start-stop.test.ts`, `tests/e2e/chrome-devtools-status.test.ts` | Renamed to `opera-devtools-*`; they drive the Opera-named bin |
| `tests/e2e/telemetry.test.ts` | Deleted — Opera forces telemetry off, so there is no upload path left to assert |
| `AGENTS.md` | Deleted in favour of Opera's own agent docs |
| `server.json`, `scripts/verify-server-json-version.ts`, `.github/workflows/publish-to-mcp-registry-on-tag.yml` | Deleted — the fork publishes to npm only, never to the MCP registry |
| `.release-please-manifest.json`, `release-please-config.json` | Deleted — the fork releases via its own publish-on-tag workflow, not release-please |

### Generated — never hand-merge, always regenerate

`src/bin/chrome-devtools-cli-options.ts`, `src/telemetry/tool_call_metrics.json`,
`src/telemetry/flag_usage_metrics.json`, `docs/tool-reference.md`, `package-lock.json`.
`src/config/cli-options.ts`, `src/telemetry/tool_call_metrics.json`,
`src/telemetry/flag_usage_metrics.json`, `docs/tool-reference.md`, `docs/configuration.md`,
`package-lock.json`.

### Opera-owned prose / config (merge=opera-ours)

Expand Down
Loading
Loading