MCP server for Android emulator automation via ADB.
MCP server for Android emulator automation via ADB.
Valid MCP server (2 strong, 1 medium validity signals). 2 known CVEs in dependencies (0 critical, 2 high severity) Package registry verified. Imported from the Official MCP Registry. Trust signals: trusted author (3/3 approved).
5 files analyzed · 3 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Set these up before or after installing:
Environment variable: ADB_PATH
Environment variable: ADB_SERIAL
Environment variable: ADB_TIMEOUT_MS
Environment variable: ADB_MAX_BUFFER_MB
Environment variable: ADB_DEBUG
Environment variable: MCP_TRANSPORT
Environment variable: PORT
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-frndchagas-expo-android": {
"env": {
"PORT": "your-port-here",
"ADB_PATH": "your-adb-path-here",
"ADB_DEBUG": "your-adb-debug-here",
"ADB_SERIAL": "your-adb-serial-here",
"MCP_TRANSPORT": "your-mcp-transport-here",
"ADB_TIMEOUT_MS": "your-adb-timeout-ms-here",
"ADB_MAX_BUFFER_MB": "your-adb-max-buffer-mb-here"
},
"args": [
"-y",
"@fndchagas/expo-android"
],
"command": "npx"
}
}
}From the project's GitHub README.
MCP server for Android emulator automation via ADB.
Verify adb:
adb devices
npm install -g @fndchagas/expo-android
# or
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 |
If you see an error like ADB executable not found or spawn adb ENOENT, set ADB_PATH
or export an SDK path:
export ADB_PATH="$HOME/Library/Android/sdk/platform-tools/adb"
# or
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
Tools are exposed under your MCP server name. Example: expo-android.tap.
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.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 },
});
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.
by Microsoft · Content & Media
Convert files (PDF, Word, Excel, images, audio) to Markdown for LLM consumption
by mcp-marketplace · Developer Tools
Scaffold, build, and publish TypeScript MCP servers to npm — conversationally
by mcp-marketplace · Finance
Free stock data and market news for any MCP-compatible AI assistant.