mcpField
S
simframe

simframe

本地服务
lvlrsajjad.github.io开发工具04 周前更新

关于 simframe

simframe 是面向编码 Agent 的 MCP 服务和 CLI,用于操作 iOS 模拟器与 Android 模拟器。它以文本呈现屏幕和点击位置,并支持批量操作、屏幕记忆与流程重放。

主要功能

  1. 01带点击位置的文本屏幕地图
  2. 02批量执行并验证多步操作
  3. 03记忆屏幕并重放流程
  4. 04沿记录的屏幕转换导航
  5. 05检查应用保存的数据
  6. 06操作 iOS 与 Android 模拟器

适用场景

  1. 01自动完成注册等应用流程
  2. 02检查屏幕或控件是否响应
  3. 03重放已记录的操作流程
  4. 04检查设备上的应用数据

MCP 相关

MCP 服务向 MCP 客户端提供模拟器控制能力,包括屏幕查看、操作、导航和基于记忆的流程重放。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"lvlrsajjad-simframe": {
"command": "npx",
"args": [
"-y",
"simframe"
]
}
}
}
启动命令npx -y simframe

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

安装包
npmsimframe0.23.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

simframe

ci npm license Glama score

为操控 iOS Simulator 或 Android 模拟器的编码 Agent 提供眼睛、双手和记忆。 Agent 可将屏幕内容作为带点击位置的文本读取,一次调用即可运行完整流程,还能记住见过的屏幕,因此不必为每一步都支付截图、模型往返和重新读取的开销。

simframe 在 iPhone 17 Pro 模拟器中操控“设置”:一次调用、四个已验证步骤、不用截图,并以带点击位置的文本形式返回屏幕

同一应用会话,Token 消耗仅为一小部分。 在真实的 React Native 实地应用中,Agent 端到端完成了两项工作并真实提交:创建服务请求,以及添加资产。以下为 2026-10-03 每次运行的测量数据:

操控者两项工作均完成工具调用次数截图数Token 数
使用 Claude Code 内置模拟器工具的 Opus,不使用 simframe是~176112296k
使用 simframe 的 Opus服务请求(会话因资产上传而受阻)~50≥4118k
使用 simframe 向 Sonnet 操控者(插件的操控 Agent)下达指令的 Opus是~88少量128k,使用成本更低的模型

使用同一模型,有无 simframe 的对比:Token 减少 2.5×,调用次数减少 3.5×。 Sonnet 操控者完成了不使用 simframe 时的全部工作,Token 减少 2.3×,调用次数减半,而图片只用了少量(不使用 simframe 时用了 112 张)。每种配置仅运行了一次,因此应将其视为测量示例,而非普遍比率;完整说明(包括未展示的内容)见 docs/BENCHMARKS.md。它的速度还远不及人类,这一点也有测量数据。 熟悉该应用的人完成同样两项工作只用了约 1.5 分钟(五次运行的中位数分别为 39 秒和 49 秒)。Agent 耗时 13–16 分钟,慢了 9–10×,因为它们会读取并验证每一步,而且每轮模型调用都要耗费数秒。减少每个流程的轮次,以及从记忆中重放流程,正是路线图的重点。

十秒内完成安装

你需要一台安装了 Xcode 的 Mac(如果你有模拟器,就说明你有 Xcode)和 Node 18+。 不需要其他任何东西——不需要 idb、Appium 或 Python。

Claude Code — 作为插件安装,插件会一并安装 MCP 服务和 技能,在一次安装中教会 Agent 使用该协议:

claude plugin marketplace add lvlrSajjad/simframe
claude plugin install simframe@simframe

或者只安装 MCP 服务:

claude mcp add --scope user simframe -- npx -y simframe mcp

插件还附带一个驱动 Agent(simframe:simframe-driver):主会话把目标交给它,它就会使用 Sonnet 和 simframe 的工具来操作模拟器,然后返回简短报告。它仅限使用 simframe,因此即使是小模型也能胜任;如果开放所有工具,Haiku 就做不到。**驱动 Agent 需要先安装上面的插件。**它绑定到插件自己的工具名称,因此单独使用 claude mcp add 添加服务并不能启用它。

二选一,不要两种都装:安装两次意味着两个服务会操作同一台设备。如果之前用 claude mcp add 添加过,请先运行 claude mcp remove simframe。

Claude Desktop — 打开 Settings → Developer → Edit Config,然后添加:

{
  "mcpServers": {
    "simframe": { "command": "npx", "args": ["-y", "simframe", "mcp"] }
  }
}

