Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Description from the maker (original English)
Gives AI agents eyes and hands into running React Native apps: logs, REPL, tap, screenshots
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
EXECBRO_API_URLYou need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"execbro": {
"command": "npx",
"args": [
"-y",
"execbro"
],
"env": {
"EXECBRO_API_URL": "your-value"
}
}
}
}Run this in your terminal
claude mcp add execbro --env EXECBRO_API_URL=your-value -- npx -y execbroFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"execbro": {
"command": "npx",
"args": [
"-y",
"execbro"
],
"env": {
"EXECBRO_API_URL": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"execbro": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"execbro"
],
"env": {
"EXECBRO_API_URL": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
EXECBRO_API_URL envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 6, 2026
The registry name was verified against the domain execbro.com (the registry checks domain ownership)
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
The registry does not list a required key, though some servers ask you to sign in on first use.
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (2.19.0) reached the registry 8 days ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.
In the same category: Spec Driven Development, Remote Desktop Commander, Tensorust Ontology
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Who owns and controls US companies, homes and aircraft, and which federal rules apply to them.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
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.
npm start / expo start)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, tied to your installation ID.
Linking is only for the dashboard: it attaches your installs to your account so the stats are yours. Nothing in the tooling is gated behind it.
console.log, warn, error, info, debug with filtering and search. Note: on a cold start (first app launch), logs emitted before the MCP server connects are missed — subsequent reloads capture everything. Install the optional SDK to buffer logs from the very first line of app startup_debugStack via Metro symbolication. Works on React 19, where _debugSource no longer exists. Selections are buffered in the background, so taps you make during a manual inspector session are captured without asking the agent firsttap tool with automatic fallback chain: fiber tree → accessibility → OCR → coordinates. Auto-detects platform, accepts coordinates from screenshots and layout tools unchanged. Returns post-tap screenshot and verifies visual change by defaultswipe tool that auto-routes to iOS or Android based on the connected device. Takes coordinates in the same screen space as the layout tools and screenshots — no conversion — and returns a verification.meaningful signal so agents detect end-of-list, non-scrollable surfaces, and missed coordinates — and on a screen with no React Native connection it says it could not inspect rather than guessing. Essential for scrolling virtualized lists (FlatList/SectionList) where off-screen items aren't in the fiber treepinch tool that sends two genuine kernel touch contacts through the Android emulator's multi-touch bridge, so it zooms maps, galleries, WebViews, and native views alike — it works below the app, not through React Native. Returns the same verification.meaningful signal as swipe, and refuses on unsupported targets instead of faking a resulttap with duration, resolving the target by testID/text/component), key events, and text input on both platforms. input_text targets a field itself and verifies the write by reading it back; on Bridgeless/Fabric apps replace:true overwrites pre-filled values by updating React state through onChangeText, so controlled components (Formik, react-hook-form, useState) stay consistent. native:true types into whatever the OS reports as focused, with no RN connection needed, and dismiss_keyboard operates the same way[secret:auth_api.acme.io]) whether it appears in a network header, a Redux store, a log line or a URL. Credential headers are matched by pattern rather than a fixed list, so vendor-namespaced ones (x-shopify-access-token, x-goog-api-key, x-hasura-admin-secret) are covered too, while x-request-id and x-idempotency-key are deliberately left alone. There is no per-call escape: EXECBRO_REDACT=off is set by a human and needs a restartlist_secrets names the handles; http_request({auth:{secret:"api.acme.io"}}) substitutes the value host-side and issues the request from your machine — as Authorization: Bearer by default, or in a key header or another scheme, so a credential never has to be pasted in to cover an unsupported shape, and vault_capture reads a token out of the app straight into the vault when no captured request revealed one. Each credential is bound to the origin it was observed on and refused elsewhere; the vault is memory-onlyhttp_request runs from the host with none of the app's TLS trust, proxy, cookie jar or mock rules; app_request runs inside the app with all of them. Comparing the two is how you tell a backend bug from a client one — and a 401 from the host where the app succeeds is itself the answer that the backend enforces attestationscan_metro automatically discovers and connects to all Bridgeless targets on each Metro portdevice parameter for targeting specific devices by name (case-insensitive substring match)chromium target alongside your simulators, and every tool takes the same device argumentnetwork_mock, network_condition), execute_in_app, debug globals, Redux, http_request / app_request, React component inspection (get_component_tree, find_components, inspect_component), including on Vite apps whose DevTools hook has no renderers, plus screenshot, tap, input_text, swipe (mouse-wheel scroll, and a real drag with four coordinates) and press_key (Enter, Escape, Tab, arrows, shortcuts). JavaScript dialogs (alert / confirm / prompt / beforeunload) are reported by the tool that opened them instead of timing out, page tools refuse while one is open, and handle_dialog accepts or dismisses it. Taps find elements by data-testid / id, visible text or React component name and click with real CDP mouse events. Screen reading without a screenshot: get_screen_state (tap-ready elements, what an overlay blocks), get_screen_layout, inspect_at_point and measurepinch, navigate and the other mobile-only tools refuse a chromium target with a message saying so, rather than acting on the wrong device. Native HTML5 drag and drop (draggable) and hover are not handled yetelectron_launch_app({ projectPath: "path/to/app" }) starts an Electron project from its source folder with the debugging port open and connects its windows. It runs your project's own electron or electron-vite, never a packaged buildscan_metro. Port 9222 is listed but not auto-connected, because connecting injects a network interceptor into the page. Attach with connect_metro({ port: 9222, device: " " }), or set EXECBRO_CHROMIUM_PORTS=9222 to auto-connect if (!app.isPackaged) app.commandLine.appendSwitch('remote-debugging-port', '9222')
Keep the !app.isPackaged guard: an open debugging port on a packaged build lets anything that can reach it run code in your renderer
execbro-sdk-android in its debug build registers named state and commands. scan_metro finds it over adb, list_debug_globals and inspect_global read its state, run_app_command runs its commands, navigate drives Jetpack Navigation, and screenshot captures the screenEXECBRO_CHROMIUM_PORTS)Only the beginning is shown; read the rest in the repo