Mcp Ios

io.github.dockndevaiPublished by GitHub account dockndevaiv0.1.0Updated Oct 24, 2026

Drive iPhone/iPad via Appium/WebDriverAgent from AI agents — safe-by-default, read-only by default.

VerifiedSTDIODesktop onlyBrowser AutomationDeveloper Tools

Overview

AI-generated overview

Drives a tethered iPhone or iPad through Appium and WebDriverAgent, letting an assistant inspect the screen and, when enabled, tap, type and launch apps.

What you can do
  • Inspect the device: list targets, read device info, current app and installed apps
  • Capture the screen: take screenshots returned as images and read the element tree
  • Control the UI: tap, swipe, type text, press hardware buttons, launch apps and open URLs
  • Run Shortcuts actions on the device
  • Manage apps in admin mode: install, terminate and reset apps, with confirmation for the destructive ones
When to use it
Useful when you want an assistant to look at or operate your own iPhone or iPad from a Mac, for example QA automation, reading what is on screen, or driving a few app actions on a device you control. Start in read-only mode if you only need inspection.
Requirements
Runs locally on a Mac with Node.js via npx, plus a running Appium server with the XCUITest driver, Xcode and command line tools, a WebDriverAgent build signed to the device, and an iPhone or iPad connected by USB or the same network with Developer Mode enabled. Configured through IOS_APPIUM_URL, IOS_UDID, IOS_MODE and related variables; no account or API key is declared.
Before you install
Write and admin modes let the assistant tap, type, launch apps, open URLs and install, terminate or reset apps on a real device, which can change or delete app data. Terminate and reset prompt for human approval only in clients that support elicitation; otherwise the IOS_ALLOW_MANAGE gate applies. Protected apps are never terminated or uninstalled, and an audit log is written to stderr by default. Keep read-only mode unless control is needed.

Installation

In SourceWeft

  1. Open Mcp Ios in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

mcp-ios

[CI] [CodeQL] [License: MIT] [npm]

A Model Context Protocol server to drive an iPhone/iPad — the iOS counterpart to mcp-android. Read this first: iOS is fundamentally more locked down than Android or macOS, so this server takes the only legitimate route to real UI control.

The honest landscape

A stock iPhone does not allow a background app to see and control other apps the way Android's Accessibility service (or macOS) does. Apple's sandbox forbids it. So there is no on-device "iOS-use" agent like the Mac/Android ones. The viable routes, in order of capability:

RouteControl levelNeedsNotes
Appium + WebDriverAgent (XCUITest) ✅ (this server)Full UI: tap, type, swipe, read elements, screenshots, launch appsA Mac with Xcode; iPhone connected by USB (or same-network); WDA signed to the deviceThe real "phone-use". Built for automation/QA — perfect for a personal agent on your own device.
ShortcutsRun user-defined actions (set alarm, send message, toggles)Shortcuts app; a URL/x-callback bridgeNo arbitrary UI control, but great for safe, specific actions. Exposed here via run_shortcut.
MDMPolicy/config, app installEnrollmentDevice management, not interactive control.

This server implements the Appium/WDA route: it runs on a Mac, talks to a local Appium server driving WebDriverAgent on the tethered iPhone, and exposes the same safe-by-default MCP shape as the rest of the suite. A set_alarm-style action can also go through Shortcuts (run_shortcut) when the device isn't tethered.

If you want control from the phone itself with nothing attached, that isn't possible on iOS — use mcp-android on the Fold 7 for that experience, or the Shortcuts subset here.

Setup (Appium route)

bash
brew install nodenpm i -g appiumappium driver install xcuitest# Xcode + command line tools installed; sign WebDriverAgent to your device once (Xcode)# Connect the iPhone by USB, Trust the Mac, enable Developer Mode on the deviceappium        # starts the Appium server (default http://127.0.0.1:4723)

The server creates the XCUITest session lazily on the first tool call, so it starts even before Appium or the device are up — the first call that needs the device returns a clear "start appium / sign WDA / connect the device" message if it can't connect.

