Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Description from the maker (original English)
MCP server for Android emulator automation via ADB.
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.
ADB_PATH, ADB_SERIAL, ADB_TIMEOUT_MS, ADB_MAX_BUFFER_MB, ADB_DEBUG, MCP_TRANSPORT, PORTYou 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": {
"expo-android": {
"command": "npx",
"args": [
"-y",
"@fndchagas/expo-android"
],
"env": {
"ADB_PATH": "your-value",
"ADB_SERIAL": "your-value",
"ADB_TIMEOUT_MS": "your-value",
"ADB_MAX_BUFFER_MB": "your-value",
"ADB_DEBUG": "your-value",
"MCP_TRANSPORT": "your-value",
"PORT": "your-value"
}
}
}
}Run this in your terminal
claude mcp add expo-android --env ADB_PATH=your-value --env ADB_SERIAL=your-value --env ADB_TIMEOUT_MS=your-value --env ADB_MAX_BUFFER_MB=your-value --env ADB_DEBUG=your-value --env MCP_TRANSPORT=your-value --env PORT=your-value -- npx -y @fndchagas/expo-androidFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"expo-android": {
"command": "npx",
"args": [
"-y",
"@fndchagas/expo-android"
],
"env": {
"ADB_PATH": "your-value",
"ADB_SERIAL": "your-value",
"ADB_TIMEOUT_MS": "your-value",
"ADB_MAX_BUFFER_MB": "your-value",
"ADB_DEBUG": "your-value",
"MCP_TRANSPORT": "your-value",
"PORT": "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": {
"expo-android": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@fndchagas/expo-android"
],
"env": {
"ADB_PATH": "your-value",
"ADB_SERIAL": "your-value",
"ADB_TIMEOUT_MS": "your-value",
"ADB_MAX_BUFFER_MB": "your-value",
"ADB_DEBUG": "your-value",
"MCP_TRANSPORT": "your-value",
"PORT": "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.
ADB_PATH envADB_SERIAL envADB_TIMEOUT_MS envADB_MAX_BUFFER_MB envADB_DEBUG envMCP_TRANSPORT envPORT 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 7, 2026
The registry name was verified with the GitHub account frndchagas, which owns the repo
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 (0.5.2) reached the registry 2 months 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, Signoff
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.
Five gates that make an agent's 'done' provable: run them, read the verdict, audit the record.
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.
MCP server for Android emulator automation via ADB.
Verify adb:
adb devices
Claude Desktop, one-click: download expo-android.mcpb from the latest release and drag it into Settings → Extensions. You can leave both fields empty — adb is auto-detected and the only connected device is used by default.
Via npm:
npm install -g @fndchagas/expo-android
npx -y @fndchagas/expo-android
doctor to validate adb + device selection.inspect, tapElement, inputText, etc.Example:
await client.callTool({ name: 'expo-android.doctor', arguments: {} });
await client.callTool({ name: 'expo-android.inspect', arguments: { onlyInteractive: true, maxElements: 200 }, });
claude mcp add expo-android \
--env ADB_PATH="$HOME/Library/Android/sdk/platform-tools/adb" \ --env ADB_SERIAL="auto" \ -- npx -y @fndchagas/expo-android
codex mcp add expo-android \
--env ADB_PATH="$HOME/Library/Android/sdk/platform-tools/adb" \ --env ADB_SERIAL="auto" \ -- npx -y @fndchagas/expo-android
Or edit ~/.codex/config.toml:
[mcp_servers.expo-android]
command = "npx" args = ["-y", "@fndchagas/expo-android"] env = { ADB_PATH = "/Users/you/Library/Android/sdk/platform-tools/adb", ADB_SERIAL = "emulator-5554" }
Serial selection priority: serial param (per tool call) → setDevice override → ADB_SERIAL env → auto (if only one device).
| Variable | Default | Description |
|---|---|---|
ADB_PATH | adb | Path to adb executable |
ADB_SERIAL | optional | Device serial to target (auto to clear and auto-detect) |
ADB_TIMEOUT_MS | 15000 | Timeout for adb commands |
ADB_MAX_BUFFER_MB | 10 | Max output buffer size |
ADB_DEBUG | 0 | Log adb diagnostics to stderr |
MCP_TRANSPORT | stdio | Transport: stdio, http, or both |
PORT | 7332 | HTTP port when using http/both |
The server starts even when adb is missing — tools return the ADB executable not found error until adb becomes reachable (run doctor to diagnose). To fix it, set ADB_PATH or export an SDK path:
export ADB_PATH="$HOME/Library/Android/sdk/platform-tools/adb"
export ANDROID_HOME="$HOME/Library/Android/sdk"
If multiple devices are connected, set ADB_SERIAL to the target device. You can also run setDevice at runtime:
await client.callTool({
name: 'expo-android.setDevice', arguments: { serial: 'emulator-5554' }, });
If you update PATH or SDK variables, restart the MCP process so it can pick up the new environment.
npm run build
npm test
Tool names are plain identifiers (e.g. tap); your MCP client prefixes them with the server name you registered.
devices — list connected devices and emulators.doctor — validate adb availability and show connected devices.setDevice — override the active device serial for this MCP process.inspect — UI dump parsed into elements with a summary (screenshot optional).screenshot — capture a screenshot only (base64 or file path).findElement — return elements that match search criteria.tapElement — find an element and tap its center.waitForElement — wait until an element appears (optionally with state checks).assertElement — verify element existence and state.tap — tap at x/y coordinates.swipe — swipe between coordinates.longPress — press and hold at coordinates.inputText — type text in the focused field.keyEvent — send Android key events (e.g., BACK, HOME).openApp — launch an app by package name.listPackages — list installed package names.installExpoGo — download the pinned Expo Go APK and install it via adb install -r (the url override only accepts official github.com/expo/expo-go-releases URLs).Every tool declares MCP annotations (readOnlyHint/destructiveHint), so clients can auto-approve inspection tools and gate the ones that drive the device.
These tools accept flexible search inputs: findElement, tapElement, waitForElement, assertElement.
Common fields:
text, textContainscontentDesc, contentDescContainsresourceId, resourceIdContainsclassnormalizeWhitespace, caseInsensitiveconst result = await client.callTool({
name: 'expo-android.inspect', arguments: { onlyInteractive: true, includeScreenshot: false, maxElements: 200 }, });
Inspect options:
includeScreenshot (default: false)screenshotMode: base64 or pathscreenshotPath: optional file path when using pathmaxElements: limit elements returnedincludeElements: return elements or summary onlyawait client.callTool({
name: 'expo-android.doctor', arguments: {}, });
await client.callTool({
name: 'expo-android.tapElement', arguments: { text: 'Search', serial: 'emulator-5554' }, });
await client.callTool({
name: 'expo-android.tapElement', arguments: { text: 'Private account' }, });
await client.callTool({
name: 'expo-android.waitForElement', arguments: { text: 'Save', timeout: 10000, shouldBeClickable: true }, });
await client.callTool({ name: 'expo-android.assertElement', arguments: { text: 'Private account', shouldBeChecked: true }, });