ReverseCraft DevTools MCP - MCP server for browser debugging and reverse engineering
npm install @reverse-craft/rc-devtools-mcpA powerful MCP (Model Context Protocol) server for browser debugging and reverse engineering. Provides AI coding assistants with comprehensive browser automation, JavaScript debugging, and network analysis capabilities.
- JavaScript Debugging: Set breakpoints, step through code, inspect variables, and evaluate expressions
- IR Debugging: Debug JSVMP-protected code at the IR (Intermediate Representation) level with vmasm support
- Network Analysis: Monitor, search, and save network requests with full request/response details
- Page Automation: Navigate pages, interact with elements, and capture screenshots
- Console Monitoring: Access and filter console messages with full stack traces
``bash`
npx @reverse-craft/rc-devtools-mcp@latest
`bash`
npm install -g @reverse-craft/rc-devtools-mcp
rc-devtools-mcp
Add to your Kiro MCP configuration (.kiro/settings/mcp.json):
`json`
{
"mcpServers": {
"rc-devtools": {
"command": "npx",
"args": ["@reverse-craft/rc-devtools-mcp@latest"]
}
}
}
Add to your Cursor MCP configuration:
`json`
{
"mcpServers": {
"rc-devtools": {
"command": "npx",
"args": ["@reverse-craft/rc-devtools-mcp@latest"]
}
}
}
Add to your Claude Desktop configuration (claude_desktop_config.json):
`json`
{
"mcpServers": {
"rc-devtools": {
"command": "npx",
"args": ["@reverse-craft/rc-devtools-mcp@latest"]
}
}
}
`json`
{
"mcpServers": {
"rc-devtools": {
"command": "npx",
"args": [
"@reverse-craft/rc-devtools-mcp@latest",
"--headless",
"--viewport", "1920x1080"
]
}
}
}
1. Configure your MCP client with the server
2. Start a conversation with your AI assistant
3. Ask it to navigate to a website and debug JavaScript:
``
Navigate to https://example.com and set a breakpoint on line 10 of main.js
Or analyze network traffic:
``
List all network requests and show me the API calls
click - Click on an element
- uid (string, required): Element uid from page content snapshotdblClick
- (boolean, optional): Set to true for double click (default: false)
fill - Type text into input or select option
- uid (string, required): Element uid from page content snapshotvalue
- (string, required): Text to fill or option to select
press_key - Press a key or key combination
- key (string, required): Key or combination (e.g., "Enter", "Control+A", "Control+Shift+R")
- Supported modifiers: Control, Shift, Alt, Meta
navigate_page - Navigate to URL, go back/forward, or reload
- type (string, optional): Navigation type: url, back, forward, or reloadurl
- (string, optional): Target URL (required when type=url)ignoreCache
- (boolean, optional): Ignore cache on reloadenableDebugger
- (boolean, optional): Enable JavaScript debugger after navigation (default: true)timeout
- (number, optional): Navigation timeout in milliseconds
new_page - Create a new browser page
- url (string, required): URL to load in the new pageincognito
- (boolean, optional): Open in incognito windownewWindow
- (boolean, optional): Open in new windowuserDataDir
- (string, optional): Independent user data directory pathenableDebugger
- (boolean, optional): Enable JavaScript debugger (default: true)timeout
- (number, optional): Navigation timeout in milliseconds
list_pages - List all open pages
- No parameters
select_page - Select a page as active context
- pageIdx (number, required): Index of page to select (from list_pages)bringToFront
- (boolean, optional): Focus and bring page to top
list_network_requests - List all network requests
- keyword (string, optional): Filter requests by keyword in URL, headers, or bodypageSize
- (number, optional): Maximum requests to returnpageIdx
- (number, optional): Page number (0-based)resourceTypes
- (array, optional): Filter by resource types (e.g., ["xhr", "fetch", "script"])includePreservedRequests
- (boolean, optional): Include requests from last 3 navigations (default: false)
get_network_request - Get details of a specific request
- reqid (number, optional): Request ID (omit to use currently selected request in DevTools)
save_network_request - Save request/response to file in raw HTTP format
- reqid (number, optional): Request ID (omit to use currently selected request)filePath
- (string, required): File path to save HTTP transactionresponseBodyFilePath
- (string, optional): Separate file for binary response bodysaveRequestBody
- (boolean, optional): Save request body to separate filerequestBodyFilePath
- (string, optional): File path for request body
save_static_resource - Save static resource to file
- reqid (number, required): Request ID containing the resourcefilePath
- (string, required): File path or directory (extension auto-detected from content type)
#### Breakpoint Management
set_breakpoint - Set a JavaScript breakpoint at a specific line
- urlRegex (string, required): Regular expression to match script URL (e.g., ".main\\.js.")lineNumber
- (number, required): Line number (1-based, as shown in editors)columnNumber
- (number, optional): Target column number (0-based) for smart snappingsnapRange
- (number, optional): Search range around target column for valid positions (default: 100)condition
- (string, optional): JavaScript expression - breakpoint only triggers when true
remove_breakpoint - Remove a breakpoint by its ID
- breakpointId (string, required): CDP breakpoint ID from set_breakpoint or list_breakpoints
list_breakpoints - List all active breakpoints
- searchTerm (string, optional): Filter breakpoints by ID or URL patternpageSize
- (number, optional): Maximum breakpoints per pagepageIdx
- (number, optional): Page number (0-based)
clear_all_breakpoints - Remove all breakpoints on the current page
- No parameters
get_possible_breakpoints - Find valid breakpoint locations (useful for minified code)
- urlRegex (string, required): Regular expression to match script URLlineNumber
- (number, required): Line number to search (1-based)startColumn
- (number, optional): Start column for search range (0-based)endColumn
- (number, optional): End column for search range (0-based)maxCount
- (number, optional): Maximum locations to return (default: 20)
#### Execution Control
step_into - Step into a function call
- maxCallStackDepth (number, optional): Max call stack frames to display (default: 4)contextLines
- (number, optional): Lines of code context before/after (default: 2)maxLocalVariables
- (number, optional): Max local variables to display (default: 5)showStatus
- (boolean, optional): Whether to show debug status (default: true)
step_over - Step over to the next line
- maxCallStackDepth (number, optional): Max call stack frames to display (default: 4)contextLines
- (number, optional): Lines of code context before/after (default: 2)maxLocalVariables
- (number, optional): Max local variables to display (default: 5)showStatus
- (boolean, optional): Whether to show debug status (default: true)
step_out - Step out of the current function
- maxCallStackDepth (number, optional): Max call stack frames to display (default: 4)contextLines
- (number, optional): Lines of code context before/after (default: 2)maxLocalVariables
- (number, optional): Max local variables to display (default: 5)showStatus
- (boolean, optional): Whether to show debug status (default: true)
resume_execution - Resume paused execution
- No parameters
#### Inspection & Evaluation
get_debugger_status - Get current debugger state with call stack and variables
- frameIndex (number, optional): Call frame index to inspect (default: 0)contextLines
- (number, optional): Lines of code context (default: 5)maxPropertiesPerScope
- (number, optional): Max properties per scope to displayskipScopeVariables
- (boolean, optional): Skip scope variable inspectionuseObjectPreviews
- (boolean, optional): Use object previews instead of full retrievalmaxOutputLines
- (number, optional): Maximum output lines (default: 100)maxCallStackFrames
- (number, optional): Max call stack frames (default: 20)maxLineLength
- (number, optional): Max characters per line (default: 500)showIRContext
- (boolean, optional): Show IR context if paused in JSVMP code (default: true)
evaluate_on_call_frame - Evaluate JavaScript expression in a specific call frame
- expression (string, required): JavaScript expression to evaluateframeIndex
- (number, optional): Call frame index (default: 0)maxOutputChars
- (number, optional): Max output characters (default: 10000)filepath
- (string, optional): Save result to file instead of displaying
get_scope_variables - Get detailed variable information from a scope
- frameIndex (number, optional): Call frame index (default: 0)scopeType
- (string, optional): Filter by scope type (local, closure, block, script, global, etc.)variableName
- (string, optional): Get specific variable by namesearchTerm
- (string, optional): Search variables by namepageSize
- (number, optional): Max variables per pagepageIdx
- (number, optional): Page number (0-based)maxDepth
- (number, optional): Max depth for nested objects (default: 3)maxOutputLines
- (number, optional): Max output lines (default: 100)saveToFile
- (string, optional): Save output to file pathmaxLineLength
- (number, optional): Max characters per line (default: 1000)
save_scope_variables - Save all scope variables to a JSON file
- filePath (string, required): Output file pathframeIndex
- (number, optional): Call frame index (default: 0)includeGlobal
- (boolean, optional): Include global scope (default: false)
disable_debugger - Disable the debugger and remove all breakpoints
- No parameters
#### XHR/Fetch Breakpoints
set_xhr_breakpoint - Set a breakpoint on XHR/Fetch requests
- urlPattern (string, required): URL substring to match (empty string matches all requests)
remove_xhr_breakpoint - Remove an XHR breakpoint
- urlPattern (string, optional): URL pattern to remove (omit to remove all XHR breakpoints)
list_xhr_breakpoints - List all active XHR breakpoints
- No parameters
take_screenshot - Capture a screenshot
- format (string, optional): Image format: png, jpeg, or webp (default: png)quality
- (number, optional): Compression quality for JPEG/WebP (0-100, higher = better quality)uid
- (string, optional): Element uid to screenshot (omit for full page)fullPage
- (boolean, optional): Capture full page instead of viewport (incompatible with uid)filePath
- (string, optional): Save to file instead of attaching to response
take_snapshot - Take a text snapshot of the page
- verbose (boolean, optional): Include all information from the full a11y tree (default: false)filePath
- (string, optional): Save to file instead of attaching to responsesearch
- (string, optional): Filter elements matching this text (case-insensitive)pageSize
- (number, optional): Number of elements per page for paginationpageIdx
- (number, optional): Page index (0-based) for pagination
load_vmasm - Load a vmasm file and configure script interception
- filePath (string, required): Path to the vmasm file (absolute or relative)sourceFilePath
- (string, optional): Path to the original JS source file (if not in vmasm @source directive)
- Note: Refresh the page after loading for the debug script to take effect
get_vm_state - Get the current virtual machine state when paused
- maxStackItems (number, optional): Maximum stack items to display (default: 20)maxConstants
- (number, optional): Maximum constants to display (default: 10)contextLines
- (number, optional): Number of bytecode instructions to show before/after current (default: 5)
- Returns: JSVMP registers, transform variables, opcode listing, virtual call stack, and scope chain
set_vmasm_breakpoint - Set a breakpoint at a vmasm bytecode address
- address (number or string, required): Bytecode address - supports hex string (e.g., "0x0000", "0x100") or decimal (e.g., 0, 256)
- Note: Requires a vmasm file to be loaded first
list_vmasm_breakpoints - List all active vmasm breakpoints
- No parameters
remove_vmasm_breakpoint - Remove a vmasm breakpoint by its ID
- breakpointId (string, required): The breakpoint ID to remove (e.g., "vmasm-bp-1")
clear_vmasm_breakpoints - Remove all vmasm breakpoints
- No parameters
list_console_messages - List console messages
- pageSize (number, optional): Maximum messages to returnpageIdx
- (number, optional): Page number (0-based)types
- (array, optional): Filter by message types (e.g., ["log", "error", "warn"])log
- Available types: , debug, info, error, warn, dir, dirxml, table, trace, clear, assert, issue, etc.includePreservedMessages
- (boolean, optional): Include messages from last 3 navigations (default: false)savePath
- (string, optional): Save messages to file instead of displayingmaxLineLength
- (number, optional): Max characters per line (default: 500)
get_console_message - Get a specific console message by ID
- msgid (number, required): Message ID from list_console_messages
evaluate_script - Evaluate JavaScript code in the page context
- script (string, required): JavaScript code to executemaxOutputChars
- (number, optional): Maximum characters in the output (default: 10000)
| Option | Description | Default |
|--------|-------------|---------|
| --cdp-url | CDP URL to connect to a running Chrome instance | http://127.0.0.1:9222 |--browser-url
| | Connect to a debuggable Chrome instance | - |--ws-endpoint
| | WebSocket endpoint for Chrome connection | - |--headless
| | Run Chrome in headless mode | false |--executable-path
| | Path to custom Chrome executable | - |--viewport
| | Initial viewport size (e.g., 1280x720) | - |--user-data-dir
| | Chrome user data directory | - |--channel
| | Chrome channel (stable, beta, dev, canary) | stable |--isolated
| | Use temporary user data directory | false |--no-sandbox
| | Disable Chrome sandboxes (for Docker) | false |--proxy-server
| | Proxy server configuration | - |--proxy-username
| | Proxy authentication username | - |--proxy-password
| | Proxy authentication password | - |--log-file
| | Path to save debug logs | - |--no-category-emulation
| | Disable emulation tools | - |--no-category-network
| | Disable network tools | - |
Connect to an existing Chrome instance:
`bash`
npx @reverse-craft/rc-devtools-mcp@latest --browser-url http://127.0.0.1:9222
Run in headless mode:
`bash`
npx @reverse-craft/rc-devtools-mcp@latest --headless
Use Chrome Canary:
`bash`
npx @reverse-craft/rc-devtools-mcp@latest --channel canary
Set viewport size:
`bash`
npx @reverse-craft/rc-devtools-mcp@latest --viewport 1920x1080
Use with proxy:
`bash``
npx @reverse-craft/rc-devtools-mcp@latest --proxy-server http://proxy.example.com:8080
- Node.js 20.19.0+, 22.12.0+, or 23+
- Chrome/Chromium browser (automatically managed or custom installation)
Apache-2.0