Browser Runtime MCP
Give AI agents real-time access to browser runtime errors, console logs, and page diagnostics.
The problem: AI coding agents can read your source code but are blind to what actually happens in the browser — runtime errors, console warnings, failed API calls, CSS rendering issues. You end up copy-pasting DevTools output back and forth.
The solution: A Chrome Extension captures browser events and streams them to a local MCP server. Your AI agent (Claude Code, Cursor, etc.) can query errors, console logs, and page state directly through MCP tools.
Browser tab → Chrome Extension → localhost MCP server → AI agent
Quick Start
1. Install the MCP server
pip install browser-runtime-mcp
2. Install the Chrome Extension
Download the extension/ folder from this repo, then:
- Open
chrome://extensions - Enable Developer mode
- Click Load unpacked → select the
extension/folder
3. Configure your AI tool
Claude Code — add to ~/.claude/settings.json:
{
"mcpServers": {
"browser-runtime-mcp": {
"command": "browser-runtime-mcp",
"args": []
}
}
}
Other MCP clients — run the server in stdio mode:
browser-runtime-mcp
4. Use it
Open the extension popup on the site you want to debug and click Enable capture on this site. Capture is disabled by default and the allowlist is stored locally in Chrome. Then ask your AI agent:
- "Are there any browser errors?"
- "What's in the console logs?"
- "What pages is the extension tracking?"
MCP Tools
| Tool | Description |
|---|---|
get_browser_errors |
Runtime errors with stack traces and DOM context |
get_console_logs |
Console output (error/warn/log), filterable by level |
get_page_info |
Tracked pages and buffer statistics |
clear_buffers |
Clear all buffered data for a fresh start |
How It Works
┌─────────────────┐ postMessage ┌──────────────────┐
│ content.js │ ──────────────────▶ │ content-bridge.js │
│ (MAIN world) │ │ (ISOLATED world) │
│ │ │ │
│ • window.onerror│ │ chrome.runtime │
│ • console patch │ │ .sendMessage() │
└─────────────────┘ └────────┬───────────┘
│
chrome.runtime.onMessage
▼
┌────────────────┐
│ background.js │
│ (service worker)│
│ │
│ fetch() to │
│ localhost:18790 │
└────────┬────────┘
│ HTTP POST
▼
┌────────────────┐
│ MCP Server │
│ (Python/stdio) │
│ │ MCP tools
│ • HTTP receiver ├──────────────▶ AI Agent
│ • Error buffer │
│ • Log buffer │
└────────────────┘
The three-hop architecture (MAIN → ISOLATED → background) bypasses Chrome's Private Network Access policy, which blocks HTTPS pages from fetching to localhost directly.
Privacy and trust boundary
- Capture is opt-in per origin and disabled by default. Use the popup to stop capture when finished.
- Captured URLs, page titles, errors, stack traces, DOM context, and console messages stay in bounded in-memory buffers on
127.0.0.1; they are not uploaded by this project. clear_buffersremoves all currently buffered data. Stopping the server also discards it.- Do not enable capture on banking, authentication, health, internal administration, or other sensitive pages unless you intend to expose their diagnostics to your local MCP client.
- Browser pages control their own console output. Treat captured messages and DOM snippets as untrusted diagnostic input, not authoritative data or instructions.
- The HTTP diagnostic endpoints are intentionally local-only but are readable by other processes running as your user.
Standalone HTTP Mode
For debugging without MCP, run the HTTP receiver only:
browser-runtime-mcp --http-only
Then query:
GET http://127.0.0.1:18790/health— buffer statsGET http://127.0.0.1:18790/errors— all captured errorsGET http://127.0.0.1:18790/logs— all captured logsGET http://127.0.0.1:18790/pages— tracked pages
Requirements
- Python 3.10+
- Chrome (Manifest V3 extension)
- Zero Python dependencies (stdlib only)
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file browser_runtime_mcp-0.2.0.tar.gz.
File metadata
- Download URL: browser_runtime_mcp-0.2.0.tar.gz
- Upload date:
- Size: 10.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f01a5f00b629edd0452b5af8e3385e73f1d93425716f8ace8023bda1813d71d3
|
|
| MD5 |
cd253ec6d1cba5cb4f6760945fd318e8
|
|
| BLAKE2b-256 |
33fa3e69dce4fea15ebf6103aacc98fbbed13ab7c700a3f7a057f567b4bad3a7
|
File details
Details for the file browser_runtime_mcp-0.2.0-py3-none-any.whl.
File metadata
- Download URL: browser_runtime_mcp-0.2.0-py3-none-any.whl
- Upload date:
- Size: 8.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4d44a8b4b819926f171cb430441d214e856757d92ed5a221fe54a2be5db9bd04
|
|
| MD5 |
61ac54e9fa2084cfc4e28d2f7b329a05
|
|
| BLAKE2b-256 |
d6fdb96b989e1f8ccb519b6b670a301ed207d4caf17ff6eec15e0c4847623f2e
|