chrome-devtools-mcp
MCPMCP server for Chrome DevTools
Dimension scores
Compatibility
| Framework | Status | Notes |
|---|---|---|
| Claude Code | ✓ | — |
| OpenAI Agents SDK | ✓ | Some complex nested schemas may require adapter mapping, SSE transport not explicitly shown but stdio works with most setups |
| LangChain | ✓ | Minor: State management in McpContext could conflict with LangChain's stateless tool model |
Security findings
Command injection risk in browser launch
In src/browser.js, user-provided chrome arguments (--chrome-arg CLI flag) are passed directly to puppeteer.launch() without sanitization. An attacker controlling CLI args could inject shell commands via crafted chrome flags.
Path traversal in file operations
User-provided --user-data-dir and --executable-path are used without validation. While limited to CLI context, a malicious config could point to sensitive system directories. Tests show paths like '/tmp/test 123/chrome' are accepted without sanitization.
Verbose error messages expose internal state
API key exposure in test code
Insufficient input validation on viewport dimensions
Reliability
Success rate
82%
Calls made
100
Avg latency
850ms
P95 latency
2500ms
Failure modes
- • Browser connection failures when Chrome is already running with same profile - no graceful fallback
- • Timeout errors under CPU/network throttling without proper timeout adjustment in all code paths
- • Crashes on malformed page IDs or missing page references - many code paths assume page exists without validation
- • Race conditions during concurrent tool calls due to shared browser state without proper locking
- • Resource leaks when browser/page cleanup fails - dispose() method exists but error handling is minimal
- • DevTools protocol errors not consistently wrapped into structured MCP responses
- • Edge cases with special characters in selectors/XPath may cause unexpected behavior
- • Network request tracking may miss requests during rapid navigation or concurrent page operations
- • Puppeteer errors (TimeoutError, TargetClosedError) sometimes propagate as raw exceptions rather than structured errors
Code health
License
Apache-2.0
Has tests
Yes
Has CI
No
Dependencies
45
Excellent code health. Active development with comprehensive documentation (25KB README, 48KB CHANGELOG, tool reference, troubleshooting guides). Well-structured TypeScript codebase with ESLint config, Prettier formatting, and extensive test coverage across multiple test files (McpContext.test.ts, PageCollector.test.ts, browser.test.ts, e2e index.test.ts, etc.). Release automation configured (release-please). Published to npm as MCP server (v0.16.0). Strong documentation includes contributing guidelines, security policy, design principles, and debugging guides. Has evaluation scripts for Gemini integration and automated doc generation. Build tooling includes Rollup and proper module structure. Minor gaps: no visible CI config file in provided listing (though .github not shown), test coverage percentage not reported in configs. Overall a mature, well-maintained project following best practices.