e

expo-android

@frndchagas/expo-android
0 Stars 15 次浏览 frndchagas 更新于 2026-08-23

MCP server for Android emulator automation via ADB.

MCP 服务配置

复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用

{
  "mcpServers": {
    "@fndchagas/expo-android": {
      "args": [
        "@fndchagas/expo-android@0.2.1"
      ],
      "command": "npx"
    }
  }
}

可用工具 (5 个)

该服务在 MCP 协议中暴露的工具,AI 可按需调用

tavily_search 14 个参数 需填 1 项

Search the web for current information on any topic. Use for news, facts, or data beyond your knowledge cutoff. Returns snippets and source URLs.

必填参数:query

tavily_extract 6 个参数 需填 1 项

Extract content from URLs. Returns raw page content in markdown or text format.

必填参数:urls

tavily_crawl 11 个参数 需填 1 项

Crawl a website starting from a URL. Extracts content from pages with configurable depth and breadth.

必填参数:url

tavily_map 8 个参数 需填 1 项

Map a website's structure. Returns a list of URLs found starting from the base URL.

必填参数:url

tavily_research 2 个参数 需填 1 项

Perform comprehensive research on a given topic or question. Use this tool when you need to gather information from multiple sources to answer a question or complete a task. Returns a detailed response based on the research findings.

必填参数:input

服务介绍

expo-android

npm version
npm downloads
license
node version
typescript
CI

MCP server for Android emulator automation via ADB.

# Requirements

  • Node 18+
  • Android SDK platform-tools (adb) available
  • Android emulator or device connected

Verify adb:

adb devices

# Install

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:

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

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

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).

# 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:

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.

# Tests

npm run build
npm test

# Tools

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.

# 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

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

await client.callTool({
  name: 'expo-android.doctor',
  arguments: {},
});

# # Override serial per call

await client.callTool({
  name: 'expo-android.tapElement',
  arguments: { text: 'Search', serial: 'emulator-5554' },
});

# # Tap element

await client.callTool({
  name: 'expo-android.tapElement',
  arguments: { text: 'Private account' },
});

# # Wait + assert

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 },
});

相关 MCP 服务