iphone-safari-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| IPHONE_SAFARI_DRIVER_URL | No | URL of an existing safaridriver instance to attach to, for debugging. If not set, the server starts its own safaridriver. | |
| IPHONE_SAFARI_DEVICE_NAME | No | Name of the iPhone device to use. | |
| IPHONE_SAFARI_DEVICE_TYPE | No | Type of the iPhone device to use (e.g. iPhone, iPad). | |
| IPHONE_SAFARI_DEVICE_UDID | No | UDID of the iPhone device to use. | |
| IPHONE_SAFARI_DISCOVERY_TIMEOUT | No | Number of seconds to retry session creation for safaridriver device discovery. Defaults to 45. | 45 |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| session_infoA | Report what device/browser this session is actually attached to. Use this first to confirm you are driving the real iPhone and not Mac Safari. |
| navigateA | Open a URL in Safari on the iPhone and wait for load. |
| screenshotC | Screenshot the current iPhone Safari viewport. |
| snapshotA | Compact structured view of the page: URL, viewport, scroll position, and every visible interactive element with a CSS selector, label and on-screen rect. Prefer this over page_source() — it is the cheap way to decide what to click. |
| page_sourceA | Raw HTML of the current page, truncated to max_chars. |
| clickC | Click/tap an element. |
| type_textA | Type into an input on the phone, optionally clearing it first or submitting the form. |
| tapA | Send a real single-finger touch at viewport coordinates (CSS pixels). Use when there is no sensible selector — e.g. a canvas or a custom overlay. |
| scrollA | Scroll the page by a pixel delta. Positive dy scrolls down. |
| evaluate_javascriptA | Run JavaScript in the page and return the result as a string. Wrap in |
| console_logsA | Console messages and uncaught errors captured since the last navigation. The capture hook is installed by navigate(); if a page navigated itself, call install_console_capture() to re-arm it. |
| install_console_captureA | (Re)install the console/error capture hook on the current page. |
| network_timingsB | Resource timings from the Performance API — URL, type, duration, transfer size. A zero transferSize on a non-cached entry usually means the request failed. |
| go_backA | Navigate back in Safari's history. |
| reload_pageA | Reload the current page and re-arm console capture. |
| close_sessionA | End the automation session on the phone. A later call reconnects automatically. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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/ikatkov/iphone-safari-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server