Skip to content
Agentmart
Submit a tool

Metro MCP

MCP server for React Native/Expo runtime debugging, inspection, and automation via Metro/CDP

Connector by steve228uk · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)★ 85
Write a review

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/steve228uk-metro-mcp

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

MCP server for React Native/Expo runtime debugging, inspection, and automation via Metro/CDP

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.

Tools
58 read · 14 write · 11 delete · 5 not yet classified
Secrets
None asked for
Install scripts
None found
Runs as
Node.js package

Tools by what they do 88

Read from the source code; the running server may list different tools.

Read 58 · Look things up without changing anything.

  • audit_accessibility
  • check_element_accessibility
  • find_components
  • generate_test_from_recording
  • generate_wdio_config
  • get_accessibility_summary
  • get_all_storage
  • get_app_directories
  • get_app_info
  • get_build_info
  • get_bundle_errors
  • get_component_tree
Show 46 more tools
  • get_connection_status
  • get_console_logs
  • get_current_route
  • get_env_vars
  • get_errors
  • get_expo_config
  • get_file_info
  • get_flamegraph
  • get_memory_info
  • get_native_logs
  • get_navigation_state
  • get_network_requests
  • get_network_stats
  • get_platform_constants
  • get_profile_status
  • get_react_renders
  • get_redux_actions
  • get_redux_state
  • get_request_details
  • get_response_body
  • get_route_history
  • get_screen_orientation
  • get_storage_item
  • get_storage_keys
  • get_testable_elements
  • inspect_at_point
  • inspect_component
  • list_commands
  • list_debug_globals
  • list_devices
  • list_directory
  • list_elements
  • list_permissions
  • list_routes
  • list_simulators
  • list_test_recordings
  • list_url_schemes
  • load_test_recording
  • profile_action
  • read_file
  • search_network
  • symbolicate
  • take_screenshot
  • wait_for_condition
  • wait_for_element
  • wait_for_navigation

Write 14 · Create, change, send or run things.

  • add_recording_annotation
  • long_press
  • press_button
  • save_test_recording
  • setup_statusline
  • start_heap_sampling
  • start_profiling
  • start_test_recording
  • stop_heap_sampling
  • stop_profiling
  • stop_test_recording
  • swipe
Show 2 more tools
  • tap_element
  • type_text

Delete 11 · Delete, drop, revoke or wipe things.

  • app_lifecycle
  • clear_console_logs
  • clear_errors
  • clear_network_requests
  • delete_file
  • evaluate_js
  • grant_permission
  • install_certificate
  • reset_permissions
  • revoke_permission
  • run_command

Not yet classified 5 · We could not tell from the name and description.

  • dispatch_redux_action
  • open_app_settings
  • open_deeplink
  • open_devtools
  • reload_app

Network hosts it talks to 5

  • api.github.com · found in code
  • github.com · found in code
  • metromcp.dev · found in code
  • webdriver.io · found in code
  • wix.github.io · found in code

Files it touches

  • /tmp/metro-mcp-status.json
  • Your home directory (~)

Tools (88)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • add_recording_annotation

    Add a human-readable annotation (comment marker) to the current recording. Useful for labelling major flow checkpoints like "reached checkout", "error appeared here", "navigated to payment". Annotations appear as code comments in generated tests.

  • app_lifecyclecan change or delete data

    Launch, terminate, install, or uninstall an app on the simulator/emulator.

  • audit_accessibilityread-only

    Audit the current screen within bounded Fiber traversal limits. Checks labels, roles, testIDs, and alt text; returns issues, summary, and traversal coverage.

  • check_element_accessibilityread-only

    Check accessibility properties of a specific component by name or testID.

  • clear_console_logscan change or delete data

    Clear the console log buffer.

  • clear_errorscan change or delete data

    Clear the error buffer.

  • clear_network_requestscan change or delete data

    Clear the network request buffer.

  • delete_filecan change or delete data

    Delete a file from the app sandbox. Requires confirm: true to prevent accidental deletion.

  • dispatch_redux_action

    Dispatch a Redux action to the store.

  • evaluate_jscan change or delete data

    Execute a JavaScript expression in the running React Native app and return the result. Use this for inspecting variables, calling functions, or querying app state.

  • find_componentsread-only

    Search for components by name inside the app runtime. Check traversal.complete before treating no matches as definitive.

  • generate_test_from_recordingread-only

    Convert the most recent recording into a test file. Supports three formats: appium (WebdriverIO + Mocha), maestro (YAML), and detox (Jest). Call stop_test_recording first.

  • generate_wdio_configread-only

    Generate a minimal but runnable wdio.conf.ts for Appium + React Native testing, along with the npm install command.

  • get_accessibility_summaryread-only

    Quick overview: counts of elements with and without proper accessibility props.

  • get_all_storageread-only

    Dump all AsyncStorage key-value pairs.

