Most browser servers can click and read text. This one can stop execution on a DOM mutation, an XHR to a given path, or a named function, evaluate a condition before pausing, and hand back the call stack. Logpoints are the underused mode — set a condition and a message with pausing turned off and you get instrumented output without editing the source. Attaching to an already-running Electron app works the same way.
A Chrome DevTools Protocol client for AI-assisted front-end work. It launches Chrome or attaches to one that is already running — including Electron and other V8-based apps — and exposes inspection, execution and debugging.
- Connecting: `launch_chrome` starts an instance with a debugging port, `connect_remote_chrome` attaches to a running one, `list_available_targets` enumerates tabs with their WebSocket URLs, and `connect_websocket_url` switches to a specific one
- Inspection: `navigate_to`, `get_dom_tree` with a depth limit, `query_elements` by CSS selector, `get_page_info`, `take_screenshot` with a full-page option
- Diagnostics: `get_network_logs` with URL filtering, `get_console_logs` filtered by level, `execute_javascript` in the page context
- Source access: `get_script_sources` lists every loaded script, `get_script_source` fetches one, `search_in_scripts` searches all of them for a function, class, variable or text, and `get_page_functions` lists what the page defines
- Real debugging: `set_breakpoint` supports DOM, event, function, XHR, line and logpoint types, with conditions and log messages, plus `list_breakpoints`, `remove_breakpoint`, `get_paused_info`, `resume_execution` and `step_over`
- `close_chrome` shuts the instance down
Python 3.7+ and Google Chrome, on macOS, Linux or Windows. Clone the repository, install from requirements.txt, and point the client at the server script; the server listens on port 12524, overridable with MCP_PORT and MCP_HOST. Attaching to an existing app means starting it with a remote debugging port, conventionally 9222.
