
Android Remote Control MCP

An Android application that runs as an MCP (Model Context Protocol) server, enabling AI models to fully control an Android device remotely using accessibility services and screenshot capture.
The app runs directly on your Android device (or emulator) and exposes an HTTP server (with optional HTTPS) implementing the MCP protocol. AI models like Claude can connect to it and interact with any app on the device: reading UI elements, tapping buttons, typing text, swiping, capturing screenshots, managing files, launching apps, and more.
Optional Privacy Mode detects and hides personal data, such as emails, card numbers, credentials and names, in what the tools return, before it leaves the device for the AI provider. Detection runs entirely on the device. It reduces exposure, but cannot guarantee that nothing personal gets through.
To reach the phone from anywhere, the free end-to-end encrypted HTTPS tunnel gives it a public URL with no account and no registration. TLS ends on the phone, so the tunnel service only relays encrypted bytes and cannot read your traffic. Cloudflare and ngrok are also supported, but they terminate TLS themselves and can read it.
Warning: This software is provided "as-is" without warranty of any kind, for research and educational purposes only. The authors do not condone the use of this tool for any illegal, unauthorized, or unethical activities. Users are solely responsible for ensuring their use complies with all applicable laws and regulations. By using this software, you agree to use it responsibly and at your own risk.
Contents
- Demo
- Features
- Install
- Setup
- Privacy Mode
- Integrations
- Configuration
- Permissions Reference
- Security
- Contributing
- License
Demo
Posting on Reddit (sped up, ~6 min original)
Installing the booking.com app

