Works with Apple's development ecosystem, particularly iOS simulators and Xcode tools, to automate testing and development workflows for Apple platforms.
Can be integrated into GitHub Actions CI/CD pipelines for automated iOS testing, allowing for AI-driven test execution in continuous integration workflows.
Enables automation of iOS simulators, performing accessibility testing, managing apps, and executing complex workflows. Provides tools for simulator management, app installation/launching, UI interaction, and screen capture.
Leverages macOS system capabilities for UI automation through AppleScript, accessibility permissions management, and screenshot storage.
Integrates with Xcode's iOS Simulator functionality, allowing for programmatic control of simulators, app installation, and testing features through the simctl commands.
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., "@iOS Automation MCP Servertake a screenshot of the current simulator screen"
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.
Mobile automation iOS MCP server
Modern iOS automation server built with FastMCP 2.0 and clean architecture
A production-ready iOS automation MCP server built with FastMCP 2.0, featuring clean modular architecture with complete platform segregation. Ready for cross-platform expansion with iOS-specific and shared components properly separated.
๐บ Demo Video

๐ฌ Watch the Complete Demo: Mobile automation iOS MCP server in Action
Related MCP server: Xcode MCP Server
โจ Features
๐ FastMCP 2.0 - Modern Python-first MCP implementation
๐ Cloud Deployment - Ready for Railway, Heroku, or other platforms
๐ฑ Real iOS Automation - Appium + WebDriverAgent integration
๐๏ธ Clean Modular Architecture - Complete platform segregation & SOLID principles
๐ Cross-Platform Ready - Shared utilities for future Android/other platforms
๐จ Beautiful Logging - Colored console output with emojis
๐ง Type-Safe - Comprehensive type hints throughout
๐ Extensible - Plugin-style tool system with modular configuration
๐ฆ Zero Code Duplication - DRY principles with shared utilities
๐ Quick Start
Option 1: Remote Server (Recommended)
Use the hosted version on Railway - no local setup required:
{
"mcpServers": {
"ios-automation-railway": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp-server-demo-production.up.railway.app/sse/"
]
}
}
}Option 2: Local Development
Prerequisites
macOS (required for iOS automation)
Python 3.11+
uv (recommended) or pip
Xcode with iOS Simulator
Node.js (for Appium)
Installation
git clone https://github.com/iHackSubhodip/mcp-server-demo.git cd mcp-server-demo # Using uv (recommended) uv sync # Or using pip (legacy) pip install -e .Claude Desktop Configuration
{ "mcpServers": { "ios-automation-local": { "command": "uv", "args": ["run", "python", "mobile-automation-mcp-server/fastmcp_server.py"], "cwd": "/path/to/mcp-server-demo" } } }
๐๏ธ Architecture
The Mobile automation iOS MCP server features a clean, modular architecture with complete platform segregation achieved through a comprehensive 6-phase refactoring. This design enables maximum maintainability, zero code duplication, and seamless cross-platform expansion.
โจ Architecture Achievements
๐ฏ Complete Platform Segregation
Cross-platform utilities isolated in
shared/packageiOS-specific code contained in
platforms/ios/packageClean separation of concerns across all components
Future-ready for Android in
platforms/android/
๐ DRY Principles Applied
Shared utilities: Logger, exceptions, command runner
Base configuration: AppiumConfig, ServerConfig for reuse
Platform configs: iOS-specific settings separate
Zero duplication between current/future platforms
๐ก๏ธ Maintainable & Extensible
Self-contained platforms: Each platform completely independent
Unified interface: Single configuration entry point
Backward compatible: All existing interfaces preserved
Professional structure: Enterprise-grade organization
Directory Structure
mobile-automation-mcp-server/
โโโ fastmcp_server.py # ๐ FastMCP 2.0 server (main entry)
โโโ config/
โ โโโ settings.py # ๐ง Unified configuration interface
โโโ shared/ # ๐ Cross-platform utilities & config
โ โโโ utils/ # ๐ ๏ธ Platform-agnostic utilities
โ โ โโโ logger.py # ๐ Colored logging with emojis
โ โ โโโ exceptions.py # โ ๏ธ Exception hierarchy
โ โ โโโ command_runner.py # ๐ป Shell command execution
โ โโโ config/ # โ๏ธ Base configuration classes
โ โโโ base_settings.py # ๐ AppiumConfig, ServerConfig
โโโ platforms/ios/ # ๐ iOS-specific platform code
โ โโโ automation/ # ๐ค iOS automation services
โ โ โโโ appium_client.py # ๐ฑ iOS automation client
โ โ โโโ screenshot_service.py # ๐ธ Screenshot handling
โ โ โโโ simulator_manager.py # ๐ฎ Simulator management
โ โโโ tools/ # ๐จ iOS-specific MCP tools
โ โ โโโ appium_tap_type_tool.py # โจ๏ธ Text field automation
โ โ โโโ find_and_tap_tool.py # ๐ Advanced element finding
โ โ โโโ launch_app_tool.py # ๐ App launching
โ โ โโโ screenshot_tool.py # ๐ท Screenshot capture
โ โโโ config/ # โ๏ธ iOS-specific configuration
โ โโโ ios_settings.py # ๐ iOSConfig (XCUITest, iPhone)
โโโ screenshots/ # ๐ Screenshot storage
โโโ Dockerfile # ๐ณ Container deployment
โโโ Procfile # ๐ Railway deployment
โโโ pyproject.toml # ๐ฆ Dependencies & project config๐ฏ Benefits Achieved
Aspect | Before Refactoring | After Refactoring |
Structure | Mixed iOS/shared code | Clean platform segregation |
Maintainability | Monolithic | Modular & self-contained |
Extensibility | iOS-only | Cross-platform ready |
Code Reuse | Duplication likely | Shared utilities for all platforms |
Configuration | Single settings file | Modular config hierarchy |
Organization | Flat structure | Professional enterprise structure |
๐ง Available Tools
take_screenshot
Capture iOS simulator screenshots
{
"filename": "optional_name.png",
"device_id": "booted"
}launch_app
Launch iOS applications
{
"bundle_id": "com.apple.mobilesafari",
"device_id": "booted"
}find_and_tap
Find and tap UI elements with smart automation
{
"accessibility_id": "submitButton",
"take_screenshot": true,
"dismiss_after_screenshot": false
}appium_tap_and_type
Enhanced text input with element finding
{
"text": "Hello World!",
"element_type": "textField",
"timeout": 10
}list_simulators
List available iOS simulators
{}get_server_status
Check server and Appium status
{}๐ ๏ธ Development
Local Development Commands
# Run FastMCP server locally (with uv)
uv run python mobile-automation-mcp-server/fastmcp_server.py
# Install dependencies (if needed)
uv sync
# Development mode (with dev dependencies)
uv sync --devAppium Setup
# Install Appium
npm install -g appium
appium driver install xcuitest
# Start Appium server
appium server --port 4723Architecture Development
# The modular structure makes development easier:
# Work on shared utilities (affects all platforms)
cd shared/utils/
# Work on iOS-specific features
cd platforms/ios/
# Work on configuration
cd config/
# Add new platforms (future)
mkdir platforms/android/๐ Cloud Deployment
This server is deployed on Railway and accessible via:
HTTP Endpoint:
https://mcp-server-demo-production.up.railway.app/SSE Endpoint:
https://mcp-server-demo-production.up.railway.app/sse/
The cloud deployment simulates iOS automation responses for demonstration purposes.
๐ Key Improvements
Feature | Traditional MCP | FastMCP 2.0 + Clean Architecture |
Setup | Complex configuration | Simple Python decorators |
Architecture | Monolithic | Modular platform segregation |
Code Reuse | Manual duplication | Shared utilities package |
Type Safety | Manual validation | Built-in Pydantic models |
Error Handling | Basic try-catch | Rich context and logging |
Deployment | Local only | Cloud-ready with Railway |
Extensibility | Hard to extend | Easy platform addition |
Maintainability | Complex | Clean separation of concerns |
๐ Troubleshooting
Simulator Issues
# List available simulators
xcrun simctl list devices
# Boot a simulator
xcrun simctl boot "iPhone 16 Pro"Appium Connection
# Check Appium status
curl http://localhost:4723/status
# Restart Appium
pkill -f appium && appium server --port 4723๐ Dependencies
Core dependencies managed via pyproject.toml:
fastmcp>=2.9.2- FastMCP 2.0 frameworkmcp>=1.0.0- Traditional MCP protocolaiohttp>=3.9.0- HTTP client for automationappium-python-client>=3.0.0- iOS automationpydantic>=2.4.0- Data validation
Install with:
# Using uv (recommended)
uv sync
# Or using pip
pip install -e .๐ค Contributing
Fork the repository
Create a feature branch
Follow the clean architecture patterns:
Shared utilities go in
shared/Platform-specific code goes in
platforms/{platform}/Configuration follows the modular hierarchy
Add comprehensive error handling
Submit a pull request
๐ Future Expansion
Thanks to the clean architecture, adding new platforms is straightforward:
# Add Android platform (example)
mkdir -p platforms/android/{automation,tools,config}
# Reuse shared utilities
from shared.utils import get_logger, AutomationMCPError
from shared.config import AppiumConfig, ServerConfig
# Create Android-specific config
from platforms.android.config import AndroidConfig๐ License
This project is licensed under the MIT License - see the LICENSE file for details.