关于 android
Android MCP Server 通过 ADB 控制 Android 模拟器和真机,供 AI 助手查看界面、操作应用并读取日志。它无需修改应用本身,适合移动应用调试与测试。
主要功能
- 0125 个工具覆盖设备控制
- 02带压缩的截图功能,最大 1280px
- 03UI 树检查,包含边界、文本和资源 ID
- 04点击、滑动、输入文本和硬件按键
- 05按 resource-id、文本或 content-desc 定位元素
- 06logcat 日志按包名、级别和时间过滤
适用场景
- 01复现并记录应用崩溃的 bug
- 02自动化走查登录等界面流程
- 03安装 APK 后冒烟测试主要页面
MCP 相关
该项目是一个 MCP 服务,向 MCP 客户端暴露设备管理、截图、界面交互、应用管理和日志诊断等工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
21收录的工具列表 · 更新于 2 周前
此工具无需参数。
详细介绍
Android MCP Server
通过 ADB 控制 Android 模拟器和设备的 MCP 服务。它使 AI 助手能够查看、操作和调试 Android 应用——截取屏幕截图、点击元素、读取日志并记录 Bug。
npm Package | GitHub | Issues
^ 为便于观看,视频已加速。更多演示和测试用例。
功能
- 25 种工具,全面控制 Android 设备
- 截图,支持智能压缩(基于 Sharp,最大 1280px)
- UI 树检查——读取元素层级结构,包括边界、文本、资源 ID 和状态
- 触控自动化——点击、滑动、滚动、输入文本、按下硬件按键
- 元素定位——按 resource-id、文本或 content-desc 查找并点击元素
- 应用生命周期管理——安装 APK、启动应用、查看当前 Activity
- Logcat 集成——按软件包、日志级别或时间戳筛选
- 设备管理——列出设备、启动模拟器、获取设备信息
- 组合操作——
tap_and_wait将点击、等待稳定和 UI 树检查合并为一次往返 - 持久 ADB shell——复用单个 shell 会话,加快命令执行
- 设备信息缓存——每个会话只查询一次设备属性
- 多设备支持——按 ID 指定目标设备
- 无需修改应用——通过 ADB 适用于任何 Android 应用,无需集成 SDK
先决条件
- Node.js 18+
- Android SDK,包含 platform-tools(ADB)和模拟器
- 正在运行的 Android 模拟器或已连接的设备
查找你的 ANDROID_HOME
服务会自动在 ~/Library/Android/sdk(macOS)查找 SDK,或通过 ANDROID_HOME 查找。如果 SDK 位于其他位置,请在 MCP 配置中设置 ANDROID_HOME(见下文)。
检查方法:
# macOS
ls ~/Library/Android/sdk/platform-tools/adb
# Or find it via Android Studio: Settings > Languages & Frameworks > Android SDK
设置
Claude Code
claude mcp add --scope user android -- npx -y android-mcp-server
这会全局注册服务,使其在所有项目中都可用。若要将其限制在当前项目中,请改用 --scope project。
如果你的 SDK 不在默认位置:
claude mcp add --scope user --env ANDROID_HOME=/path/to/sdk android -- npx -y android-mcp-server
Claude Desktop
添加到 Claude Desktop 配置文件:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"android": {
"command": "npx",
"args": ["-y", "android-mcp-server"],
"env": {
"ANDROID_HOME": "/path/to/android/sdk"
}
}
}
}
VS Code
添加到 VS Code 设置(.vscode/settings.json):
{
"mcp": {
"servers": {
"android": {
"command": "npx",
"args": ["-y", "android-mcp-server"],
"env": {
"ANDROID_HOME": "/path/to/android/sdk"
}
}
}
}
}
Cursor
添加到 Cursor MCP 配置(~/.cursor/mcp.json):
{
"mcpServers": {
"android": {
"command": "npx",
"args": ["-y", "android-mcp-server"],
"env": {
"ANDROID_HOME": "/path/to/android/sdk"
}
}
}
}
Windsurf
添加到 Windsurf MCP 配置(~/.codeium/windsurf/mcp_config.json):
{
"mcpServers": {
"android": {
"command": "npx",
"args": ["-y", "android-mcp-server"],
"env": {
"ANDROID_HOME": "/path/to/android/sdk"
}
}
}
}
项目配置(.mcp.json)
添加到项目的 .mcp.json(提交到版本控制,这样你的团队也能使用):
{
"mcpServers": {
"android": {
"command": "npx",
"args": ["-y", "android-mcp-server"],
"env": {
"ANDROID_HOME": "/path/to/android/sdk"
}
}
}
}
从源代码构建
git clone https://github.com/martingeidobler/android-mcp-server.git
cd android-mcp-server
npm install
npm run build
claude mcp add --scope user android -- node /path/to/android-mcp-server/dist/index.js
可用工具
设备管理
| 工具 | 描述 |
|---|---|
list_devices | 列出已连接的 Android 设备和模拟器 |
list_avds | 列出可用的 Android Virtual Devices |
start_emulator | 按名称启动 AVD(最多等待 60s) |
屏幕截图与 UI 分析
| 工具 | 描述 |
|---|---|
screenshot | 截取屏幕截图以供视觉分析。可选的 save_path 用于将截图保存到磁盘 |
get_ui_tree | 获取 UI 元素层级结构,包含边界、文本、资源 ID 和状态 |
交互
| 工具 | 描述 |
|---|---|
tap | 点击屏幕坐标 |
tap_element | 按 resource-id、文本或 content-desc 点击元素 |
tap_and_wait | 点击元素,等待 UI 稳定,并返回新的 UI 树——一次往返即可完成 |
long_press | 长按坐标(用于打开上下文菜单、拖动控件) |
double_tap | 双击坐标 |
multi_tap | 按固定间隔在相同坐标点击 N 次(连续点击) |
tap_sequence | 多步骤操作链:可按任意顺序执行点击、等待、文本输入、按键和滑动 |
type_text | 在当前聚焦的输入框中输入文本 |
press_key | 按键(back、home、enter、tab、delete、menu 等) |
swipe | 在坐标之间执行滑动手势 |
scroll_to_element | 滚动直到元素可见 |
wait_for_element | 等待元素出现(带超时) |
诊断
| 工具 | 描述 |
|---|---|
get_logs | 获取 logcat 输出,可按包名、日志级别和时间筛选 |
clear_logs | 清除 logcat 缓冲区(重现错误前调用,以获得干净的输出) |
get_device_info | 获取型号、Android 版本、API 级别、屏幕尺寸和 DPI |
应用管理
| 工具 | 描述 |
|---|---|
launch_app | 按包名启动应用 |
install_apk | 安装 APK 文件 |
get_current_activity | 获取前台应用和 Activity |
pull_file | 将文件从设备拉取到本地文件系统 |
adb_shell | 运行任意 ADB shell 命令 |
工作流示例
错误记录
“清除日志,打开设置屏幕,点击保存按钮,然后向我展示日志和屏幕截图”
Claude 将执行:clear_logs → launch_app → tap_element → get_logs(package_name="com.example.app", level="E") → screenshot(save_path="./bugs/settings-crash.png")
UI 测试
“浏览登录流程,并确认每个屏幕都与设计稿一致”
Claude 将使用 screenshot + get_ui_tree 查看并理解每个屏幕,使用 tap_element/type_text 进行交互,并利用视觉能力与模型图或描述进行比较。
冒烟测试
“安装 APK,启动应用,并逐一浏览主界面,确认没有崩溃”
Claude 将:install_apk → launch_app → 使用 tap_element 导航 → get_logs(level="E"),在每个界面后检查是否有错误。
元素交互
“打开设置,搜索‘display’,点击第一个结果,然后返回”
Claude 将:launch_app(package_name="com.android.settings") → tap_and_wait(by="text", value="Search settings") → type_text("display") → tap_and_wait(by="text", value="Display") → press_key(key="back")
演示与提示词指南
- DEMOS.md — 可立即尝试的复制粘贴式提示词场景
- PROMPTING.md — 最佳实践、性能技巧和常见陷阱
工作原理
服务通过标准输入/输出使用 Model Context Protocol 进行通信。所有设备交互都通过 ADB 完成,无需修改应用。截图会在内存中捕获并压缩,然后以 base64 图像的形式返回,供 AI 查看和进行视觉分析。
参与贡献
欢迎贡献!请参阅 CONTRIBUTING.md 了解指南。
许可证
MIT - 详见 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。