mcpField
M
Mobile Device Mcp

Mobile Device Mcp

本地服务
github.com/srmorete开发工具5213 周前更新

关于 Mobile Device Mcp

Mobile Device MCP 是一个 MCP 服务,允许 AI Agent 控制 iOS 和 Android 设备,并可同时管理多台设备。它通过设备端的 UIAutomator 或 XCUITest 服务读取界面树并执行操作,适合需要自动化移动端测试或操作的开发者。

主要功能

  1. 01同时支持多台 iOS 和 Android 设备
  2. 02读取扁平化的 UI 元素树,可搜索和限制数量
  3. 03点击、双击、长按、滑动和输入文本
  4. 04截取设备屏幕(JPEG)
  5. 05在设备端沙箱中执行 JavaScript 脚本

适用场景

  1. 01让 Agent 在真机或模拟器上完成界面操作
  2. 02读取原生页面与 WebView 中的界面元素进行自动化验证
  3. 03在多台设备上并行安装应用并执行操作

MCP 相关

该项目是一个 MCP 服务,通过 list_devices、tap、uitree 等工具向 MCP 客户端提供移动设备的控制能力。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"mobile-device-mcp-srmorete": {
"command": "npx",
"args": [
"-y",
"@srmorete/mobile-device-mcp"
]
}
}
}
启动命令npx -y @srmorete/mobile-device-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@srmorete/mobile-device-mcp0.1.10

工具

14

收录的工具列表 · 更新于 3 周前

此工具无需参数。

详细介绍

Mobile Device MCP

一个 MCP 服务,可让 AI Agent 控制 iOS 和 Android 设备(点击、滚动、输入、截图、读取 UI 树和运行代码)。可同时与多台设备配合使用。

工作原理

三层架构:

  1. 设备端服务 — 在每台移动设备上运行的轻量级 HTTP 服务(Android 上为 UIAutomator,iOS 上为 XCUITest),用于公开无障碍树并接收交互命令。
  2. UI 树过滤器 — 将两个平台的原始 UI 树规范化为统一的扁平元素列表。
  3. MCP 服务 — 外部接口,负责设备发现、初始化、端口分配,并将请求代理到设备端服务。

首次使用时会初始化设备——服务会安装驱动应用、分配端口、启动设备端服务,并轮询直至服务正常运行。之后,所有工具调用都会通过本地主机 HTTP 代理,并使用每台设备各自的 bearer token 进行身份验证。

工具

工具描述
list_devices列出可用的 iOS 和 Android 设备
screenshot截取设备屏幕(JPEG)
uitree获取扁平列表形式的 UI 元素树,可选搜索和数量限制。默认排除屏幕外元素,除非设置 include_invisible: true
tap点击屏幕坐标
double_tap双击屏幕坐标
long_press长按屏幕坐标(时长可配置)
scroll从起始坐标滑动到结束坐标
type_text在焦点元素中输入文本
press_button按下硬件/导航按钮(home、back、enter、volumeUp/Down、dpadUp/Down/Left/Right/Center)
launch_app按 bundle ID / 包名启动应用
terminate_app强制停止应用
list_apps列出已安装的应用
install_app从主机本地文件安装应用(Android 使用 .apk,iOS 模拟器使用 .app,iOS 设备使用 .app/.ipa)。替换已有安装
run_code在设备上执行沙盒化 JavaScript(见下文的 run_code)
run_code

Agent 可以传入看起来像 UIAutomator 或 XCUITest 的代码,它们底层都是 Javascript。 沙盒会限制(Android)可能有危险的 Java 操作,并且仅允许(iOS)部分类似 XCUITest 的命令

  • Android: 使用 UIAutomator 绑定的 Rhino 引擎——uiDevice(点击、滑动、查找元素、按键、读取显示信息)、By(选择器)、Until(等待条件)、console.log()
  • iOS: 使用 XCUITest 绑定的 JavaScriptCore——app(查询元素、点击、输入、滑动)、springboard、device、openApp(bundleId)、sleep(ms)、console.log()

两个平台都会自动终止失控脚本(无限循环),并在每次调用时创建全新沙盒。

前置条件

  • Node.js 18+(通过 npx 运行)
  • Android: Android SDK,且 adb 位于 PATH 中
  • iOS 模拟器: Xcode,包含 xcrun、simctl
  • iOS 真机: Xcode,包含 xcodebuild、devicectl 和 iproxy(来自 libimobiledevice)
  • 从源代码构建: Bun 运行时、Gradle(Android)、Xcode(iOS)

安装

Claude Code
claude mcp add mobile-device-mcp -- npx -y @srmorete/mobile-device-mcp@latest

或使用自定义端口:

claude mcp add mobile-device-mcp -e MDMS_PORT_ANDROID=20000 -e MDMS_PORT_IOS=21000 -- npx -y @srmorete/mobile-device-mcp@latest
修改 .mcp.json(Cursor、Claude Desktop 等)
{
  "mcpServers": {
    "mobile-device-mcp": {
      "command": "npx",
      "args": ["-y", "@srmorete/mobile-device-mcp@latest"],
      "env": {
        "MDMS_PORT_ANDROID": "18000",           # optional
        "MDMS_PORT_IOS": "19000"                # optional
      }
    }
  }
}

从源代码构建

git clone <repo-url>
cd mobile-device-mcp
bun install

# Build drivers for both platforms and pack tarball
./scripts/build.sh

构建脚本会编译设备端驱动(通过 Gradle 构建 Android APK,通过 xcodebuild 构建 iOS 测试包),将它们复制到 drivers/,并创建 npm 压缩包。

开发期间可在本地运行:

bun run start           # Start the MCP server
bun test                # Run the test suite

配置

环境变量默认值描述
MDMS_PORT_ANDROID18000Android 设备端服务的基础端口
MDMS_PORT_IOS19000iOS 设备端服务的基础端口

端口按顺序分配——第一台 Android 设备使用 18000,第二台使用 18001,依此类推。iOS 设备也采用相同方式,从 19000 开始。

致谢

Mobile Device MCP server 的开发借鉴了 mobile-mcp 和 Maestro 等项目的成果。 这些项目为我们提供了灵感,我们据此重新设计了当前方案,使其支持多设备,并能无缝支持原生界面/WebView(尤其是在 Android 上)。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。