by InditexTech
Enables large language models to control iOS simulators through natural language commands, offering full lifecycle management, app handling, UI interaction, debugging, and advanced simulation features.
MCP Server For iOS Simulator provides a bridge that lets LLMs issue natural‑language instructions to create, manage, and interact with iOS simulator instances. It translates spoken or typed commands into concrete actions performed via the idb
tool, covering everything from simulator booting to app debugging.
Add this mcp to cline https://github.com/InditexTech/mcp-server-simulator-ios-idb
git clone https://github.com/InditexTech/mcp-server-simulator-ios-idb.git
cd mcp-server-simulator-ios-idb
python3 -m venv venv
source venv/bin/activate
npm install
npm run build
npm start # runs the server
The script checks for macOS, installs idb-companion
via Homebrew, and installs fb-idb
in the virtual environment.Add the server to your MCP configuration (e.g., Claude Desktop):
{
"mcpServers": {
"ios-simulator": {
"command": "node",
"args": ["/path/to/mcp-server-simulator-ios-idb/dist/index.js"],
"env": {}
}
}
}
import { createMCPServer } from 'mcp-server-simulator-ios-idb';
const { orchestrator } = createMCPServer();
await orchestrator.processInstruction('create session');
await orchestrator.processInstruction('tap at 100, 200');
const screenshot = await orchestrator.processInstruction('take screenshot');
idb
command coverage via natural‑language parsing.Q: Which operating system is required? A: macOS is mandatory because it provides the native iOS simulator environment.
Q: Do I need Xcode installed? A: Yes, Xcode with iOS simulators must be present.
Q: What Node version is supported? A: Node.js 14 or higher.
Q: How are dependencies managed?
A: Homebrew installs idb-companion
; fb-idb
is installed via pip
inside the Python virtual environment.
Q: Can I run the server without the virtual environment? A: The virtual environment isolates Python dependencies; it’s recommended to keep it activated when starting the server.
Q: How do I add the server to an LLM tool other than Claude?
A: Use the same MCP JSON configuration, pointing command
to the node executable that runs dist/index.js
.
Q: Is there a CLI shortcut for starting the server?
A: After installation, npm start
launches the server.
Q: How do I contribute?
A: Fork the repository, make changes, and open a pull request. Ensure tests pass with npm test
.
A Model Context Protocol (MCP) server that enables LLMs to interact with iOS simulators through natural language commands.
This MCP server provides a bridge between Large Language Models (LLMs) and iOS simulators, offering comprehensive control through natural language commands. Here's what it can do:
For detailed usage, see the Installation guide and Supported Commands sections. You can use this server either through direct MCP integration or as a standalone library.
Check out the Architecture section to understand how the components work together to enable natural language control of iOS simulators.
For detailed usage, see the Installation guide and Supported Commands sections. You can use this server either through direct MCP integration or as a standalone library.
Check out the Architecture section to understand how the components work together to enable natural language control of iOS simulators.
The easiest way to install this server is through Cline:
Add this mcp to cline https://github.com/InditexTech/mcp-server-simulator-ios-idb
Alternatively, you can install it manually:
# Clone the repository
git clone https://github.com/InditexTech/mcp-server-simulator-ios-idb.git
cd mcp-server-simulator-ios-idb
# Create and activate Python virtual environment
python3 -m venv venv
source venv/bin/activate # On Unix/macOS
# Install dependencies
npm install
# Build the project
npm run build
# Start the project
npm start
# Run tests
npm test
The installation process will automatically:
Note: Make sure to keep the virtual environment activated while using the server. If you close your terminal and come back later, you'll need to reactivate the virtual environment with the source venv/bin/activate
command before running npm start
.
To use this server with Claude or other LLM assistants:
{
"mcpServers": {
"ios-simulator": {
"command": "node",
"args": ["/path/to/mcp-server-simulator-ios-idb/dist/index.js"],
"env": {}
}
}
}
create a simulator session with iPhone 14
install app /path/to/my-app.ipa
launch app com.example.myapp
tap at 100, 200
take a screenshot
You can also use this package as a library in your own projects:
import { createMCPServer } from 'mcp-server-simulator-ios-idb';
async function main() {
// Create an instance of the MCP server
const { orchestrator } = createMCPServer();
// Process natural language commands
// Create a simulator session
const sessionResult = await orchestrator.processInstruction('create session');
console.log(`Session created: ${sessionResult.data}`);
// Interact with the simulator
await orchestrator.processInstruction('tap at 100, 200');
// Capture a screenshot
const screenshotResult = await orchestrator.processInstruction('take screenshot');
console.log(`Screenshot saved at: ${screenshotResult.data}`);
}
main().catch(console.error);
You can also use the individual components directly:
import {
IDBManager,
NLParser,
MCPOrchestrator,
ParserToOrchestrator,
OrchestratorToIDB
} from 'mcp-server-simulator-ios-idb';
// Create instances
const idbManager = new IDBManager();
const parser = new NLParser();
const orchestrator = new MCPOrchestrator(parser, idbManager);
// Use the components directly
const sessionId = await idbManager.createSimulatorSession({
deviceName: 'iPhone 12',
platformVersion: '15.0'
});
await idbManager.tap(sessionId, 100, 200);
mcp-server-simulator-ios-idb/
├── src/ # Source code
│ ├── adapters/ # Adapter components
│ ├── idb/ # IDB manager implementation
│ ├── mcp/ # MCP server implementation
│ ├── orchestrator/ # Command orchestrator
│ ├── parser/ # Natural language parser
│ └── index.ts # Main entry point
├── types/ # TypeScript type definitions
├── scripts/ # Installation scripts
├── package.json # Project configuration
└── tsconfig.json # TypeScript configuration
The NLParser supports the following natural language commands:
Command | Description | Example |
---|---|---|
Create session | Creates a new simulator session | "create session", "create simulator iPhone 12" |
Terminate session | Terminates the current session | "terminate session", "close simulator" |
List simulators | Lists available simulators | "list simulators", "show simulators" |
List booted simulators | Lists running simulators | "list booted simulators", "show running simulators" |
Boot simulator | Boots a simulator by UDID | "boot simulator 5A321B8F-4D85-4267-9F79-2F5C91D142C2" |
Shutdown simulator | Shuts down a simulator | "shutdown simulator 5A321B8F-4D85-4267-9F79-2F5C91D142C2" |
Focus simulator | Brings simulator window to front | "focus simulator", "bring simulator to front" |
List simulator sessions | Lists active simulator sessions | "list simulator sessions", "show active sessions" |
Command | Description | Example |
---|---|---|
Install app | Installs an app on the simulator | "install app /path/to/app.ipa" |
Launch app | Launches an app on the simulator | "launch app com.example.app" |
Terminate app | Terminates a running app | "terminate app com.example.app" |
Uninstall app | Uninstalls an app | "uninstall app com.example.app" |
List apps | Lists installed applications | "list apps", "show installed apps" |
Check if app installed | Checks if an app is installed | "is app com.example.app installed" |
Command | Description | Example |
---|---|---|
Tap | Taps at specific coordinates | "tap at 100, 200" |
Swipe | Performs a swipe gesture | "swipe from 100, 200 to 300, 400" |
Press button | Presses a device button | "press button HOME", "press button SIRI" |
Input text | Types text | "input text Hello World" |
Press key | Presses a key by code | "press key 4" |
Press key sequence | Presses a sequence of keys | "press key sequence 4 5 6" |
Command | Description | Example |
---|---|---|
Describe elements | Lists all accessibility elements | "describe all elements", "show accessibility elements" |
Describe point | Describes element at coordinates | "describe point 100, 200", "what's at 150, 300" |
Command | Description | Example |
---|---|---|
Take screenshot | Captures a screenshot | "take screenshot", "capture screen" |
Record video | Records screen activity | "record video /path/output.mp4" |
Stop recording | Stops video recording | "stop recording", "stop video recording" |
Get logs | Retrieves system or app logs | "get logs", "get logs for com.example.app" |
Command | Description | Example |
---|---|---|
Start debug | Starts a debug session | "debug app com.example.app", "start debug com.example.app" |
Stop debug | Stops a debug session | "stop debug", "terminate debug session" |
Debug status | Gets debug session status | "debug status", "show debug info" |
Command | Description | Example |
---|---|---|
List crash logs | Lists available crash logs | "list crash logs", "show crash logs" |
Show crash log | Shows content of a crash log | "show crash log crash_2023-01-01" |
Delete crash logs | Deletes crash logs | "delete crash logs", "clear crash logs" |
Command | Description | Example |
---|---|---|
Install dylib | Installs a dynamic library | "install dylib /path/to/library.dylib" |
Open URL | Opens a URL in the simulator | "open url https://example.com" |
Clear keychain | Clears the simulator's keychain | "clear keychain" |
Set location | Sets the simulator's location | "set location 37.7749, -122.4194" |
Add media | Adds media to the camera roll | "add media /path/to/image.jpg" |
Approve permissions | Approves app permissions | "approve permissions com.example.app photos camera" |
Update contacts | Updates contacts database | "update contacts /path/to/contacts.sqlite" |
The interface supports all commands available in the idb CLI tool, providing a comprehensive set of operations for iOS simulator automation.
The server consists of three main components:
These components are connected through adapters:
To use this server with the Model Context Protocol:
{
"mcpServers": {
"ios-simulator": {
"command": "node",
"args": ["/path/to/mcp-server-simulator-ios-idb/dist/index.js"],
"env": {}
}
}
}
const result = await useMcpTool({
serverName: "ios-simulator",
toolName: "process-instruction",
arguments: {
instruction: "create simulator session"
}
});
This project would not be possible without facebook/idb, which provides the underlying iOS simulator control capabilities. We extend our sincere gratitude to the Facebook/Meta team and all contributors to the idb project for creating and maintaining such a powerful and reliable tool.
This tool is available as open source under the terms of the Apache-2.0.
Please log in to share your review and rating for this MCP.
{ "mcpServers": { "ios-simulator": { "command": "npx", "args": [ "-y", "mcp-server-simulator-ios-idb" ], "env": {} } } }
Explore related MCPs that share similar capabilities and solve comparable challenges
by zed-industries
A high‑performance, multiplayer code editor designed for speed and collaboration.
by modelcontextprotocol
Model Context Protocol Servers
by modelcontextprotocol
A Model Context Protocol server for Git repository interaction and automation.
by modelcontextprotocol
A Model Context Protocol server that provides time and timezone conversion capabilities.
by cline
An autonomous coding assistant that can create and edit files, execute terminal commands, and interact with a browser directly from your IDE, operating step‑by‑step with explicit user permission.
by continuedev
Enables faster shipping of code by integrating continuous AI agents across IDEs, terminals, and CI pipelines, offering chat, edit, autocomplete, and customizable agent workflows.
by upstash
Provides up-to-date, version‑specific library documentation and code examples directly inside LLM prompts, eliminating outdated information and hallucinated APIs.
by github
Connects AI tools directly to GitHub, enabling natural‑language interactions for repository browsing, issue and pull‑request management, CI/CD monitoring, code‑security analysis, and team collaboration.
by daytonaio
Provides a secure, elastic infrastructure that creates isolated sandboxes for running AI‑generated code with sub‑90 ms startup, unlimited persistence, and OCI/Docker compatibility.