返回 MCP 目录
public公开dns本地运行

expo-android

一个用于通过ADB自动化Android模拟器的MCP服务器,提供UI检查、元素操作、截图等功能,支持与Claude和OpenAI Codex集成。

article

README

🚀 expo-android

expo-android 是一个用于通过 ADB 实现 Android 模拟器自动化的 MCP 服务器,可帮助开发者更高效地进行 Android 设备的自动化操作。

🚀 快速开始

  1. 启动一个模拟器或连接一台设备。
  2. 运行 doctor 命令来验证 ADB 和设备选择。
  3. 使用 inspecttapElementinputText 等工具进行操作。

示例代码如下:

await client.callTool({ name: 'expo-android.doctor', arguments: {} });
await client.callTool({
  name: 'expo-android.inspect',
  arguments: { onlyInteractive: true, maxElements: 200 },
});

✨ 主要特性

  • 支持通过 ADB 对 Android 模拟器或设备进行自动化操作。
  • 提供多种工具,如设备列表查看、元素检查、点击、输入文本等。
  • 支持灵活的搜索条件,方便查找元素。
  • 可与 Claude Code CLI 和 OpenAI Codex CLI 集成使用。

📦 安装指南

npm install -g @fndchagas/expo-android
# 或者
npx -y @fndchagas/expo-android

💻 使用示例

基础用法

// 验证 ADB 和设备选择
await client.callTool({ name: 'expo-android.doctor', arguments: {} });
// 检查 UI 元素
await client.callTool({
  name: 'expo-android.inspect',
  arguments: { onlyInteractive: true, maxElements: 200 },
});

高级用法

与 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

与 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

或者编辑 ~/.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" }

其他使用示例

检查 UI 元素

const result = await client.callTool({
  name: 'expo-android.inspect',
  arguments: { onlyInteractive: true, includeScreenshot: false, maxElements: 200 },
});

验证 ADB 和设备

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

📚 详细文档

环境变量

| 属性 | 详情 | |------|------| | ADB_PATH | 默认值为 adb,指定 ADB 可执行文件的路径。 | | ADB_SERIAL | 可选,目标设备的序列号(auto 表示清除并自动检测)。 | | ADB_TIMEOUT_MS | 默认值为 15000,ADB 命令的超时时间。 | | ADB_MAX_BUFFER_MB | 默认值为 10,最大输出缓冲区大小。 | | ADB_DEBUG | 默认值为 0,是否将 ADB 诊断信息记录到标准错误输出。 | | MCP_TRANSPORT | 默认值为 stdio,传输方式:stdiohttpboth。 | | PORT | 默认值为 7332,使用 httpboth 时的 HTTP 端口。 |

工具列表

工具通过 MCP 服务器名称公开,例如:expo-android.tap

  • devices:列出已连接的设备和模拟器。
  • doctor:验证 ADB 可用性并显示已连接的设备。
  • setDevice:覆盖此 MCP 进程的活动设备序列号。
  • inspect:将 UI 转储解析为元素并提供摘要(可选截图)。
  • screenshot:仅捕获截图(Base64 或文件路径)。
  • findElement:返回符合搜索条件的元素。
  • tapElement:查找元素并点击其中心。
  • waitForElement:等待元素出现(可选状态检查)。
  • assertElement:验证元素的存在和状态。
  • tap:在指定的 x/y 坐标处点击。
  • swipe:在坐标之间滑动。
  • longPress:在坐标处长按。
  • inputText:在焦点字段中输入文本。
  • keyEvent:发送 Android 按键事件(例如,返回、主页)。
  • openApp:通过包名启动应用程序。
  • listPackages:列出已安装的包名。

搜索条件

findElementtapElementwaitForElementassertElement 这些工具接受灵活的搜索输入。 常见字段:

  • texttextContains
  • contentDesccontentDescContains
  • resourceIdresourceIdContains
  • class
  • normalizeWhitespacecaseInsensitive

🔧 技术细节

要求

  • Node 18+
  • 可用的 Android SDK platform-tools(adb)
  • 已连接的 Android 模拟器或设备

验证 ADB:

adb devices

故障排除

ADB 未找到(spawn adb ENOENT)

如果出现 ADB executable not foundspawn adb ENOENT 之类的错误,请设置 ADB_PATH 或导出 SDK 路径:

export ADB_PATH="$HOME/Library/Android/sdk/platform-tools/adb"
# 或者
export ANDROID_HOME="$HOME/Library/Android/sdk"

如果连接了多个设备,请将 ADB_SERIAL 设置为目标设备。您也可以在运行时调用 setDevice

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

如果更新了 PATH 或 SDK 变量,请重启 MCP 进程以使其获取新的环境。

测试

npm run build
npm test

📄 许可证

license

help

运行方式说明

cloud

托管运行

托管运行通常表示这个 MCP Server 由服务方环境承载,用户一般按页面提供的连接方式或授权流程接入,不需要在本地长期启动一个 MCP 进程

  1. 打开服务方连接页
  2. 完成授权或复制端点
  3. 在 MCP 客户端中连接
terminal

本地运行 / 其它方式

本地运行通常需要用户在自己的电脑或服务器上安装依赖,把 server_config 复制到 MCP 客户端,并按 env_schema 补齐环境变量、密钥或其它配置

  1. 复制 server_config
  2. 安装所需依赖
  3. 补齐环境变量后重启客户端