mobile-mcp 完整上手:一个 MCP 服务器跑通 iOS 与 Android 手机自动化
【免费下载链接】mobile-mcpModel Context Protocol Server for Mobile Automation and Scraping (iOS, Android, Emulators, Simulators and Real Devices)项目地址: https://gitcode.com/GitHub_Trending/mo/mobile-mcp
mobile-mcp 是一个基于 MCP 协议的移动端自动化服务器:一条 npx 命令接入 AI 客户端后,iOS、Android 的模拟器和真机都能用同一组指令驱动,点击、滑动、输入、装包、抓崩溃日志,不再为两个平台各写一套脚本。
想让 AI 替你"按手机"的时候
假设你要验证一个新版本 App 的注册流程。传统做法是打开 XCUITest 或 Espresso 项目,写用例、找控件、跑一遍再看日志;如果 App 换了页面结构,脚本又要改。
mobile-mcp 把这件事换成了另一条路:你启动模拟器,把服务器配进 Cursor、Claude Code、Codex 这类客户端,然后用一句自然语言描述"帮我下载一个番茄钟应用、注册、启动计时器",剩下的交给 Agent 自己点。
它适合两类人:一是想让 LLM 直接操作手机的开发者,二是需要跨 iOS/Android 复测同一条流程的测试同学。
它是什么,和已有方案差在哪
mobile-mcp 是一个 MCP Server,跑在 npm 上(包名@mobilenext/mobile-mcp),底层用自研的 Device Kit 接管设备,而不是传统的 WebDriverAgent。
它暴露 30 来个mobile_前缀的工具,同一套工具同时覆盖 iOS 模拟器/真机和 Android 模拟器/真机。和 XCUITest、Espresso 这类框架的最大区别是:你写的是"目标",不是"控件定位表达式"。
四组能力,按需取用
| 能力模块 | 具体工具 | 解决的问题 | 典型场景 |
|---|---|---|---|
| 设备管理 | mobile_list_available_devices、mobile_get_screen_size、mobile_set_orientation、mobile_set_location | 不用记 adb/simctl 命令就能查设备、改方向、伪造 GPS | 写用例前确认设备状态 |
| 应用管理 | mobile_launch_app、mobile_install_app、mobile_get_foreground_app | 直接按包名装、启、停 App | 回归测试前装新版安装包 |
| 屏幕交互 | mobile_list_elements_on_screen、mobile_click_on_screen_at_coordinates、mobile_swipe_on_screen、屏幕录制 | 优先读无障碍树拿元素和坐标,读不到才回退截图 | 多步 UI 流程自动化 |
| 排障工具 | mobile_get_device_logs、mobile_list_crashes、mobile_batch_commands | 一次调用连跑多个动作;App 崩了能直接取崩溃报告 | 复现 Bug 并留存证据 |
两个值得留意的细节:元素列表里的每个元素带一个稳定的@ref标识,Agent 可以直接按 ref 点按,不用自己算坐标;无障碍树优先意味着大部分操作不消耗图像 token,成本和速度都比纯截图方案省。
三步把环境跑起来
第 1 步:装平台工具,确认设备能连上
- Android 侧:装 Android Platform Tools,让
adb在 PATH 里 - iOS 侧(macOS):装 Xcode 命令行工具
- Node.js 需要 v20+
确认方法:
adb devices # Android:能看到设备或 emulator 即可 xcrun simctl list # iOS:能看到已创建的模拟器 node --version # v20 以上然后启动一个目标:Android 用avdmanager/emulator启动仿真器;iOS 用xcrun simctl boot "iPhone 16"。
第 2 步:把服务器加进 MCP 客户端
大多数客户端用同一份配置(仓库里现成的 mcp.json 就是它):
{ "mcpServers": { "mobile-mcp": { "command": "npx", "args": ["-y", "@mobilenext/mobile-mcp@latest"] } } }各客户端也有快捷方式,例如 Claude Code:
claude mcp add mobile-mcp -- npx -y @mobilenext/mobile-mcp@latest第 3 步:验证链路通了
在对话里直接说:
list available devices
如果返回了你正在运行的模拟器、仿真器或真机,链路就是通的;返回空列表基本只有一个原因——没有设备处于启动/连接状态。
服务端代码在 src/ 下按平台分了模块(android.ts、ios.ts、iphone-simulator.ts),想深挖行为时可以直接看。
两个拿来就能用的例子
例子 1:让 Agent 走一遍完整的下载—注册—评分流程
README 里给过这类提示词,直接可用:
找一个评分超过 1k 星的免费 Pomodoro 应用并下载。 启动应用,用我的邮箱注册。注册完成后找到如何启动番茄钟计时器。 计时器启动后,回到应用商店给这个应用打 5 星,并写一条评论。一句话覆盖了"搜索、下载、启动、填表、切回商店、评分"五类操作。Agent 每点一步都会重新列一次屏幕元素确认状态,不会盲点。
例子 2:复现崩溃并把证据拿回来
让 Agent 跑一段容易崩的流程,然后:
复现刚才的崩溃后,把设备日志和崩溃报告都取出来对应mobile_get_device_logs(Android 取 logcat,iOS 取 unified log)和mobile_list_crashes/mobile_get_crash,不用自己插线翻目录。
多步操作还可以用mobile_batch_commands一次调用串起来(比如"点击、输入、再点击"),省掉多次往返。
选型对比与容易踩的坑
| 维度 | mobile-mcp | XCUITest / Espresso | 纯截图的视觉 Agent |
|---|---|---|---|
| 平台覆盖 | 一套工具四个目标 | 一套对应一个平台 | 通用但依赖模型能力 |
| 输入方式 | 自然语言 | 代码 + 控件定位 | 自然语言 |
| 元素读取 | 无障碍树优先,截图兜底 | 控件树 | 截图 |
| 上手成本 | 加一段 MCP 配置 | 搭两套测试工程 | 调提示词 |
| 稳定性来源 | 结构化数据 + 确定性操作 | 断言 | 模型判断 |
几个实际用下来容易踩的坑:
- 设备列表为空:九成是模拟器没 boot 或真机没授权。先跑
adb devices/xcrun simctl list确认,再怀疑服务器。 - 点按落点偏了:点元素边界框的中心,别用左上角坐标;输入前先点一下输入框确认获得焦点,再
mobile_type_keys。 - UI 动画没结束就操作:移动端页面有过渡动画,操作后重新列一次元素确认,等预期元素出现再继续,参考 skills/mobile-automation/SKILL.md 里的工作流。
- 遥测默认开启:介意就加环境变量
MOBILEMCP_DISABLE_TELEMETRY=1。 - iOS 真机比模拟器麻烦:模拟器零额外配置;真机要走 USB 信任 + 配对流程,细节看 llms-install.md。
另外,如果要通过网络而不是 stdio 连客户端,加--listen 3000起 Streamable HTTP 服务,再配MOBILEMCP_AUTH设 Bearer 令牌即可(详见 README.md 的 "Streamable HTTP Server Mode" 一节)。后续规划的功能(文件读写、WebView 支持、Flutter 控件树等)可以翻 ROADMAP.md 看状态。
mobile-mcp 本质上是把"手机操作"变成 AI 客户端里的一组普通工具,你只需要描述目标。下一步建议:先开一个模拟器,配上 MCP,用list available devices验证链路,然后从例子 2 的崩溃复现跑起来——它最短,也最容易看出效果。
【免费下载链接】mobile-mcpModel Context Protocol Server for Mobile Automation and Scraping (iOS, Android, Emulators, Simulators and Real Devices)项目地址: https://gitcode.com/GitHub_Trending/mo/mobile-mcp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考