chrome-devtools-mcp
Chrome DevTools MCP for .NET Repos
Trigger On
- the repo needs browser-level debugging for ASP.NET Core, Blazor, WebAssembly, or any .NET app with a web UI
- the user wants an MCP server that can inspect console output, network traffic, screenshots, traces, and DOM state
- the repo needs agent-friendly browser control instead of manual DevTools work
Do Not Use For
- pure .NET code analysis, unit testing, or NuGet/package management
- static HTML linting alone
- sensitive browser sessions that must not be exposed to an MCP client
Inputs
- the nearest
AGENTS.md - the MCP client config for the current agent or app
- the target Chrome mode: launch new, connect to existing browser, or attach to a WebSocket endpoint
- the target app URL or local dev server
Workflow
- Choose the browser mode first.
- new ephemeral browser: default when you want a clean session
- existing browser: use
--browserUrlor--wsEndpoint - running browser with a user profile: use
--autoConnectonly when Chrome 144+ and remote debugging are already enabled
- Prefer repo-local config over ad hoc shell commands.
- store the MCP server block in the repo or agent config so every run is repeatable
- Start from the smallest useful surface.
- use
--slimwhen you only need navigation, JavaScript execution, and screenshots - leave the full toolset enabled when you need network, performance, or emulation
- use
- Be explicit about privacy and cost.
- disable usage statistics or CrUX-backed performance enrichment when policy or sensitivity requires it
- Validate against the real app, not a mock page.
- use the app's local dev server, preview URL, or a production-like environment that reflects the bug
Install And Configure
Use the same JSON MCP server block in whatever .NET agent/app host you use:
{
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": ["-y", "chrome-devtools-mcp@latest"]
}
}
}
Common variants:
{
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": ["-y", "chrome-devtools-mcp@latest", "--slim", "--headless"]
}
}
}
{
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": ["-y", "chrome-devtools-mcp@latest", "--browserUrl", "http://127.0.0.1:9222"]
}
}
}
For Codex CLI, the upstream repo documents:
codex mcp add chrome-devtools -- npx chrome-devtools-mcp@latest
Useful Flags
--slim: three-tool surface for navigation, JavaScript execution, and screenshots only--headless: run without UI--browserUrlor--wsEndpoint: attach to an existing debuggable browser--wsHeaders: add custom WebSocket headers when--wsEndpointis used--autoConnect: connect to a locally running Chrome 144+ instance instead of launching a new one--channel stable|beta|dev|canary: pick a Chrome channel--isolated: create and clean up a temporary profile--userDataDir: reuse a specific Chrome profile directory--no-usage-statistics: opt out of usage collection--no-performance-crux: stop sending performance trace URLs to CrUX--acceptInsecureCerts: only when the target environment uses self-signed or expired certs--logFile <path>: capture debug logs for bug reports--experimentalScreencast: only when ffmpeg is available and you need video capture
Practical Usage Patterns
- Debug a local ASP.NET Core or Blazor app:
- start the app
- connect with
--browserUrlif the browser is already running, or let the server launch Chrome - ask the agent to inspect console errors, network failures, and rendering behavior
- Investigate a flaky UI test:
- use
--headless --isolated - capture screenshots and console logs from the failing route
- compare the result to a known-good run
- use
- Diagnose performance regressions:
- keep the full toolset enabled
- use performance tools only when you need trace data
- prefer
--slimfor quick smoke checks, not for performance work
- Work in a sandboxed or containerized environment:
- attach to a running browser with
--browserUrlor--wsEndpoint - avoid assuming the server can launch Chrome itself
- attach to a running browser with
- Reuse a signed-in session:
- use
--userDataDir - avoid
--isolated - accept that this increases exposure to sensitive browser state
- use
flowchart LR
A[".NET repo or app"] --> B["MCP-capable agent/app"]
B --> C["chrome-devtools-mcp config"]
C --> D["Chrome"]
D --> E["Console / network / screenshots / traces"]
Risks And Tradeoffs
- The server can see and act on browser content, so do not point it at sensitive accounts or data unless that exposure is intended.
--slimlowers token and tool overhead, but it removes network, performance, and emulation workflows.--isolatedis safer for disposable runs, but it discards existing browser state and logins.--autoConnectis convenient for local debugging, but it depends on Chrome 144+ and remote debugging being enabled.--no-usage-statisticsand CrUX-backed performance traces may change what data leaves the machine; disable them when policy requires it.--headlessis good for CI or scripted runs, but it can hide UI-specific failures.- Passing
--chromeArg='--no-sandbox'or similar launch flags can be necessary in some container or root environments, but only use it when the environment really requires it.
Handle Failures
- If
npxreturns a permission denied error on macOS from_npx, clear~/.npm/_npxand rerun. - If the server cannot find Chrome, check
--channel,--executablePath, and whether Chrome is installed on the host. - If connection to an existing browser fails, verify
http://127.0.0.1:9222/json/versionand thewebSocketDebuggerUrlvalue. - If performance traces are noisy or too expensive, keep the browser mode stable and compare runs against the same URL and browser channel.
Validate
npx -y chrome-devtools-mcp@latest --helpprints the expected flags on the current host- the MCP client can list the server and open a page in the target browser
- the agent can capture at least one screenshot or console/network observation from the real app
- the chosen mode matches the task:
--slimfor quick browser checks, full mode for debugging and performance
Deliver
- a repeatable MCP server config for the repo or agent host
- a browser connection mode that fits the environment
- a safe default for privacy, performance, and reproducibility
More from managedcode/dotnet-skills
dotnet
Primary router skill for broad .NET work. Classify the repo by app model and cross-cutting concern first, then switch to the narrowest matching .NET skill instead of staying at a generic layer.
18dotnet-aspnet-core
Build, debug, modernize, or review ASP.NET Core applications with correct hosting, middleware, security, configuration, logging, and deployment patterns on current .NET.
13dotnet-entity-framework-core
Design, tune, or review EF Core data access with proper modeling, migrations, query translation, performance, and lifetime management for modern .NET applications.
12dotnet-code-review
Review .NET changes for bugs, regressions, architectural drift, missing tests, incorrect async or disposal behavior, and platform-specific pitfalls before you approve or merge them.
11dotnet-architecture
Design or review .NET solution architecture across modular monoliths, clean architecture, vertical slices, microservices, DDD, CQRS, and cloud-native boundaries without over-engineering.
11dotnet-signalr
Implement or review SignalR hubs, streaming, reconnection, transport, and real-time delivery patterns in ASP.NET Core applications.
10