mcp移动交互
 ](https://www.npmjs.com/package/mcp-mobile-interaction) ](https://www.npmjs.com/package/mcp-mobile-interaction) 
一个MCP(模型上下文协议)服务器,允许Claude与Android和iOS设备/模拟器进行交互。截图、点击、滑动、键入、检查UI元素等等——不需要Appium。
先决条件
安卓
- 安卓模拟器 随着
adb在你的路径中 - 运行Android模拟器或通过USB连接的物理设备,并启用ADB调试
iOS
- macOS与 项目 已安装(提供
xcrun simctl) - 对于物理设备: 互联网数据库 (
brew install idb-companion && pip install fb-idb) - 启动的iOS模拟器或连接的物理设备
安装
使用克劳德代码
claude mcp add mobile -- npx -y mcp-mobile-interaction或添加 .mcp.json 到您的项目根目录(与您的团队共享):
{
"mcpServers": {
"mobile": {
"command": "npx",
"args": ["-y", "mcp-mobile-interaction"]
}
}
}使用克劳德桌面
添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"mobile": {
"command": "npx",
"args": ["-y", "mcp-mobile-interaction"]
}
}
}手册
npm install -g mcp-mobile-interaction工具
所有工具都接受 platform 参数("android" 或 "ios")以及一个可选 device_id (默认为第一个连接的设备)。
核心工具
| 工具 | 说明 |
|---|---|
list_devices | 列出连接的设备和仿真器/模拟器 |
screenshot | 捕获屏幕截图(返回base64 JPEG) |
get_ui_tree | 使用可选过滤器获取UI元素的平面列表(only_clickable, only_with_text, type_filter, resource_id_contains) |
get_screen_info | 获取屏幕尺寸、密度和方向 |
get_screen_state | 在一次通话中获取UI树+屏幕截图(节省往返时间) |
行动工具
| 工具 | 说明 |
|---|---|
tap | 点击(x,y)坐标(本机分辨率) |
double_tap | 双击(x,y)坐标(本机分辨率) |
long_press | 长按(x,y)键,可配置持续时间 |
swipe | 在坐标之间或按方向(上/下/左/右)滑动 |
type_text | 在重点输入字段中键入文本 |
press_key | 按一个键(home、back、enter、delete、volume_up、volume_down、power、tab、recent_apps、菜单、escape、搜索、相机、media_play_pause)或发送原始Android键码 |
launch_app | 按包名/捆绑包ID启动应用程序 |
open_url | 打开URL或深度链接 |
tap_element | 按文本、resource_id或类型查找元素并点击它。支持 scroll_to_find 和 wait_for |
set_network_state | 控制设备网络连接:Wi-Fi、移动数据、飞行模式(仅限Android) |
find_element | 无需点击即可按文本、resource_id或类型查找UI元素。返回断言的元素详细信息。支持 scroll_to_find |
kill_app | 按软件包名称(Android)或捆绑包ID(iOS)强制停止应用程序 |
clear_app_data | 清除应用程序数据。模式 cache 仅清除临时文件;模式 all 重置为新安装状态 |
get_device_logs | 获取操作系统级设备日志(Android logcat/iOS日志显示)。按标签、级别或搜索字符串筛选 |
set_clipboard | 设置设备剪贴板内容。可用于测试URL、令牌、OTP代码的粘贴 |
等待工具
| 工具 | 说明 |
|---|---|
wait_for_element | 轮询,直到屏幕上出现与文本/类型/resource_id条件匹配的元素 |
wait_for_element_gone | 轮询,直到匹配的元素消失(加载微调器、骨架、对话框) |
wait_for_stable | 轮询,直到屏幕停止更改(两个连续的UI快照匹配) |
坐标系
默认情况下,屏幕截图会按比例缩小(scale=0.5)节省带宽,同时 get_ui_tree 以及所有基于坐标的工具(tap, double_tap, long_press, swipe)工作在 本机设备分辨率.
每个屏幕截图响应都包括原生尺寸和比例因子,以明确这一点:
Screenshot captured (540x1140, scale=0.5 of native 1080x2280).
Coordinate tools expect native resolution — multiply screenshot pixel
positions by 2 to convert, or pass screenshot_scale=0.5.有两种方法可以处理这个问题:
- 手动转换 --将您在屏幕截图中看到的位置乘以
1/scale(例如。×2为了scale=0.5) - 自动转换 --通行证
screenshot_scale为了协调工具,它们会为您转换:
tap(x=270, y=570, screenshot_scale=0.5)
→ taps at native (540, 1140)这 screenshot_scale 参数在上可用 tap, double_tap, long_press,以及 swipe.
观察模式
全部8个行动工具(tap, double_tap, long_press, swipe, type_text, press_key, launch_app, open_url)支持可选 观察 捕获操作完成后屏幕状态的参数——在一次往返中返回结果,而不是两次:
| 参数 | 说明 |
|---|---|
observe | "none" (默认), "ui_tree", "screenshot",或 "both" |
observe_delay_ms | 捕获前等待毫秒(默认值:500) |
observe_stabilize | 如果 true,等待UI停止更改,而不是固定延迟 |
示例:前后对比
之前 (2个电话):
tap(x=540, y=960) → get_ui_tree()之后 (1个电话):
tap(x=540, y=960, observe="ui_tree")对于5步测试流程,这大约将往返次数减少了一半。
示例
截图
"Take a screenshot of my Android emulator"克劳德会打电话的 screenshot 随着 platform: "android" 并显示图像。
浏览应用程序
"Open Settings on my iOS simulator, then scroll down and tap General"克劳德将使用 launch_app 和 tap_element 随着 scroll_to_find: true 导航。
点击没有可见文本的元素
"Tap the start session button"克劳德将使用 tap_element 随着 resource_id: "start-session-button" 按资源ID查找图标按钮。
等待加载完成
"Tap 'Picking Flow', wait for the loading to finish, then tap the first session"克劳德将使用 tap_element那么 wait_for_element_gone 使用加载指示符的resource_id,然后继续。
高效运行测试流
"Tap 'Picking Flow', wait for the sessions to load, tap the first session, fill in the value, and submit"克劳德将使用 tap_element 随着 observe_stabilize: true 和 wait_for_element 在服务器端处理加载状态。
检查UI
"What buttons are visible on the screen?"克劳德将使用 get_ui_tree 随着 only_clickable: true 仅列出交互式元素。
运作原理
- 安卓:用途
adb直接命令(屏幕盖、输入、uiautomator、am、wm) - iOS模拟器:用途
xcrun simctl(截图、io、启动、openurl) - iOS物理设备:用途
idb(Facebook的iOS开发桥梁)
屏幕截图被压缩为 锋利 (调整大小+JPEG质量)以保持在Claude的1MB图像限制以下。
UI元素包括 type, text, bounds, center_x/center_y (用于敲击), clickable, resource_id, enabled,以及 focused.
许可证
麻省理工学院
