Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| scan_metro | Scan for running Metro bundler servers and automatically connect to any found React Native apps. This is typically the FIRST tool to call when starting a debugging session - it establishes the connection needed for other tools like get_logs, execute_in_app, and reload_app. |
| get_apps | List currently connected React Native apps and their connection status. If no apps are connected, run scan_metro first to establish a connection. |
| get_connection_status | Get detailed connection health status including uptime, recent disconnects/reconnects, and connection gaps that may indicate missing data. |
| ensure_connection | Verify or establish a healthy connection to a React Native app. Use before running commands if connection may be stale, or after navigation/reload. This tool runs a health check and will auto-reconnect if needed. |
| get_logs | Retrieve console logs from connected React Native app. Tip: Use summary=true first for a quick overview (counts by level + last 5 messages), then fetch specific logs as needed. |
| search_logs | Search console logs for text (case-insensitive) |
| clear_logs | Clear the log buffer |
| connect_metro | Connect to a Metro server on a specific port. Use this when you know the exact port, otherwise use scan_metro which auto-detects. Establishes the WebSocket connection needed for debugging tools. |
| execute_in_app | Execute JavaScript code in the connected React Native app and return the result. Use this for REPL-style interactions, inspecting app state, or running diagnostic code. Hermes compatible: 'global' is automatically polyfilled to 'globalThis', so both global.REDUX_STORE and globalThis.REDUX_STORE work. |
| list_debug_globals | List globally available debugging objects in the connected React Native app (Apollo Client, Redux store, React DevTools, etc.). Use this to discover what state management and debugging tools are available. |
| inspect_global | Inspect a global object to see its properties, types, and whether they are callable functions. Use this BEFORE calling methods on unfamiliar objects to avoid errors. |
| get_component_tree | Get the React component tree from the running app. RECOMMENDED: Use focusedOnly=true with structureOnly=true for a token-efficient overview of just the active screen (~1-2KB). This skips navigation wrappers and global overlays, showing only what's actually visible. |
| get_screen_layout | Get layout information for all components on screen. USE AFTER get_component_tree: First use get_component_tree(structureOnly=true) to understand structure, then use this tool OR find_components with includeLayout=true to get layout details for specific areas. This tool returns full layout data which can be large for complex screens. |
| inspect_component | Inspect a specific React component by name. DRILL-DOWN TOOL: Use after get_component_tree(structureOnly=true) to inspect specific components. Returns props, style, state (hooks), and optionally children tree. Use childrenDepth to control how deep nested children go. |
| find_components | Find components matching a name pattern. TARGETED SEARCH: Use after get_component_tree(structureOnly=true) to find specific components by pattern and get their layout info. More efficient than get_screen_layout for targeted queries. Use includeLayout=true to get padding/margin/flex styles. |
| toggle_element_inspector | Toggle React Native's Element Inspector overlay programmatically. This is the same as manually doing: Dev Menu > Toggle Element Inspector. Useful for enabling inspector features without user interaction. |
| get_inspector_selection | Get the React component at coordinates or read the current Element Inspector selection. If x/y provided: auto-enables inspector, taps at coordinates, returns component hierarchy. If no coordinates: returns current selection. Works in all React Native versions including Fabric. |
| inspect_at_point | Inspect the React component at specific (x, y) coordinates. Works like React Native's Element Inspector. NOTE: This API (getInspectorDataForViewAtPoint) may not be available in newer React Native versions with Fabric. If unavailable, use ios_describe_point/android_describe_point for native element info, then find_components to locate the React component. |
| get_network_requests | Retrieve captured network requests from connected React Native app. Shows URL, method, status, and timing. Tip: Use summary=true first for stats overview (counts by method, status, domain), then fetch specific requests as needed. |
| search_network | Search network requests by URL pattern (case-insensitive) |
| get_request_details | Get full details of a specific network request including headers, body, and timing. Use get_network_requests first to find the request ID. |
| get_network_stats | Get statistics about captured network requests: counts by method, status code, and domain. |
| clear_network | Clear the network request buffer |
| reload_app | Reload the React Native app (triggers JavaScript bundle reload like pressing 'r' in Metro). Will auto-connect to Metro if no connection exists. IMPORTANT: React Native has Fast Refresh enabled by default - code changes are automatically applied without needing reload. Only use when: (1) logs/behavior don't reflect code changes after a few seconds, (2) app is in broken/error state, or (3) need to reset app state completely (navigation stack, context, etc.). |
| get_bundle_status | Get the current Metro bundler status including build state and any recent bundling errors. Use this to check if there are compilation/bundling errors that prevent the app from loading. |
| get_bundle_errors | Retrieve captured Metro bundling/compilation errors. These are errors that occur during the bundle build process (import resolution, syntax errors, transform errors) that prevent the app from loading. If no errors are captured but Metro is running without connected apps, automatically falls back to screenshot+OCR to capture the error from the device screen. |
| clear_bundle_errors | Clear the bundle error buffer |
| list_android_devices | List connected Android devices and emulators via ADB |
| android_screenshot | Take a screenshot from an Android device/emulator. Returns the image data that can be displayed. |
| android_install_app | Install an APK on an Android device/emulator |
| android_launch_app | Launch an app on an Android device/emulator by package name |
| android_list_packages | List installed packages on an Android device/emulator |
| android_tap | Tap at specific coordinates on an Android device/emulator screen. WORKFLOW: Use ocr_screenshot first to get tap coordinates, then use this tool with the returned tapX/tapY values. |
| android_long_press | Long press at specific coordinates on an Android device/emulator screen |
| android_swipe | Swipe from one point to another on an Android device/emulator screen |
| android_input_text | Type text on an Android device/emulator. The text will be input at the current focus point (tap an input field first). |
| android_key_event | Send a key event to an Android device/emulator. Common keys: HOME, BACK, CALL, END_CALL, VOLUME_UP, VOLUME_DOWN, POWER, CAMERA, CLEAR, TAB, ENTER, DEL, MENU, SEARCH, MEDIA_PLAY_PAUSE, MEDIA_STOP, MEDIA_NEXT, MEDIA_PREVIOUS, MOVE_HOME, MOVE_END, APP_SWITCH, ESCAPE |
| android_get_screen_size | Get the screen size (resolution) of an Android device/emulator |
| android_describe_all | Get the full UI accessibility tree from the Android device using uiautomator. Returns a hierarchical view of all UI elements with their text, content-description, resource-id, bounds, and tap coordinates. |
| android_describe_point | Get UI element info at specific coordinates on an Android device. Returns the element's text, content-description, resource-id, bounds, and state flags. |
| android_tap_element | Tap an element by its text, content-description, or resource-id using uiautomator. TIP: Consider using ocr_screenshot first - it returns ready-to-use tap coordinates for all visible text and works more reliably across different apps. |
| android_find_element | Find a UI element on Android screen by text, content description, or resource ID. Returns element details including tap coordinates. Use this to check if an element exists without tapping it. Workflow: 1) wait_for_element, 2) find_element, 3) tap with returned coordinates. Prefer this over screenshots for button taps. |
| android_wait_for_element | Wait for a UI element to appear on Android screen. Polls the accessibility tree until the element is found or timeout is reached. Use this FIRST after navigation to ensure screen is ready, then use find_element + tap. |
| list_ios_simulators | List available iOS simulators |
| ios_screenshot | Take a screenshot from an iOS simulator. Returns the image data that can be displayed. |
| ocr_screenshot | RECOMMENDED: Use this tool FIRST when you need to find and tap UI elements. Takes a screenshot and extracts all visible text with tap-ready coordinates using OCR. ADVANTAGES over accessibility trees: (1) Works on ANY visible text regardless of accessibility labels, (2) Returns ready-to-use tapX/tapY coordinates - no conversion needed, (3) Faster than parsing accessibility hierarchies, (4) Works consistently across iOS and Android. USE THIS FOR: Finding buttons, labels, menu items, tab bars, or any text you need to tap. Simply find the text in the results and use its tapX/tapY with the tap command. |
| ios_install_app | Install an app bundle (.app) on an iOS simulator |
| ios_launch_app | Launch an app on an iOS simulator by bundle ID |
| ios_open_url | Open a URL in the iOS simulator (opens in default handler or Safari) |
| ios_terminate_app | Terminate a running app on an iOS simulator |
| ios_boot_simulator | Boot an iOS simulator by UDID. Use list_ios_simulators to find available simulators. |
| ios_tap | Tap at specific coordinates on an iOS simulator screen. WORKFLOW: Use ocr_screenshot first to get tap coordinates, then use this tool with the returned tapX/tapY values. Requires IDB (brew install idb-companion). |
| ios_tap_element | Tap an element by its accessibility label. Requires IDB (brew install idb-companion). TIP: Consider using ocr_screenshot first - it returns ready-to-use tap coordinates for all visible text and works without requiring accessibility labels. |
| ios_swipe | Swipe gesture on an iOS simulator screen. Requires IDB to be installed (brew install idb-companion). |
| ios_input_text | Type text into the active input field on an iOS simulator. Requires IDB to be installed (brew install idb-companion). |
| ios_button | Press a hardware button on an iOS simulator. Requires IDB to be installed (brew install idb-companion). |
| ios_key_event | Send a key event to an iOS simulator by keycode. Requires IDB to be installed (brew install idb-companion). |
| ios_key_sequence | Send a sequence of key events to an iOS simulator. Requires IDB to be installed (brew install idb-companion). |
| ios_describe_all | Get accessibility information for the entire iOS simulator screen. Returns a nested tree of UI elements with labels, values, and frames. Requires IDB to be installed (brew install idb-companion). |
| ios_describe_point | Get accessibility information for the UI element at a specific point on the iOS simulator screen. Requires IDB to be installed (brew install idb-companion). |
| ios_find_element | Find a UI element on iOS simulator by accessibility label or value. Returns element details including tap coordinates. Requires IDB (brew install idb-companion). Workflow: 1) wait_for_element, 2) find_element, 3) tap with returned coordinates. Prefer this over screenshots for button taps. |
| ios_wait_for_element | Wait for a UI element to appear on iOS simulator. Polls until found or timeout. Requires IDB (brew install idb-companion). Use this FIRST after navigation to ensure screen is ready, then use find_element + tap. |
| get_debug_server | Get the debug HTTP server URL. Use this to find where you can access logs, network requests, and other debug data via HTTP. |
| restart_http_server | Note: HTTP server now runs in-process to share state. To apply code changes, restart the MCP session. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |