iOS 27 and AI agents

An AI agent cannot talk to your iPhone. It can talk to your Mac, and your Mac can drive your iPhone through Apple's own iPhone Mirroring — which Apple does not offer in the EU. That constraint is first on this page because it is the most common question, and because knowing it now saves you the rest of the install. Everything else here is about what that architecture buys you, and why a new iOS does not change it.

8 iphone_* tools0 iOS APIs usedoff by defaultneeds iOS 18+not available in the EU
The honest architecture

The route runs through the Mac, not through iOS.

Three facts decide the whole design, and a version bump undoes none of them.

iOS exposes no accessibility tree to another machine. The mirrored content that arrives on your Mac is an opaque video surface — there is nothing to snapshot, no element ids, no roles. This inverts the rule macos-mcp follows everywhere else on the Mac, where the accessibility tree comes first and pixels are the fallback. For a mirrored iPhone that ordering is not available, so OCR is the primary locator here, and the tool descriptions say so rather than implying a snapshot they cannot deliver.

There is no MCP server on the phone, and no developer-facing API for iPhone Mirroring at all — Apple said so on its own developer forums in June 2024, and it was still true on macOS 26. Every project in this space therefore drives the app's window from outside, with no cooperation from Apple.

The projects that reach further patch eligibilityd. That is how you separate "no phone paired" from "phone in your hand" from "wrong region" — and it is a line this project holds. macos-mcp collapses those four into one honest no_phone_content state whose fix names all four, so a human resolves in a second what a program is not allowed to ask.

What is left is the architecture that is actually true: the Mac drives the mirror. macos-mcp captures the iPhone Mirroring window with ScreenCaptureKit, finds targets with Vision OCR, and taps them in the phone's own device points — a coordinate that survives a window resize, a different Mac and the same transcript replayed tomorrow. Then it captures again and checks the screen actually moved. A tap that changed nothing is a typed action_unverified error, never a green check: no false successes. The eight tools, in detail →

The day iOS 27 ships

Both sides matter, and the requirements are Apple's.

iPhone Mirroring is a macOS and iOS pair, so when iOS 27 arrives the phone is only half of it: the Mac has to be able to run the mirror, and the phone has to be allowed to be mirrored. Apple's own preconditions, none of them added by this project:

One further constraint worth knowing before you script anything: macOS routes synthetic input to the frontmost app, so an iphone_* call holds the front for its duration. It serialises with all other automation on that Mac and will interrupt whoever is at the keyboard.

Why this ages well

A new iOS needs no update here.

Nothing in the ios toolset depends on an iOS API — not one call. It works from outside the window, on pixels and on the Mac-side accessibility tree of the Mirroring app itself. Capture is ScreenCaptureKit on the Mac; location is Vision OCR on the Mac; input is synthetic events posted on the Mac. Coordinate mapping is arithmetic between the window, the screen and the phone's logical point space, and the device profile behind it is reported with its quality — matched, nearest, or pinned when you pass one — so a nearest guess never comes back looking like a fit.

The consequence is worth stating plainly, because it is unusual: the day iOS 27 lands on a phone, an agent driving that phone through macos-mcp keeps working, on the same binary, with no new build and nothing to update. A new iOS changes what is drawn inside the window. It does not change the mechanism that reads and touches it. Anything that depended on an iOS API would have to be re-qualified with every release; this does not, and that is a deliberate trade for the OCR-first targeting it costs.

What could change, without predicting it

The part that would need re-verifying is the window.

Apple has not said anything about iPhone Mirroring in iOS 27 at the time of writing, and this page will not guess.

What can be said now is which part is exposed. iphone_status reads several states not from the video but from the Mirroring app's own chrome — the accessibility tree around the phone, which is the one tree that does exist. A paused session (needs_resume), the Mac's lock screen over the phone (locked), a signed-out window (not_connected) and a modal sheet in front of the phone (blocked) are all read there, because pixels cannot see them: an alert over the phone still renders something phone-shaped, and a screenshot would call it ready.

So if iOS 27 or its macOS counterpart changes that window's chrome, those states are what would need re-verifying — and there is a test tier for exactly that. It drives real cross-process accessibility reads and presses against a fixture wearing each measured chrome in turn: the live toolbar, the paused window, the signed-out window and an alert. A redesigned window becomes a red test rather than a silent misread. The structural detection is already narrowed to fire only when several signals agree, and it reports which ones fired, because a control identified by four markers and one identified by a lone unrecognised button are not the same claim.

