mcp-ios
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| IOS_MODE | No | What can the server do? read-only exposes inspection only; read-write adds UI control; admin adds app management. Tools above the mode are never registered. | read-only |
| IOS_UDID | No | Target device UDID. | |
| IOS_DRY_RUN | No | Preview without touching the device. Write/admin tools validate + log intent, then return. | false |
| IOS_AUDIT_LOG | No | Audit trail. Emits a JSON line to stderr per guarded operation. | true |
| IOS_BUNDLE_ID | No | Optional default app bundle ID. | |
| IOS_APPIUM_URL | No | URL of the Appium server connection. | http://127.0.0.1:4723 |
| IOS_ALLOW_MANAGE | No | Can it install/terminate/reset apps? The admin tools need this and admin mode; otherwise they aren't even advertised. | false |
| IOS_APP_ALLOWLIST | No | Which apps are in scope? When set, launching/managing any other bundle ID is refused. Defaults to all apps. | |
| IOS_PROTECTED_APPS | No | Which apps are read-only forever. Inspectable/launchable but never terminated, reset, or uninstalled. | com.apple.Preferences,com.apple.springboard |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_targetsB | Show the configured Appium connection (URL, target UDID, default bundle ID) and, best-effort, the devices/simulators attached to this Mac. |
| device_infoA | Session capabilities and device info (model, iOS version, screen) reported by WebDriverAgent. |
| screenshotA | Capture the current screen as a PNG image so you can see what's on the phone before acting. |
| page_sourceA | Dump the current screen's XCUITest element tree (XML) with labels, types, and bounds — use it to find exact tap coordinates. |
| current_appB | The app (bundle ID / process) currently in the foreground. |
| list_appsB | List installed apps (best-effort; depends on the WebDriverAgent build). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 6 tools
Most tools are clearly distinct (screenshot vs page_source vs current_app vs list_apps). However, list_targets and device_info overlap somewhat: both report device/connection information, which could cause an agent to pick the wrong one when it just wants device details.
All names use snake_case, which is consistent, but the naming convention mixes verb_noun (list_targets, list_apps) with noun phrases (device_info, screenshot, page_source, current_app). It is readable but not a predictable verb-first pattern throughout.
Six tools is a reasonable, well-scoped set for an inspection-oriented iOS/Appium bridge, and each tool earns its place. It is slightly thin for full iOS automation, but the count itself is not excessive or trivial.
The surface is inspection-only: there are no interaction tools such as tap, type text, swipe, launch/terminate app, or navigation. Since screenshot and page_source are explicitly framed as preparation 'before acting,' the absence of any acting tools is a significant gap that will block agent workflows.