MCP server for debugging Electron apps via Chrome DevTools Protocol. Start/attach processes, capture screenshots, read console errors & network logs, inspect DOM, evaluate JS, and automate UI โ built for Cursor and other MCP clients.
โก Electron Debug MCP
Debug Electron apps from Cursor & Claude with real DevTools superpowers.
Model Context Protocol server ยท Chrome DevTools Protocol ยท start / attach / screenshot / console / DOM / UI automation / tracing
๐ Overview
Electron Debug MCP is a local MCP server that gives AI coding agents eyes, hands, and Chrome DevTools inside your Electron app.
Instead of guessing from source alone, the agent can:
| ๐ฏ Goal | ๐ ๏ธ How | | --- | --- | | Boot your app under a debugger | start_app with --remote-debugging-port | | Hook an app you already launched | attach ยท attachbypid ยท findapps ยท discoverapps | | See the UI | screenshot / save_screenshot (full page or element clip via selector) | | Read renderer failures | getconsolemessages (level: "error") + exceptions | | Stream console live | setconsolelive โ MCP log notifications | | Inspect markup | getdom / queryselector | | Run JS in the page | evaluate | | Run JS in main | startapp({ inspectMain: true }) โ evaluatemain | | Cookies & web storage | getcookies / setcookie ยท getstorage / setstorage | | Watch network | getnetworklog | | Drive the UI | waitfor โ typetext / press_key โ click โ navigate | | Perf deep-dive | starttracing โ reproduce โ stoptracing (open in chrome://tracing) | | One-shot health check | diagnose | | Full DevTools power | cdp_command (Domain.method) |
It speaks MCP over stdio (Cursor / Claude Desktop friendly), bridges to Chrome DevTools Protocol, buffers console + network on monitored page targets, and keeps stdout clean (all server logs go to stderr).
๐ค Who itโs for
- ๐งโ๐ป Cursor / Claude users pair-programming on Electron desktop apps
- ๐ Maintainers tired of โwhite screen / silent exceptionโ bugs agents canโt see
- ๐งฐ Tooling authors who need a stdio MCP โ CDP bridge for Electron/Chromium
๐ฌ Example things you can ask the agent
โStart D:/apps/my-app on port 9222 and tell me if the renderer threw on boot.โ
โFind my running Electron app, attach by PID, screenshot #sidebar, and dump localStorage.โ
โType into #email, press Enter, wait for Welcome, then list console errors.โ
โStart a CDP trace, click through settings, stop tracing, and save the JSON.โ
โDiagnose why this Electron window is blank.โ
๐ At a glance
| Aspect | Details | | :--- | :--- | | ๐ Transport | MCP stdio JSON-RPC | | ๐งฌ Debug bridge | Chrome DevTools Protocol (Runtime ยท Page ยท Network ยท Debugger ยท Input ยท Log ยท Tracing) | | ๐ App control | Spawn Electron or attach by port / PID / process scan | | ๐ฆ Surface area | 36 tools ยท 6 resources ยท 3 prompts ยท logging + resource list-changed | | ๐ฅ๏ธ Platforms | Windows ยท macOS ยท Linux (CI: Xvfb + no-sandbox) | | ๐ฆ Requires | Node โฅ 18, npm, one-time Electron binary download | | ๐ก๏ธ Safety | Optional ELECTRONMCPALLOWEDROOTS (app paths) ยท ELECTRONMCPOUTPUTROOTS (screenshot/trace output, plus built-in blocklist of sensitive locations); attach sessions detach-only on stop | | โ
Verify | npm test โ unit + full MCPโElectron smoke |
โ Status
- ๐ข Ready for local agent-driven Electron debugging
- ๐ข E2E smoke: start โ UI/automation โ storage/cookies โ tracing โ find/attach-by-pid โ stop
- ๐ข Windows binary repair:
scripts/fix-electron.cmdwhen npm blocks postinstall - ๐ข v1.5.0 โ element screenshots, cookies/storage, tracing, attach-by-pid
- ๐ข Built on TypeScript 7 (native Go compiler) โ ~10x faster builds
๐ Table of contents
- Overview
- Why this exists
- Feature tour
- 60-second quick start
- Cursor & Claude Desktop setup
- How it works
- Complete tools cheatsheet
- Tools reference (all options)
- Resources
- Prompts
- Usage examples
- Configuration
- npm scripts
- Testing
- Project layout
- Security
- Troubleshooting
- Contributing
- License
โจ Why this exists
Electron bugs are often invisible to coding agents:
| ๐ฃ Pain | ๐ What agents usually see | ๐๏ธ What this server adds | | --- | --- | --- | | Blank / white window | Source files only | Live screenshot + DOM (+ element clip) | | Silent renderer crash | Nothing | Console + exception buffer (+ live stream) | | Failed API calls | Guesswork | Network event log | | Wrong route / URL | Unknown | page_info / evaluate | | UI not responding | Can't interact | click / typetext / presskey / wait_for | | Auth / state bugs | Blind | cookies + localStorage/sessionStorage | | Perf jank | Guesswork | CDP tracing export | | App already running | Manual port hunt | findapps / attachby_pid | | Need DevTools power | Manual only | Full cdp_command escape hatch |
๐ Feature tour
๐ Lifecycle
|
๐ Inspection
|
๐ฑ๏ธ Interaction
|
๐ง Agent UX & power
|
โก 60-second quick start
git clone https://github.com/amafjarkasi/electron-mcp-server.git
cd electron-mcp-server
npm install
npm run ensure-electron
npm run build
npm test
๐ช Windows binary missing?
If npm warns about allowScripts / Electron postinstall:
.\scripts\fix-electron.cmd
That reinstalls Electron, extracts electron.exe with system tar, then runs tests.
๐ฅ๏ธ Cursor & Claude Desktop setup
Cursor
npm run build- Open Cursor โ MCP settings
- Add (use your absolute path):
{
"mcpServers": {
"electron-debug": {
"command": "node",
"args": ["C:/Users/you/code/electron-mcp-server/build/index.js"]
}
}
}
macOS / Linux
{
"mcpServers": {
"electron-debug": {
"command": "node",
"args": ["/Users/you/code/electron-mcp-server/build/index.js"],
"env": {
"ELECTRONMCPNO_SANDBOX": "1"
}
}
}
}
- Restart Cursor
- Confirm tools:
startapp,attach,findapps,screenshot,getconsolemessages,click,start_tracing, โฆ
examples/cursor-mcp.json
Claude Desktop
Same mcpServers block in claudedesktopconfig.json, pointing at build/index.js. Edit the file at:
- macOS:
~/Library/Application Support/Claude/claudedesktopconfig.json - Windows:
%APPDATA%\Claude\claudedesktopconfig.json - Linux:
~/.config/Claude/claudedesktopconfig.json
examples/claude-desktop-config.json
โ ๏ธ Donโt run node build/index.js in a normal terminal for daily use โ it waits on stdio for an MCP client. Let Cursor/Claude spawn it.
๐งฉ How it works
โโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Cursor / Claude / MCP โ
โ client (agent) โ
โโโโโโโโโโโโโโฌโโโโโโโโโโโโโโ
โ stdio JSON-RPC
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Electron Debug MCP โ
โ ๐ ๏ธ tools (36) โ
โ ๐ก resources โ
โ ๐ฌ prompts โ
โ ๐ฃ logging / list-changedโ
โโโโโโโโโโโโโโฌโโโโโโโโโโโโโโ
โ spawn / attach / PID resolve
โ CDP WebSocket
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Electron application โ
โ --remote-debugging-port โ
โ RuntimeยทPageยทNetworkยทโฆ โ
โ optional --inspect (main)โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโ
After startapp / attach / attachby_pid, page targets get Runtime / Log / Network / Page enabled so console + network events keep buffering between tool calls.
Finding a running app
find_appsโ OS process scan (Electron PIDs +--remote-debugging-portfrom argv)discover_appsโ HTTP probe of local CDP ports (/json/version,/json/list)attach/attachbypidโ open a managed session (detach-only onstop_app)
๐๏ธ Complete tools cheatsheet
| Category | Tools | | --- | --- | | ๐ Lifecycle | startapp ยท attach ยท attachbypid ยท findapps ยท discoverapps ยท stopapp ยท list_apps ยท diagnose | | ๐ Inspect | screenshot ยท savescreenshot ยท getdom ยท queryselector ยท evaluate ยท evaluatemain ยท getcookies ยท setcookie ยท getstorage ยท setstorage ยท getconsolemessages ยท getnetworklog ยท getlogs ยท listtargets ยท page_info | | ๐ฑ๏ธ Interact | navigate ยท waitfor ยท click ยท typetext ยท presskey ยท reload ยท pause ยท resume ยท clearbuffers ยท setconsolelive | | ๐งฐ Power | starttracing ยท stoptracing ยท cdp_command |
๐ ๏ธ Tools reference (all options)
All APIs below are MCP tools. Schemas match the live Zod definitions in src/index.ts.
๐ Lifecycle
start_app
Launch Electron with remote debugging.
| Param | Type | Req | Default | Description | | --- | --- | --- | --- | --- | | appPath | string | โ
| โ | App directory or main script | | debugPort | int 1024โ65535 | โ | random 9222โ9999 | CDP port | | extraArgs | string[] | โ | [] | Extra CLI flags | | inspectMain | bool | โ | false | Pass --inspect=0 so main appears as a node target for evaluate_main |
Auto flags: --remote-debugging-port, --enable-logging, --disable-gpu, and --no-sandbox when ELECTRONMCPNO_SANDBOX=1 / CI=true / no DISPLAY.
Returns: id, pid, debugPort, targets, attached: false, โฆ
attach
| Param | Type | Req | Description | | --- | --- | --- | --- | | debugPort | int | โ
| Existing DevTools port | | name | string | โ | Friendly session name |
stop_app on attached sessions detaches only (does not kill the external app).
attachbypid
Attach by OS process id. Resolves --remote-debugging-port from the process command line (Linux/macOS/ps, Windows PowerShell). Falls back to listening sockets owned by the PID on Linux when needed.
| Param | Type | Req | Description | | --- | --- | --- | --- | | pid | int | โ
| Electron main process id | | name | string | โ | Friendly session name |
Tip: Prefer the main process PID from find_apps (helpers with --type=renderer / gpu-process are filtered unless they expose a debug port).
find_apps
List running Electron-like processes.
Returns: { apps: [{ pid, command, debugPort?, inspectPort?, likelyElectron }], count }
Use this when you launched the app yourself and donโt remember the port.
discover_apps
| Param | Type | Default | | --- | --- | --- | | startPort | int | 9222 | | endPort | int | 9235 |
HTTP-probes each port for Chromium/Electron DevTools (/json/version + /json/list).
stop_app โ { processId }
list_apps โ no params
diagnose โ optional { processId } (omit = all sessions)
diagnose reports port reachability, target role counts, recent console errors, and monitoring state.
๐ Inspection
screenshot / save_screenshot
| Param | Type | Default | Description | | --- | --- | --- | --- | | processId | string โ
| โ | Session id | | targetId | string | first page | CDP page target | | format | png \| jpeg | png | Image format | | quality | int 0โ100 | โ | JPEG only | | selector | string | โ | Element clip โ capture only that nodeโs bounding box | | path | string โ
(save_screenshot) | โ | File path to write |
screenshot returns MCP image content (+ JSON meta including clip when used). save_screenshot writes bytes to disk and returns { path, bytes, mimeType, clip? }.
get_dom โ { processId, selector?, targetId? }
query_selector โ { processId, selector, targetId?, limit?=20 }
evaluate
| Param | Type | Default | | --- | --- | --- | | processId | string โ
| โ | | expression | string โ
| โ | | targetId | string | auto | | role | page \| worker \| browser \| other | page | | returnByValue | bool | true |
evaluate_main
Evaluate in the Electron main/node CDP target.
| Param | Type | Default | | --- | --- | --- | | processId | string โ
| โ | | expression | string โ
| โ | | targetId | string | auto-pick node/main | | returnByValue | bool | true |
Requires a node-like target โ start with inspectMain: true, or pass an explicit targetId from list_targets.
get_cookies
| Param | Type | Description | | --- | --- | --- | | processId | string โ
| โ | | urls | string[] | Optional URL filter | | targetId | string | Page target |
set_cookie
| Param | Type | Description | | --- | --- | --- | | processId | string โ
| โ | | name / value | string โ
| Cookie pair | | url / domain | string | One required (defaults url to location.href when possible) | | path | string | Cookie path | | secure / httpOnly | bool | Flags | | sameSite | Strict \| Lax \| None | SameSite | | expires | number | Unix seconds | | targetId | string | Page target |
Note: Chromium often rejects cookies onfile://pages โ use anhttp(s)URL or pass an expliciturl/domain.
getstorage / setstorage
| Param | Type | Default | Description | | --- | --- | --- | --- | | processId | string โ
| โ | โ | | kind | localStorage \| sessionStorage | localStorage | Store | | entries | Record<string,string> โ
(set) | โ | Keys to write | | clear | bool (set) | false | Clear store before write | | targetId | string | โ | Page target |
getconsolemessages โ { processId, tail?, level? }
getnetworklog โ { processId, tail? }
get_logs โ { processId, tail? }
list_targets โ { processId? }
page_info โ { processId, targetId? } โ url / title / readyState / userAgent
Console capture includes console.*, CDP Log entries, and Runtime.exceptionThrown.
๐ฑ๏ธ Interaction & control
navigate โ { processId, url, targetId?, waitUntilLoad?=true, timeoutMs?=15000 }
wait_for
Provide at least one condition:
| Param | Meaning | | --- | --- | | selector | Element must exist | | hidden | Element absent or not visible | | enabled | Element exists and is not disabled | | countSelector + minCount | querySelectorAll length โฅ min | | text | document.body.innerText includes | | urlIncludes | location.href includes | | consoleIncludes | Buffered console text includes | | timeoutMs | Default 10000 (max 120000) | | screenshotOnTimeout | Save a PNG under the OS temp dir on failure | | targetId | Page target |
click โ { processId, selector, targetId?, button?=left }
type_text โ { processId, text, selector?, clear?, pressEnter?, targetId? }
press_key
| Param | Type | Description | | --- | --- | --- | | processId | string โ
| โ | | key | string โ
| e.g. Enter, Escape, Tab, ArrowDown, a | | selector | string | Focus/click before keypress | | modifiers | Alt \| Control \| Meta \| Shift[] | Chord modifiers | | repeat | int 1โ50 | Repeat count | | targetId | string | Page target |
setconsolelive โ { enabled }
Errors/asserts always emit MCP logs. When enabled, log/info/warn/debug also stream live.
reload โ { processId, targetId?, ignoreCache?=false }
pause / resume โ { processId, targetId? }
clear_buffers โ { processId, console?=true, network?=true, logs?=false }
๐งฐ Power / tracing
start_tracing
| Param | Type | Description | | --- | --- | --- | | processId | string โ
| โ | | categories | string | Comma-separated CDP categories (default: timeline + v8 profiler set) | | targetId | string | Page target |
Only one active trace per process session.
stop_tracing
| Param | Type | Description | | --- | --- | --- | | processId | string โ
| โ | | path | string | Output JSON path (default: OS temp dir) |
Returns: { path, eventCount, elapsedMs, targetId, โฆ } Open the file in Chromeโs chrome://tracing (or Perfetto UI).
cdp_command โ { processId, method:"Domain.method", targetId?, params? }
Escape hatch for any DevTools method not wrapped above.
๐ก Resources (read-only)
| URI | MIME | Description | | --- | --- | --- | | electron://info | JSON | Managed processes overview | | electron://targets | JSON | All CDP targets | | electron://process/{id} | JSON | Process details + webContents + recent errors | | electron://logs/{id} | text | stdout/stderr capture | | electron://console/{id} | JSON | Buffered console / exceptions | | electron://cdp/{processId}/{targetId} | JSON | Target metadata |
๐ฌ Prompts
| Prompt | Args | Use when | | --- | --- | --- | | debugblankwindow | processId | White/blank window | | findrendererexception | processId | Hunting console/exceptions | | uismokecheck | processId, selector | Wait โ interact โ verify |
๐ Usage examples
1๏ธโฃ Start app โ read title
// tool: start_app
{
"appPath": "D:/apps/my-electron-app",
"debugPort": 9222,
"extraArgs": ["--no-sandbox"]
}
// tool: evaluate
{
"processId": "electron-1710000000000",
"expression": "document.title"
}
2๏ธโฃ Attach to a running app (port)
electron . --remote-debugging-port=9222
// tool: attach
{ "debugPort": 9222, "name": "my-app" }
3๏ธโฃ Find by PID โ attach
// tool: find_apps
{}
// tool: attachbypid
{ "pid": 43210, "name": "my-app" }
4๏ธโฃ Catch console errors (+ live stream)
// tool: setconsolelive
{ "enabled": true }
// tool: getconsolemessages
{
"processId": "electron-1710000000000",
"level": "error",
"tail": 50
}
Also: resource electron://console/{processId}
5๏ธโฃ Screenshot โ full page, file, or element
// tool: screenshot
{ "processId": "electron-โฆ", "format": "png" }
// tool: save_screenshot
{
"processId": "electron-โฆ",
"path": "D:/tmp/app.png",
"format": "png"
}
// tool: save_screenshot (element clip)
{
"processId": "electron-โฆ",
"path": "D:/tmp/sidebar.png",
"selector": "#sidebar"
}
6๏ธโฃ UI automation flow
// wait_for
{ "processId": "electron-โฆ", "selector": "#email", "timeoutMs": 8000 }
// type_text
{
"processId": "electron-โฆ",
"selector": "#email",
"text": "ada@example.com",
"clear": true
}
// press_key
{ "processId": "electron-โฆ", "key": "Enter" }
// click
{ "processId": "electron-โฆ", "selector": "button[type=submit]" }
// wait_for (richer conditions)
{
"processId": "electron-โฆ",
"text": "Welcome",
"timeoutMs": 8000,
"screenshotOnTimeout": true
}
// wait_for enabled / count / hidden
{ "processId": "electron-โฆ", "enabled": "#submit" }
{
"processId": "electron-โฆ",
"countSelector": ".row",
"minCount": 3
}
{ "processId": "electron-โฆ", "hidden": ".spinner" }
7๏ธโฃ Cookies & storage
// set_storage
{
"processId": "electron-โฆ",
"kind": "localStorage",
"clear": true,
"entries": { "theme": "dark", "onboardingDone": "1" }
}
// get_storage
{ "processId": "electron-โฆ", "kind": "localStorage" }
// set_cookie
{
"processId": "electron-โฆ",
"name": "session",
"value": "abc",
"url": "https://app.local/"
}
// get_cookies
{ "processId": "electron-โฆ", "urls": ["https://app.local/"] }
8๏ธโฃ Main-process evaluate
// start_app with inspectMain
{
"appPath": "D:/apps/my-electron-app",
"debugPort": 9222,
"inspectMain": true
}
// evaluate_main
{
"processId": "electron-โฆ",
"expression": "process.versions.electron"
}
9๏ธโฃ Performance tracing
// start_tracing
{ "processId": "electron-โฆ" }
โฆreproduce the slow interaction (click / navigate / wait_for)โฆ
// stop_tracing
{
"processId": "electron-โฆ",
"path": "D:/tmp/app-trace.json"
}
Open app-trace.json in chrome://tracing.
๐ Diagnose a sick session
// tool: diagnose
{ "processId": "electron-1710000000000" }
1๏ธโฃ1๏ธโฃ Navigate + page info
// navigate
{
"processId": "electron-โฆ",
"url": "file:///path/to/renderer/settings.html",
"waitUntilLoad": true
}
// page_info
{ "processId": "electron-โฆ" }
1๏ธโฃ2๏ธโฃ Raw CDP escape hatch
// cdp_command
{
"processId": "electron-โฆ",
"method": "Page.captureScreenshot",
"params": { "format": "png", "fromSurface": true }
}
1๏ธโฃ3๏ธโฃ Recommended agent loop
findapps / discoverapps / startapp / attach / attachby_pid
โ diagnose
โ setconsolelive(true) # optional
โ getconsolemessages(level="error")
โ screenshot / save_screenshot(selector?)
โ wait_for (if UI)
โ click / typetext / presskey / evaluate / get_dom
โ getstorage / getcookies # if state matters
โ starttracing โฆ stoptracing # if perf
โ stop_app
๐ Configuration
Environment variables
| Variable | Purpose | | --- | --- | | ELECTRON_PATH | Force a specific Electron binary | | ELECTRONMCPNO_SANDBOX=1 | Always pass --no-sandbox | | ELECTRONMCPALLOWEDROOTS | ; / \| allowlist for startapp paths | | ELECTRONMCPOUTPUTROOTS | ; / \| allowlist for savescreenshot / stop_tracing output paths | | ELECTRON_MIRROR | Download mirror for Electron zips | | ELECTRONSKIPBINARY_DOWNLOAD | Cleared by ensure-electron so download still runs | | ELECTRONCACHE / electronconfig_cache | Zip cache directory | | CI=true | Enables no-sandbox auto flag | | unset DISPLAY (Linux) | Enables no-sandbox auto flag |
Path allowlist example
$env:ELECTR
๐ npm scripts
| Script | Does | | --- | --- | | npm run ensure-electron | Download/repair Electron binary | | npm run fix-electron | Alias of ensure-electron | | npm run build | Compile TS โ build/ | | npm start | Run MCP server (stdio) | | npm run dev | build + start | | npm run typecheck | tsc --noEmit | | npm test | ensure + build + unit + smoke | | npm run test:unit | Helper unit tests | | npm run test:smoke | Full MCP e2e vs fixture app | | postinstall | Runs ensure-electron |
Windows helpers: scripts/fix-electron.cmd ยท scripts/fix-electron.ps1
๐งช Testing
npm test
Smoke path (v1.5):
initialize โ tool/prompt/resource lists โ startapp โ evaluate โ console/network/DOM โ pageinfo / typetext / click / waitfor / presskey โ savescreenshot (+ selector clip) โ storage / cookies โ start/stoptracing โ findapps / attachbypid โ screenshot โ diagnose โ attach โ discover โ stop
CI: .github/workflows/ci.yml (Ubuntu + Xvfb).
๐๏ธ Project layout
electron-mcp-server/
โโโ assets/logo.svg ยท logo.png
โโโ examples/cursor-mcp.json ยท claude-desktop-config.json
โโโ fixtures/minimal-electron-app/
โโโ scripts/ensure-electron.mjs ยท fix-electron.cmd ยท fix-electron.ps1
โโโ src/index.ts ยท process-manager.ts ยท events.ts ยท log.ts
โโโ src/types/chrome-remote-interface.d.ts
โโโ test/mcp-smoke.mjs ยท unit-helpers.test.mjs
โโโ .github/workflows/ci.yml
โโโ README.md ยท LICENSE ยท package.json ยท tsconfig.json
๐ก๏ธ Security
- Can launch local binaries, evaluate JS in app contexts, read page content, cookies, and storage โ treat as a powerful local debugger.
- Use
ELECTRONMCPALLOWED_ROOTSon shared machines. savescreenshot/stoptracingreject writes to sensitive locations (~/.ssh,/etc,/proc,/usr,C:\Windows,C:\Program Files, โฆ). SetELECTRONMCPOUTPUT_ROOTSto further restrict output to specific directories.- Donโt expose stdio over an open network without auth.
- Only
attach/attachbypidto apps you trust (remote debugging is powerful). - In-memory console/network buffers and exported traces may contain secrets from the app under test.
๐งฏ Troubleshooting
| Symptom | Fix | | --- | --- | | Electron failed to install correctly | .\scripts\fix-electron.cmd / npm run ensure-electron | | path.txt missing / dist=locales | Corrupt cache โ repair script clears + uses tar | | allowScripts warning | Expected on newer npm โ run ensure/fix scripts | | Hang + console title Select โฆ | Windows QuickEdit โ press Esc; disable QuickEdit | | Empty console buffer | Wait for page activity; monitoring starts on start/attach; try setconsolelive | | wait_for / click fails | Selector not ready โ wait first; screenshot to verify | | Element screenshot hangs / times out | Headless/GPU quirks โ server retries without fromSurface; ensure selector is visible | | set_cookie fails on file:// | Pass an http(s) url/domain | | evaluate_main โNo main/node targetโ | Restart with inspectMain: true or pass targetId | | attachbypid canโt resolve port | App must be started with --remote-debugging-port; check find_apps | | startapp path rejected | Outside ELECTRONMCPALLOWEDROOTS | | node build/index.js โdoes nothingโ | Waiting on MCP stdio โ use Cursor config | | Port in use | Change debugPort or discoverapps / findapps | | Linux headless | ELECTRONMCPNO_SANDBOX=1 + Xvfb | | Tracing empty / fails | Call start_tracing before the slow path; only one active trace per session |
๐ค Contributing
- Fork + branch
npm test- PR with tool/behavior notes
- Keep stdout MCP-clean (log to stderr only)
๐ License
ISC ยฉ Electron Debug MCP contributors
Built for agents that need eyes โ and hands โ inside Electron.