Chrome DevTools MCP chrome_devtools 1.12.0: our test log

Chrome DevTools MCP 1.12.0 exposed 32 tools and opened a page in headless Chrome in 136.6 ms median; our first navigate_page call was rejected for a missing pageId.

Tested by us on 2026-10-25. Local open-weight model, not the vendor's hosted models. A smoke test on a CPU-only box, not a benchmark.

Result at a glance

Chrome DevTools MCP test record
FieldValue
ResultPassed
Version testedchrome_devtools 1.12.0
Date and time2026-10-25, 22:39 CDT (America/Chicago)
TaskA small Python client written with the official MCP Python SDK (2.3.0) spawns the server as a child process over stdio, times the initialize handshake (cold start: spawn to initialize result), times one tools/list, then times 10 sequential tools/call requests (the count differs per test; this one used 10) and reports the median and 95th percentile. Numbers are milliseconds on the rig described on the methodology page.
Model usednone (no language model involved)
HardwareLinux x86_64 virtual machine (Debian 13), 8 vCPU (Intel Xeon, 1 thread per core), 15 GiB RAM, no GPU
First attempt: navigate_page without pageIdcold start 535 ms; tools/list 12.8 ms (32 tools); 10 x navigate_page: median 1.2 ms, p95 1.5 ms [tool returned an error]
new_page to a local pagecold start 565 ms; tools/list 14.1 ms (32 tools); 10 x new_page: median 136.6 ms, p95 256.6 ms

What we found

  • 32 tools; new_page took 136.6 ms median (p95 256.6 ms, 10 calls) and cold start was 565 ms.
  • Our first attempt used navigate_page with only a URL. The server answered at once with 'Input validation error: Invalid arguments for tool navigate_page: pageId: Invalid input: expected number, received undefined'. The 1.2 ms in that row is the time to fail, not a navigation. We kept the row and then timed new_page instead.
  • The install is a single package (15 MB, 1 package) and starts quickly because it uses the system Chrome.

What we ran, step by step

Commands run, wall-clock time and exit code
StepWall timeExit codeNotes
npm install on Node 20.19.2 (cold)0.8 s0Resolved 1.12.0; 15 MB in 1 packages; load 2.91.
npm install on Node 24.22.1 (cold)0.5 s0Resolved 1.12.0; 15 MB in 1 packages; load 2.40.
Latency run: First attempt: navigate_page without pageIdn/a0chrome_devtools 1.12.0 (protocol 2025-11-25). cold start 535 ms; tools/list 12.8 ms (32 tools); 10 x navigate_page: median 1.2 ms, p95 1.5 ms [tool returned an error]. Load 1.71.
Latency run: new_page to a local pagen/a0chrome_devtools 1.12.0 (protocol 2025-11-25). cold start 565 ms; tools/list 14.1 ms (32 tools); 10 x new_page: median 136.6 ms, p95 256.6 ms. Load 1.65.
Exact commands (paths shortened)
# npm install on Node 20.19.2 (cold)
npm install --no-audit --no-fund --cache /tmp/npmcache chrome-devtools-mcp

# npm install on Node 24.22.1 (cold)
npm install --no-audit --no-fund --cache /tmp/npmcache chrome-devtools-mcp

# Latency run: First attempt: navigate_page without pageId
node work/npm/chrome-devtools-mcp/node_modules/.bin/chrome-devtools-mcp --headless --isolated --executablePath /usr/bin/google-chrome --chromeArg=--no-sandbox --usageStatistics=false --performanceCrux=false

# Latency run: new_page to a local page
node work/npm/chrome-devtools-mcp/node_modules/.bin/chrome-devtools-mcp --headless --isolated --executablePath /usr/bin/google-chrome --chromeArg=--no-sandbox --usageStatistics=false --performanceCrux=false

Raw output (excerpts)

Output of the timed call (First attempt: navigate_page without pageId), first 300 characters
navigate_page({"type": "url", "url": "http://127.0.0.1:8099/test.html"})
Input validation error: Invalid arguments for tool navigate_page: pageId: Invalid input: expected number, received undefined

Gotchas and things that broke

  • Tools that act on a page need a pageId from list_pages or new_page; a model that skips that step gets a validation error.
  • We set --usageStatistics=false and --performanceCrux=false to avoid sending usage data or Chrome UX Report queries during the test; the defaults were not measured.

What we did not test

  • Remote (HTTP) transport, authentication and concurrent clients: only local stdio with one client was measured.
  • Large payloads: calls used tiny inputs, so these latencies are protocol and process overhead, not throughput.
  • Anything about answer quality: no model was involved in the latency numbers.
  • These are single smoke-test runs; it is not a benchmark. The machine was shared with other jobs.
  • Performance traces, network and console inspection, emulation: only page creation was timed.

Reproduce it

Versions change. These commands install whatever is latest on the day you run them unless a version is pinned, so expect different results later. The version we measured is in the table above.

npm install chrome-devtools-mcp
node node_modules/.bin/chrome-devtools-mcp --headless --isolated --executablePath /usr/bin/google-chrome --chromeArg=--no-sandbox --usageStatistics=false --performanceCrux=false

How to read this test

Every number on this page was measured on this one machine, which also ran other jobs, so timings are indicative and vary run to run. A pass means our small task worked once or as stated, a fail means it did not work as we ran it; neither says how the tool behaves with a vendor's frontier model, on a GPU, or at scale. Where a tool could not run without an account or a GPU, we say so instead of guessing.

See the testing rig for the hardware, the local model and the rules we follow, and the test hub for every other test.

  • Context7 MCP: Context7 MCP 4.4.4 started locally in 462 ms but its tool calls go to a hosted API: resolve-library-id took about 1.2 s per call and returned React documentation matches.
  • FastMCP 4.1.3 and the official MCP Python SDK 2.3.0 (server side): The same three-tool server written with FastMCP 4.1.3 and with the official MCP Python SDK 2.3.0 answered calls equally fast (about 1 ms); FastMCP started in 643 to 735 ms against 461 to 516 ms for the SDK on repeats.
  • GitHub MCP Server: GitHub MCP Server 2.0.3 started over stdio in a median 266 ms and listed 46 tools in a median 15 ms; we did not make any authenticated call.
  • MCP Everything (reference) server: MCP Everything (reference) server answered over stdio in 356 ms cold (v1.0.0, Node 20) and 252 ms (v2.0.1, Node 24); median call 0.5 to 0.4 ms.
  • MCP Fetch server: The MCP Fetch server 2026.10.24 refused to fetch a local test page by default (a deliberate loopback block); with --allow-private-ips it fetched it in 698.3 ms median.
  • MCP Filesystem server: MCP Filesystem server answered over stdio in 279 ms cold (v1.0.0, Node 20) and 187 ms (v2.0.1, Node 24); median call 0.8 to 1.0 ms.

All test logs · How we test

Sources

Markdown version for agents: /tests/chrome-devtools-mcp.md