移动MCP
一种模型上下文协议服务器,通过与平台无关的接口实现iOS和Android设备的可扩展移动自动化,允许代理和大型语言模型(LLMs)使用无障碍快照或基于坐标的交互方式与移动应用程序进行交互。
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"mobile-mcp": {
"args": [
"-y",
"@mobilenext/mobile-mcp@latest"
],
"command": "npx"
}
}
}
服务介绍
Mobile Next - 移动开发和自动化用的MCP服务器 | iOS, Android, 模拟器, 仿真器及实体设备
这是一个模型上下文协议 (MCP) 服务器,它通过一个平台无关的接口实现了可扩展的移动自动化开发,消除了对特定iOS或Android知识的需求。您可以在仿真器、模拟器以及实体设备(iOS和Android)上运行它。
该服务器允许代理和大语言模型通过结构化的无障碍快照或基于屏幕截图的坐标点击与原生iOS/Android应用程序和设备进行交互。
https://github.com/user-attachments/assets/c4e89c4f-cc71-4424-8184-bdbc8c638fa1
🚀 Mobile MCP 路线图:构建移动未来的蓝图
加入我们不断改进Mobile MCP的旅程吧!
查看我们的详细路线图,了解即将推出的功能、改进和里程碑。您的反馈对于塑造移动自动化的未来至关重要。
👉 探索路线图
主要应用场景
我们如何帮助扩大移动自动化规模:
- 📲 针对测试或数据录入场景的原生应用自动化(iOS 和 Android)。
- 📝 不需要手动控制模拟器/仿真器或实体设备(如iPhone、三星、Google Pixel等),即可实现脚本化流程和表单交互。
- 🧭 由大语言模型驱动的多步骤用户旅程自动化。
- 👆 为基于代理框架的一般用途移动应用程序交互提供支持。
- 🤖 支持用于移动自动化用例的数据提取中的代理间通信。
主要特性
- 🚀 快速且轻量:大多数交互使用原生无障碍树,当无障碍标签不可用时,则基于屏幕截图坐标。
- 🤖 适合大语言模型:在无障碍(快照)中不需要计算机视觉模型。
- 🧿 视觉感知:评估并分析屏幕上实际渲染的内容以决定下一步行动。如果无障碍数据或视图层次坐标不可用,则回退到基于屏幕截图的分析。
- 📊 确定性工具应用:尽可能依赖结构化数据来减少纯基于屏幕截图方法中的模糊性。
- 📺 提取结构化数据:使您能够从屏幕上可见的任何内容中提取结构化数据。
🏗️ Mobile MCP 架构
📚 Wiki 页面
更多关于设置、配置和调试相关问题的详细信息,请参阅我们的 wiki 页面。
安装和配置
{
"mcpServers": {
"mobile-mcp": {
"command": "npx",
"args": ["-y", "@mobilenext/mobile-mcp@latest"]
}
}
}
claude mcp add mobile -- npx -y @mobilenext/mobile-mcp@latest
前提条件
将 MCP 与您的代理和移动设备连接所需的内容:
- Xcode 命令行工具
- Android 平台工具
- node.js
- 支持 MCP 的基础模型或代理,如 Claude MCP,OpenAI Agent SDK,Copilot Studio
模拟器、仿真器和物理设备
启动时,Mobile MCP 可以连接到:
- macOS/Linux 上的 iOS 模拟器
- Linux/Windows/macOS 上的 Android 仿真器
- 物理 iOS 或 Android 设备(需要适当的平台工具和驱动程序)
确保在运行 Mobile Next Mobile MCP 之前正确安装并配置了移动平台 SDK(Xcode, Android SDK)。
在模拟器/仿真器上以“无头”模式运行
当您没有将物理手机连接到机器上时,您可以使用后台运行的仿真器或模拟器来运行 Mobile MCP。
例如,在 Android 上:
- 启动一个仿真器(avdmanager / emulator 命令)。
- 使用所需的标志运行 Mobile MCP
在 iOS 上,您需要 Xcode 并在使用该模拟器实例前启动 Simulator。
xcrun simctl listxcrun simctl boot "iPhone 16"
移动命令和交互工具
这些命令和工具同时支持基于可访问性的定位器(首选)和基于坐标的输入,为您提供灵活性,当缺少用于可靠且无缝自动化的可访问性/自动化 ID 时尤其有用。
mobile_list_apps
- 描述: 列出设备上安装的所有应用程序
- 参数:
bundleId(字符串): 应用程序的独特包标识符,如:com.google.android.keep 或 com.apple.mobilenotes
mobile_launch_app
- 描述: 在设备/仿真器上启动指定的应用程序
- 参数:
bundleId(字符串): 应用程序的独特包标识符,如:com.google.android.keep 或 com.apple.mobilenotes
mobile_terminate_app
- 描述: 终止正在运行的应用程序
- 参数:
packageName(字符串): 根据应用程序的包/标识符调用 am force stop 或者基于 pid 杀死应用。
mobile_get_screen_size
- 描述: 获取移动设备屏幕的像素尺寸
- 参数: 无
mobile_click_on_screen_at_coordinates
- 描述: 根据坐标点击屏幕上指定的位置。
- 参数:
x(数字): X 坐标y(数字): Y 坐标
mobile_list_elements_on_screen
- 描述: 列出屏幕上的元素及其坐标,附带显示文本或无障碍标签。
- 参数: 无
mobile_element_tap
- 描述: 点击通过无障碍定位器识别的 UI 元素
- 参数:
element(字符串): 人类可读的元素描述(例如,“登录按钮”)ref(字符串): 从快照中获取的无障碍/自动化 ID 或引用
mobile_tap
- 描述: 点击屏幕上指定的坐标
- 参数:
x(数字): X 坐标y(数字): Y 坐标
mobile_press_button
- 描述: 按下设备上的按钮(如主页、返回、音量、输入、电源按钮)。
- 参数: 无
mobile_open_url
- 描述: 在设备浏览器中打开一个 URL
- 参数:
url(字符串): 要打开的 URL(例如, "https://example.com")。
mobile_type_text
- 描述: 在焦点 UI 元素(例如 TextField, SearchField)中键入文本
- 参数:
text(字符串): 要键入的文本submit(布尔值): 键入后是否按下 Enter/Return 键
mobile_element_swipe
- 描述: 从一个 UI 元素滑动到另一个 UI 元素执行滑动手势
- 参数:
startElement(字符串): 起始元素的人类可读描述startRef(字符串): 起始元素的无障碍/自动化 IDendElement(字符串): 结束元素的人类可读描述endRef(字符串): 结束元素的无障碍/自动化 ID
mobile_swipe
- 描述: 在两组屏幕坐标之间执行滑动手势
- 参数:
startX(数字): 起始 X 坐标startY(数字): 起始 Y 坐标endX(数字): 结束 X 坐标endY(数字): 结束 Y 坐标
mobile_press_key
- 描述: 按下硬件键或触发特殊事件(例如,在 Android 上按返回按钮)
- 参数:
key(字符串): 键标识符(例如,HOME, BACK, VOLUME_UP 等)
mobile_take_screenshot
- 描述: 捕获当前设备屏幕的截图
- 参数: 无
mobile_get_source
- 描述: 获取当前设备 UI 结构(无障碍快照)(xml 格式)
- 参数: 无
感谢所有贡献者 ❤️
我们感谢每一位帮助改进此项目的人。
当然,这里是翻译后的中文内容,同时保持了markdown格式,并原样保留了全部代码块和链接内容:
请注意,由于这个markdown片段主要是由一个链接和一张图片组成,且没有实际的文字需要翻译,因此在转换为中文时外观上看起来与原文完全一致。这里的处理主要是确认没有文字部分需要翻译。如果有其他具体的文字或说明,请告知以便进一步处理。