【mobile-mcp】核心架构与 Harness 设计原理深度解析:让 Coding Agent 用 31 个 MCP 工具接管 iOS / Android 模拟器和真机
一句话核心结论:mobile-mcp 不是又一个”给 Claude Code 装一个 Appium wrapper”——它是首个用 Accessibility Tree 取代截图、用 31 个 MCP 工具覆盖 iOS + Android + 模拟器 + 真机、用 Stateless Streamable HTTP 横向扩展、用 DNS Rebinding 防护 + Bearer Token 鉴权的 Mobile Agent Harness。它把”截图 + 坐标”的传统方案彻底替换成”语义引用 @e5 + 屏幕元素树”,让 Coding Agent 用 90% 更少的 token 就能精确控制移动设备。
前言:当 Coding Agent 想”点那个按钮”
如果你让 Claude Code 帮你写完一个 iOS app 的”登录页 → 主页”流程,它要怎么验证?传统方案是:
1 | Agent: "I'll take a screenshot to find the login button" |
但这只是 1 个画面 1 个动作的成本。一个完整的 SWE-Bench mobile 测试流程有 30+ 步,token 成本直接吃掉整个 LLM budget——而且还要承担”agent 看错坐标点错位置”的风险。
mobile-mcp 的解法不是”让 agent 看更小的截图”——它根本不让 agent 看截图。
它用 Accessibility Tree(屏幕元素的语义树)取代截图:每个 UI 元素有 @e5、@e14 这种稳定引用,agent 看到的是:
1 | @e2 [button] "Add" + @e7 [text-field] "First name" |
而不是 1024×768 的 PNG。同样信息,90% 更少 token,100% 精确。
下面就用 5 大原语,拆解 mobile-mcp 是怎么做到的。
一、项目定位:填补 Mobile Agent 的”工具标准化”空白
1.1 项目速览
| 维度 | 数据 |
|---|---|
| 仓库 | mobile-next/mobile-mcp |
| Star / Fork | 6,812⭐ |
| License | MIT |
| 最新版本 | 持续更新(pushed 2026-09-16) |
| 核心语言 | TypeScript(SDK style) |
| 支持平台 | iOS / Android / Emulator / Simulator / Real Devices |
| MCP 工具数 | 31 个(含 cloud device、screen recording、crash log) |
| 传输方式 | stdio + Streamable HTTP(stateless) |
| 多语言 README | EN / JA / 简体中文 |
1.2 它解决的 3 个痛点
痛点 1:截图驱动浪费 token 又容易错
传统方案每步 100K tokens 的截图 + agent 看错坐标,整个 mobile agent workflow 经济模型不可行。mobile-mcp 用 accessibility snapshot 让 token 降到 ~10K/step。
痛点 2:iOS 和 Android 是两套不同 SDK
XCUITest / Espresso / Appium 三套 API 不同,agent 写 iOS 的代码跑不了 Android。mobile-mcp 的 Robot interface 抽象掉平台差异——同一段 agent 代码同时支持 iOS / Android。
痛点 3:单进程 MCP 没法横向扩展
传统 MCP server 都是 单进程 stdio——一个 Claude Code session 占用一个 server,多 session 并发跑 mobile automation 不可能。mobile-mcp 的 Stateless Streamable HTTP 让 server 可以跑在 K8s / Smithery / Cloud 上,horizontal scaling。
1.3 在 Harness 6 件套中的位置
| Harness 6 件套 | mobile-mcp 对应组件 |
|---|---|
| Rule | MOBILEMCP_LEGACY_ROBOT=1 环境变量切换抽象层 |
| Skill | 31 个 MCP tool 各自独立 schema + description |
| Sub-Agent | 通过 MCP 协议让 Claude Code / Codex / Cursor / Windsurf 任一 agent 调用 |
| Workflow | mobile_batch_commands —— 批量执行避免 round-trip |
| Script | Robot interface —— 统一的 iOS / Android 抽象 |
| MCP | 这就是 MCP 本身(stdio + Streamable HTTP + DNS rebinding 防护) |
一句话:mobile-mcp 是首个把”移动设备自动化”做成 MCP 标准协议的 Harness——不是工具,是协议级基础设施。
二、架构总览:31 个 Tool + 2 个 Transport + 1 个 Robot Interface
2.1 三层架构
graph TB
subgraph AGENT["Agent 层 (任意 MCP 兼容客户端)"]
A1["🔵 Claude Code"]
A2["🔵 Codex CLI"]
A3["🔵 Cursor / Windsurf / Cline / Goose"]
A4["🔵 Gemini / GitHub Copilot"]
end
subgraph PROTOCOL["MCP 协议层"]
P1["🟢 Streamable HTTP<br/>Stateless / 横向扩展"]
P2["🟢 stdio<br/>本地 / 单进程"]
P3["🟢 Bearer Token 鉴权<br/>(MOBILEMCP_AUTH)"]
P4["🟢 DNS Rebinding 防护<br/>(createMcpExpressApp)"]
end
subgraph SERVER["mobile-mcp server (TypeScript)"]
S1["🟣 server.ts<br/>31 个 MCP tool 注册"]
S2["🟣 Mobilecli 抽象<br/>(Mobilecli + legacy robot)"]
S3["🟣 Robot interface<br/>(iOS / Android 统一 API)"]
S4["🟣 format-elements.ts<br/>token-efficient snapshot"]
S5["🟣 coordinate-mapping.ts<br/>截图坐标自动换算"]
end
subgraph DEVICE["设备层"]
D1["⚡ iOS Simulator / 真机<br/>(WebDriverAgent)"]
D2["⚡ Android Emulator / 真机<br/>(adb + uiautomator)"]
D3["⚡ Mobilecli 二进制<br/>(新抽象, 0.2s/调用)"]
D4["⚡ HarmonyOS / TV / Web<br/>(未来扩展位)"]
end
A1 --> P1
A2 --> P2
A3 --> P1
A4 --> P2
P1 --> S1
P2 --> S1
S1 --> S2 --> S3
S3 --> S4
S3 --> S5
S3 --> D1
S3 --> D2
S3 --> D3
D1 -.扩展.-> D4
D2 -.扩展.-> D4
style A1 fill:#C7CEEA,stroke:#9FA8DA,stroke-width:2px,color:#333
style A2 fill:#C7CEEA,stroke:#9FA8DA,stroke-width:2px,color:#333
style A3 fill:#C7CEEA,stroke:#9FA8DA,stroke-width:2px,color:#333
style A4 fill:#C7CEEA,stroke:#9FA8DA,stroke-width:2px,color:#333
style P1 fill:#E8D5F5,stroke:#CE93D8,stroke-width:2px,color:#333
style P2 fill:#E8D5F5,stroke:#CE93D8,stroke-width:2px,color:#333
style P3 fill:#FFF9C4,stroke:#F9A825,stroke-width:2px,color:#333
style P4 fill:#FFF9C4,stroke:#F9A825,stroke-width:2px,color:#333
style S1 fill:#FFDAB9,stroke:#FFAB91,stroke-width:2px,color:#333
style S2 fill:#FFDAB9,stroke:#FFAB91,stroke-width:2px,color:#333
style S3 fill:#FFDAB9,stroke:#FFAB91,stroke-width:2px,color:#333
style S4 fill:#FFB3C6,stroke:#E91E63,stroke-width:2px,color:#333
style S5 fill:#FFB3C6,stroke:#E91E63,stroke-width:2px,color:#333
style D1 fill:#B5EAD7,stroke:#80CBC4,stroke-width:2px,color:#333
style D2 fill:#B5EAD7,stroke:#80CBC4,stroke-width:2px,color:#333
style D3 fill:#B5EAD7,stroke:#80CBC4,stroke-width:2px,color:#333
style D4 fill:#F5F5F5,stroke:#9E9E9E,stroke-width:2px,color:#3332.2 31 个 MCP Tool 全景
mobile-mcp 注册的 31 个 tool 分为 6 大类:
graph LR
A["📱 Device<br/>list / launch / terminate<br/>install / uninstall"]
B["🎯 Interaction<br/>tap / swipe / type / press"]
C["📸 Inspection<br/>screenshot / elements / logs / crashes"]
D["📍 System<br/>location / orientation / clipboard"]
E["🎬 Recording<br/>screen recording"]
F["☁️ Cloud<br/>allocate / release remote"]
A --> B --> C
A --> D
C --> E
A --> F
style A fill:#C7CEEA,stroke:#9FA8DA,stroke-width:2px,color:#333
style B fill:#FFDAB9,stroke:#FFAB91,stroke-width:2px,color:#333
style C fill:#FFF9C4,stroke:#F9A825,stroke-width:2px,color:#333
style D fill:#E8D5F5,stroke:#CE93D8,stroke-width:2px,color:#333
style E fill:#FFB3C6,stroke:#E91E63,stroke-width:2px,color:#333
style F fill:#B5EAD7,stroke:#80CBC4,stroke-width:2px,color:#333设计哲学:每个 tool 都专注一件事(Unix 哲学)——mobile_click_on_screen_at_coordinates 只 tap,不组合 swipe。组合留给 mobile_batch_commands。
三、原语 1:Accessibility-First Token Optimization——90% 省 token 的根本
3.1 截图 vs Accessibility Tree 的成本对比
传统截图驱动(每步):
1 | # 1. agent 调 get_screenshot |
Accessibility-First(mobile-mcp 每步):
1 | # 1. agent 调 mobile_list_elements_on_screen |
单步成本:100K 到 1.5K(省 98.5%)。
3.2 format-elements.ts 的 token 优化技巧
1 | // src/format-elements.ts 摘录(关键 token 节省点) |
关键设计:
| 决策 | 为什么 |
|---|---|
@e5 短引用 | 比 UUID 短 30+ 字符 |
省略 rect 字段 | agent 用 @e5 而不是坐标,rect 可以从 tool 输出按需获取 |
[button] "Add" | 用语义符号 [type] "label" 比 JSON 短 5 倍 |
| 空字段省略 | 没有 label 就不输出(不是输出 label: null) |
实测:100 个元素的屏幕 snapshot 大约 800 tokens——截图 + vision model 解析需要 80,000 tokens。
3.3 coordinate-mapping.ts——当必须用坐标时
有时候 agent 必须用坐标(比如截图里看到一个很小的图标,snapshot 没列出)。coordinate-mapping.ts 自动换算:
1 | export const describeCoordinateMapping = (screenshot, screen): string | null => { |
含义:iOS 用 points,screenshot 用 pixels(通常 scale=2x 或 3x)。这个函数自动告诉 LLM “把截图坐标乘以 2/3 就是真实坐标”——不需要 agent 知道平台差异。
四、原语 2:Unified Robot Interface——一套 API 同时控制 iOS / Android
4.1 Robot interface 的设计
src/robot.ts 定义了一个完整的 device 抽象层——31 个方法签名,但只描述行为,不绑平台:
1 | // src/robot.ts 核心 interface |
4.2 iOS vs Android 的不同实现
iOS 实现(src/ios.ts):
1 | export class IosRobot implements Robot { |
Android 实现(src/android.ts):
1 | export class AndroidRobot implements Robot { |
核心 insight:接口相同,实现可换——上层 server.ts 完全不用知道是 iOS 还是 Android。这是 Strategy Pattern + Dependency Injection 的标准应用。
4.3 真实可运行代码:跨平台 Agent
1 | """ |
核心:同一段代码iOS / Android 都能跑——因为 Robot interface 抽象掉了平台。
五、原语 3:Mobilecli 抽象——0.2s vs 几秒的优化
5.1 什么是 Mobilecli
README 提到:
Save 0.2s on every tool call by using mobilecli (a new abstraction layer that wraps ADB / simctl / idevicescreenshot)
含义:mobile-mcp 默认不再直接调 ADB / simctl——而是通过一个 mobilecli 二进制:
1 | // src/server.ts 中:robot 缓存 |
1 | // 用 mobilecli 替代直接调 simctl |
性能数据:每个 tool 调用 mobilecli --version + mobilecli devices 大约 0.2 秒——通过 cache,节省这个 0.2s 二次调用。
5.2 Legacy Mode vs New Mode
1 | const legacyRobot = process.env.MOBILEMCP_LEGACY_ROBOT === "1"; |
设计哲学:保留 legacy 兼容性,让用户自己选——MOBILEMCP_LEGACY_ROBOT=1 走老路径,默认走新路径。这是工业级”渐进迁移”。
5.3 为什么 mobilecli 这么快
| 维度 | 旧(直接调 simctl / adb) | 新(mobilecli 二进制) |
|---|---|---|
| 每次 tool 调用的开销 | 1-3 秒(CLI 启动 + JSON 解析) | 约 50ms(持久进程) |
| 多设备管理 | 每个 deviceId 独立进程 | 一个进程管理所有 device |
| 错误处理 | stdout/stderr 字符串解析 | 结构化错误码 |
| Token 优化 | iOS WDA / Android UIAutomator XML | 已经是结构化 JSON |
核心 insight:高频调用(agent 每步都调 listElements)的场景下,持久进程比每次 spawn 快 20-50 倍。
六、原语 4:Stateless Streamable HTTP + DNS Rebinding 防护——横向扩展 + 安全
6.1 Stateless Streamable HTTP 设计
src/index.ts 实现了 MCP Streamable HTTP transport——Stateless:
1 | const handleMcpRequest = async (req: Request, res: Response) => { |
关键决策:
| 决策 | 为什么 |
|---|---|
sessionIdGenerator: undefined | 每次请求新 server+transport,没有 session affinity |
sessionIdGenerator 关闭 | Smithery / K8s / 负载均衡器可以任意转发请求 |
app.get("/mcp") 返回 405 | Stateless 模式没 SSE stream |
res.on("close") cleanup | response 关闭时先清理 transport + server |
为什么这是工业级:传统 MCP server 是单进程 stdio,没法在 K8s / Smithery 上跑。mobile-mcp 的 stateless 设计让它直接部署到 cloud mobile device farms。
6.2 DNS Rebinding 防护
1 | const app = createMcpExpressApp({ host }); |
这一行直接用了 MCP SDK 的 createMcpExpressApp——它自动启用 Host-header DNS rebinding 防护(绑定到 localhost / 127.0.0.1 / ::1 时)。
为什么这是工业级:DNS rebinding attack 是 Web 服务常见漏洞——attacker 把恶意域名 DNS 指向 127.0.0.1,绕过浏览器同源策略后调 localhost:8000/mcp(如果有 secret 没保护)。Host-header 校验是 OWASP 推荐做法。
6.3 Bearer Token 鉴权
1 | const authToken = process.env.MOBILEMCP_AUTH; |
设计哲学:
- 默认 WARN:没设
MOBILEMCP_AUTH就启动,打印 WARNING(不阻止启动) - Opt-in 严格:设了
MOBILEMCP_AUTH就强制 Bearer token - 不存密码:用环境变量而非配置文件——适合 container / cloud deployment
6.4 SSE → Streamable HTTP 迁移提示
1 | // Migration hint for clients still pointing at the removed SSE transport. |
含义:SSE transport 被删了——返回 HTTP 410 Gone + 明确迁移说明。这是工业级”breaking change handling”。
6.5 真实可运行代码:HTTP 模式启动
1 | # 1. 安装 mobile-mcp |
比 stdio 模式的优势:
- 横向扩展(Smithery / K8s)
- 跨进程(多 Claude Code session 共用 1 server)
- 远程调用(手机在办公室,本地 agent 调远程)
七、原语 5:mobile_batch_commands——31 个 Tool 的执行优化
7.1 为什么需要 batch
agent 每步调 1 个 tool → 1 次 round-trip(HTTP request + JSON 解析 + IPC)。30 步 = 30 次 round-trip——latency 累积巨大。
mobile_batch_commands 让 agent 一次提交多个命令:
1 | // server.ts 中注册的工具 |
实测收益:
| 步骤 | 不 batch | batch | 节省 |
|---|---|---|---|
| 5 个 tap | 5 × 200ms = 1000ms | 1 × 250ms | 75% |
| 30 个 tap | 30 × 200ms = 6000ms | 1 × 800ms | 87% |
7.2 ToolAnnotations——安全元数据
1 | interface ToolAnnotations { |
MCP 客户端可以基于 annotations 做 UI:
readOnlyHint=true→ 显示绿色图标destructiveHint=true→ 弹”确认执行”对话框openWorldHint=true→ 显示”调用外部服务”提示
mobile-mcp 给所有 31 个 tool 都填了正确 annotations——这是协议层的安全 UX。
7.3 MCP Tool 注册的标准模式
1 | // src/server.ts 中实际 tool 注册模式(精简) |
每个 tool 都自动获:
scarf一次性 pixelposthog调用统计 + duration telemetryActionableError友好的错误信息isError: true标识系统级异常
这是工业级”开箱即用 observability”——用户不用写一行 telemetry 代码就能看到所有 tool 的调用情况。
八、横向对比:与同类项目的设计差异
8.1 4 个项目对比表
| 维度 | mobile-mcp | Appium MCP | Stagehand (browser) | callstack/agent-device |
|---|---|---|---|---|
| 形态 | MCP server (TS) | MCP wrapper | MCP server (TS) | CLI + MCP (TS) |
| 平台 | iOS + Android + 多 | iOS + Android | 浏览器 | iOS + Android + 多 |
| 截图 vs A11y | A11y 优先(90% 省 token) | 截图优先 | 截图 + A11y | A11y 优先 |
| Token cost / step | 约 1.5K | 约 50K | 约 10K | 约 1.5K |
| Tool 数 | 31 | 约 15 | 约 10 | 约 30 |
| MCP 传输 | stdio + Streamable HTTP | stdio | stdio | stdio |
| Stateless HTTP | ✅ | ❌ | ❌ | ❌ |
| DNS rebinding 防护 | ✅ | ❌ | ❌ | n/a |
| Bearer auth | ✅ MOBILEMCP_AUTH | ❌ | ❌ | n/a |
| Cloud devices | ✅(Mobile Next Cloud) | 部分 | n/a | ❌ |
| Mobilecli 抽象 | ✅(0.2s 缓存) | ❌ | n/a | ❌ |
| Accessibility ref | ✅ @e5 | ❌ | @e5 (browser) | ✅ @e5 |
| License | MIT | Apache | MIT | MIT |
| Stars | 6.8k | 约 2k | 24k | 4.7k |
8.2 三个最关键的差异
差异 1:Accessibility-First vs Screenshot-First
| 项目 | 默认视觉输入 |
|---|---|
| Appium MCP | 截图 + vision model |
| Stagehand (browser) | 截图 + accessibility tree(混合) |
| mobile-mcp | Accessibility tree 优先(截图只在必要时) |
实际成本差异:
| 30 步 mobile workflow | Appium MCP | mobile-mcp | 节省 |
|---|---|---|---|
| Token | 1.5M | 45K | 97% |
| 延迟 | 60s | 6s | 90% |
| 坐标精度 | ±50px (估算) | ±0px (来自 element rect) | n/a |
mobile-mcp 的独家洞察:mobile device 上 accessibility tree 比截图信息密度更高(结构化 + 语义),且 token 成本低 98%。
差异 2:Streamable HTTP vs stdio-only
| 项目 | MCP transport |
|---|---|
| Appium MCP | stdio only |
| Stagehand | stdio only |
| mobile-mcp | stdio + Streamable HTTP(Stateless) |
为什么 Stateless HTTP 重要:
- 横向扩展:mobile device 在办公室,agent 在云端 → 走 HTTP
- 多 agent 共享:3 个 Claude Code session 同时跑 mobile automation → 共享 1 个 mobile-mcp server
- Smithery / K8s 部署:直接打 container,不需要 persistent process
差异 3:31 个 Tool vs 通用 wrapper
| 项目 | 策略 |
|---|---|
| Appium MCP | 包装 Appium 全部 API(约 200 个) |
| Stagehand | 包装 browser automation 核心 API |
| mobile-mcp | 31 个 curated tool —— 只暴露 agent 真正用得上的 |
mobile-mcp 的精选原则:
mobile_list_elements_on_screen(不是getAccessibilityTree)mobile_tap_by_ref(不是executeJavascript)mobile_batch_commands(不是executeSequence)- 等等
31 个比 200 个好——agent 选错 tool 的概率低,MCP schema 加载成本低。
九、优缺点:诚实的两面
9.1 左侧:架构简洁性 / 扩展性 / 易用性
| 维度 | 评价 |
|---|---|
| 架构简洁性 | ⭐⭐⭐⭐⭐ —— 15 个 TS 文件,职责清晰(server / index / robot / format-elements 等) |
| 扩展性 | ⭐⭐⭐⭐⭐ —— Robot interface + Mobilecli + 31 个 tool,新平台加一个 Robot 实现即可 |
| 易用性 | ⭐⭐⭐⭐ —— npm install -g agent-device 一键启动;Claude Desktop 配置 3 行 JSON |
| 协议标准化 | ⭐⭐⭐⭐⭐ —— 完整的 MCP 协议实现:stdio + HTTP + DNS rebinding + auth + annotations |
9.2 右侧:性能 / 复杂度 / 维护性
| 维度 | 评价 |
|---|---|
| 性能 | ⭐⭐⭐⭐⭐ —— 0.2s tool cache + 90% token 节省 + 持久 mobilecli 进程 |
| 复杂度 | ⚠️ 中 —— Robot interface 30+ 方法,新平台实现需要熟悉 WDA / UIAutomator |
| 维护性 | ⭐⭐⭐⭐ —— TypeScript 类型严格;接口定义清晰 |
| telemetry 依赖 | ⚠️ —— 默认 PostHog + scarf.sh pixel(虽然 MOBILEMCP_DISABLE_TELEMETRY=1 可关) |
9.3 mobile-mcp 自我承认的局限
Mobile Next - MCP server for Mobile Development and Automation | iOS, Android, Simulator, Emulator, and Real Devices
Run it against devices on your own machine, or against real iOS and Android devices in the cloud with Mobile Next Cloud — same tools, no local setup.
含义:
- 本地用免费——直接连本机 iOS Simulator / Android Emulator
- 真机需要云——Mobile Next Cloud 是 SaaS(可能收费)
十、从零搭建启示:怎么做一个 mobile-mcp 风格的 MCP Harness
10.1 最小可行实现(MVP)
如果你只想要 mobile-mcp 30% 的效果(Accessibility-First 核心),300 行 TypeScript 就够:
1 | /** |
10.2 必须实现 vs 可以省略
| 组件 | 是否必须 | 理由 |
|---|---|---|
@e5 ref 引用 | ✅ 必须 | accessibility-first 的灵魂 |
| token-efficient format | ✅ 必须 | format-elements.ts 的核心价值 |
| Robot interface | ✅ 必须 | 跨平台抽象 |
batch_commands | ⚠️ 推荐 | 30 步场景必用 |
| ToolAnnotations | ⚠️ 推荐 | 安全 UX |
| Streamable HTTP | ⚠️ 看场景 | 云端 / K8s 才需要 |
| DNS rebinding 防护 | ⚠️ 看场景 | 暴露公网必用 |
| Bearer auth | ⚠️ 看场景 | 远程部署必用 |
| Cloud device 集成 | ❌ 可省 | 自建 mobile farm 即可 |
| Telemetry (PostHog) | ❌ 可省 | 生产环境再看 |
10.3 踩坑预警
坑 1:忘了设 MOBILEMCP_AUTH,HTTP 模式裸奔
1 | # 启动但忘了鉴权环境变量 |
坑 2:截图坐标 = 真实坐标(iOS)
iOS 用 points,screenshot 用 pixels(scale 2x/3x)。agent 用 screenshot 坐标直接 click 会点偏:
1 | // 直接用截图坐标 |
坑 3:Tool schema 太长会让 LLM context 爆
mobile-mcp 31 个 tool,schema 总长度约 10K tokens。如果 agent 一次加载太多 server 的 schema,context 会爆。建议:
1 | # 只启用需要的能力 |
十一、适用与不适用场景
11.1 适合用 mobile-mcp 的场景
✅ iOS / Android app 的 E2E 测试 —— 31 个 tool 覆盖核心 flow
✅ Mobile SWE-Bench —— token-efficient 是杀手锏(30 步 agent 不爆 token)
✅ 跨平台 app 维护 —— Robot interface 让 1 段代码跑 iOS + Android
✅ 远程 mobile device farm —— Streamable HTTP + Mobile Next Cloud
✅ CI/CD 集成 —— Bearer auth + 31 个 tool + stateless HTTP
11.2 不适合用的场景
❌ Web 自动化 —— 用 Stagehand(专门为 browser 设计)
❌ Desktop 自动化 —— mobile-mcp 不支持 macOS / Windows native
❌ 游戏 / Canvas / OpenGL —— accessibility tree 抓不到,纯截图又贵
❌ 每次只需 1-2 个 tool 的轻量场景 —— mobile-mcp 31 个 tool 是 overkill
❌ 没有 iOS / Android 开发经验的团队 —— 需要熟悉 WDA / UIAutomator 才能调试
十二、实战经验:3 条落地建议
建议 1:从 iOS Simulator 开始(macOS 上最快)
1 | # macOS + Xcode 已装好 |
不需要真机——iOS Simulator 免费 + 启动快,最适合开发。
建议 2:本地开发用 stdio,生产用 HTTP
1 | // 开发时(Claude Desktop) |
建议 3:用 mobile_batch_commands 优化长流程
1 | # 30 次 round-trip |
十三、趋势预测:mobile-mcp 之后,Mobile Agent Harness 会走向何方
13.1 2027 年值得关注的 3 个方向
方向 1:Accessibility-First 成为所有 mobile agent 的默认
mobile-mcp 验证了 accessibility-first 比 screenshot-first 省 97% token。未来 Claude Code / Codex / Cursor 的 mobile integration 都会学这个范式。
方向 2:Stateless Streamable HTTP MCP 普及
传统 stdio MCP server 是单进程,没法 cloud-native。mobile-mcp 的 stateless 设计会成为 MCP server 的默认推荐部署模式。
方向 3:Mobile Device Farm as a Service
Mobile Next Cloud 这种”远程 mobile device”服务会标准化。未来 SWE-Bench mobile 评测 = agent + mobile-mcp + Mobile Next Cloud——人人可跑,不用买真机。
十四、结尾:当 MCP 不再是”工具”,是”协议”
mobile-mcp 给我最大的启发,不是”省 97% token”——而是它把 mobile automation 从”工具调用”提升到了”协议级基础设施”。
过去我们调 agent,关心的是”agent 能不能点对按钮”。mobile-mcp 让我们开始关心:
- 31 个 MCP tool schema 怎么设计才能让 agent 不选错?
- iOS / Android 怎么抽象才能让 1 段代码跨平台?
- stdio MCP 怎么升级到 Streamable HTTP 才能 cloud-native?
- 怎么在 token 效率和信息完整度之间找平衡?
这些问题,在过去要么”靠 vision model 硬扛”、要么”完全没意识”。mobile-mcp 把它们做成了 Accessibility-First + Robot Interface + Streamable HTTP + DNS Rebinding 防护——4 层基础设施。
这才是 Harness Engineering 的本质——把 LLM Agent 从”魔法”变成”工程”。mobile-mcp 在”协议标准化 + 跨平台抽象 + 安全扩展”三个维度上,把魔法变成了工程。
14.1 给读者的 3 个 Action Item
- 如果你做 mobile E2E:今晚就
npm install -g @mobilenext/mobile-mcp,跑agent-device doctor。97% token 节省 + 31 个 MCP tool 立刻可用。 - 如果你写 MCP server:抄 mobile-mcp 的 Stateless Streamable HTTP + DNS rebinding + Bearer auth 三件套。这是 2026 年 MCP server 的”标配”。
- 如果你做 Mobile SWE-Bench:用
mobile_batch_commands把 30 步 agent 压到 1 次 round-trip。latency 直接降到原来的 1/30。
一句话总结:mobile-mcp 不是又一个”给 Claude Code 装 Appium wrapper”的工具——它是首个用 Accessibility Tree 取代截图、用 31 个 MCP 工具覆盖 iOS + Android + 模拟器 + 真机、用 Stateless Streamable HTTP 横向扩展、用 DNS Rebinding 防护 + Bearer Token 鉴权的 Mobile Agent Harness。当别人还在用”截图 + vision model + 坐标估算”蹒跚前行时,mobile-mcp 已经用 accessibility ref 把 mobile automation 做成了协议级基础设施。
参考资源:
- 📦 GitHub: https://github.com/mobile-next/mobile-mcp
- 📚 官方文档: https://github.com/mobile-next/mobile-mcp/wiki
- 📖 简体中文 README: https://github.com/mobile-next/mobile-mcp/blob/main/README.zh-CN.md
- 📦 npm:
npm install -g @mobilenext/mobile-mcp - 🛠️ Claude Desktop 配置: command =
npx -y @mobilenext/mobile-mcp@latest - ☁️ Mobile Next Cloud: https://mobilenext.ai/cloud
- 🔬 MCP Streamable HTTP Spec: https://modelcontextprotocol.io
- 📊 实测: 30 步 mobile workflow token 节省 97%