Let AI agents see, understand, and interact with your React Native app running on Android emulator or iOS simulator — through a single MCP server. Point your MCP client at this server and an agent can connect to your app, read logs, inspect the UI, tap buttons, type text, scroll, take screenshots, and reload — all without leaving the conversation. - Android + iOS — one server handles both platform
Add this skill
npx mdskills install zersys/rn-debug-mcpComprehensive React Native debugging server with rich UI inspection, testID-first interaction, and multi-platform session management
Let AI agents see, understand, and interact with your React Native app running on Android emulator or iOS simulator — through a single MCP server.
Point your MCP client at this server and an agent can connect to your app, read logs, inspect the UI, tap buttons, type text, scroll, take screenshots, and reload — all without leaving the conversation.
https://github.com/user-attachments/assets/0d5a5235-9c67-4d79-b30f-de0132be06cd
logcat / iOS simctl)testID instead of fragile coordinatesadb on PATHxcrun) and iOS Simulator (for iOS)8081)http://127.0.0.1:8100)npm install -g rn-debug-mcp
Add to your MCP client config:
{
"mcpServers": {
"rn-debug": {
"command": "npx",
"args": ["-y", "rn-debug-mcp"],
"env": {
"WDA_BASE_URL": "http://127.0.0.1:8100"
}
}
}
}
npm install -D rn-debug-mcp
npm run build
Add to your MCP client config:
{
"mcpServers": {
"rn-debug": {
"command": "node",
"args": ["/ABS/PATH/TO/node_modules/rn-debug-mcp/dist/src/index.js"],
"env": {
"WDA_BASE_URL": "http://127.0.0.1:8100"
}
}
}
}
iOS works automatically on first connect_app({ platform: "ios" }). WebDriverAgent sources are cloned and built transparently if not already present.
:8100 (or the configured WDA_BASE_URL), the install/build is skipped entirely.WDA_NO_AUTO_INSTALL=1 to disable automatic installation and require manual setup.WDA_BASE_URL to point to an externally managed WebDriverAgent instance.Install WDA sources manually:
npx --no-install rndmcp install wda
Run WDA standalone:
npm run ios:wda
Optional overrides:
WDA_PROJECT_PATH="/abs/path/to/WebDriverAgent.xcodeproj" npm run ios:wda
WDA_DEVICE_ID="" npm run ios:wda
WDA_DESTINATION='platform=iOS Simulator,name=iPhone 16' npm run ios:wda
connect_app({ platform?, deviceId?, metroPort? })list_sessions({})set_active_session({ sessionId })close_session({ sessionId })get_connection_status({ sessionId? })disconnect_app({ sessionId? })reload_app({ sessionId? })get_logs({ sessionId?, sinceCursor?, limit?, levels?, tags?, sources? })get_errors({ sessionId?, sinceCursor?, limit?, levels?, tags?, sources? })get_network_requests({ sessionId?, sinceCursor?, limit?, phases?, methods?, statuses?, urlContains?, sources? })get_screen_context({ sessionId? })get_ui_tree({ sessionId?, maxDepth?, maxNodes? })get_visible_elements({ sessionId?, maxDepth?, maxNodes?, limit?, clickableOnly?, includeTextless?, skipVisibilityCheck?, testId?, testIdMatch? })get_screen_test_ids({ sessionId?, maxDepth?, maxNodes?, limit?, includeNonClickable?, includeInvisible? })get_elements_by_test_id({ sessionId?, testId, maxDepth?, maxNodes?, limit?, clickableOnly?, includeTextless?, skipVisibilityCheck?, testIdMatch? })get_test_id_remediation_plan({ sessionId?, desiredAction, desiredTestId?, matchMode? })tap({ sessionId?, x, y })tap_element({ sessionId?, elementId, maxDepth?, maxNodes? })type_text({ sessionId?, text, submit? })press_back({ sessionId? })scroll({ sessionId?, direction, distanceRatio?, durationMs? })take_screenshot({ sessionId? })get_elements_by_test_id with testIdMatch: "exact".get_screen_test_ids.get_elements_by_test_id with testIdMatch: "contains".get_screen_contextget_test_id_remediation_planreload_apptap_element from visible candidatestap({ x, y })scroll, press_back, and type_text for navigation/inputtestID naming convention: screen.element.action (example: checkout.submit.button).
connect_app defaults to platform: "android" for backward compatibility.pointX = round(pixelX / scaleFactor)pointY = round(pixelY / scaleFactor)get_elements_by_test_id defaults:
skipVisibilityCheck: true (RN-friendly)clickableOnly: false (broader matching)get_screen_test_ids default: includeInvisible: true.npm run typecheck
npm test
CLI usage:
rndmcp # Start MCP server over stdio
rndmcp install wda # Clone WebDriverAgent into this package
connect_app({ platform: "ios" }) unless WDA_NO_AUTO_INSTALL=1WDA_BASE_URL to an already running WDA, orrndmcp install wda and then npm run ios:wda for manual setupCmd+R keyboard trigger via osascriptInstall via CLI
npx mdskills install zersys/rn-debug-mcpReact Native Debug MCP is a free, open-source AI agent skill. Let AI agents see, understand, and interact with your React Native app running on Android emulator or iOS simulator — through a single MCP server. Point your MCP client at this server and an agent can connect to your app, read logs, inspect the UI, tap buttons, type text, scroll, take screenshots, and reload — all without leaving the conversation. - Android + iOS — one server handles both platform
Install React Native Debug MCP with a single command:
npx mdskills install zersys/rn-debug-mcpThis downloads the skill files into your project and your AI agent picks them up automatically.
React Native Debug MCP works with Claude Code, Claude Desktop, Cursor, Vscode Copilot, Windsurf, Continue Dev, Gemini Cli, Amp, Roo Code, Goose. Skills use the open SKILL.md format which is compatible with any AI coding agent that reads markdown instructions.