Model Context Protocol Server for Mobile Automation and Scraping (iOS, Android, Emulators, Simulators and Physical Devices)
This is a Model Context Protocol (MCP) server that enables scalable mobile automation, development through a platform-agnostic interface, eliminating the need for distinct iOS or Android knowledge. You can run it on emulators, simulators, and physical devices (iOS and Android). This server allows Agents and LLMs to interact with native iOS/Android applications and devices through structured accessibility snapshots or coordinate-based taps based on screenshots.
https://github.com/user-attachments/assets/c4e89c4f-cc71-4424-8184-bdbc8c638fa1
Join us on our journey as we continuously enhance Mobile MCP! Check out our detailed roadmap to see upcoming features, improvements, and milestones. Your feedback is invaluable in shaping the future of mobile automation.
How we help to scale mobile automation:
More details in our wiki page for setup, configuration and debugging related questions.
Detailed guide for Claude Desktop
{
"mcpServers": {
"mobile-mcp": {
"command": "npx",
"args": ["-y", "@mobilenext/mobile-mcp@latest"]
}
}
}
claude mcp add mobile -- npx -y @mobilenext/mobile-mcp@latest
What you will need to connect MCP with your agent and mobile devices:
When launched, Mobile MCP can connect to:
Make sure you have your mobile platform SDKs (Xcode, Android SDK) installed and configured properly before running Mobile Next Mobile MCP.
When you do not have a physical phone connected to your machine, you can run Mobile MCP with an emulator or simulator in the background.
For example, on Android:
On iOS, you'll need Xcode and to run the Simulator before using Mobile MCP with that simulator instance.
xcrun simctl list
xcrun simctl boot "iPhone 16"
The commands and tools support both accessibility-based locators (preferred) and coordinate-based inputs, giving you flexibility when accessibility/automation IDs are missing for reliable and seemless automation.
bundleId
(string): The application's unique bundle/package identifier like: com.google.android.keep or com.apple.mobilenotes )bundleId
(string): The application's unique bundle/package identifier like: com.google.android.keep or com.apple.mobilenotes )packageName
(string): Based on the application's bundle/package identifier calls am force stop or kills the app based on pid.x
(number): X-coordinatey
(number): Y-coordinateelement
(string): Human-readable element description (e.g., "Login button")ref
(string): Accessibility/automation ID or reference from a snapshotx
(number): X-coordinatey
(number): Y-coordinateurl
(string): The URL to be opened (e.g., "https://example.com").text
(string): Text to typesubmit
(boolean): Whether to press Enter/Return after typingstartElement
(string): Human-readable description of the start elementstartRef
(string): Accessibility/automation ID of the start elementendElement
(string): Human-readable description of the end elementendRef
(string): Accessibility/automation ID of the end elementstartX
(number): Start X-coordinatestartY
(number): Start Y-coordinateendX
(number): End X-coordinateendY
(number): End Y-coordinatekey
(string): Key identifier (e.g., HOME, BACK, VOLUME_UP, etc.)