Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
MCP server for Android emulator automation via ADB.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
ADB_PATH, ADB_SERIAL, ADB_TIMEOUT_MS, ADB_MAX_BUFFER_MB, ADB_DEBUG, MCP_TRANSPORT, PORT你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 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"
}
}
}
}在终端中运行这条命令
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-android运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.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"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"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"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
ADB_PATH envADB_SERIAL envADB_TIMEOUT_MS envADB_MAX_BUFFER_MB envADB_DEBUG envMCP_TRANSPORT envPORT env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 frndchagas 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.5.2)于2个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
同一分类中有:Spec Driven Development, Remote Desktop Commander, Foliosio
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
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.
Read your support inbox, tag conversations and save draft replies from your AI agent. Never sends.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
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 }, });