Loading...
正在加载...
请稍候

mobile-mcp:让 AI Agent 直接操控你的手机

✨步子哥 (steper) • 2026年09月26日 22:00

143 stars today | TypeScript | by mobile-next

一个场景

你对 Claude Code 说:"帮我打开微信,找到步子哥的对话框,发一条'明天的会议改到下午三点'。"

Claude Code 想了想,调用了 mobile_list_available_devices,发现你连着一台 iPhone。它调 mobile_get_screen_size,调 mobile_list_elements_on_screen,拿到了当前屏幕上所有 UI 元素的列表——每个元素都有坐标、文字、类型。它找到"微信"图标,调 mobile_click_on_screen_at_coordinates 点了一下。

微信打开了。它再调 mobile_list_elements_on_screen,找到搜索框,调 mobile_type_keys 输入"步子哥",找到匹配的联系人,点击进入对话框,再调 mobile_type_keys 发送消息。

整个过程没有截图、没有视觉模型、没有"我猜这个按钮大概在屏幕中间"的瞎猜。

这就是 mobile-mcp 做的事:给 AI Agent 一个操控手机的标准化接口。

它解决了什么问题

在 mobile-mcp 之前,让 AI 操控手机大概有三条路:

路一:截图 + 视觉模型。 Agent 截一张图,用 GPT-4V 或 Claude 看图,识别出按钮位置,然后点击。问题是:慢、贵、不准。每一步都要发一张截图给视觉模型,token 消耗巨大,而且视觉模型对 UI 元素的识别精度有限——小按钮、文字密集区域、动态加载内容都容易出错。

路二:平台专用自动化框架。 iOS 用 XCUITest,Android 用 Espresso。问题是:每个平台一套代码,维护成本高,而且这些框架是为测试设计的,不是为 Agent 设计的——它们假设你已经知道要点哪个元素,而不是让 Agent 自己探索。

路三:Appium。 跨平台,但 API 设计老旧,配置复杂,而且同样假设你知道要点什么。

mobile-mcp 选了第四条路:直接读 accessibility tree。

Accessibility-first 的核心思路

每个现代操作系统都维护一棵 accessibility tree——这是给残障辅助功能(VoiceOver、TalkBack)用的 UI 元素树。它包含屏幕上每个可见元素的类型、文字、坐标、状态。

mobile-mcp 做的事很简单:把这棵树读出来,转成结构化数据,给 Agent 看。

Agent 拿到的不是一张需要"看"的截图,而是一个 JSON 列表:

[
  {"type": "button", "text": "微信", "x": 45, "y": 612, "w": 90, "h": 90},
  {"type": "button", "text": "通讯录", "x": 135, "y": 612, "w": 90, "h": 90},
  ...
]

Agent 不需要"识别"按钮在哪——它已经知道了。它只需要决定点哪个,然后调 mobile_click_on_screen_at_coordinates(45, 657)。

这个选择带来三个好处:

快。 读 accessibility tree 比截图+视觉模型快一个数量级。没有图像编码、没有视觉推理、没有 token 消耗。

准。 坐标是操作系统给的,不是视觉模型猜的。小按钮、文字密集区域、动态加载内容都不影响。

便宜。 不用发截图给视觉模型,省掉了最贵的 token 消耗。只在 accessibility tree 不够用的时候(比如 canvas 绘制内容、视频内容)才 fallback 到截图+坐标。

一个 API,所有平台

mobile-mcp 的另一个核心设计是:同一套工具,跨所有平台。

目标 支持
iOS 模拟器 ✅
iOS 真机 ✅
Android 模拟器 ✅
Android 真机 ✅

你不需要写 iOS 版和 Android 版两套代码。Agent 调用的都是同一组 MCP 工具:mobile_list_elements_on_screen、mobile_click_on_screen_at_coordinates、mobile_type_keys、mobile_swipe_on_screen。底层是 Xcode 的 xcrun simctl 还是 Android 的 adb,Agent 不需要知道。

还有一个更激进的功能:云设备。通过 mobile_allocate_remote_device 和 mobile_release_remote_device,你可以从云端租一台真机,用完释放。这意味着 Agent 可以在 CI 里跑端到端测试,不需要本地连真机。

工具清单

mobile-mcp 提供了 30+ 个 MCP 工具,按功能分类:

  • 设备管理:列出设备、获取屏幕尺寸、获取/设置方向、设置 GPS 位置、读写剪贴板
  • 云设备:登录云平台、列出可用设备、租用/释放
  • 应用管理:列出应用、获取前台应用、启动/终止/安装/卸载应用
  • 屏幕交互:截图、列出 UI 元素、点击/双击/长按/滑动、录屏
  • 输入导航:输入文字、按硬件按钮(HOME/BACK/VOLUME)、打开 URL
  • 日志崩溃:收集设备日志、列出/获取崩溃报告
  • 批量命令:一次调用执行多个工具(比如点击→输入→点击)

它在 MCP 生态里的位置

MCP(Model Context Protocol)是 Anthropic 提出的标准,目的是让 AI Agent 用统一接口调用外部工具。现在 MCP 生态里有文件系统、数据库、API、搜索等各种 server,但移动设备一直是一个空白。

原因不难理解:移动设备比文件系统复杂得多。它有状态(前台/后台/锁屏)、有权限(USB 调试/开发者模式)、有平台差异(iOS/Android)、有连接方式差异(模拟器/真机/云设备)。把这些复杂性封装成一组统一的 MCP 工具,需要大量的平台工程经验。

mobile-mcp 的价值在于:它把"操控手机"这件事变成了 Agent 的一个标准能力,而不是每个 Agent 框架都要自己实现一遍的底层逻辑。

和其他方案的对比

方案 跨平台 无需视觉模型 Agent 原生 安装复杂度
mobile-mcp ✅ ✅ ✅ 低
Appium ✅ ✅ ❌ 高
截图+VLM ✅ ❌ ✅ 低
XCUITest/Espresso ❌ ✅ ❌ 中

mobile-mcp 是唯一一个在所有维度上都满足的方案。

一个更深的洞察

mobile-mcp 的 accessibility-first 设计揭示了一个更深的道理:Agent 不需要"看"屏幕,它需要"读"屏幕。

视觉模型是给"看"设计的——模拟人类视觉,从像素中推断语义。但操作系统已经有一份结构化的 UI 描述了(accessibility tree),为什么要让 Agent 从像素重新推断一遍?

这就像:你有一份 JSON 数据,但你非要把它渲染成 HTML,然后让 Agent 用 OCR 读回来。中间每一步都在丢失信息、增加成本。

mobile-mcp 的选择是:直接给 Agent 结构化数据。让 Agent 做它擅长的事(理解结构、做决策),不让它做它不擅长的事(从像素推断语义)。

这个思路不只适用于移动设备。桌面端的 UI automation、Web 端的 DOM 操作、甚至 API 调用,本质上都是同一个道理:结构化数据 > 视觉推理。


GitHub: mobile-next/mobile-mcp · License: MIT · Language: TypeScript

讨论回复

加载中...
正在加载回复...

正在加载回复...

推荐
智谱 GLM-5 已上线

我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。

领取 2000万 Tokens 通过邀请链接注册即可获得大礼包,期待和你一起在 BigModel 上畅享卓越模型能力
登录