MCP Server for iOS Simulator
This server enables programmatic control of iOS simulators through the Model Context Protocol (MCP), supporting both direct UDID-based and session-based management.
Simulator Management (Direct UDID):
List all available simulators (
list-available-simulators) and booted simulators (list-booted-simulators)Boot (
boot-simulator-by-udid) or shut down (shutdown-simulator-by-udid) a simulator by UDID
Session-Based Management:
Create a new simulator session with optional device name, platform version, timeout, and autoboot settings (
create-simulator-session)List all active sessions (
list-simulator-sessions)Shut down a session's simulator (
shutdown-simulator) or fully terminate a session with cleanup (terminate-simulator-session)
Application Management:
Install an app by path (
install-app), launch by bundle ID (launch-app), and terminate a running app (terminate-app) â all scoped to a session
Interaction:
Tap at specified (x, y) coordinates on the simulator screen (
tap)Take screenshots of the simulator screen
Built on top of appium-ios-simulator to provide iOS simulator interaction capabilities for controlling simulator lifecycle and performing actions.
Allows programmatic control of iOS simulators, including starting, stopping, booting, installing and launching apps, taking screenshots, and performing taps on coordinates.
Interacts with Xcode's iOS simulator infrastructure to manage simulator instances and perform operations on iOS devices.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Server for iOS Simulatorboot the iPhone 16 simulator on iOS 18.2"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
đą MCP Server for iOS Simulator
A server that implements the Model Context Protocol (MCP) for iOS simulators, built on top of appium-ios-simulator and utilizing the MCP TypeScript SDK.
đ Overview
This project provides a bridge between iOS simulators and the Model Context Protocol, allowing for standardized communication with iOS simulator instances. It enables programmatic control of iOS simulators while leveraging the MCP protocol for consistent interfaces across different environments. The server utilizes stdio as its transport mechanism, making it ideal for integration with Claude Desktop and other MCP-compatible clients.
Related MCP server: MCP-IDB
đŦ Demo

