Metro MCP

io.github.steve228uk由 GitHub 帳號 steve228uk 發布v0.15.0更新於 Oct 24, 2026

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

已驗證STDIO僅桌面瀏覽器自動化開發者工具

概覽

AI 產生的概覽

一個本機 MCP 伺服器,連接 React Native 或 Expo 應用程式的 Metro 打包服務,用來偵錯、檢視並自動化執行中的應用程式。

可以做什麼
透過 Metro 與 Hermes 的 CDP 連線檢視執行期日誌、網路請求、錯誤、環境與建置旗標,並將堆疊符號化,內建代理可與 Chrome DevTools 同時使用。在應用程式執行時執行 JavaScript,檢視 Redux 狀態、React 元件樹、導覽狀態與 AsyncStorage 內容。控制裝置與模擬器、管理應用程式權限、測試深層連結,並以點擊、滑動與輸入進行 UI 自動化。錄製互動並產生 Appium、Maestro 或 Detox 測試,進行 CPU 與堆積分析以及無障礙稽核。瀏覽並讀取應用程式沙箱目錄中的檔案,並呼叫透過選用應用程式整合註冊的自訂命令。
適用情境
適合在開發、偵錯或測試以 Metro 與 Hermes 為基礎的 React Native 或 Expo 應用程式時使用,讓助理讀取日誌、檢視狀態、操作介面或產生測試,而不需修改應用程式程式碼。
執行需求
透過 npx 或 bunx 在本機執行(Node.js 18+ 或 Bun 1.0+)。需要執行中的 Metro 開發伺服器,應用程式為 React Native 0.70+ 或 Expo SDK 49+ 且使用 Hermes。iOS 需要 Xcode 14+ 與模擬器;Android 需要 Android SDK 且 adb 在 PATH 中;部分 iOS 操作可選用 IDB。選用環境變數 METRO_MCP_PROXY_PORT 與 METRO_MCP_PROXY_ENABLED 可設定 CDP 代理。
安裝前請注意
它會連線到執行中的應用程式,可執行 JavaScript、派送 Redux action、變更權限、重新載入應用程式、自動化介面並讀取應用程式沙箱檔案(包括 SQLite 資料庫),等同對開發版應用程式擁有完整控制權。應用程式中註冊的自訂命令可執行登入或清除已存資料等動作。在 Metro 中按 j 或選擇 Open Debugger 會中斷連線,除非使用代理。選用的狀態列設定會將指令碼寫入使用者家目錄。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Metro MCP,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

metro-mcp

[Install in VS Code] [Install in Cursor]

A plugin-based MCP server for React Native runtime debugging, inspection, and automation. Connects to Metro bundler via Chrome DevTools Protocol — no app code changes needed for most features.

Works with Expo, bare React Native, and any project using Metro + Hermes.


Contents


Quick Start

Claude Code

bash
claude mcp add metro-mcp -- npx -y metro-mcp# or with Bunclaude mcp add metro-mcp -- bunx metro-mcp

Codex

bash
codex mcp add metro-mcp -- npx -y metro-mcp# or with Buncodex mcp add metro-mcp -- bunx metro-mcp

Codex stores MCP servers in ~/.codex/config.toml by default, and the Codex CLI and IDE extension share that configuration.

If you prefer to configure it manually:

toml
[mcp_servers.metro-mcp]command = "npx"args = ["-y", "metro-mcp"]

OpenCode

Run OpenCode's interactive MCP installer:

bash
opencode mcp add

Choose a local server, name it metro-mcp, and use npx -y metro-mcp as the command.

If you prefer to configure it manually, add this to opencode.json in your project, or to ~/.config/opencode/opencode.json for a global install:

json
{  "$schema": "https://opencode.ai/config.json",  "mcp": {    "metro-mcp": {      "type": "local",      "command": ["npx", "-y", "metro-mcp"],      "enabled": true    }  }}

Or with Bun:

json
{  "$schema": "https://opencode.ai/config.json",  "mcp": {    "metro-mcp": {      "type": "local",      "command": ["bunx", "metro-mcp"],      "enabled": true    }  }}

Cursor / VS Code

json
{  "mcpServers": {    "metro-mcp": {      "command": "npx",      "args": ["-y", "metro-mcp"]    }  }}

Or with Bun:

json
{  "mcpServers": {    "metro-mcp": {      "command": "bunx",      "args": ["metro-mcp"]    }  }}

Install across multiple agents

If you use several MCP clients, add-mcp can write the config for supported agents, including Claude Code, Codex, Cursor, OpenCode, and VS Code:

bash
npx add-mcp metro-mcp --all -g -y

metro-mcp supports multiple agents at the same time. Standard stdio installs start or reuse a local shared daemon for the same project directory and Metro/config options, so Codex, Claude Code, Cursor, and other clients can connect concurrently to the same running Metro app and see the same logs, network requests, errors, and runtime state.

Shared HTTP server / Supergateway

If you want to expose one long-lived MCP endpoint yourself, start the shared server explicitly:

bash
npx -y metro-mcp serve --mcp-port 8765

This serves Streamable HTTP at http://127.0.0.1:8765/mcp. The endpoint supports both the 2025-era MCP handshake and the 2026-07-28 negotiation; /sse and /messages are intentionally unavailable. Tools such as supergateway can point at the Streamable HTTP endpoint instead of launching a fresh stdio process per request.

With custom Metro port

bash
codex mcp add metro-mcp -- npx -y metro-mcp --port 19000# orclaude mcp add metro-mcp -- npx -y metro-mcp --port 19000

For OpenCode, add the port to the command array:

json
"command": ["npx", "-y", "metro-mcp", "--port", "19000"]

