xcsimctl
About
An MCP server that wraps xcrun simctl to provide structured, programmatic control of iOS Simulators. It is designed for iOS developers and QA engineers who need to automate simulator workflows from AI assistants or development tools.
Details
- Author
- nzrsky
- Downloads
- 442
- Categories
- Developer Tools, Community, Other
Jump to
- List, boot, shutdown, create, and delete simulators
- Install, launch, and terminate apps on simulators
- Take screenshots and record video
- Send push notifications to a running app
- Manage privacy permissions and location simulation
- Override status bar and UI appearance (light/dark mode)
Setting up with Highlight
This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:
- Download and install Highlight from highlightai.com/download
- Navigate to the plugins tab and select "Add Custom Plugin"
-
Configure the plugin with the settings below
Plugin Name
xcsimctlCommand (node, npx, python, etc.)Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.
- Enable "Start Automatically" if you want the plugin to start when Highlight launches
From the repository
Install with uvx simctl-mcp-server or by cloning the repo and running pip install .. Configure by adding the server to your MCP client (e.g., Claude Desktop or VS Code MCP extension) with command simctl-mcp-server or uvx simctl-mcp-server. The server communicates over stdio and exposes tools that can be called directly from your AI assistant.
simctl_list_devices
List available iOS simulators and their states. Args: format: Output format (json or text). Defaults to json. filter: Optional filter term (e.g., 'available', 'iPhone', 'iOS 17') Returns: List of available simulators
simctl_boot_device
Boot a simulator device. Args: device: Device UDID, name, or 'booted' for current device arch: Architecture to use when booting (arm64 or x86_64) Returns: Success message
simctl_shutdown_device
Shutdown a simulator device. Args: device: Device UDID, name, or 'booted' for current device Returns: Success message
simctl_create_device
Create a new simulator device. Args: name: Name for the new device device_type: Device type identifier (e.g., 'iPhone 15 Pro') runtime: Runtime identifier (e.g., 'iOS 17.0') Returns: Created device information
simctl_delete_device
Delete simulator devices. Args: devices: List of device UDIDs, names, or 'unavailable' to delete all unavailable devices Returns: Success message
simctl_install_app
Install an app on a simulator device. Args: device: Device UDID, name, or 'booted' for current device app_path: Path to .app bundle or .ipa file Returns: Success message
simctl_launch_app
Launch an app on a simulator device. Args: device: Device UDID, name, or 'booted' for current device bundle_id: App bundle identifier wait_for_debugger: Wait for debugger to attach before launching console_mode: Console output mode (none, console, console-pty) args: Additional launch arguments Returns: Launch result
simctl_terminate_app
Terminate an app on a simulator device. Args: device: Device UDID, name, or 'booted' for current device bundle_id: App bundle identifier Returns: Success message
simctl_screenshot
Take a screenshot of a simulator device. Args: device: Device UDID, name, or 'booted' for current device output_path: Path where to save the screenshot format: Image format (png, jpeg) display: Display to capture (internal, external) Returns: Success message
simctl_record_video
Start recording video of a simulator device. Args: device: Device UDID, name, or 'booted' for current device output_path: Path where to save the video codec: Video codec (hevc, h264) display: Display to record (internal, external) Returns: Recording start message
simctl_push_notification
Send a push notification to a simulator device. Args: device: Device UDID, name, or 'booted' for current device payload: Push notification payload as JSON object bundle_id: Target app bundle identifier (optional if specified in payload) Returns: Success message
simctl_privacy_control
Control app privacy permissions on a simulator device. Args: device: Device UDID, name, or 'booted' for current device action: Privacy action (grant, revoke, reset) service: Privacy service (photos, camera, microphone, location, etc.) bundle_id: App bundle identifier (optional) Returns: Success message
simctl_set_location
Set or clear device location on a simulator. Args: device: Device UDID, name, or 'booted' for current device action: Location action (set, clear, run) latitude: Latitude coordinate (required for 'set' action) longitude: Longitude coordinate (required for 'set' action) scenario: Location scenario (required for 'run' action) Returns: Success message
simctl_status_bar_override
Override status bar appearance on a simulator device. Args: device: Device UDID, name, or 'booted' for current device action: Status bar action (override, clear) time: Time to display (e.g., "9:41") data_network: Data network type (wifi, 3g, 4g, lte, lte-a, lte+, 5g, 5g+, 5g-uw) wifi_bars: WiFi signal strength (0-3) cellular_bars: Cellular signal strength (0-4) battery_level: Battery level percentage (0-100) battery_state: Battery state (charging, charged, discharging) Returns: Success message
simctl_ui_appearance
Get or set UI appearance (light/dark mode) on a simulator device. Args: device: Device UDID, name, or 'booted' for current device appearance: UI appearance (light, dark). If not provided, returns current appearance. Returns: Current or updated appearance
Claude Desktop / Cursor
Paste into your MCP client config file to install this server.
{
"mcpServers": {
"xcsimctl": {
"simctl": {
"command": "uvx",
"args": [
"simctl-mcp-server"
],
"env": []
}
}
}
}
McpServers
{
"simctl": {
"command": "uvx",
"args": [
"simctl-mcp-server"
],
"env": []
}
}
SimCtl MCP Server
A Model Context Protocol (MCP) server that provides structured access to iOS Simulator management via xcrun simctl commands.
Installation
Method 1: Using uvx
1. Prerequisites:
- Python 3.13+
- Xcode with Command Line Tools installed
- uvx: curl -LsSf https://astral.sh/uv/install.sh | sh
2. Run directly with uvx:
uvx simctl-mcp-server
Method 2: Local Development Installation
1. Prerequisites:
- Python 3.13+
- Xcode with Command Line Tools installed
2. Clone and install:
git clone https://github.com/nzrsky/simctl-mcp-server
cd simctl-mcp-server
pip install .
3. Run the server:
simctl-mcp-server
Method 3: Build from Source
1. Build the wheel:
python -m build --wheel
pip install dist/simctl_mcp_server-0.1.0-py3-none-any.whl
Configuration
For Claude Desktop
Add to your ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"simctl": {
"command": "simctl-mcp-server",
"args": [],
"env": {}
}
}
}
Or if using uvx:
{
"mcpServers": {
"simctl": {
"command": "uvx",
"args": ["simctl-mcp-server"],
"env": {}
}
}
}
For VS Code with MCP Extension
1. Install the MCP Extension from the VS Code marketplace
2. Add server configuration to your VS Code settings (settings.json):
{
"mcp.servers": {
"simctl": {
"command": "simctl-mcp-server",
"args": [],
"env": {}
}
}
}
Or if using uvx:
{
"mcp.servers": {
"simctl": {
"command": "uvx",
"args": ["simctl-mcp-server"],
"env": {}
}
}
}
3. Restart VS Code to load the MCP server
4. Use the Command Palette (Cmd+Shift+P) and search for "MCP" commands to interact with the simulator tools
For Other MCP Clients
The server runs on stdio, so you can invoke it directly:
With installed package:
simctl-mcp-server
With uvx:
uvx simctl-mcp-server
Available Tools
Device Management
-simctl_list_devices - List all simulators and their states
- simctl_boot_device - Boot a simulator
- simctl_shutdown_device - Shutdown a simulator
- simctl_create_device - Create a new simulator
- simctl_delete_device - Delete simulators
App Management
-simctl_install_app - Install an app (.app bundle or .ipa)
- simctl_launch_app - Launch an app with options
- simctl_terminate_app - Terminate a running app
Media & Screenshots
-simctl_screenshot - Take screenshots
- simctl_record_video - Record video (start recording)
Testing & Development
-simctl_push_notification - Send push notifications
- simctl_privacy_control - Manage app permissions
- simctl_set_location - Set device location/GPS
- simctl_status_bar_override - Override status bar appearance
- simctl_ui_appearance - Control light/dark mode
Usage Examples
Basic Device Operations
```
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.