Show 73 more tools
  • get_app_directoriesread-only

    Get known app sandbox directory paths (documents, cache, temp, library). Returns absolute paths usable with list_directory and read_file.

  • get_app_inforead-only

    Get information about the connected React Native app (bundle URL, platform, device name).

  • get_build_inforead-only

    Return build-time and runtime flags for the running React Native app: __DEV__, platform, OS version, RN version, Hermes engine, New Architecture, and expo-application fields if available.

  • get_bundle_errorsread-only

    Get recent Metro compilation/transform errors.

  • get_component_treeread-only

    Get a paged flat React component tree. Follow nextCursor to complete the snapshot and check traversal.complete before treating an empty page as authoritative.

  • get_connection_statusread-only

    Check the connection status to Metro bundler.

  • get_console_logsread-only

    Get recent console output. Filter by level or search text.

  • get_current_routeread-only

    Get the currently focused route name and params.

  • get_env_varsread-only

    Return a filtered subset of process.env from the running app. Credential-like keys (SECRET, KEY, TOKEN, PASSWORD, etc.) are redacted by default. Use filter to search by key name substring.

  • get_errorsread-only

    Get recent uncaught exceptions from the React Native app.

  • get_expo_configread-only

    Return expo-constants manifest/expoConfig fields if the app uses Expo, otherwise null.

  • get_file_inforead-only

    Get file or directory metadata: size, modification date, and whether it is a directory.

  • get_flamegraphread-only

    Return the current profiling results as a human-readable text chart. Shows React DevTools component profile (if captured), CPU flamegraph (if CDP profile captured), and React render data from <Profiler> components (if set up). Call stop_profiling first to populate the profile data.

  • get_memory_inforead-only

    Get current JavaScript heap memory usage from the running app. Returns used heap, total heap, and heap size limit (when available). Call repeatedly to track memory growth over time or to detect leaks.

  • get_native_logsread-only

    Get native platform logs from iOS simulator (syslog) or Android device (logcat).

  • get_navigation_stateread-only

    Get the full React Navigation / Expo Router state tree including current route, params, and stack history.

  • get_network_requestsread-only

    Get recent network requests from the React Native app.

  • get_network_statsread-only

    Get aggregated network statistics: breakdown by domain, status code, and response times.

  • get_platform_constantsread-only

    Return the full Platform.constants object from React Native, including OS-specific build details.

  • get_profile_statusread-only

    Check whether profiling is active, which mode is in use, and whether a previous profile is available.

  • get_react_rendersread-only

    Read React render timing data collected via <Profiler onRender={trackRender}>. Returns all recorded renders sorted by actualDuration descending, with memoization savings from baseDuration. Requires importing trackRender from metro-mcp/client. Use clear=true to reset the buffer.

  • get_redux_actionsread-only

    Get recent Redux actions (requires metro-mcp client SDK for real-time tracking).

  • get_redux_stateread-only

    Get the current Redux state tree or a specific slice. Works without client SDK if Redux DevTools extension is present or store is exposed globally.

  • get_request_detailsread-only

    Get full details of a specific network request including headers and body.

  • get_response_bodyread-only

    Get response body for a network request (cached if small; requires active session if large).

  • get_route_historyread-only

    Get the navigation back stack / history.

  • get_screen_orientationread-only

    Get the current screen orientation of the device.

  • get_storage_itemread-only

    Read a specific AsyncStorage key value.

  • get_storage_keysread-only

    List all AsyncStorage keys in the React Native app.

  • get_testable_elementsread-only

    Get elements with testID or accessibilityLabel. Check traversal.complete before treating an empty elements array as definitive.

  • grant_permissioncan change or delete data

    Grant a permission to the app on the connected iOS simulator or Android emulator.

  • inspect_at_pointread-only

    Inspect the smallest measured host component at screen coordinates. Uses awaited Fabric/Paper measurement and returns traversal completeness metadata.

  • inspect_componentread-only

    Get props, state, and hooks for the first exact component-name match, with traversal completeness metadata.

  • install_certificatecan change or delete data

    Install a root certificate on the iOS simulator or Android device.

  • list_commandsread-only

    List all custom commands registered by the app. Commands are registered on global.__METRO_BRIDGE__.commands or global.__METRO_BRIDGE_COMMANDS__.

  • list_debug_globalsread-only

    Auto-discover well-known global debugging objects (Redux stores, Apollo Client, Expo Router, React DevTools hook, etc.) available in the app runtime.

  • list_devicesread-only

    List connected devices and debuggable targets from Metro bundler.

  • list_directoryread-only

    List files and directories in an app sandbox path. Call get_app_directories first to obtain the root path.

  • list_elementsread-only

    Get labelled or interactive elements from the focused React screen. Check traversal.complete before treating an empty elements array as definitive.

  • list_permissionsread-only

    List all app permission statuses on the connected iOS simulator or Android emulator. Returns compact text: one name=status line per permission.

  • list_routesread-only

    List registered route names from available navigation state. Uninitialized nested navigators are not discoverable.

  • list_simulatorsread-only

    List available iOS simulators or Android emulators.

  • list_test_recordingsread-only

    List all previously saved test recordings in ~/.metro-mcp/recordings/. Returns filenames and sizes. Use load_test_recording to load one for test generation.

  • list_url_schemesread-only

    List URL schemes registered by an installed iOS app or Android package.

  • load_test_recordingread-only

    Load a previously saved recording from disk and make it available for test generation. After loading, call generate_test_from_recording with any format to regenerate the test. Use list_test_recordings to see available files.

  • long_press

    Long press using a React handler by label/testID, then semantic native input through SimView or IDB when the handler is unavailable. Explicit coordinates use native input directly; native results identify the backend and dispatch state.

  • open_app_settings

    Open the connected app's system settings page using React Native Linking.openSettings().

  • open_deeplink

    Open a URL or deep link on the connected iOS simulator or Android device.

  • open_devtools

    Open the React Native DevTools debugger panel in Chrome. Connects through the CDP proxy so DevTools and the MCP can share the same Hermes connection.

  • press_button

    Press a device button (HOME, BACK, VOLUME_UP, etc.).

  • profile_actionread-only

    Profile a specific JavaScript expression or code path in a single call. Starts profiling, evaluates the expression, waits for it to complete (plus optional extra duration), then stops and returns the top functions by self time. Use instead of calling start_profiling / stop_profiling manually for focused measurements.

  • read_fileread-only

    Read the contents of a file from the app sandbox. Enforces a configurable size cap (default 50 KB, max 1 MB) to avoid flooding context.

  • reload_app

    Reload the connected app and verify a fresh runtime. Uses Page.reload, with a directed Metro message fallback only for a verified app/device peer.

  • reset_permissionscan change or delete data

    Reset one or all permissions for the app on the connected iOS simulator or Android emulator. On iOS, omitting service resets all services. On Android, omitting service resets all runtime permissions.

  • revoke_permissioncan change or delete data

    Revoke a permission from the app on the connected iOS simulator or Android emulator.

  • run_commandcan change or delete data

    Execute a custom command registered by the app. Pass parameters as a JSON object.

  • save_test_recording

    Save the current recording events to disk as JSON so they can be reloaded later. Useful for regenerating the same flow in a different test format without re-recording. Files are saved to ~/.metro-mcp/recordings/<filename>.json.

  • search_networkread-only

    Search network requests by URL pattern, method, or status code.

  • setup_statusline

    Writes the Metro CDP connection status script to ~/.claude/metro-mcp-statusline.sh. Does not modify settings.json — tell the user to add it to their status line themselves (e.g. ask Claude: "/statusline add the script at ~/.claude/metro-mcp-statusline.sh"). Only works with Claude Code.

  • start_heap_sampling

    Start Hermes heap allocation sampling via CDP HeapProfiler. Records memory allocation call stacks to identify where objects are being allocated. Call stop_heap_sampling to retrieve the top allocation sites.

  • start_profiling

    Start profiling the running React Native app. Primary path: injects into the React DevTools hook (__REACT_DEVTOOLS_GLOBAL_HOOK__) via evalInApp — captures all component render durations without requiring <Profiler> wrappers, works on all architectures. Fallback (legacy arch only): CDP Profiler domain for JS CPU call-graph sampling. Perform the interaction you want to measure, then call stop_profiling.

  • start_test_recording

    Inject interaction interceptors into the running app via the React fiber tree. Captures taps, text entry, long presses, keyboard submits, and scroll/swipe gestures — with no changes to your app code. Works with ScrollView, FlatList, SectionList, FlashList, and other scroll containers. Call stop_test_recording when done, then generate_test_from_recording to get the test.

  • stop_heap_sampling

    Stop heap allocation sampling and return the top allocation sites. Shows which functions are allocating the most memory, useful for diagnosing memory leaks. Must call start_heap_sampling first.

  • stop_profiling

    Stop profiling and return an analysis of the captured data. DevTools hook mode: returns top components by total render duration across all commits. CDP mode: returns top JS functions by self time and total time. Must call start_profiling first.

  • stop_test_recording

    Stop the active recording, retrieve all captured events, and store them for test generation. Returns a summary of what was recorded. Call generate_test_from_recording next to produce Appium, Maestro, or Detox test code.

  • swipe

    Scroll through React, then use installed SimView or IDB on iOS and the selected ADB serial on Android. Native results identify the backend and dispatch state.

  • symbolicateread-only

    Symbolicate a stack trace using Metro bundler source maps. Converts minified/bundled locations back to original source files.

  • take_screenshot

    Capture a screenshot from the connected iOS simulator or Android device.

  • tap_element

    Tap by label, testID, or logical device-point coordinates. Uses React handlers, then installed SimView or IDB on iOS and adb on Android. Coordinates use native input directly; native results identify the backend and dispatch state.

  • type_text

    Type text into an input field. Targets a specific input by testID/label, or the first visible TextInput. Uses the React handler first, then SimView or IDB on iOS and the selected ADB serial on Android.

  • wait_for_conditionread-only

    Poll a JavaScript expression in the app until it returns a truthy value, then return that value. Useful for waiting on state changes, loading flags, API responses, or any async condition. Example: wait for globalThis.myStore?.isLoaded === true.

  • wait_for_elementread-only

    Poll the component tree until an element matching the given testID or accessibilityLabel appears. Returns element info on success. Use after tap_element, navigate(), or any action that triggers async screen transitions or data loading — instead of immediately calling the next tool. Returns traversal metadata immediately when the bounded search is incomplete.

  • wait_for_navigationread-only

    Poll the active navigation route until it matches the expected route name, then return. Requires the navigation plugin to be set up (get_current_route must work). Use after tap_element on a link or after dispatching a navigate() action.

Signals

Stars
85
Forks
8
Open issues
2
Contributors
6
Last commit
Sep 4, 2026 (1 month ago)
Last release
Sep 4, 2026 (1 month ago)

From GitHub (fetched Oct 24, 2026).

Details

Registry name
io.github.steve228uk/metro-mcp
Version
0.15.0
Auth
No auth
Packages
npm metro-mcp
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026
Cite this page

Metro MCP. Agent Mart. https://agentmart.dev/connectors/steve228uk-metro-mcp (last updated 2026-10-24)