Security model

ConcernFlagDefaultEffect
What can the server do?IOS_MODEread-onlyread-only exposes inspection only; read-write adds UI control; admin adds app management. Tools above the mode are never registered.
Which apps are in scope?IOS_APP_ALLOWLIST(all)When set, launching/managing any other bundle ID is refused.
Which apps are read-only forever?IOS_PROTECTED_APPScom.apple.Preferences, com.apple.springboardInspectable/launchable but never terminated, reset, or uninstalled.
Can it install/terminate/reset apps?IOS_ALLOW_MANAGEfalseThe admin tools need this and admin mode; otherwise they aren't even advertised.
Interactive confirmation(automatic)—terminate_app and reset_app prompt the human to approve the exact bundle ID via MCP elicitation before running; clients without elicitation fall back to the IOS_ALLOW_MANAGE gate.
Preview without touching the deviceIOS_DRY_RUNfalseWrite/admin tools validate + log intent, then return.
Audit trailIOS_AUDIT_LOGtrueEmits a JSON line to stderr per guarded operation.

Connection: IOS_APPIUM_URL (default http://127.0.0.1:4723), IOS_UDID (target device), IOS_BUNDLE_ID (optional default app). See .env.example for all variables and docs/CLIENTS.md for the full per-client install guide.

Tools

Read (read-only+): list_targets, device_info, screenshot, page_source (element tree), current_app, list_apps

Write (read-write+): tap, swipe, input_text, press_button (home/volume), launch_app, open_url, run_shortcut (via Shortcuts)

Admin (admin + IOS_ALLOW_MANAGE): install_app, terminate_app, reset_app (the last two confirm via elicitation; protected apps refused)

screenshot returns an MCP image content block so the agent can see the screen before acting.

Quickstart — add to your agent

Published on npm as @dockndevai/mcp-ios. No clone or build needed — your MCP client runs it on demand with npx. It must run on the Mac with a running Appium server. Start in read-only mode.

Claude Code (CLI)

bash
claude mcp add ios -e IOS_APPIUM_URL="http://127.0.0.1:4723" -e IOS_MODE="read-only" -- npx -y @dockndevai/mcp-ios

Claude Desktop · Cursor · Windsurf — same block in claude_desktop_config.json, .cursor/mcp.json, or ~/.codeium/windsurf/mcp_config.json:

json
{  "mcpServers": {    "ios": {      "command": "npx",      "args": [        "-y",        "@dockndevai/mcp-ios"      ],      "env": {        "IOS_APPIUM_URL": "http://127.0.0.1:4723",        "IOS_MODE": "read-only"      }    }  }}

VS Code (GitHub Copilot, Agent mode) — in .vscode/mcp.json:

json
{  "servers": {    "ios": {      "type": "stdio",      "command": "npx",      "args": [        "-y",        "@dockndevai/mcp-ios"      ],      "env": {        "IOS_APPIUM_URL": "http://127.0.0.1:4723",        "IOS_MODE": "read-only"      }    }  }}

Example prompts

  • "Take a screenshot of my phone and tell me what's on screen."
  • "Open Safari and go to news.ycombinator.com." (needs read-write)
  • "Run my 'Good morning' Shortcut." (needs read-write)

Run from source (development)

bash
npm installnpm run buildnode dist/index.js   # with the environment variables set, and `appium` running

Develop

bash
npm run devnpm test          # security policy + elicitation confirmation (pure; no device needed)npm run typecheck

The policy and elicitation tests are pure and run anywhere. The device-driving path can't be smoke-tested without a Mac + Xcode + signed WDA + a tethered iPhone, so it's built against your real device setup.

Publishing

This server ships a server.json for the official MCP registry and an mcpName for npm ownership validation. See PUBLISHING.md for publishing to npm and listing on the MCP registry, Smithery, Glama, Cursor, and PulseMCP.

License

MIT

Source: README.md at commit 913f23c

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.1.0LatestOct 14, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts