ios-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| IOS_AGENT_MODEL | No | The model name to use with the configured provider. | |
| IOS_AGENT_PROVIDER | No | The model provider to use (e.g., 'openai', 'anthropic', 'gemini'). If not set, a default provider is used. | |
| IOS_MCP_ALLOW_DEVICE | No | Set to '1' to allow controlling a physical iPhone. Controlling physical hardware is opt-in; the default is '0' (not allowed). | 0 |
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
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| ios_doctorA | Check that this machine can drive an iOS device, and say how to fix what it can't. Run this first when a session fails to start, when a device does not appear, or after an Xcode or iOS upgrade. Every failing check comes with a concrete remedy. |
| ios_list_devicesA | List iOS Simulators and attached physical iPhones available for automation.
|
| ios_open_sessionA | Attach to a device and start driving it. Boots the simulator or verifies the phone, starts WebDriverAgent, and
opens a tuned session. Omitting |
| ios_session_statusA | Report the current session: device, foreground app, and safety state. |
| ios_close_sessionA | Release the device and shut down its WebDriverAgent runner. |
| ios_list_appsA | List apps installed on the device, with their bundle identifiers. |
| ios_launch_appB | Bring an app to the foreground and return its screen. |
| ios_terminate_appC | Force-quit an app. |
| ios_open_urlA | Open a URL or deep link. Usually the cheapest way to reach a screen: a deep link skips the navigation an agent would otherwise have to tap through. |
| ios_install_appA | Install an app from a local .app or .ipa. |
| ios_observeA | Read the screen as a compact list of elements with short refs. Each line is one element: If the result says elements were omitted, narrow with |
| ios_screenshotA | Capture the screen as an image. Use this when an element has no accessibility label, when the layout
matters, or when |
| ios_read_textA | Read the text of the screen, or of one element and everything inside it. Use this to extract content, rather than |
| ios_wait_forA | Wait for something to appear or disappear. Prefer this over guessing a sleep. It returns as soon as the condition holds, and reports failure rather than raising, so a timeout is something you can reason about. |
| ios_get_logsA | Read recent device logs. Useful when an app misbehaves and the UI does not say why. |
| ios_export_traceA | Return the ordered record of everything this session has done. Useful for explaining what happened, and for turning a successful run into a regression test. |
| ios_tapA | Tap an element and return the resulting screen. Prefer |
| ios_typeA | Type into a field, focusing it first when a ref or target is given. |
| ios_type_secretA | Type a stored secret without ever seeing its value. The value is read from the host keychain and sent straight to the
device. Use this for every password and one-time code; never put a
real credential into |
| ios_set_valueA | Set a switch, slider, stepper, or picker to a value. Prefer this over tapping a switch: it checks the current state first, so asking for 'on' when it is already on does nothing rather than turning it off. |
| ios_scrollA | Scroll, optionally until some text comes into view. With |
| ios_swipeA | Swipe once, for carousels, page views, and swipe-to-reveal rows. |
| ios_dragA | Drag one element onto another, for reordering lists and moving items. |
| ios_press_buttonA | Press a hardware button or a keyboard key. |
| ios_handle_alertA | Answer a system alert. Read the alert text before choosing. Accepting blindly is how an agent grants a permission or confirms a deletion nobody wanted. |
| ios_haltB | Stop this session from taking further action. |
| ios_resumeA | Clear a halt after a human has decided it is safe to continue. |
| ios_set_permissionA | Set a privacy permission without going through the alert. Simulator only. On a real phone there is no API for this: drive the Settings app, or answer the permission alert with ios_handle_alert. |
| ios_clipboardA | Read or write the device clipboard. Writing is often faster and more reliable than typing a long string, which the on-screen keyboard can mangle with autocorrect. |
| ios_set_device_stateA | Change device-level state. Appearance, location, and status bar are Simulator only. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| ios_operator | How to drive an iOS device well: the observe, act, verify loop and its rules. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| screenshot_resource | The current screen, as a resource for clients that prefer to pull it. |
| devices_resource | Every simulator and attached iPhone, with readiness. |
| session_resource | The current session, or a note that none is open. |
| screen_resource | The last observed screen, without spending a tool call. |
| capabilities_resource | Which tools work on the attached device. Several capabilities are Simulator-only, and an agent that knows this up front does not waste a turn discovering it. |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/emazaheri/ios-agent'
If you have feedback or need assistance with the MCP directory API, please join our Discord server