Requirements

  • Node.js 18+ or Bun 1.0+
  • iOS: Xcode 14+ with Simulator (xcrun simctl is used for most operations)
  • Android: Android SDK with adb on your PATH
  • IDB (optional): Some iOS operations fall back to IDB (idb-companion) — install with brew install idb-companion. Tools will tell you when IDB is needed.

How It Works

metro-mcp connects to your running Metro dev server the same way Chrome DevTools does:

  1. Discovers Metro via port scanning (8081, 8082, 19000–19002)
  2. Connects to Hermes via Chrome DevTools Protocol (CDP)
  3. Streams console logs, network requests, and errors into buffers
  4. Exposes everything as MCP tools, resources, and prompts

No app modifications required for core debugging features.


Features

PluginToolsDescription
console2Console log collection with filtering
network6Network request tracking, response body inspection, and stats
errors3Runtime exception collection + Metro bundle error detection
evaluate1Execute JavaScript in the app runtime
device4Device management, connection status, and app reload
environment4Build flags, platform constants, env vars, and Expo config inspection
source1Stack trace symbolication
redux3Redux state inspection and action dispatch
components5React component tree inspection
storage3AsyncStorage reading
simulator6iOS simulator / Android device control
deeplink2Cross-platform deep link testing
permissions5Inspect and manage app permissions on iOS Simulator and Android Emulator
ui-interact6UI automation (tap, swipe, type)
navigation4React Navigation / Expo Router state
accessibility3Accessibility auditing
commands2Custom app commands
automation3Wait/polling helpers for async state changes
profiler9CPU profiling (React DevTools hook) + heap sampling + render tracking
test-recorder7Record interactions and generate Appium, Maestro, or Detox tests
filesystem5Browse and read files in app sandbox directories (Documents, caches, SQLite DBs)
devtools1Open Chrome DevTools alongside the MCP via CDP proxy
debug-globals1Auto-discover Redux stores, Apollo Client, and other debug globals
inspect-point1Coordinate-based React component inspection (experimental)
statusline1Claude Code status bar integration

→ See the full tools reference.


Chrome DevTools

Hermes (the React Native JavaScript engine) only allows a single CDP debugger connection at a time. Since metro-mcp uses that connection, pressing "j" in Metro or tapping "Open Debugger" in the dev menu will steal the connection and disconnect the MCP.

metro-mcp solves this with a built-in CDP proxy that multiplexes the single Hermes connection, allowing Chrome DevTools and the MCP to work simultaneously.

Opening DevTools

Use the open_devtools MCP tool instead of the usual methods. It opens the same React Native DevTools frontend (rn_fusebox) that Metro uses, but routes the WebSocket connection through the proxy so both can coexist.

The tool automatically finds Chrome or Edge using the same detection as Metro and opens a standalone DevTools window.

What to avoid

MethodWhat happens
Pressing "j" in Metro terminalDisconnects the MCP
"Open Debugger" in the dev menuDisconnects the MCP
open_devtools MCP toolWorks alongside the MCP

Configuration

The CDP proxy is enabled by default. To change the port or disable it:

bash
# Set a fixed proxy portMETRO_MCP_PROXY_PORT=9222 npx metro-mcp
# Disable the proxy entirelyMETRO_MCP_PROXY_ENABLED=false npx metro-mcp

Claude Code Status Bar

Get live Metro CDP connection status in your Claude Code status bar.

Run setup_statusline in Claude Code — it writes a script to ~/.claude/metro-mcp-statusline.sh, then ask Claude to add it to your status bar:

/statusline add the script at ~/.claude/metro-mcp-statusline.sh

The status bar segment shows three states:

StateDisplay
Not runningMetro ○ (dimmed)
Running, not connectedMetro ● (red)
ConnectedMetro ● localhost:8081 (green)

Test Recording

Record real user interactions (taps, text entry, scrolls) and generate production-ready tests — no app code changes required.

AI-driven test generation

Describe a flow and the AI navigates the app, then generates the test:

"Write an Appium test for the guest checkout flow — start by tapping 'Start Shopping' on the welcome screen and end when the cart screen is visible."

The AI calls start_test_recording, navigates using tap_element/type_text/swipe, then generates a complete test with real selectors observed from the fiber tree.

Manual recording

start_test_recording   → inject interceptors(interact with the app)stop_test_recording    → retrieve event loggenerate_test_from_recording format=appium

Supports Appium (WebdriverIO), Maestro YAML, and Detox.

→ See the testing guide for full details, format examples, and tips.


App Integration (Optional)

Register custom commands and expose state to the MCP server — no package needed. Add this to your app entry point in dev mode:

typescript
if (__DEV__) {  globalThis.__METRO_BRIDGE__ = {    commands: {      // Run custom actions from the MCP client      login: async ({ email, password }) => {        return await authService.login(email, password);      },      resetOnboarding: () => {        AsyncStorage.removeItem('onboarding_completed');      },      switchUser: ({ userId }) => {        store.dispatch(switchUser(userId));      },    },    state: {      // Expose state snapshots readable via get_redux_state      userStore: () => useUserStore.getState(),    },  };}

Use list_commands and run_command to call these from the MCP client.

For enhanced features like real-time Redux action tracking, navigation events, performance marks, and React render profiling, install metro-bridge — see the client SDK docs and profiling guide.


Configuration

See configuration docs for environment variables, CLI arguments, and config file options.


Custom Plugins

metro-mcp is fully extensible. See the plugins guide to build your own tools and resources.


Compatibility

  • React Native: 0.70+ (Hermes required)
  • Expo: SDK 49+
  • Runtime: Node.js 18+ or Bun 1.0+
  • Platforms: iOS Simulator, Android Emulator, physical devices via USB

License

MIT

來源:README.md,提交 09b27c7

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.15.0最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分