{"name":"io.github.BitePro/chrome-debugger-mcp","slug":"bitepro-chrome-debugger-mcp","title":"Chrome Debugger MCP","description":"Chrome breakpoint debugging MCP server for inspecting runtime values and stepping through code","url":"https://mcp.market/server/bitepro-chrome-debugger-mcp","rating":null,"grade":"B","score":72,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":14,"stars":1,"forks":0,"downloads_week":46,"last_push_at":"2026-03-15T15:33:57.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/BitePro/chrome-debugger-mcp","website":null,"version":"1.0.4","remotes":[],"packages":[{"registryType":"npm","identifier":"chrome-debugger-mcp","version":"1.0.4","transport":{"type":"stdio"}}],"tools":[{"name":"connect","description":"[STEP 3] Connect the debugger to a specific Chrome tab. MANDATORY: call listTargets first, show the list to the user, wait for their explicit URL confirmation, then call this. NEVER guess the URL. NEVER skip user confirmation — even if only one tab is visible. targetUrl must be a unique substring of the tab URL the user confirmed (e.g. \"localhost:5173\"). Relay the \"_ui\" field from the response to ","write_action":false,"price_micros":0,"input_schema":null},{"name":"disconnect","description":"Disconnect the current Chrome debugging session and clear in-memory pause state. Use this to explicitly end a debug session before connecting again.","write_action":false,"price_micros":0,"input_schema":null},{"name":"evaluate","description":"[STEP 6b] Evaluate any JavaScript expression in the context of the currently paused call frame. Use this to inspect nested objects, call methods, compute derived values, or verify conditions at runtime. Complements getScopeVariables for values not directly visible in scope (e.g. this.state, JSON.stringify(obj)).","write_action":false,"price_micros":0,"input_schema":null},{"name":"forcePause","description":"Force the debugger to pause at the very next JavaScript statement. Useful when you cannot modify source code to add debugger; and setBreakpoint is not feasible.","write_action":false,"price_micros":0,"input_schema":null},{"name":"getScopeVariables","description":"[STEP 6a] Read all scope variables (local, closure, module) at the currently paused call frame. Call this immediately after waitForSpecificPause or waitForPause returns. Results are grouped by scope type; global scope is skipped. Use frameIndex=1, 2, ... to inspect variables in parent call frames up the stack.","write_action":false,"price_micros":0,"input_schema":null},{"name":"getStatus","description":"Non-blocking: return current connection and pause state immediately without waiting. Use this to poll for pause instead of waitForPause when the MCP client has a short request timeout (e.g. MCP Inspector ~10s). Returns: connected, paused, targetUrl, pauseReason, hitBreakpoints, callStack.","write_action":false,"price_micros":0,"input_schema":null},{"name":"launchChrome","description":"[STEP 1] Launch a dedicated Chrome instance with remote debugging enabled (default port 9222). Uses --user-data-dir=~/.chrome-debug-profile so your normal Chrome keeps running (dual-instance). Auto-detects if the debug port is already active and skips launch (alreadyRunning=true). Use dryRun=true to preview the command — show it to the user and ask for confirmation before executing. Set openDevToo","write_action":false,"price_micros":0,"input_schema":null},{"name":"listTargets","description":"[STEP 2] List all open Chrome tabs available for debugging. MANDATORY: show the full list to the user and ask \"Which URL do you want to debug?\" NEVER skip this step, NEVER guess — even if only one tab is open. Wait for the user's explicit reply before proceeding to connect(). Relay the \"_ui\" field from the response to the user.","write_action":false,"price_micros":0,"input_schema":null},{"name":"reloadPage","description":"[STEP 5a] Reload the connected page via Chrome DevTools Protocol. More reliable than manual browser refresh — maintains the CDP connection and ensures debugger; statements and setBreakpoint() calls resolve correctly when scripts reload. Always call this after inserting debugger; in source code or after setBreakpoint(), before waitForSpecificPause/waitForPause. ⚠️ CRITICAL TURN RULE: After this too","write_action":false,"price_micros":0,"input_schema":null},{"name":"removeBreakpoint","description":"Remove a previously set CDP breakpoint by its ID (returned by setBreakpoint).","write_action":true,"price_micros":0,"input_schema":null},{"name":"resume","description":"[STEP 8] Resume script execution after collecting all needed variable data — ends the current pause. After calling resume, remove all temporary debugger; statements added to source code during this session. Relay the \"_ui\" field from the response to the user.","write_action":false,"price_micros":0,"input_schema":null},{"name":"setBreakpoint","description":"Set a breakpoint at a specific script URL and line number via CDP — no source code modification needed. Use a full URL (https://...) for exact match, or a partial filename/keyword for regex match. Alternative to inserting debugger; when you cannot modify the source file. After setting, call reloadPage() to ensure the breakpoint resolves correctly.","write_action":false,"price_micros":0,"input_schema":null},{"name":"startDebuggingSession","description":"CALL THIS FIRST whenever browser-side debugging is needed — before any other tool. Auto-trigger when user mentions any of: debug, breakpoint, debugger, inspect, trace, step through, runtime value, variable value, why is this, implement based on API response, bug, error, unexpected behavior, not working, check this, confirm this. Returns the complete debugging workflow and critical rules. The respo","write_action":false,"price_micros":0,"input_schema":null},{"name":"stepInto","description":"[STEP 7] BLOCKING: step into the next function call, then wait until the debugger pauses again. Follow with getScopeVariables() to observe inner-function state.","write_action":false,"price_micros":0,"input_schema":null},{"name":"stepOut","description":"[STEP 7] BLOCKING: step out of the current function and wait until the debugger pauses again in the caller. Use to observe the return value and the state of the calling context.","write_action":false,"price_micros":0,"input_schema":null},{"name":"stepOver","description":"[STEP 7] BLOCKING: step over the current statement without entering function calls, then wait until the debugger pauses again. Follow with getScopeVariables() to observe how local variables change.","write_action":false,"price_micros":0,"input_schema":null},{"name":"waitForPause","description":"[STEP 5b — FALLBACK] BLOCKING call — waits until ANY debugger pause occurs (breakpoint, debugger; statement, or exception). Before blocking, sends a notification to the user to trigger the page action. Must be called IMMEDIATELY after reloadPage() in the SAME AI turn — do NOT end your turn before calling this. Prefer waitForSpecificPause when you know the exact file and line — it uses smarter two-","write_action":false,"price_micros":0,"input_schema":null},{"name":"waitForSpecificPause","description":"[STEP 5b — PREFERRED] BLOCKING call — waits for the next debugger pause, then checks if it matches the target location. ⚠️ NO AUTO-RESUME: execution stays paused after this returns, regardless of matched value. You decide what to do based on the \"matched\" field in the response: matched=true → call getScopeVariables() immediately to read variables matched=false → the wrong breakpoint fired; call re","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":72,"grade":"B","scanned_at":"2026-09-27T23:37:19.579Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-09-27T23:37:19.525Z","components":{"code":{"score":25,"max":25,"notes":["5 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":4,"max":15,"notes":["last push 196 days ago"]},"identity":{"score":6,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"chrome-debugger-mcp","version":"1.0.4","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":3,"publishedAt":"2026-03-16T06:12:13.848Z","repositoryUrl":"git+https://github.com/BitePro/chrome-debugger-mcp.git","weeklyDownloads":46}],"repo":{"found":true,"owner":"BitePro","repo":"chrome-debugger-mcp","archived":false,"pushedAt":"2026-03-15T15:33:57Z","stars":1,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/244459630?v=4","ownerCreatedAt":"2025-11-17T07:47:22Z","license":"MIT"},"icon":{"url":null,"source":"none"},"presence":{"stars":1,"forks":0,"downloadsWeek":46,"license":"MIT","lastPushAt":"2026-03-15T15:33:57.000Z","score":14}}}},"grade_history":[],"reviews":[]}