Flight search on Skyscanner, Zurich → Istanbul (sped up, ~4 min original)
Features
MCP Server
- HTTP server running directly on Android (Ktor + Netty), with optional HTTPS
- Streamable HTTP transport at
/mcp (MCP specification compliant, JSON-only, no SSE)
- Combined authentication: static bearer token and/or a self-contained OAuth 2.1 server (Claude.ai / Claude Desktop custom connectors, with on-device approval)
- Auto-generated self-signed TLS certificates (or custom certificate upload)
- Configurable binding: localhost (127.0.0.1), network (0.0.0.0) or a specific IP address of the device
- Auto-start on boot
- Remote access tunnels via the free end-to-end encrypted tunnel (no account), Cloudflare Quick Tunnels or ngrok (public HTTPS URL)
65 MCP Tools across 15 Categories
Screen introspection, system actions, touch actions, gestures, node actions, text input, utilities, file operations, app management, camera, intents, notifications, location, sharing, and shell.
All tool names use the android_ prefix by default (e.g., android_tap). When a device slug is configured (e.g., pixel7), the prefix becomes android_pixel7_ (e.g., android_pixel7_tap).
See docs/MCP_TOOLS.md for the full tool reference with input/output schemas and examples.
Android App
- Material Design 3 UI with tabbed layout (Server / Settings / About) and dark mode
- Server status monitoring (running/stopped) with permission warning banner
- Connection info display (IP, port, token, tunnel URL)
- Per-tool and per-parameter permissions (enable/disable individual MCP tools)
- Permission management (Accessibility, Notifications, Camera, Microphone)
- Remote access tunnel configuration (free E2E tunnel / Cloudflare / ngrok)
- Storage location management (automatic locations + SAF authorization for file tools)
- Server log viewer (MCP tool calls, tunnel events)
- Headless setup via ADB (configure, grant permissions, start/stop server without UI)
Comparison with Alternatives
| Feature | This project | mobile-mcp | Android-MCP | android-mcp-server | adb-mcp | droidrun-mcp |
|---|
| MCP tools | 65 | 21 | 11 | 5 | 10 | 11 |
| Runs on the phone (no ADB) | :white_check_mark: | :x: | :x: | :x: | :x: | :x: |
| Action latency | 10-100 ms | 1-4 s | 1-4 s | 1-4 s | 1-4 s | 1-4 s |
| Works over the internet | :white_check_mark: | :x: | :x: | :x: | :x: | :x: |
| Token-efficient screen state | :white_check_mark: | :x: | :white_check_mark: | :x: | :x: | :white_check_mark: |
| Annotated screenshots | :white_check_mark: | :x: | :white_check_mark: | :x: | :x: | :x: |
| Configurable screenshot resolution/quality | :white_check_mark: | :x: | :x: | :x: | :x: | :x: |
| Per-tool enable/disable | :white_check_mark: | :x: | :x: | :x: | :x: | :x: |
| Multi-device support | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: |
| Camera, clipboard, files, downloads | :white_check_mark: | :x: | :x: | :x: | :x: | :x: |
| iOS support | :x: | :white_check_mark: | :x: | :x: | :x: | :x: |
Most alternatives rely on ADB running on a host machine, which means a USB cable or local network connection and a computer sitting next to the phone. This project runs entirely on the device itself, so you can expose the MCP endpoint through a tunnel and control your phone from anywhere.
On the token efficiency side, ADB-based tools typically return raw uiautomator XML dumps which can easily be 10-50x more verbose than the compact representation used here. Combined with numbered screenshot annotations, configurable image quality, and the ability to disable tools you don't need (every tool definition costs tokens on every turn), this significantly reduces the per-interaction cost in agentic loops.
Install
Which build to download: GMS or FOSS
Each release provides two flavors of the APK — pick the one that matches your device:
- GMS (
…-gms-release.apk) — the full build. Requires Google Mobile Services (Google Play Services) installed on the phone. Choose this on standard devices/emulators that ship with Google services.
- FOSS (
…-foss-release.apk) — a Google-free build with no dependency on Google Mobile Services. Works on any Android phone, including de-Googled ROMs and devices where Google services are unavailable.
If unsure, the GMS build is the right choice for a typical phone with the Play Store.
Option A: Download on your phone (easiest)
- Open the Releases page on your phone's browser
- Download the APK from the latest release
- Open the downloaded APK and follow the prompts to install it (you may need to allow installation from unknown sources)
Option B: Download on your PC and install via ADB
- Download the APK from the Releases page
- Connect your phone via USB (with USB Debugging enabled)
- Install the APK (use the GMS or FOSS file you downloaded):
adb install android-remote-control-mcp-<version>-gms-release.apk
Option C: Build from sources
git clone https://github.com/danielealbano/android-remote-control-mcp.git
cd android-remote-control-mcp
make build
make install # installs on connected device/emulator
See CONTRIBUTING.md for full build requirements and instructions.
Setup
-
Open the app. The Server tab shows a permission warning banner; grant permissions from there or via Settings > Permissions.
-
Grant permissions:
- Accessibility Service — required. Powers UI introspection, action execution, and screenshots; nothing works without it.
- If the toggle is greyed out (Android 13+, common on Samsung/One UI for apps installed from an APK): this is Android's "Restricted settings" protection. A dialog reads "Restricted setting — For your security, this setting is currently unavailable." To unblock it, go to Settings → Apps → Android Remote Control MCP → App info, tap the ⋮ menu (top-right), choose Allow restricted settings, confirm with your PIN/pattern/biometric, then enable the Accessibility Service. (Play Store / F-Droid installs are not affected.)
- Notifications — optional (recommended for OAuth). OAuth sign-in approvals (Claude.ai / Claude Desktop, ChatGPT, or any third-party OAuth client) arrive as heads-up notifications you tap to confirm the 2-digit code and approve. It is no longer required for OAuth login, though: if you don't grant this permission, pending requests still appear as a card on the app's Server screen that you tap to review and approve/deny. The Event Channel push feature — e.g. pushing device events to Claude Code — runs as a foreground service that posts its status notification through this permission on Android 13+.
- Other permissions (optional) — Camera, Microphone, and Location enable their corresponding MCP tools. The app works without them; only the dependent features are disabled until granted. See the Permissions Reference below for the complete list.
- Storage locations — configure in Settings > Storage if you plan to use the file tools (automatic locations like Downloads, plus custom locations via SAF).
-
Start the server. Go back to the Server tab and tap Start.
The server starts on http://127.0.0.1:8080 by default. The connection info (IP, port, token, URL) is displayed on the Server tab.
Note: 127.0.0.1 refers to the phone's localhost, not your computer. To connect from your computer, use adb port forwarding, bind to 0.0.0.0 (network mode), or enable a remote access tunnel.
Privacy Mode