Cursor — 在 Cursor 中安装 或将相同的 simframe 配置块添加到 ~/.cursor/mcp.json。

Codex、Windsurf、Zed、VS Code,以及其他任何支持 MCP 的客户端 — 使用相同的 JSON 配置块,放在该客户端存放 mcpServers 的位置。

然后启动模拟器,并让 Agent 执行某项操作:“打开我的应用,完成注册流程”、“Orders 标签页里的列表正在加载吗?”、“为什么点 Save 按钮没有反应?”。首次调用时会从源代码构建一个小型 Swift 守护进程——大约 15 秒,只需一次。

CLI 是不经过 Agent 的同一套功能,也是检查安装是否成功的最省事方法:

npm install -g simframe
simframe doctor          # every layer, and which engine carries it
simframe ui              # the current screen as a numbered text map

如果启动了多个模拟器,请使用 --device=<udid> 或 export SIMFRAME_DEVICE=<udid> 指定目标设备;simframe 不会猜测,因为选错设备时可能执行的操作就是点击。

它带来的改变

Agent 操作模拟器很慢,原因有三个,而只有第一个显而易见。每次查看都要等待(simctl io screenshot 需要约 130 ms,每次查看都要付出这个代价)。每一步都需要一次模型往返。并且系统不会记住任何内容,因此每次出现同一屏幕时,都要重新读取和推理。还有第四个纯粹的浪费:用图像询问屏幕上有什么,代价最高,而且仍然无法说明哪些位置可以点击。

不使用 simframe使用 simframe
查看屏幕截图需要约 130–400 ms,且会阻塞约 20 ms,已提前捕获
“有什么变化吗?”一张完整图像约 2 ms,仅文本
读取屏幕一张图像,约 1,600 个 token,没有点击位置约 330 个 token 的文本,包含点击位置
10 步流程10 轮,10 张图像1 轮,0 张图像
再次执行同一流程每次运行都从头开始从记忆中重放,每一步都经过验证,零次模型调用
实际的双任务应用会话约 176 次调用、112 张截图、296k 个 token约 50 次调用、118k 个 token(相同模型)

数据是在 iPhone 17 Pro 模拟器、iOS 26.5、Apple Silicon 上,针对一款实际生产应用测得的;包含 N、median 和 p95 的完整表格见 docs/BENCHMARKS.md。

Agent 收到的不是图片,而是以下内容:

iPhone 17 Pro · 402x874pt · screen a1b2c3d4 "Inbox" (known, 3 known exits)
last action: [2] tap — ok: matches the outcome seen 5x before
nav-bar:
  #1 button    24,64      Back
  #2 text      201,64     Inbox
content:
  #3 cell      201,140    Weekly digest
  #4 field     201,196    Search = weekly ~ weekly|
  #5 switch    201,252    Notifications = 1
tab-bar:
  #6 text      62,835     Inbox
  #7 text      201,835    Settings
next: settled; nothing ambiguous — chain the next steps in one sim_do without looking again.

区域、类型、标签、内容、点击位置,以及下次调用可用作选择器的编号。= value 表示无障碍树报告的控件内容;~ value 表示 OCR 从像素中识别出的内容。两者不一致之处,正是关键所在。

工具

工具功能
sim_ui从这里开始。 屏幕内容如上方带编号的文本地图所示。
sim_do主要工具。 一次调用即可完成整个流程 — 点击、输入、滚动、等待、断言 — 每一步都会先稳定下来再执行下一步,并根据上次执行的结果进行验证。备用选择器、可选步骤和范围受限的 seek 可让批处理在遇到意外时继续运行,而不是中途交还控制权。
sim_state自上次查看后是否发生变化,以及哪些区域移动了。
sim_goto · sim_flow_run前往 simframe 之前到过的屏幕;重放已保存的流程,无需调用模型。
sim_goal说明要到达的位置;simframe 会在本地驱动操作,并在某个里程碑处返回 — 已完成且有证据、被障碍阻挡、情况不明确,或未找到。
sim_map默认以只读模式在无人值守的情况下遍历应用,并记录每个屏幕和转换,让后续工作可以利用记忆执行。绝不会跨越验证屏障或离开应用。
sim_find · sim_tap · sim_type_into · sim_scroll_to · sim_wait_for · sim_assert单步操作,仅在确实只需执行一个步骤时使用。
sim_launch · sim_open_url · sim_permission启动(已确认切换到前台)、打开深层链接、授予隐私权限而不点击警告提示。
sim_look唯一会返回图像的工具,图像上限为 1024 px — 用于查看布局、颜色和间距。
sim_recall · sim_strip · sim_storage以文本或联系表形式查看过去一分钟内发生的情况;查看应用保存的内容(UserDefaults、AsyncStorage),即使设备已关机也可以。
sim_wait · sim_capture · sim_devices等待变化后再稳定下来;管理捕获;列出模拟器和仿真器。

