Atlas / MCP servers / igorzheludkov / React Native AI Debugger

React Native AI DebuggerBLOCK

mcp/igorzheludkov/react-native-ai-debugger

Gives AI agents eyes and hands into running React Native apps: logs, REPL, tap, screenshots

Verdict
BLOCK
Grade
F
Trust score
50 /100
Exposed tools
4 4r · 0w · 0d
Transport
stdio · streamable-http
License
NOASSERTION
Stars
78
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://registry.modelcontextprotocol.io/?q=com.execbro%2Fexecbro)

Give your AI assistant eyes and hands into your running React Native app. Like Chrome DevTools — but for AI agents.

Build, debug, and verify features end-to-end — without leaving the chat.

ExecBro is the runtime bridge between your AI coding assistant and your running React Native app — exposing MCP tools to read logs and network, inspect component state, capture screenshots, tap the UI, and run JS. Zero config, no SDK or code changes required to start — and installing the optional SDK is recommended for the most robust log and network capture.

Get started

  1. Setup ExecBro as an MCP server for your agent of choice
  2. Setup UI automation helpers
  3. Install the SDK in your React Native app — optional, but recommended for the most robust log, network, and state experience
  4. Authorize and link to the web dashboard — optional, for usage stats and session history
  5. Start your React Native app (npm start / expo start)
  6. Ask your AI assistant in plain language — e.g. "Connect to the simulator and investigate what caused the error on the screen"

See your usage — execbro.com

Log in at [execbro.com](https://execbro.com) to see your ExecBro activity rendered back to you: which tools you use most, tool error rates, and your session history — so you can spot flaky tools, track usage over time, and understand how your agent drives the app across sessions. It's built from the same anonymous telemetry described in [Telemetry & Privacy](#t

Read from source at commit 481463626f36OBSERVED · 2026-10-08
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (npm)
claude mcp add execbro -- npx -y [email protected]
03

Exposed tools (4)

4 read · 0 write · 0 destructive.

ToolRiskDescription
devread
ios_buttonread
lockreadEngage the touch lock
resetPrefsread
04

Trust audit

BLOCKgrade F · trust 50/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (2 observation(s))
Network
declared (10 observation(s))
Shell
none-observed
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
src/pro/chromiumTap.ts:139
skippedReason: "verify=false",
Why it matters. certificate verification is disabled
Fix. leave verification on
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
src/pro/chromiumTap.ts:140
explanation: "Verification skipped (verify=false).",
Why it matters. certificate verification is disabled
Fix. leave verification on
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
src/pro/verifyAction.ts:211
skippedReason: "screenshot=false, verify=false",
Why it matters. certificate verification is disabled
Fix. leave verification on
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
src/pro/verifyAction.ts:212
explanation: "Verification skipped (screenshot=false and verify=false)."
Why it matters. certificate verification is disabled
Fix. leave verification on
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
src/pro/verifyAction.ts:254
skippedReason: "verify=false",
Why it matters. certificate verification is disabled
Fix. leave verification on
HIGHPrivilege escalation / persistence · priv.escalate · CWE-269, CWE-250
src/core/ios.ts:286
"and run `sudo xcode-select -s /Applications/Xcode.app/Contents/Developer`. " +
Why it matters. asks for elevated privileges
MEDIUMFilesystem / path · fs.system_paths · CWE-22, CWE-59
src/core/fingerprint.ts:64
if (existsSync("/etc/machine-id")) {
MEDIUMFilesystem / path · fs.system_paths · CWE-22, CWE-59
src/core/fingerprint.ts:65
return readFileSync("/etc/machine-id", "utf-8").trim();
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
src/core/emulatorGrpc.ts:133
session = http2.connect(`http://127.0.0.1:${bridge.port}`);
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
src/__tests__/unit/emulatorBridge.test.ts:48
bridge: { port: 8554, token: "dG9rZW4rd2l0aC9iYXNlNjQ9", avdName: "Pixel 9" },
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
src/__tests__/unit/httpRequest.test.ts:6
const TOKEN = "opaque-session-id-abcdefgh";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
src/__tests__/unit/redact.test.ts:102
const TOKEN = "opaque-session-id-abcdefgh";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
src/__tests__/unit/vaultCapture.test.ts:10
const TOKEN = "captured-token-abcdefghijkl";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
src/core/posthog.ts:6
const apiKey = "phc_snUX9TpjAwNhosPMxAY7D89ijESyrQzucAi9qbPJptPY";
MEDIUMHard-coded secrets · secret.stripe · CWE-798, CWE-321
src/__tests__/unit/redact.test.ts:31
expect(redactSecrets("key sk_live_51H8xKzAbCdEfGhIjKlMnOp here")).toContain("[secret:stripe_app]");
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/__tests__/unit/appContext.test.ts:8
const run = new Function("globalThis", source + "; return (" + expr + ");");
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/__tests__/unit/appRequest.test.ts:52
expect(() => new Function("return " + src.replace(/^\(function/, "(function"))).not.toThrow();
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/__tests__/unit/appRequest.test.ts:97
const run = new Function("state", "fetch", "globalThis", "return " + src + ";");
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/__tests__/unit/appRequest.test.ts:184
const run = new Function("state", "fetch", "globalThis", "return " + src + ";");
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/__tests__/unit/chromium.test.ts:78
const parses = (js: string) => () => new Function(`return ${js};`);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/core/electronLaunch.ts:88
return join(logDir, `${basename(cwd)}-${createHash("sha1").update(cwd).digest("hex").slice(0, 8)}.log`);
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/core/jsLogEvents.ts:52
fingerprint: createHash("sha1").update(`js|${entry.seq}`).digest("hex"),
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/core/logEvents.ts:128
if (!head) return createHash("sha1").update(`${deviceKey}|empty`).digest("hex");
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/core/logEvents.ts:140
return createHash("sha1").update(JSON.stringify(parts)).digest("hex");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/__tests__/helpers/mock-harness.ts:2
import { getInterceptorScript, buildMockPushScript } from "../../core/networkInterceptor.js";

Gates applied: no_behavioural_pass.

Audited 2026-10-08 · audit v0.4.1 · source sha 481463626f36full audit observations/trust-audit/mcp-server/igorzheludkov__react-native-ai-debugger.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-08481463626f36BLOCKF50first audit
06

Questions

What is the React Native AI Debugger MCP server?

Gives AI agents eyes and hands into running React Native apps: logs, REPL, tap, screenshots

What tools does React Native AI Debugger expose?

4 in total: 4 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is React Native AI Debugger safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (50/100) and found 6 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does React Native AI Debugger need?

It reads BUILD_TOKEN and BUILD_TOKEN_TARGET from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does React Native AI Debugger run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as execbro at 2.16.1.

How current is this page?

The grade is for one exact copy of the source (481463626f36), read on 2026-10-08. The repository is watched and re-audited when it changes.

Advertisement