
Chrome DevTools MCP, Google's server for debugging pages with AI
Lets Claude, Cursor and other AI assistants open Chrome, inspect pages and debug performance, network and console problems for you.
Chrome DevTools MCP is Google's own server that lets your AI assistant control and inspect a live Chrome browser. It can load pages, record performance traces, read network requests and console errors, and take screenshots, so it can find and fix problems instead of guessing.
It works with Chrome only. The assistant can see and change anything in the browser it controls, so keep it away from tabs you are signed into unless you are watching.
Good for
- Web developers who want the assistant to check its own changes in a real browser
- Anyone chasing slow pages, failed requests or console errors
- Front-end teams fixing Core Web Vitals, accessibility or memory leaks
- Developers who want the assistant to see the Chrome tab they already have open
Works in
8 supported · 3 with issues · 1 should work
Tap an app to see how to set it up and any known problems.
Google's docs have an Install in Cursor button, or add the standard config in Cursor Settings. GitHub
Google's docs cover it: install from source in Chat, or use the code --add-mcp command. GitHub
Google's docs point to Windsurf's MCP config guide with the standard config. GitHub
Google's docs cover gemini mcp add, plus a Gemini extension that adds the skills. GitHub
Google's docs cover it: run /mcp add in Copilot and choose a local server. GitHub
Google's docs point to Cline's MCP settings guide with the standard config. GitHub
Google's docs cover AI Assistant and Junie under Settings > Tools > MCP. GitHub
Google's docs cover it: add a local entry to opencode.json. GitHub
Google's docs cover it. The plugin route also adds skills but can fail to clone behind some firewalls.
Known problems
- Fixed
Plugin fails to start in projects whose package.json has conflicting npm overrides
Reported Oct 2026 · GitHub
- Fixed
Plugin install clone fails on Windows (path too long) and can time out elsewhere
Workaround: Install with claude mcp add instead of the plugin; that leaves out the skills.
Reported Oct 2026 · GitHub
- Open
Plugin install fails with 'Failed to clone repository' behind firewalls that block GitHub HTTPS
Workaround: Point git at SSH, or use claude mcp add.
Since Oct 2026 · GitHub
Google has no Claude Desktop steps, but the standard local config works in its config file.
Known problems
- Open
User could not get the server to show up in the desktop app after following the Claude Code steps
Since Apr 2026 · GitHub
- Open
On macOS, Chrome launched from Claude Desktop can crash when a site asks for Bluetooth
Workaround: Give Claude Bluetooth permission in System Settings > Privacy & Security, then restart it.
Google's docs cover it with a one-line command. Windows 11 needs cmd /c and a longer startup timeout.
Known problems
- Open
Installing or upgrading it as a plugin from Claude's marketplace fails on a plugin name mismatch
Workaround: Add it with codex mcp add instead of the plugin marketplace.
Since Oct 2026 · GitHub
- Fixed
On macOS each session left a 1.4 GB copy of Chrome on disk because Chrome was force-killed
Reported Oct 2026 · GitHub
Supports local MCP servers.
Client does not support this transport.
Client does not support this transport.
Install Chrome DevTools MCP
Claude Code
- 1
Copy this prompt.
Add the Chrome DevTools MCP server to Claude Code. Run this command: claude mcp add chrome-devtools -- npx -y chrome-devtools-mcp Then check that it loaded and tell me if I need to sign in or restart.
- 2
Paste it into Claude Code. It shows the change and asks before running it.
Requires Node.js 20.19+.
Needs the current stable Chrome (or Chrome for Testing) and Node.js LTS. Chrome opens the first time a tool needs it, not when the server connects. Add --no-usage-statistics to the args to turn off usage statistics. The plugin route also installs the project's skills; restart Claude Code afterwards and check /skills.
Built from the package data we hold. Not yet tested by us.
Tools
Goes to a web address, or moves back, forward or reloads the current page
Goes to a web address, or moves back, forward or reloads the current page.
Try: “Open localhost:3000 and reload it”
Network ·
navigate_pageOpens a new browser tab and loads an address in it
Opens a new browser tab and loads an address in it.
Try: “Open a new tab with my staging site”
Network ·
new_pageCloses a browser tab
Closes a browser tab.
Try: “Close the tab you opened for the docs”
Write ·
close_pageCaptures an image of the page or of one element
Captures an image of the page or of one element.
Try: “Take a screenshot of the pricing table”
Files ·
take_screenshotShows the messages and errors the page wrote to its console since it loaded
Shows the messages and errors the page wrote to its console since it loaded.
Try: “Are there any console errors on this page?”
Read ·
list_console_messagesOpens one console message in full
Opens one console message in full.
Try: “Show me the full text of that console error”
Read ·
get_console_messageLists the requests the page has made since it last loaded
Lists the requests the page has made since it last loaded.
Try: “Which requests on this page are failing?”
Read ·
list_network_requestsShows the details of one network request, including its headers and body
Shows the details of one network request, including its headers and body.
Try: “Show the response of the login request”
Read ·
get_network_requestRuns a piece of JavaScript inside the page and returns the result
Runs a piece of JavaScript inside the page and returns the result.
Try: “Count the images on this page without alt text”
Runs code ·
evaluate_scriptShows the style rules that apply to one element
Shows the style rules that apply to one element.
Try: “Why is this button grey? Show its styles”
Read ·
get_css_stylesRuns an audit of the page for accessibility, SEO and best practices and lists what failed
Runs an audit of the page for accessibility, SEO and best practices and lists what failed.
Try: “Run an accessibility audit on this page”
Network ·
lighthouse_auditStarts recording how the page loads and runs, to find speed problems
Starts recording how the page loads and runs, to find speed problems.
Try: “Record a performance trace while the homepage loads”
Runs code ·
performance_start_traceStops the recording and returns what it found
Stops the recording and returns what it found.
Try: “Stop the trace and tell me what is slow”
Runs code ·
performance_stop_traceGives more detail on one finding from a performance recording
Gives more detail on one finding from a performance recording.
Try: “Explain the largest contentful paint finding”
Read ·
performance_analyze_insightClicks an element on the page
Clicks an element on the page.
Try: “Click the Sign in button”
Write ·
clickTypes into a field or picks an option from a drop-down
Types into a field or picks an option from a drop-down.
Try: “Enter my email in the login field”
Write ·
fillFills several form fields in one go
Fills several form fields in one go.
Try: “Fill out the signup form with test data”
Write ·
fill_formTypes text with the keyboard into the field that is already selected
Types text with the keyboard into the field that is already selected.
Try: “Type hello into the search box”
Write ·
type_textPresses a key or key combination
Presses a key or key combination.
Try: “Press Enter to submit the search”
Write ·
press_keyMoves the pointer over an element
Moves the pointer over an element.
Try: “Hover over the menu to open it”
Write ·
hoverDrags one element onto another
Drags one element onto another.
Try: “Drag the first card into the Done column”
Write ·
dragAttaches a file through a file picker on the page
Attaches a file through a file picker on the page.
Try: “Upload report.pdf to the form”
Write ·
upload_fileAccepts or dismisses a pop-up dialog the browser opened
Accepts or dismisses a pop-up dialog the browser opened.
Try: “Accept the confirm dialog”
Write ·
handle_dialogWaits until given text shows up on the page
Waits until given text shows up on the page.
Try: “Wait until Order complete appears”
Read ·
wait_forMakes the page behave like another device or condition, such as a phone or slow network
Makes the page behave like another device or condition, such as a phone or slow network.
Try: “Show this page as it looks on a phone with a slow connection”
Write ·
emulateChanges the size of the browser window
Changes the size of the browser window.
Try: “Resize the window to 375 by 812”
Write ·
resize_pageStarts recording a video of the page
Starts recording a video of the page.
Try: “Start recording a video of the checkout flow”
Files ·
screencast_startStops the video recording
Stops the video recording.
Try: “Stop the recording”
Files ·
screencast_stopSaves a picture of the page's memory use to a file
Saves a picture of the page's memory use to a file.
Try: “Take a memory snapshot of this page”
Files ·
take_heapsnapshotSummarizes a saved memory snapshot
Summarizes a saved memory snapshot.
Try: “Summarize the memory snapshot”
Read ·
get_heapsnapshot_summaryReturns everything available from a saved memory snapshot, including statistics
Returns everything available from a saved memory snapshot, including statistics.
Try: “Give me the full details of the memory snapshot”
Read ·
get_heapsnapshot_detailsCompares two saved memory snapshots to see what grew
Compares two saved memory snapshots to see what grew.
Try: “Compare the before and after memory snapshots”
Read ·
compare_heapsnapshotsFinds objects in a memory snapshot that match filters
Finds objects in a memory snapshot that match filters.
Try: “Find large objects in the memory snapshot”
Read ·
query_heapsnapshot_objectsLists the instances of one kind of object in a memory snapshot
Lists the instances of one kind of object in a memory snapshot.
Try: “List the instances of the Cart class”
Read ·
get_heapsnapshot_class_nodesShows details about one object in a memory snapshot
Shows details about one object in a memory snapshot.
Try: “Show details of that object”
Read ·
get_heapsnapshot_object_detailsShows what is keeping one object in memory
Shows what is keeping one object in memory.
Try: “What holds this object in memory?”
Read ·
get_heapsnapshot_retainersShows the chains of references that keep one object in memory
Shows the chains of references that keep one object in memory.
Try: “Show the paths that keep this object alive”
Read ·
get_heapsnapshot_retaining_pathsShows the chain of objects that control one object's memory
Shows the chain of objects that control one object's memory.
Try: “Show the dominator chain for this object”
Read ·
get_heapsnapshot_dominatorsShows what one object points to
Shows what one object points to.
Try: “What does this object reference?”
Read ·
get_heapsnapshot_edgesFinds identical text strings stored many times in a memory snapshot
Finds identical text strings stored many times in a memory snapshot.
Try: “Find duplicated strings in the snapshot”
Read ·
get_heapsnapshot_duplicate_stringsFinds closures holding on to memory they no longer need
Finds closures holding on to memory they no longer need.
Try: “Find closures wasting memory in this snapshot”
Read ·
analyze_heapsnapshot_contextsUnloads a memory snapshot to free memory
Unloads a memory snapshot to free memory.
Try: “Close the loaded memory snapshot”
Write ·
close_heapsnapshotLists the Chrome extensions installed in the browser
Lists the Chrome extensions installed in the browser.
Try: “Which extensions are installed?”
Read ·
list_extensionsInstalls a Chrome extension from a folder on disk
Installs a Chrome extension from a folder on disk.
Try: “Install the extension from ./my-extension”
Write ·
install_extensionReloads an unpacked extension so changes take effect
Reloads an unpacked extension so changes take effect.
Try: “Reload my extension”
Write ·
reload_extensionRuns an extension's main button action
Runs an extension's main button action.
Try: “Click my extension's toolbar button”
Write ·
trigger_extension_actionRemoves a Chrome extension
Removes a Chrome extension.
Try: “Uninstall my test extension”
Delete ·
uninstall_extensionLists the tools a web page offers to AI assistants itself
Lists the tools a web page offers to AI assistants itself.
Try: “What tools does this page expose?”
Read ·
list_webmcp_toolsRuns one of the tools a web page offers to AI assistants
Runs one of the tools a web page offers to AI assistants.
Try: “Run the page's add-to-cart tool”
Runs code ·
execute_webmcp_toolLists extra developer tools a page exposes for runtime information
Lists extra developer tools a page exposes for runtime information.
Try: “List the developer tools this page exposes”
Read ·
list_3p_developer_toolsRuns one of the extra developer tools a page exposes
Runs one of the extra developer tools a page exposes.
Try: “Run the page's state inspector”
Runs code ·
execute_3p_developer_toolInstalls a web app so it opens in its own window
Installs a web app so it opens in its own window.
Try: “Install this web app”
Write ·
install_pwaOpens an installed web app
Opens an installed web app.
Try: “Launch the installed app”
Write ·
launch_pwaRemoves an installed web app and closes its windows
Removes an installed web app and closes its windows.
Try: “Uninstall the web app”
Delete ·
uninstall_pwaShows how an installed web app is set up in the operating system, such as badge count
Shows how an installed web app is set up in the operating system, such as badge count.
Try: “Show the installed app's badge count”
Read ·
get_os_app_stateAdds a virtual security key to the page for testing passkey sign-in
Adds a virtual security key to the page for testing passkey sign-in.
Try: “Add a virtual authenticator to test passkey login”
Write ·
configure_webauthnClicks at exact screen coordinates (needs a special setting turned on)
Clicks at exact screen coordinates (needs a special setting turned on).
Try: “Click at 200, 340 on the page”
Write ·
click_atUsed by the assistant behind the scenes
Lists the tabs open in the browser
Lists the tabs open in the browser.
Try: “Which tabs do you have open?”
Read ·
list_pagesChooses which open tab the next actions apply to
Chooses which open tab the next actions apply to.
Try: “Switch to the tab with the checkout page”
Read ·
select_pageReads the page as a text outline of its elements, so the assistant can find things
Reads the page as a text outline of its elements, so the assistant can find things.
Try: “Show me what is on this page”
Read ·
take_snapshot
From the official docs
Pros and cons
Good
- Made by Google's Chrome DevTools team, with no account or API key.
- Records performance traces and gives Core Web Vitals insights.
- Reads network requests, console messages and screenshots from a real page.
- Can attach to your own signed-in Chrome when you allow it.
- Ships skills for accessibility, LCP and memory-leak debugging.
- A slim mode and a CLI help cut context use.
Watch out
- Chrome only; Edge, Brave and others are not officially supported.
- Heavy on tokens unless you trim it.
- No read-only mode; the assistant can click and run scripts.
- Runs locally over stdio only, with no hosted address.
- Fails to launch as root or inside some sandboxes and containers.
- Sends usage statistics to Google unless you turn them off.
Permissions
medium risk · 5 things to watch · 4 advisories
Medium risk
The assistant can read and change anything in the Chrome it controls, and a hostile web page can try to steer it. Use the separate default profile or an isolated session, and keep it away from signed-in tabs unless you are watching.
What it can do
- Read your data
- Create and change things
- Delete things
- Read-only mode
Watch out for
Agent can read and change anything in the browser
Everything in the controlled Chrome is open to the AI client, including pages you are signed into. Use the default separate profile or --isolated rather than --autoConnect to your main browser for untrusted work. github.com
Web pages can try to steer the agent
Page text and script output reach the model, so a hostile page can attempt prompt injection. Restrict sites with URL patterns for unattended runs. news.ycombinator.com
Usage statistics are on by default
Google collects tool success rates, latency and environment info unless you pass --no-usage-statistics. Trace URLs may also go to the CrUX API unless you pass --no-performance-crux. github.com
Open debugging port is reachable by other apps
With --browser-url, any program on your machine can control Chrome through port 9222. Use a separate --user-data-dir and avoid sensitive sites while it is open. github.com
URL allowlist missed service worker fetches (fixed)
Before the fix, a service worker on an allowed page could still reach blocked sites. Treat URL patterns as a guard rail, not a hard boundary, and stay on a current version. github.com
Security advisories
4 known advisories, all fixed in a newer version.
- A booby-trapped link in your project folder could make a screenshot or file save overwrite a file outside itmedium · Fixed in 1.5.0 · GHSA-5hw5-4q87-m6x9 / CVE-2026-106484
- Sites you blocked with URL patterns could still be reached by a page's background service workermedium · Fixed in 1.4.0 · GHSA-xfxg-8r4q-wj4v
- A link inside your project folder could let the agent read or write files outside the folders you allowedmedium · Fixed in 1.1.0 · GHSA-8qf9-62x2-82pp / CVE-2026-53766
- Another user on a shared Mac or Linux machine could trick the server into overwriting one of your filesmedium · Fixed in 1.1.0 · GHSA-3pvj-jv98-qhjq / CVE-2026-53765
Technical details
| Turning on read-only | No read-only mode. You can narrow it: --no-javascript-evaluation turns off script tools, --allowedUrlPattern or --blockedUrlPattern limit sites, --isolated uses a throwaway profile, and category flags hide tool groups. |
|---|---|
| Talks to | Google usage statistics (on by default). Google CrUX API for trace URLs (performance tools). npm update checks |
| Sign-in and keys | No account or API key. The default Chrome profile is kept between runs under ~/.cache/chrome-devtools-mcp/chrome-profile; --isolated uses a temporary one. |
Alternatives
Use Chrome DevTools MCP to debug and tune pages in Chrome. Pick Playwright MCP for repeatable tests across Chrome, Firefox and WebKit, or Browser MCP to automate the Chrome profile you already use.
| Server | Official | Runs | Can change things | GitHub stars |
|---|---|---|---|---|
| For Chrome DevTools | ||||
| Chrome DevTools MCPThis page | Official | Local | Yes | 54.5K |
| Other tools for the same job | ||||
| Playwright MCPFor Playwright | Official | Local | Yes | 38.9K |
| Browser MCP | Community | Local | Yes | 7.3K |
| browser-use | Community | HostedLocal | Yes | – |
What people say
People like how much it shows the assistant about a real page and dislike how much context it uses.
What people like
- Lets the assistant see what its code does in the browser instead of guessing.
- The first-party pick for traces, network and console detail that Playwright MCP does not match.
- Long-time users keep it over built-in alternatives for reliability.
- One developer traced intermittent 502 errors in about 20 minutes.
Common complaints
- Heavy on tokens: tool definitions and responses use up context.
- Chrome only: no WebKit or Firefox, and no test runner.
- On macOS Chrome kept jumping to the front on tool calls (reported fixed).
- Some users struggled to run it under WSL with Claude Code.
In their words
“I've been using the DevTools MCP for months now, but it's extremely token heavy. Is there an alternative that provides the same amount of detail when it comes to reading back network requests?”rossvcBlogApr 2026
“Chrome DevTools MCP cannot do that job, because it cannot drive WebKit and it does not own the test runner.”Steve KinneyGitHub issueApr 2026
“with each action chrome mcp steals system focus, so I'm unable to work on 2 monitors as it it constantly switching to Chrome while it works”yadueHacker NewsMar 2026
“I know I could just use claude --chrome, but I’m used to this excellent MCP server.”danielraffel
Questions
Is Chrome DevTools MCP free?
Yes. It is open source under Apache-2.0 and needs no account or API key. You only need Node.js and Chrome.
Which Node.js version do I need?
Node 20.19 or newer on the 20 line, 22.12 or newer on the 22 line, or 23 and up. Node 18 is not supported.
Why doesn't Chrome open when the server connects?
That is expected. Chrome starts the first time the assistant uses a tool that needs a browser, such as opening a page. Try the prompt: Check the performance of https://developers.chrome.com
Can it use my normal Chrome where I'm already signed in?
Yes, with --autoConnect on Chrome 144 or newer. Turn on remote debugging at chrome://inspect/#remote-debugging, keep Chrome open and approve the prompt. The assistant then sees all windows of that profile.
Does it send data to Google?
Usage statistics are on by default. Turn them off with --no-usage-statistics. The performance tools may also send trace URLs to Google's CrUX API, which --no-performance-crux turns off.
Does it work with Edge, Brave or other Chromium browsers?
Only Google Chrome and Chrome for Testing are officially supported. Other Chromium browsers may work through --executablePath, with no guarantees.
How do I run it headless or in CI?
Add --headless. Do not run it as root, because Chrome refuses to start that way. Create an unprivileged user in the container.
It fails on Windows with 'Connection closed'. What now?
Launch it through cmd. Set the command to cmd and the arguments to /c, npx, -y, chrome-devtools-mcp@latest. You can also point the command at the full path of npx.
It uses too much context. Can I trim it?
Yes. --slim keeps only 3 tools, category flags hide tool groups, and the chrome-devtools command-line tool lets the assistant work from the shell without MCP.
Chrome DevTools MCP vs Playwright MCP?
Use Chrome DevTools MCP to debug: traces, network, console and memory in Chrome. Use Playwright MCP for repeatable tests across Chromium, Firefox and WebKit.
Examples
Check page performance and get Core Web Vitals insights
Check the performance of https://developers.chrome.com
SourceVerify a code change in the real browser after editing it
Open http://localhost:3000, check that the signup form I just changed works, and list any console errors.
Diagnose failing network requests and console errors, such as intermittent 502s
Load the dashboard, list the failed network requests and explain what is causing the 502 errors.
Hand a request or element you selected in DevTools to the assistant in your signed-in session
Look at the request I selected in DevTools and tell me why it returns an error.
Audit and fix accessibility, LCP or memory leaks with the bundled skills
Debug why the largest contentful paint on our homepage is slow and suggest fixes.
Information
updated Nov 2, 2026
- Publisher
- Google (official)
- Package
chrome-devtools-mcp- Registry
- npm
- Transport
- stdio
- Version
- 1.12.0
- License
- Apache-2.0
- Last commit
- Oct 30, 2026
- Open issues
- 79
- Listed in
- Official MCP registry
WebsiteConfiguration guideGitHubnpmOfficial MCP RegistryClient configurations guideChangelogIssues
Other Chrome DevTools MCP servers
Sources
Docs, issue trackers and discussions this page is built from. Issues, quotes and findings above link to their own source.
Show all 23Hide
- github.com · github.com
- developer.chrome.com · developer.chrome.com
- stevekinney.com · stevekinney.com
- Chrome DevTools MCP tool reference · github.com
- github.com · github.com
- github.com · github.com
- Repository security advisories · github.com
- github.com · github.com
- github.com · github.com
- news.ycombinator.com · news.ycombinator.com
- registry.npmjs.org · registry.npmjs.org
- github.com · github.com
- Client configurations · github.com
- Claude plugin directory · claude.com
- limitededitionjonathan.substack.com · limitededitionjonathan.substack.com
- Chrome DevTools MCP (2025) · news.ycombinator.com
- github.com · github.com
- news.ycombinator.com · news.ycombinator.com
- developer.chrome.com · developer.chrome.com
- github.com · github.com
- github.com · github.com
- github.com · github.com
- github.com · github.com