在任何需要指定控件的位置,都有三种命名方式:"Save"(按意图解析 — 动词、拼写错误、同义词,以及按常见名称识别的纯图标控件)、#3(地图为控件分配的编号,仅在该屏幕上有效),或 @120,400(原始坐标,仅在前两种方式不适用时使用)。与危险操作词汇匹配的标签 — Delete、Pay、Send、Sign out — 永远不会被替代或猜测。

软件包随附一个 Claude Code 技能,用于教授 CLI 路径,开销更低:输出只有几行,而不是工具结果;直到使用工具时,MCP 架构才会进入上下文。

Android

第二个后端可通过相同的命令、屏幕地图和记忆驱动 Android 仿真器。帧通过仿真器控制台以约 41 ms 的间隔到达;点击、滑动、文本、按键和剪贴板均可正常使用;simframe devices 会将仿真器与模拟器一起列出。Android 不具备的是无障碍树,因此它的屏幕只能依靠 OCR 和 CV 读取 — simframe doctor 会如实说明这一点,而不会假装支持。详情、成本和原理请参阅指南。

简要说明其工作原理

每台设备运行一个 Swift 守护进程;当显示器报告损坏时,该进程会直接从 IOSurface 读取模拟器的帧缓冲区,在同一表面上运行 Apple 的 Vision OCR,在主机端读取无障碍树,并通过 HID 通道发送真实的按下/移动/抬起序列来执行点击 — 无需 PNG、文件或启动子进程。帧存储在 ~/.simframe/<udid>/ 中,输入通过 0600 Unix 套接字传输,MCP 服务和 CLI 则是连接这两者的轻量客户端。

屏幕记忆通过结构指纹为合并后的元素地图建立索引,因此再次看到之前出现过的屏幕时,只需读取文件。转换图会记录哪个操作使流程从哪个屏幕转到哪个屏幕,因此 sim_goto 可以规划路线,已保存的流程也可以在模型不参与的情况下重放。

每一层都会降级而不是失败,并且绝不会悄无声息:simframe doctor 会报告每一层的状态,而 --strict 会将任何降级转为非零退出。守护进程链接的私有框架及其证据记录在 docs/PRIVATE_API.md 中。

延伸阅读

docs/GUIDE.md完整指南:无需往返即可恢复、屏幕记忆和两个哈希值、凭记忆导航、命令行、诊断卡住的模拟器、控制会话成本、路线图
docs/BENCHMARKS.md每项数据,包含 N、中位数、p95、机器和测量陷阱
docs/EXPERIMENTS.md测量前的设想,以及它们有十四次都是错的
docs/DECISIONS.md改变计划的判断,包括一个被自身测量结果取消的阶段
docs/DEFERRED.md所有已知缺陷,无论开放还是已关闭,并附有证据
docs/ARTICLE.mdAgent 不该眨眼——对整个项目的总结论述

这里几乎所有决定都由测量结果而非争论得出,而且有几次测量推翻了已经发布的决定。两项重要结果:预热后的转移图可减少 Agent 约 27% 的大模型往返次数;而对守护进程已计算出的一个数值应用单行阈值,作为步骤监督器的表现胜过所有尝试过的本地模型——准确率达 95%,而它们为 77–91%,且延迟为零。

局限性

  • 仅支持模拟器和仿真器;无法连接任何实体设备。
  • 守护进程链接了私有框架。这些框架经受住了 iOS 26 的升级,但升级 Xcode 可能会导致符号变动;doctor 会指出出错的层,而 --engine=screenshot 仍可使用。
  • Android 没有无障碍树,因此其屏幕身份仅依赖 OCR 几何信息:比 iOS 更粗略,也更嘈杂。
  • 硬件按钮:仅支持 home。其他代码未经验证,错误代码可能导致设备崩溃,因此会返回错误,而非猜测。
  • 确认操作的词汇(OK、Save、Done……)为英文。
  • 它能加快确认修复,而非定位修复。陈旧闭包中的错误不会出现在任何帧中。

完整列表及每项背后的测量数据,请参阅指南。

发布

只有 npm version 可以用于升级版本——它的钩子会同步更新 server.json——而 git push --follow-tags 会运行一个工作流,在不使用机密信息的情况下发布到 npm 和官方 MCP Registry。关于这种设计的原因,以及曾经消失一周的那次发布,请参阅指南。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

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

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