- ✓Open-source license (MIT)
- ✓Actively maintained (<30d)
- ✓Documented (README)
- !No description
claude mcp add expo-android -- npx -y @fndchagas/expo-android{
"mcpServers": {
"expo-android": {
"command": "npx",
"args": ["-y", "@fndchagas/expo-android"]
}
}
}MCP Servers overview
# expo-android
[](https://www.npmjs.com/package/@fndchagas/expo-android)
[](https://www.npmjs.com/package/@fndchagas/expo-android)
[](LICENSE)
[](package.json)
[](https://www.typescriptlang.org/)
[](https://github.com/frndchagas/expo-android/actions/workflows/ci.yml)
MCP server for Android emulator automation via ADB.
## Requirements
- Node 18+
- Android SDK platform-tools (adb) available
- Android emulator or device connected
Verify adb:
```bash
adb devices
```
## Install
```bash
npm install -g @fndchagas/expo-android
# or
npx -y @fndchagas/expo-android
```
## Quickstart
1. Start an emulator or connect a device.
2. Run `doctor` to validate adb + device selection.
3. Use `inspect`, `tapElement`, `inputText`, etc.
Example:
```ts
await client.callTool({ name: 'expo-android.doctor', arguments: {} });
await client.callTool({
name: 'expo-android.inspect',
arguments: { onlyInteractive: true, maxElements: 200 },
});
```
## Use with Claude Code CLI
```bash
claude mcp add expo-android \
--env ADB_PATH="$HOME/Library/Android/sdk/platform-tools/adb" \
--env ADB_SERIAL="auto" \
-- npx -y @fndchagas/expo-android
```
## Use with OpenAI Codex CLI
```bash
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`:
```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).
## Environment variables
| 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 |
## Troubleshooting
### adb not found (spawn adb ENOENT)
If you see an error like `ADB executable not found` or `spawn adb ENOENT`, set `ADB_PATH`
or export an SDK path:
```bash
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:
```ts
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.
## Tests
```bash
npm run build
npm test
```
## Tools
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).
## Search criteria
These tools accept flexible search inputs: `findElement`, `tapElement`,
`waitForElement`, `assertElement`.
Common fields:
- `text`, `textContains`
- `contentDesc`, `contentDescContains`
- `resourceId`, `resourceIdContains`
- `class`
- `normalizeWhitespace`, `caseInsensitive`
## MCP usage examples
### Inspect
```ts
const result = await client.callTool({
name: 'expo-android.inspect',
arguments: { onlyInteractive: true, includeScreenshot: false, maxElements: 200 },
});
```
Inspect options:
- `includeScreenshot` (default: `false`)
- `screenshotMode`: `base64` or `path`
- `screenshotPath`: optional file path when using `path`
- `maxElements`: limit elements returned
- `includeElements`: return elements or summary only
### Doctor
```ts
await client.callTool({
name: 'expo-android.doctor',
arguments: {},
});
```
### Override serial per call
```ts
await client.callTool({
name: 'expo-android.tapElement',
arguments: { text: 'Search', serial: 'emulator-5554' },
});
```
### Tap element
```ts
await client.callTool({
name: 'expo-android.tapElement',
arguments: { text: 'Private account' },
});
```
### Wait + assert
```ts
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 },
});
```
What people ask about expo-android
What is frndchagas/expo-android?
+
frndchagas/expo-android is mcp servers for the Claude AI ecosystem with 4 GitHub stars.
How do I install expo-android?
+
You can install expo-android by cloning the repository (https://github.com/frndchagas/expo-android) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is frndchagas/expo-android safe to use?
+
Our security agent has analyzed frndchagas/expo-android and assigned a Trust Score of 77/100 (tier: Trusted). See the full breakdown of passed checks and flags on this page.
Who maintains frndchagas/expo-android?
+
frndchagas/expo-android is maintained by frndchagas. The last recorded GitHub activity is dated 2026-08-06, with 0 open issues.
Are there alternatives to expo-android?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy expo-android to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/frndchagas-expo-android)<a href="https://claudewave.com/repo/frndchagas-expo-android"><img src="https://claudewave.com/api/badge/frndchagas-expo-android" alt="Featured on ClaudeWave: frndchagas/expo-android" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!