Demo showing how to boot an iOS simulator using Claude AI Desktop
đī¸ Architecture
The server consists of three main components:
đ Simulator Management Layer - Handles iOS simulator lifecycle and interactions
đ MCP Protocol Implementation - Implements the Model Context Protocol using the TypeScript SDK with stdio transport
đ Logger Component - Provides file-based logging without interfering with the stdio transport
âââââââââââââââââââ âââââââââââââââââââ âââââââââââââââââââ
â MCP Protocol â â Stdio â â Simulator â
â Implementation ââââââ⤠Transport ââââââ⤠Management â
â â â â â Layer â
âââââââââââââââââââ âââââââââââââââââââ âââââââââââââââââââ
Ⲡâ˛
â â
âŧ âŧ
âââââââââââââââââââ âââââââââââââââââââ
â MCP Client â â iOS Simulator â
â (e.g. Claude) â â â
âââââââââââââââââââ âââââââââââââââââââ⨠Features
đ Start, stop, and manage iOS simulator instances
đ Boot and shutdown simulators
đ˛ Install and launch applications on simulators
đ¸ Take screenshots of simulator screens
đ Perform taps on coordinates
đ Support for multiple concurrent simulator sessions
đ Comprehensive file-based logging without console output
đĄī¸ Error-resilient operation
đ Prerequisites
đĸ Node.js (v16 or later)
đ macOS (required for iOS simulators)
đ ī¸ Xcode with iOS simulators installed
đ TypeScript 4.5+
đ§ Installation
Installing via Smithery
To install iOS Simulator Control Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @atom2ueki/mcp-server-ios-simulator --client claudeManual Installation
# Clone the repository
git clone https://github.com/atom2ueki/mcp-server-ios-simulator.git
cd mcp-server-ios-simulator
# Install dependencies
npm installđŗ Docker
A Dockerfile is provided so the server can be packaged for the Glama MCP directory and other container hosts.
docker build -t mcp-server-ios-simulator .
docker run --rm -i mcp-server-ios-simulatorNote: iOS simulators only run on macOS, so a Linux container can host the MCP process and respond on stdio but cannot drive a real simulator. The container is intended for portability checks and remote MCP environments that bridge to a macOS host.
âī¸ Configuration
Configuration is handled through the src/config.ts file:
const config = {
simulator: {
defaultDevice: process.env.SIMULATOR_DEFAULT_DEVICE || 'iPhone 16',
defaultOS: process.env.SIMULATOR_DEFAULT_OS || '18.2',
timeout: parseInt(process.env.SIMULATOR_TIMEOUT || '30000', 10),
}
};You can customize these settings by setting environment variables:
SIMULATOR_DEFAULT_DEVICE=iPhone 16
SIMULATOR_DEFAULT_OS=18.2
SIMULATOR_TIMEOUT=30000đ Usage
đ¨ Building and Starting the Server
# Build the project
npm run build
# Start the server
npm startđ§° MCP Tools
The server provides two distinct approaches for controlling iOS simulators:
đą Direct Simulator Management (Recommended)
These tools work directly with simulator UDIDs and don't require maintaining sessions:
đ
list-available-simulators- List all available simulators with their UDIDsâļī¸
boot-simulator-by-udid- Boot a simulator directly using its UDIDâšī¸
shutdown-simulator-by-udid- Shutdown a simulator directly using its UDIDđ
list-booted-simulators- List all currently booted simulators
Use this approach when: You just want to boot, use, and shut down simulators directly.
đą Session-Based Management (Advanced)
These tools use a session layer that tracks simulators with custom session IDs:
đ
list-simulator-sessions- List all active simulator sessionsâ
create-simulator-session- Create a new simulator sessionâ
terminate-simulator-session- Terminate a session (shuts down simulator and cleans up)đ
create-and-boot-simulator- Create a new simulator session and boot itâļī¸
boot-simulator- Boot a simulator for an existing sessionâšī¸
shutdown-simulator- Shutdown a simulator for an existing session
Use this approach when: You need to track simulator metadata, reference simulators by custom IDs, or use the more advanced management features.
đ˛ Application Management
đĨ
install-app- Install an application on a simulatorđ
launch-app- Launch an application on a simulatorđ
terminate-app- Terminate a running application on a simulator
đąī¸ Interaction Tools
đˇ
take-screenshot- Take a screenshot of the simulator screenđ
tap-coordinate- Perform a tap at the specified coordinates
đ¤ Example Usage with Claude Desktop
Configure Claude Desktop to use this server as an MCP tool:
Open Claude Desktop
Go to Settings > Advanced
Add the following configuration to the "MCP Servers" section:
{ "mcpServers": { "simulator": { "command": "node", "args": [ "/path/to/your/mcp-server-ios-simulator/dist/index.js" ] } } }Replace
/path/to/yourwith the actual path to where you've installed this repositorySave the settings and restart Claude Desktop
Use the provided tools to control iOS simulators directly from Claude Desktop:
Direct UDID Approach (Recommended):
First, ask Claude to list available simulators:
"Show me all available iOS simulators"Then use the UDID to boot a specific simulator:
"Boot the iOS simulator with UDID 5272EA61-5796-4372-86FE-3B33831D5CC1"When finished, shut it down using the same UDID:
"Shut down the simulator with UDID 5272EA61-5796-4372-86FE-3B33831D5CC1"
The direct UDID approach is simpler and more reliable for most use cases.
Session-Based Approach (Advanced): Only use this approach if you need the advanced features of session tracking:
"Create a new simulator session for iPhone 16 Pro with iOS 18.2" "Boot the simulator for session abc-123" "Take a screenshot of the simulator for session abc-123" "Terminate the simulator session abc-123"
đ¨âđģ Development
đ Project Structure
src/
âââ simulator/ # Simulator management layer
âââ mcp/ # MCP protocol implementation
âââ bridge/ # Bridge component
âââ utils/ # Utility functions including logger
âââ config.ts # Configuration handling
âââ index.ts # Entry pointđ¨ Building the Project
# Install development dependencies
npm install
# Run TypeScript compiler
npm run buildđ License
This project is licensed under the MIT License - see the LICENSE file for details.
đ Acknowledgments
đą appium-ios-simulator for providing the iOS simulator interaction capabilities
đ Model Context Protocol for the protocol specification and TypeScript SDK
Maintenance
Latest Blog Posts
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/atom2ueki/mcp-server-ios-simulator'
If you have feedback or need assistance with the MCP directory API, please join our Discord server