chrome-devtools-mcp
ChromeDevTools/chrome-devtools-mcp
- Type
- MCP server
- Scanned
- Oct 29, 2026
- Version
- 63170b11a2fa
- Files read
- 360
This tool lets AI assistants control and inspect a live Google Chrome browser to automate web tasks and debug websites. The biggest risk is that a manipulated AI could run code in your open browser tabs, access your login cookies, or read private files on your computer.
What it can reach
- Browser
- Launches or connects to Chrome to navigate websites, click buttons, run custom JavaScript, install extensions, and read network traffic and login cookies.
- Files
- Saves screenshots, recordings, and diagnostic reports to disk, and can read local files through browser file links or unrestricted command-line settings.
- Network
- Connects to any website, fetches source maps, checks npm for updates, and sends usage telemetry and inspected web addresses to Google services by default.
- Shell commands
- Starts Chrome browsers, background Node.js helper processes, system check utilities, and optional video recording tools like ffmpeg.
Findings
-
HighDefault-enabled file:// navigation bypasses MCP workspace root restrictions
While file path parameters on tools are validated against MCP workspace roots and the OS temporary directory, the
--file-navigationsflag defaults totrueand navigation URLs innew_page,navigate_page, andnavigateare not checked againstMcpContext.validatePath(). An attacker using prompt injection can instruct the agent to navigate Chrome tofile://orview-source:file://URLs outside the allowed workspace roots (such as~/.sshor/etc/passwd) and read the file contents usingtake_snapshotorevaluate_script.Fix: Set
fileNavigationstofalseby default, or validatefile:navigation targets (includingview-source:file:) withcontext.validatePath()so they respect configured workspace roots. -
HighCLI mode enables unrestricted filesystem access and extension loading by default
src/config/ServerConfig.ts:200
The package ships with a
chrome-devtools-cliskill that instructs coding agents to run thechrome-devtoolsCLI. When the background daemon is started via the CLI (--viaCli),ServerConfig.applyDefaultsautomatically setsallowUnrestrictedPaths: trueandcategoryExtensions: true. This disables the workspace root path protections used in MCP mode—allowingupload_file,evaluate_script --sourcePath, and file output flags to read or write anywhere on the filesystem—and enablesinstall_extensionto load unpacked Chrome extensions.Fix: Do not enable
allowUnrestrictedPathsorcategoryExtensionsby default whenviaCliis set; require explicit--workspace,--allow-unrestricted-paths, or--category-extensionsflags. -
MediumDevTools resource loader fetches local files and internal URLs from the server process without origin checks
When
sourceMapsis enabled (the default), DevTools loads//# sourceMappingURL=references throughMcpHostBindingAdapter.loadNetworkResource, which callsMcpContext.loadResource()in the Node.js process. BecauseloadResource()does not check the origin of the page that requested the resource, a remotehttp:orhttps:page can referencefile://URLs inside the workspace roots or temp directory, or trigger server-side HTTP requests from the Node.js host that bypass Chrome's Private Network Access restrictions and--proxy-serversettings.Fix: Disallow
file:URLs inloadResourcewhen the request originates from a network page, and route DevTools resource fetches through the browser's network stack or block private/loopback IP ranges. -
MediumSensitive authentication headers and cookies are exposed to the agent by default
redactNetworkHeadersdefaults tofalse. Whenget_network_requestis called on a page, fullCookie,Set-Cookie(includingHttpOnlycookies), andAuthorizationheaders are returned in plaintext to the model context. If a user connects the server to an existing browser session (--autoConnector--browserUrl) or reuses the persistent default profile, a prompt injection on a visited page can read and exfiltrate session credentials.Fix: Change the default of
redactNetworkHeaderstotrueso sensitive headers are redacted unless explicitly enabled by the user. -
MediumCLI mode enables unrestricted filesystem access by default
skills/chrome-devtools-cli/SKILL.md:27
When using the CLI workflow taught by the chrome-devtools-cli skill, --allowUnrestrictedPaths is enabled by default. If an agent is influenced by prompt injection on a web page, it can use upload_file to exfiltrate arbitrary local files or overwrite files on disk via --filePath and --outputDirPath.
Fix: Start the CLI daemon with --allowUnrestrictedPaths=false so file reads and writes are confined to the temporary directory.
-
LowInspected page URLs and usage telemetry are sent to Google services by default
By default (
performanceCrux: trueandusageStatistics: true), stopping a performance trace sends the full URLs recorded in the trace to the Google CrUX API (https://chromeuxreport.googleapis.com/v1/records:queryRecord), and a detached watchdog process sends usage statistics to Google Clearcut (https://play.googleapis.com/log?format=json_proto). Profiling internal or private web applications will transmit those URLs to Google unless--no-performance-cruxand--no-usage-statisticsare passed.Fix: Make external CrUX lookups and telemetry opt-in by default, or skip CrUX API requests for non-public and internal URLs.
-
LowTroubleshooting skill instructs the agent to read global MCP configuration files
skills/troubleshooting/SKILL.md:12
When a connection error occurs, the troubleshooting skill tells the agent to automatically search for and read MCP configuration files, including ~/.claude.json and .mcp.json. These files frequently store API keys and secrets for other MCP servers, which will be loaded into the AI agent's conversation context.
Fix: Avoid allowing the agent to read ~/.claude.json or redact secrets from MCP configuration files before sharing them with the agent.
-
InfoUsage telemetry and CrUX URL lookups are enabled by default
By default, the server sends usage statistics to Google Clearcut, checks the npm registry for updates, and sends URLs from performance traces to the Google CrUX API. Tracing internal or private URLs may disclose those URLs to Google's CrUX endpoint unless disabled.
Fix: Pass --no-usage-statistics and --no-performance-crux in the server arguments, and set CHROME_DEVTOOLS_MCP_NO_UPDATE_CHECKS=true in the environment if external network calls are undesired.