Programmatically control iOS simulators via stdio transport. Requires macOS with Xcode and installed iOS simulators.
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.
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.
Demo showing how to boot an iOS simulator using Claude AI Desktop
The server consists of three main components:
āāāāāāāāāāāāāāāāāāā āāāāāāāāāāāāāāāāāāā āāāāāāāāāāāāāāāāāāā
ā MCP Protocol ā ā Stdio ā ā Simulator ā
ā Implementation āāāāāā⤠Transport āāāāāā⤠Management ā
ā ā ā ā ā Layer ā
āāāāāāāāāāāāāāāāāāā āāāāāāāāāāāāāāāāāāā āāāāāāāāāāāāāāāāāāā
ā² ā²
ā ā
ā¼ ā¼
āāāāāāāāāāāāāāāāāāā āāāāāāāāāāāāāāāāāāā
ā MCP Client ā ā iOS Simulator ā
ā (e.g. Claude) ā ā ā
āāāāāāāāāāāāāāāāāāā āāāāāāāāāāāāāāāāāāā
To install iOS Simulator Control Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @atom2ueki/mcp-server-ios-simulator --client claude
# Clone the repository
git clone https://github.com/atom2ueki/mcp-server-ios-simulator.git
cd mcp-server-ios-simulator
# Install dependencies
npm install
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
# Build the project
npm run build
# Start the server
npm start
The server provides two distinct approaches for controlling iOS simulators:
These tools work directly with simulator UDIDs and don't require maintaining sessions:
list-available-simulators
- List all available simulators with their UDIDsboot-simulator-by-udid
- Boot a simulator directly using its UDIDshutdown-simulator-by-udid
- Shutdown a simulator directly using its UDIDlist-booted-simulators
- List all currently booted simulatorsUse this approach when: You just want to boot, use, and shut down simulators directly.
These tools use a session layer that tracks simulators with custom session IDs:
list-simulator-sessions
- List all active simulator sessionscreate-simulator-session
- Create a new simulator sessionterminate-simulator-session
- Terminate a session (shuts down simulator and cleans up)create-and-boot-simulator
- Create a new simulator session and boot itboot-simulator
- Boot a simulator for an existing sessionshutdown-simulator
- Shutdown a simulator for an existing sessionUse this approach when: You need to track simulator metadata, reference simulators by custom IDs, or use the more advanced management features.
install-app
- Install an application on a simulatorlaunch-app
- Launch an application on a simulatorterminate-app
- Terminate a running application on a simulatortake-screenshot
- Take a screenshot of the simulator screentap-coordinate
- Perform a tap at the specified coordinatesConfigure Claude Desktop to use this server as an MCP tool:
{
"mcpServers": {
"simulator": {
"command": "node",
"args": [
"/path/to/your/mcp-server-ios-simulator/dist/index.js"
]
}
}
}
/path/to/your
with the actual path to where you've installed this repositoryUse 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"
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
# Install development dependencies
npm install
# Run TypeScript compiler
npm run build
This project is licensed under the MIT License - see the LICENSE file for details.
A collection of reference implementations for the Model Context Protocol (MCP), showcasing various MCP servers implemented with TypeScript and Python SDKs.
Access and interact with Harness platform data, including pipelines, repositories, logs, and artifact registries.
A Node.js MCP server example for the OpenWeather API, requiring an API key.
Search dashboards, investigate incidents and query datasources in your Grafana instance
A command-line interface wrapper for the Google Gemini API, enabling interaction with Gemini's Search and Chat tools.
Integrates with Ollama to run local large language models. Requires a running Ollama instance.
A local-first code indexer that enhances LLMs with deep code understanding. It integrates with AI assistants via the Model Context Protocol (MCP) and supports AI-powered semantic search.
Interact with Jupyter notebooks running in any JupyterLab environment, supporting real-time control and smart execution of notebook cells.
The definitive Vibe Coder's sanity check MCP server: Prevents cascading errors by calling a "Vibe-check" agent to ensure alignment and prevent scope creep
A Model Context Protocol (MCP) server for CODESYS V3 programming environments.