iPhone Mirror

io.github.nickatnight96由 GitHub 账号 nickatnight96 发布v1.0.1更新于 Oct 24, 2026

Drive a real iPhone via macOS iPhone Mirroring; Xcode build/test automation for sims and devices.

已验证STDIO仅桌面浏览器自动化开发者工具

概览

AI 生成的概览

仅限 macOS 的 MCP 服务器,让助手通过 iPhone 镜像操控已配对的 iPhone,并在模拟器和真机上构建、测试和启动 Xcode 应用。

可以做什么
检查会话健康状态,启动或重启镜像会话,并用诊断命令验证权限和输入是否真正送达。通过截图、标注截图、OCR 读屏、文字与图像查找以及录屏查看屏幕内容。等待文字或画面变化,并滚动到指定元素。发送点击、双击、长按、滑动、拖拽、输入文字、粘贴文字、按键、摇一摇和批量操作等输入。使用主屏幕、应用切换器、聚焦搜索、启动应用和打开网址进行导航,并处理通知。构建、测试并收集 Xcode 结果,在真机和模拟器上安装、启动、查看信息及卸载应用。
适用场景
当你想让助手在 Mac 上操作一台真实 iPhone,而不越狱、不在手机上安装任何东西时使用,例如查看应用显示的内容、执行点击并断言的循环,或在模拟器和真机上自动化 Xcode 构建、测试和安装流程。
运行要求
macOS 15 或更高版本并启用 iPhone 镜像,配对的 iPhone 需为 iOS 18 或更高版本、在附近、处于锁定状态且登录同一 Apple 账户。Xcode 相关、真机和模拟器工具需要 Xcode。需向启动服务器的应用授予辅助功能和屏幕录制权限。以本地进程通过 stdio 运行,安装脚本会构建发布版二进制文件。
安装前请注意
镜像激活期间,它可以查看并控制 Mac 所配对的 iPhone,等同于把已解锁的手机交给模型,只应从可信客户端运行。粘贴的文字会短暂写入 Mac 剪贴板,剪贴板内容也可被读取。手机被解锁或拿起时会话会暂停。安装包为临时签名,未经公证。

安装

在 SourceWeft 中

  1. 打开 控制台中的 iPhone Mirror,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

iphone-mirror-mcp

[CI] [License: MIT] [Platform: macOS 15+] [Swift 6] [Listed on mcpservers.org] [Clones] [Views]

Let any LLM drive a real iPhone.

An MCP server that controls a physical iPhone through the built-in macOS iPhone Mirroring app, and automates Xcode development testing — build, test, install, and launch on simulators and devices, then operate the app on the mirrored screen with taps, swipes, typing, and OCR.

No jailbreak. Nothing installed on the phone. No XCUITest target.

run_on_iphone (build → install → launch on the paired iPhone)   → screenshot / read_screen / tap / paste_text     drive the app on-device   → wait_for_text / tap with expect / sim_log       assert what the user sees

63 tools. Works with Claude, GPT, Gemini, local models — anything that speaks MCP over stdio.


Quick start

sh
git clone https://github.com/nickatnight96/iphone-mirror-mcp.gitcd iphone-mirror-mcp./install.sh

The installer checks your machine, builds a release binary, verifies permissions end to end, and prints the exact config for your client.

Then, for Claude Code:

sh
claude mcp add --scope user iphone-mirror -- ~/.local/bin/iphone-mirror-mcp

Or for any other MCP client:

json
{  "mcpServers": {    "iphone-mirror": {      "command": "/Users/YOU/.local/bin/iphone-mirror-mcp"    }  }}

Ask your model:

Take a screenshot of my iPhone and tell me what app is open.

Or grab the .mcpb bundle from the latest release if your client installs MCP bundles and you would rather skip the toolchain (see the caveats — it is ad-hoc signed but not notarized).

→ Full getting-started guide · per-client config

Requirements

  • macOS 15+ with iPhone Mirroring, paired to an iOS 18+ iPhone (nearby, locked, same Apple Account)
  • Xcode — for the xcode_*, device_*, and sim_* tools
  • Accessibility and Screen Recording permission, granted to the app that launches the server (your terminal, or the desktop app hosting your client) — details

Check everything at once:

sh
iphone-mirror-mcp doctor

It tests all four permissions, captures a real frame, and confirms macOS is actually delivering synthetic input — rather than just reading permission flags. Run it before you suspect anything else.

What it can do

Session & healthstatus, doctor, mirror_launch, mirror_restart
See the screenscreenshot, annotated_screenshot (every element boxed + numbered), read_screen (OCR with tappable centers), find_text, find_image, record_screen
Wait properlywait_for_text, wait_for_screen_change, scroll_to
Inputtap (with expect verification), double_tap, long_press, swipe, drag, type_text, paste_text (emoji/CJK via clipboard), read_clipboard, press_key, shake, batch
Navigatehome, app_switcher, spotlight, launch_app, open_url
Notificationsnotifications, notification_click
Xcodexcode_list, xcode_build, xcode_test, xcresult_attachments
Real devicesrun_on_iphone, devices, device_install, device_launch, device_info, device_apps, device_uninstall
Simulatorsrun_on_sim plus the full simctl belt — push, GPS, privacy grants, status bar, appearance, logs, media

→ Complete tool reference — all 63, with parameters, generated from the server's own catalog so it cannot drift.

Coordinate contract

Every x/y is a pixel position in the most recent screenshot, origin top-left. At input time the window bounds are re-queried and the pixel maps proportionally into the current bounds — so a window that moved or was resized between screenshot and tap still receives the tap in the right place.

Documentation

Getting startedInstall → permissions → first tap
Connecting a clientClaude Code, Claude Desktop, Cursor, VS Code, Zed, Codex, Windsurf
Tool referenceAll 63 tools and their parameters
RecipesDriving an app, the on-device test loop, notifications, batching
TroubleshootingSymptoms → causes → fixes
ArchitectureHow input actually reaches the phone
LimitationsWhat this genuinely cannot do

Known limitations

Tested, not guessed — the full list explains why.

  • Pinch and rotate cannot be synthesized. Trackpad gestures do not travel the CGEvent pipeline; an event tap sees nothing during a physical pinch, so there is nothing to reproduce.
  • One phone at a time — device switching has no scriptable menu.
  • The session pauses whenever the phone is unlocked or picked up. Apple's design; resuming needs it locked again.
  • No accessibility tree — OCR and template matching are the element model. Face ID, Control Center, and hardware buttons are unreachable, and DRM content captures black.

Security

This server can see and control whatever iPhone the Mac is paired with while mirroring is active. Treat it like handing your unlocked phone to the model. Run it only from clients you trust.

The phone locks the session the moment it is picked up or unlocked physically, which is a real kill switch. paste_text briefly places text on the Mac clipboard and restores what was there; read_clipboard reads it.

See SECURITY.md for the trust model and how to report a vulnerability.

Contributing

Issues and pull requests welcome — see CONTRIBUTING.md.

sh
scripts/run_tests.sh                    # build + unit/protocol tests + CLI smokeMIRROR_MCP_LIVE=1 scripts/run_tests.sh  # + live tests (real window, capture, input)

License

MIT

来源:README.md,提交 5a67652

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v1.0.1最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分