io.github.steve228uk/metro-mcp · version 0.15.0 · 3,186 weekly npm downloads · audited 2026-11-03
Notes
No hidden-instruction or invisible-character findings in any tool, prompt, or resource description.
Checks the directory's published tool requirements that are visible from tools/list. Passing them does not guarantee acceptance.
run_commanddelete_fileget_request_detailsdelete_fileNot a vulnerability by itself. It tells you what an injected prompt could ask this server to do, so you can decide which tools need approval.
| Name | Title | Hint | Description |
|---|---|---|---|
get_console_logs | read-only | Get recent console output. Filter by level or search text. | |
clear_console_logs | destructive | Clear the console log buffer. | |
get_network_requests | read-only | Get recent network requests from the React Native app. | |
get_request_details | read-only | Get full details of a specific network request including headers and body. | |
get_response_body | read-only | Get response body for a network request (cached if small; requires active session if large). | |
search_network | read-only | Search network requests by URL pattern, method, or status code. | |
clear_network_requests | destructive | Clear the network request buffer. | |
get_network_stats | read-only | Get aggregated network statistics: breakdown by domain, status code, and response times. | |
get_errors | read-only | Get recent uncaught exceptions from the React Native app. | |
clear_errors | destructive | Clear the error buffer. | |
get_bundle_errors | read-only | Get recent Metro compilation/transform errors. | |
evaluate_js | destructive | 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. | |
list_devices | read-only | List connected devices and debuggable targets from Metro bundler. | |
get_app_info | read-only | Get information about the connected React Native app (bundle URL, platform, device name). | |
get_connection_status | read-only | Check the connection status to Metro bundler. | |
reload_app | none | 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. | |
symbolicate | read-only | Symbolicate a stack trace using Metro bundler source maps. Converts minified/bundled locations back to original source files. | |
get_redux_state | read-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. | |
dispatch_redux_action | none | Dispatch a Redux action to the store. | |
get_redux_actions | read-only | Get recent Redux actions (requires metro-mcp client SDK for real-time tracking). | |
get_component_tree | read-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. | |
find_components | read-only | Search for components by name inside the app runtime. Check traversal.complete before treating no matches as definitive. | |
inspect_component | read-only | Get props, state, and hooks for the first exact component-name match, with traversal completeness metadata. | |
get_testable_elements | read-only | Get elements with testID or accessibilityLabel. Check traversal.complete before treating an empty elements array as definitive. | |
get_storage_keys | read-only | List all AsyncStorage keys in the React Native app. | |
get_storage_item | read-only | Read a specific AsyncStorage key value. | |
get_all_storage | read-only | Dump all AsyncStorage key-value pairs. | |
take_screenshot | none | Capture a screenshot from the connected iOS simulator or Android device. | |
list_simulators | read-only | List available iOS simulators or Android emulators. | |
install_certificate | destructive | Install a root certificate on the iOS simulator or Android device. | |
get_native_logs | read-only | Get native platform logs from iOS simulator (syslog) or Android device (logcat). | |
app_lifecycle | destructive | Launch, terminate, install, or uninstall an app on the simulator/emulator. | |
get_screen_orientation | read-only | Get the current screen orientation of the device. | |
open_deeplink | none | Open a URL or deep link on the connected iOS simulator or Android device. | |
list_url_schemes | read-only | List URL schemes registered by an installed iOS app or Android package. | |
list_permissions | read-only | List all app permission statuses on the connected iOS simulator or Android emulator. Returns compact text: one name=status line per permission. | |
grant_permission | destructive | Grant a permission to the app on the connected iOS simulator or Android emulator. | |
revoke_permission | destructive | Revoke a permission from the app on the connected iOS simulator or Android emulator. | |
reset_permissions | destructive | 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. | |
open_app_settings | none | Open the connected app's system settings page using React Native Linking.openSettings(). | |
list_elements | read-only | Get labelled or interactive elements from the focused React screen. Check traversal.complete before treating an empty elements array as definitive. | |
tap_element | none | 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 disp… | |
type_text | none | 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. | |
long_press | none | 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… | |
swipe | none | 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. | |
press_button | none | Press a device button (HOME, BACK, VOLUME_UP, etc.). | |
get_navigation_state | read-only | Get the full React Navigation / Expo Router state tree including current route, params, and stack history. | |
get_current_route | read-only | Get the currently focused route name and params. | |
get_route_history | read-only | Get the navigation back stack / history. | |
list_routes | read-only | List registered route names from available navigation state. Uninitialized nested navigators are not discoverable. | |
audit_accessibility | read-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_accessibility | read-only | Check accessibility properties of a specific component by name or testID. | |
get_accessibility_summary | read-only | Quick overview: counts of elements with and without proper accessibility props. | |
list_commands | read-only | List all custom commands registered by the app. Commands are registered on global.__METRO_BRIDGE__.commands or global.__METRO_BRIDGE_COMMANDS__. | |
run_command | destructive | Execute a custom command registered by the app. Pass parameters as a JSON object. | |
start_test_recording | none | 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 ScrollVie… | |
stop_test_recording | writes | 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. | |
generate_test_from_recording | read-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_config | read-only | Generate a minimal but runnable wdio.conf.ts for Appium + React Native testing, along with the npm install command. | |
add_recording_annotation | none | 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 co… | |
save_test_recording | none | 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… | |
load_test_recording | read-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 fi… | |
list_test_recordings | read-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. | |
start_profiling | none | 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> wrapp… | |
stop_profiling | writes | 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 cal… | |
get_profile_status | read-only | Check whether profiling is active, which mode is in use, and whether a previous profile is available. | |
get_flamegraph | read-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 se… | |
get_react_renders | read-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 … | |
get_memory_info | read-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. | |
profile_action | read-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 sel… | |
start_heap_sampling | none | 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. | |
stop_heap_sampling | writes | 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. | |
wait_for_element | read-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 o… | |
wait_for_condition | read-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.myS… | |
wait_for_navigation | read-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 na… | |
setup_statusline | none | 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… | |
list_debug_globals | read-only | Auto-discover well-known global debugging objects (Redux stores, Apollo Client, Expo Router, React DevTools hook, etc.) available in the app runtime. | |
inspect_at_point | read-only | Inspect the smallest measured host component at screen coordinates. Uses awaited Fabric/Paper measurement and returns traversal completeness metadata. | |
open_devtools | none | 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. | |
get_app_directories | read-only | Get known app sandbox directory paths (documents, cache, temp, library). Returns absolute paths usable with list_directory and read_file. | |
list_directory | read-only | List files and directories in an app sandbox path. Call get_app_directories first to obtain the root path. | |
read_file | read-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. | |
get_file_info | read-only | Get file or directory metadata: size, modification date, and whether it is a directory. | |
delete_file | destructive | Delete a file from the app sandbox. Requires confirm: true to prevent accidental deletion. | |
get_build_info | read-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_env_vars | read-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_platform_constants | read-only | Return the full Platform.constants object from React Native, including OS-specific build details. | |
get_expo_config | read-only | Return expo-constants manifest/expoConfig fields if the app uses Expo, otherwise null. |
npx mcpvetter scan --liveAdd this to a README:
[](https://mcpvetter.com/servers/metro-mcp)Get the MCPVetter verified badge, a re-audit within 24 hours of every npm release, and an email whenever tools, findings, or Claude directory readiness change. $29 per server per month. You prove ownership first, free.