One more watch is already running, and it is Apple's to close: Xcode 27's Device Hub gives a live interactive canvas for physical devices — tap, drag, keyboard, hardware buttons — with no documented CLI or API, and Xcode's MCP surface exposes nothing device-shaped today. A test asserts on Xcode's served tool list so that if device verbs ever appear there, the build fails loudly and macos-mcp re-exports them verbatim instead of reimplementing them. macOS 27 and Apple's MCP servers →

Getting started

Three lines and a mirrored phone.

$curl -fsSL https://macos-mcp.sh | sh
  1. Install, then macos-mcp install --client claude-code (or claude-desktop, cursor, vscode, codex). One signed binary, no runtime.
  2. Ask the agent to call enable_toolset ios — the ios tools are not among the 44 tools, 24 on by default. Grant Screen Recording and Accessibility to the app hosting the agent; macos-mcp doctor prints the System Settings deep-link for anything missing, and the client needs a restart after a grant.
  3. Open iPhone Mirroring so the phone is on screen, and ask: “Open Calculator on my iPhone and work out 7 × 8.”
FAQ

Questions people ask about iOS and agents.

Does iOS 27 have an MCP server?

There is no MCP server on the phone, and Apple has shipped no developer-facing API for iPhone Mirroring — an Apple engineer said so on the developer forums in June 2024 and it was still true on macOS 26. Apple's two MCP servers are macOS developer tools: Safari and Xcode. So an agent does not talk to iOS; it talks to a Mac, and the Mac drives the phone through Apple's own mirror.

Will macos-mcp need an update when iOS 27 ships?

No, and this is architectural rather than lucky. Nothing in the ios toolset calls an iOS API. It captures the iPhone Mirroring window with ScreenCaptureKit, finds targets with Vision OCR, maps them into the phone's own device points, and posts ordinary synthetic input into the window — all of it from outside, on the Mac. A new iOS changes what is drawn inside the window, not the mechanism that reads and touches it.

Does this work in the EU?

No. Apple does not make iPhone Mirroring available in the EU, and macos-mcp drives the phone through that app, so there is nothing for the ios toolset to attach to there. The other 36 tools work normally. Nothing here patches or works around the region check — that is a line this project holds. If Apple ships iPhone Mirroring in the EU, this needs no code change.

Can an agent control my iPhone without a Mac?

Not through this project. iPhone Mirroring is a macOS and iOS pair: the phone must be on iOS 18 or later, the Mac and phone must share one Apple Account with two-factor authentication, Bluetooth and Wi-Fi must be on, the phone must have a passcode, and it must be locked and physically near the Mac. Those are Apple's requirements for the feature, not extra ones invented here. On the Mac side, macos-mcp needs macOS 15 or later on Apple Silicon.

Does it need a jailbreak, Developer Mode or a WebDriverAgent build?

None of them, and nothing is installed on the phone. The Mac captures the mirrored window and posts synthetic input into it using the same two public macOS permissions a screen-sharing app asks for: Screen Recording and Accessibility. There is no provisioning profile, no signed WebDriverAgent, no patched daemon. The phone is never modified.

Can it read what is on the screen, including messages?

It can read whatever is on the mirrored screen. That is what OCR means, and pretending otherwise would be dishonest. It is why the ios toolset is off by default, why every tap, swipe, keypress and typed string is annotated destructive so the standard profile returns a one-shot confirmation token bound to that exact call first, and why every call appends to the local audit log with its arguments digested rather than stored.

What could Apple announce that would change this?

The honest answer is: the window. iphone_status reads several of its states — paused, locked, signed out, a sheet in front of the phone — from the Mirroring app's own accessibility tree, which is the chrome around the video, so a redesigned window is the part that would need re-verifying, and there is a test tier that drives those exact chrome shapes. Separately, Xcode 27's Device Hub gives a live interactive canvas for physical devices with no documented API today; if Apple ever exposes those verbs through Xcode's MCP server, macos-mcp would mount and re-export them rather than reimplement them, and a test already watches Xcode's tool list for exactly that.