Full setup instructions for every supported client, plus platform (Android / iOS) requirements. For a one-line Claude Code install, see the README quick start.
No installation required — every client below uses npx to fetch the latest version on demand. Pick your agent:
- Claude Code · Claude Desktop · Codex CLI · Cursor · VS Code Copilot · Windsurf · Zed · Gemini CLI
After adding the server, fully restart the client (quit and relaunch, not just reload) so it picks up the new configuration.
The npm package was previously published as react-native-ai-devtools and before that as react-native-ai-debugger. Both legacy names continue to receive identical builds via mirror-publish — existing installations and MCP configs keep working unchanged. New installs should use execbro.
# Project-specific (recommended) — writes .mcp.json, commit it for the team
claude mcp add execbro --scope project -- npx -y execbro@latest
# Global (all projects)
claude mcp add execbro --scope user -- npx -y execbro@latestPrefer project scope. ExecBro does nothing without a Metro server, so a global registration starts it in every session you open, including backend and web repos where there is no simulator to talk to.
Or edit ~/.claude.json (user) / .mcp.json (project) manually:
{
"mcpServers": {
"execbro": {
"type": "stdio",
"command": "npx",
"args": ["-y", "execbro@latest"]
}
}
}Edit the config at:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"execbro": {
"command": "npx",
"args": ["-y", "execbro@latest"]
}
}
}You can also open this file from Settings → Developer → Edit Config. Fully quit and relaunch Claude Desktop after saving.
codex mcp add execbro -- npx -y execbro@latestOr edit ~/.codex/config.toml directly:
[mcp_servers.execbro]
command = "npx"
args = ["-y", "execbro@latest"]Docs. Add via Cmd+Shift+P → "View: Open MCP Settings", or edit .cursor/mcp.json (project) / ~/.cursor/mcp.json (global):
{
"mcpServers": {
"execbro": {
"command": "npx",
"args": ["-y", "execbro@latest"]
}
}
}Requires VS Code 1.102+ with Copilot (docs). Add via Cmd+Shift+P → "MCP: Add Server", or edit .vscode/mcp.json:
{
"servers": {
"execbro": {
"type": "stdio",
"command": "npx",
"args": ["-y", "execbro@latest"]
}
}
}Docs. Edit ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"execbro": {
"command": "npx",
"args": ["-y", "execbro@latest"]
}
}
}Docs. Open the Agent Panel settings → "Add Custom Server", or add to settings.json:
{
"context_servers": {
"execbro": {
"command": "npx",
"args": ["-y", "execbro@latest"],
"env": {}
}
}
}Edit ~/.gemini/settings.json (user) or .gemini/settings.json (project):
{
"mcpServers": {
"execbro": {
"command": "npx",
"args": ["-y", "execbro@latest"]
}
}
}Android works out of the box — all device control tools use ADB, which ships with Android Studio. Verify it's available:
adb devicesiOS UI automation tools (tap, swipe, text input, accessibility queries) require a UI driver. Install one of the following:
Option A: AXe CLI (default)
AXe is a standalone CLI for iOS simulator automation. No daemon required — single binary, simple setup. Used by default; no IOS_DRIVER env var needed.
brew install cameroncooke/axe/axeVerify: axe --version
Note: AXe text input only supports US keyboard layout characters.
Option B: IDB (alternative)
IDB (iOS Development Bridge) is a tool built by Meta for automating iOS Simulators. Requires a background daemon. Use this if you prefer IDB or hit AXe limitations.
brew install idb-companionVerify: idb_companion --list 1
Opt in by setting IOS_DRIVER=idb in your MCP server configuration:
{
"mcpServers": {
"execbro": {
"type": "stdio",
"command": "npx",
"args": ["-y", "execbro@latest"],
"env": { "IOS_DRIVER": "idb" }
}
}
}What works without a UI driver:
| Capability | Without AXe/IDB | With AXe/IDB |
|---|---|---|
| Screenshots | Yes (simctl) | Yes |
| App install/launch/terminate | Yes (simctl) | Yes |
| URL opening | Yes (simctl) | Yes |
| Boot simulator | Yes (simctl) | Yes |
| Tap / swipe / gestures | No | Yes |
| Pinch to zoom (multi-touch) | No | No * |
| Text input | No | Yes |
| Accessibility tree queries | No | Yes |
| Element finding / waiting | No | Yes |
| Hardware buttons (Home, Lock) | No | Yes |
* pinch is Android emulator only — iOS support is in progress. Neither AXe nor IDB exposes multi-touch: both drivers are strictly single-pointer, so installing one does not enable pinch on the simulator.
Troubleshooting: If you see errors like
"IDB is not installed"or"AXe is not installed"in tap results, install the appropriate driver with the commands above and retry.
ios_screenshot can capture a USB-attached iPhone or iPad. This is capture only: no tapping, swiping or text input, because iOS exposes no touch injection to a host below iOS 17 and ExecBro does not implement the iOS 17+ path yet.
Install the transport. There is no Homebrew formula for it, and plain pip install is refused on
current macOS (externally-managed-environment), so install it as an isolated CLI tool:
brew install pipx
pipx install pymobiledevice3If you already use uv, uv tool install pymobiledevice3 does the same
thing. Both land the binary in ~/.local/bin, which ExecBro checks directly — so it works even when
your MCP client is launched from the GUI and does not inherit your shell PATH.
Then mount the DeveloperDiskImage once per device. pymobiledevice3 mounter auto-mount is the documented route but fails on a stock machine — it tries to write into a root-owned Xcode directory — so mount Xcode's existing image instead:
X=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/15.5
pymobiledevice3 mounter mount-developer \
"$X/DeveloperDiskImage.dmg" "$X/DeveloperDiskImage.dmg.signature"Pick the directory closest to your device's iOS version; a 15.5 image mounts fine on a 15.8 device. Verify with pymobiledevice3 mounter list.
The device then appears in list_devices under "iOS physical", and ios_screenshot accepts its UDID or name:
ios_screenshot with udid="fdc2d1b5937ce66..."
ios_screenshot with udid="Ihor"
Without pymobiledevice3 installed, list_devices simply shows no physical devices and a direct capture attempt tells you what to install.