Android MCP Server
Enables AI agents to fully control Android devices through over 30 tools for app management, UI automation, and vision-based analysis via ADB. It supports multi-device management, action recording, and smart execution strategies ranging from UI hierarchy parsing to coordinate-based interaction.
README
Android MCP Server
A production-grade MCP (Model Context Protocol) server that gives any AI agent full control over Android devices via ADB, UIAutomator, Accessibility, and Vision (screenshots).
Features
- 30+ MCP Tools — Device control, app management, UI automation, vision, testing
- Multi-Device Support — Control multiple Android devices simultaneously
- Smart Execution — UIAutomator → Accessibility → Vision → Coordinates fallback
- Security — Input sanitization, rate limiting, device allowlisting, destructive op protection
- Automation — Action recording/replay, test scenarios, state tracking
- Observability — Structured JSON logs, per-tool metrics, action history
Prerequisites
- Node.js ≥ 18
- ADB installed and on PATH (Android SDK Platform Tools)
- An Android device or emulator connected via USB/WiFi
Verify ADB is working:
adb devices
Setup
# Install dependencies
npm install
# Build TypeScript
npm run build
# Run the server
npm start
MCP Client Configuration
Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"android": {
"command": "node",
"args": ["repo_path/dist/mcp/server.js"],
"env": {
"ADB_PATH": "adb"
}
}
}
}
Cursor
Add to your Cursor MCP settings:
{
"mcpServers": {
"android": {
"command": "node",
"args": ["repo_path/dist/mcp/server.js"]
}
}
}
Generic MCP Client (stdio)
node dist/mcp/server.js
The server communicates via stdin/stdout using the MCP JSON-RPC protocol.
Configuration
Create android-mcp.config.json in the project root (optional):
{
"adbPath": "adb",
"allowedDevices": [],
"maxActionsPerMinute": 120,
"commandTimeoutMs": 30000,
"maxRetries": 3,
"debug": false,
"screenshotDir": "./screenshots",
"recordingsDir": "./recordings",
"allowDestructiveOps": false
}
Or use environment variables:
| Variable | Description |
|---|---|
ADB_PATH |
Path to adb binary |
ALLOWED_DEVICES |
Comma-separated device IDs |
MAX_ACTIONS_PER_MINUTE |
Rate limit per device |
COMMAND_TIMEOUT_MS |
ADB command timeout |
MAX_RETRIES |
Auto-retry count |
DEBUG |
Enable debug logging |
ALLOW_DESTRUCTIVE_OPS |
Allow uninstall etc. |
Available Tools
Device Management
| Tool | Description |
|---|---|
list_devices |
List connected Android devices |
get_device_info |
Get device model, OS, screen size |
get_screen_size |
Get screen resolution |
Input Controls
| Tool | Description |
|---|---|
tap |
Tap at coordinates |
swipe |
Swipe between points |
long_press |
Long press at coordinates |
double_tap |
Double tap at coordinates |
input_text |
Type text into focused field |
press_key |
Press hardware/software key |
App Management
| Tool | Description |
|---|---|
list_apps |
List installed applications |
open_app |
Launch an app by package name |
close_app |
Force-stop an app |
install_apk |
Install an APK file |
uninstall_app |
Uninstall an app (requires config) |
get_current_app |
Get foreground app package |
File System
| Tool | Description |
|---|---|
list_files |
List files on device |
pull_file |
Download file from device |
push_file |
Upload file to device |
UI Automation (UIAutomator)
| Tool | Description |
|---|---|
get_ui_tree |
Capture UI hierarchy |
find_element |
Find element by selector |
click_element |
Find and click element |
wait_for_element |
Wait for element to appear |
assert_element_exists |
Check if element exists |
Vision
| Tool | Description |
|---|---|
capture_screenshot |
Capture device screenshot |
analyze_screen |
Screenshot + UI tree analysis |
detect_elements_visually |
Detect interactive elements |
compare_screenshots |
Detect screen changes |
Automation & Testing
| Tool | Description |
|---|---|
smart_click |
Multi-strategy element click |
run_test_scenario |
Execute test steps |
start_recording |
Start recording actions |
stop_recording |
Stop and save recording |
replay_recording |
Replay recorded actions |
list_recordings |
List saved recordings |
get_device_state |
Get device state summary |
get_metrics |
Get performance metrics |
Architecture
src/
├── mcp/
│ └── server.ts # MCP server entry point
├── controllers/
│ ├── device-tools.ts # Device MCP tools
│ ├── input-tools.ts # Input MCP tools
│ ├── app-tools.ts # App management MCP tools
│ ├── file-tools.ts # File system MCP tools
│ ├── ui-tools.ts # UIAutomator MCP tools
│ ├── vision-tools.ts # Vision MCP tools
│ └── automation-tools.ts # Automation MCP tools
├── adb/
│ ├── adb-executor.ts # Safe ADB command execution
│ ├── device-manager.ts # Device discovery & sessions
│ ├── input-controller.ts # Touch/key input
│ ├── app-manager.ts # App lifecycle
│ └── file-manager.ts # File operations
├── uiautomator/
│ ├── ui-tree-parser.ts # XML → JSON conversion
│ ├── element-finder.ts # Element search & interaction
│ └── element-cache.ts # LRU element cache
├── vision/
│ ├── screenshot.ts # Screenshot capture
│ ├── screen-diff.ts # Screenshot comparison
│ └── visual-analyzer.ts # AI-ready screen analysis
├── accessibility/
│ ├── accessibility-bridge.ts # Accessibility fallback
│ └── smart-executor.ts # Multi-strategy executor
├── automation/
│ ├── action-recorder.ts # Action recording
│ ├── action-replayer.ts # Action replay
│ ├── test-runner.ts # Test scenarios
│ └── state-tracker.ts # Device state memory
├── security/
│ ├── validator.ts # Input sanitization
│ └── rate-limiter.ts # Rate limiting
└── utils/
├── logger.ts # Structured logging
├── config.ts # Configuration
├── errors.ts # Error hierarchy
├── retry.ts # Retry logic
└── metrics.ts # Performance tracking
Testing
npm test
npm run test:coverage
Development
# Run in development mode (ts-node)
npm run dev
# Test with MCP Inspector
npx @modelcontextprotocol/inspector node dist/mcp/server.js
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.