mobila
Provides full control over an Android emulator, including tapping, typing, swiping, taking screenshots, and installing apps.
Allows AI to install and perform UI actions (tap, type, swipe) on the Firefox browser within an Android emulator.
Allows AI to install and perform UI actions (tap, type, swipe) on the Gmail app within an Android emulator.
Allows AI to install and perform UI actions (tap, type, swipe) on the Instagram app within an Android emulator.
Allows AI to install and perform UI actions (tap, type, swipe) on the Signal messaging app within an Android emulator.
Allows AI to install and perform UI actions (tap, type, swipe) on the Spotify music app within an Android emulator.
Allows AI to install and perform UI actions (tap, type, swipe) on the Telegram messaging app within an Android emulator.
Allows AI to install and perform UI actions (tap, type, swipe) on the TikTok app within an Android emulator.
Allows AI to install and perform UI actions (tap, type, swipe) on the WhatsApp messaging app within an Android emulator.
Allows AI to install and perform UI actions (tap, type, swipe) on the YouTube app within an Android emulator.
Click on "Deploy 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., "@mobilatake a screenshot"
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.
mobila
One command → a real Android phone, controlled by Claude / ChatGPT / Cursor / any MCP client.
mobila boots a local Android emulator, installs apps for it, and exposes
the whole thing as an MCP server that an AI client can drive — tap, type,
swipe, screenshot, install — in plain English. Optionally publishes the MCP
server on a stable public URL so the same phone is reachable from a remote
ChatGPT Custom GPT or Claude Code on another machine.
Built on top of mobilerun
(vendored under vendor/mobilerun; MIT,
© Niels Schmidt) plus a small layer of
glue — recipes, install helpers, MCP transport, persistent ngrok tunnel.
Status: macOS works end-to-end. Linux + Windows packaging — next release.
Install (macOS)
bash <(curl -fsSL https://raw.githubusercontent.com/mamayevets/mobila/main/scripts/install/mac.sh)…or from a cloned repo:
git clone https://github.com/mamayevets/mobila && cd mobila
bash scripts/install/mac.shThe bootstrap installs: Xcode Command-Line Tools, Homebrew, uv, and the
mobila package itself as a uv tool.
Related MCP server: ADB MCP Server
First run
mobila setup # Android SDK + scrcpy + AVD creation (~5 min, one-time)
mobila # boots the phone + opens scrcpy mirror windowDaily use
Command | What it does |
| Boot the phone + open scrcpy |
| Tear down everything |
| Open scrcpy on a phone that's already running |
| What's running right now |
| Tail the emulator log |
| ADB shell into the phone |
| Install an app (preset / package id / URL / .apk file) |
Installing apps without a Google account
mobila install telegram # presets: telegram, whatsapp, signal,
# instagram, tiktok, youtube, gmail,
# chrome, firefox, fdroid, aurora, spotify
mobila install com.spotify.music # any package id (resolved via apkeep)
mobila install ~/Downloads/foo.apk # local file
mobila install https://example.com/foo.apkPresets and package-id installs need brew install apkeep.
AI control: mobila serve
mobila serve exposes the phone as an MCP
server so AI clients can drive it. Three modes:
Mode | Command | For |
stdio (default) |
| Claude Desktop (launches us as a child process) |
HTTP, local |
| Claude Code, Cursor on the same machine |
HTTP, public |
| ChatGPT Custom GPT, Claude Code on another machine, remote demos |
--http and --tunnel are protected by a Bearer token stored at
~/.mobila/token (chmod 600). The token survives restarts; rotate with
mobila serve --rotate-token.
Public access in one wizard
mobila tunnel setup # one-time: paste ngrok authtoken + dev domain
mobila serve --tunnel # → https://<your-dev-domain>.ngrok-free.devWe use ngrok's free-tier dev domain (one persistent
*.ngrok-free.dev host per account) so the public URL stays the same
across reboots, restarts, even reinstalls — register it once in your AI
client and it keeps working. Setup walks you through both pastes:
─────────────────────────────────────────────────────────────
mobila tunnel setup
─────────────────────────────────────────────────────────────
✓ ngrok installed
Step 1/2 — ngrok authtoken
Opening https://dashboard.ngrok.com/get-started/setup/macos…
Paste your authtoken: ***
✓ authtoken saved
Step 2/2 — your assigned dev domain
Your dev domain: cute-name-xyz.ngrok-free.dev
✓ domain saved
Done. Run: mobila serve --tunnel
Your public URL is always: https://cute-name-xyz.ngrok-free.devTools the AI sees
task_submit(prompt)— natural-language task → delegated to mobileruntask_logs / task_status / task_attach / task_kill— track that taskphone_screenshot()→ PNGphone_install(target)— preset / package id / URL / filephone_status()— is the emulator alive?dev_reload()— hot-reload the server (useful while iterating)
Wire it into Claude Code:
claude mcp add --transport http mobila https://<your-dev-domain>.ngrok-free.dev \
--header "Authorization: Bearer $(mobila serve --show-token)"…or into Claude Desktop / Cursor via JSON (mobila serve --tunnel
prints the snippet on startup).
Tuning for your Mac
Override emulator resources via env vars:
AVD_RAM_MB=2048 AVD_CORES=4 mobila # 16 GB Mac
AVD_RAM_MB=1024 AVD_CORES=2 mobila # 8 GB Mac (default)Platforms
✅ macOS (Apple Silicon + Intel)
⏳ Linux (via redroid) — next release
⏳ Windows (via WSL2 + redroid) — next release
License
MIT. Vendored mobilerun is also MIT — see
vendor/mobilerun/UPSTREAM.md for the
pinned upstream version and our patches.
This server cannot be deployed
Maintenance
Related MCP Connectors
Control real Android and iOS devices with LLM agents — tap, swipe, type, automate flows.
Remote MCP server for AI.TV creators — delegate account operations to your AI agent over MCP.
Remote MCP for AI video, image, music and speech generation.
Melaya is a remote MCP server. It gives an assistant hands on your own Android phone and browser: it reads the screen through the accessibility tree, then taps, types and navigates inside the apps and sites you allow-list, with no per-app API. It also builds, schedules and runs agent pipelines across 6k+ connected tools. OAuth 2.1, nothing to install.
Related MCP Servers
- AlicenseBqualityBmaintenanceAn MCP server that enables AI assistants to build, test, and debug Android applications by interacting directly with the Android development environment. It provides tools for managing emulators, executing Gradle tasks, running ADB commands, and performing UI automation via accessibility trees.1443 npm16MIT
- FlicenseAqualityDmaintenanceA MCP server that enables AI assistants to control Android devices via ADB, supporting device info, screen control, input simulation, app management, shell execution, file transfer, and UI parsing.20-
- AlicenseAqualityAmaintenanceMCP server that gives AI agents full vision and control over Android devices via ADB and scrcpy. Supports screenshots, input, apps, UI automation, shell, files, and clipboard.38231 npm93MIT
- AlicenseNot gradedqualityDmaintenanceEnables MCP-compatible agents to control an Android device over the network via ADB, providing tools for shell commands, screen capture, UI inspection, file operations, and input simulation.7 npmMIT