
Research
/Security News
PolinRider Spreads Through Compromised GitHub Accounts and Packagist
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.
@us-all/android-mcp-server
Advanced tools
Android MCP server - ADB-based device management, UI automation, logcat, emulator control, and more
Android MCP server — ADB-based device management, UI automation, logcat debugging, emulator control, and more via the Model Context Protocol.
| Feature | Other Android MCPs | This Server |
|---|---|---|
| UI Automation (tap, swipe, screenshot) | ✓ | ✓ |
| UI Hierarchy (accessibility tree) | ✓ | ✓ (compact mode for token efficiency) |
| Logcat filtering & crash log extraction | — | ✓ |
| Emulator lifecycle (AVD start/stop/snapshot) | — | ✓ |
| File management (push/pull) | — | ✓ |
| System info (battery, network, settings) | — | ✓ |
| 2-tier security (write + shell gating) | — | ✓ |
| Pure ADB (no Appium/uiautomator2 dependency) | — | ✓ |
| TypeScript + official MCP SDK | — | ✓ |
npx @us-all/android-mcp-server
docker run --rm \
--device /dev/bus/usb \
-e ANDROID_MCP_ALLOW_WRITE=true \
ghcr.io/us-all/android-mcp-server:latest
git clone <repo>
cd android-mcp-server
pnpm install
pnpm run build
pnpm start
| Variable | Required | Default | Description |
|---|---|---|---|
ANDROID_HOME | No | auto-detect | Android SDK path |
ADB_PATH | No | adb (PATH) | Path to ADB binary |
ANDROID_SERIAL | No | auto (single device) | Target device serial number |
ANDROID_MCP_ALLOW_WRITE | No | false | Enable write operations (install, tap, push, etc.) |
ANDROID_MCP_ALLOW_SHELL | No | false | Enable arbitrary shell command execution |
By default, only read operations are permitted. Write operations (tap, install-app, push-file, etc.) return an error unless ANDROID_MCP_ALLOW_WRITE=true is set. Shell command execution requires a separate ANDROID_MCP_ALLOW_SHELL=true flag for additional security.
Add to your Claude Desktop configuration:
{
"mcpServers": {
"android": {
"command": "npx",
"args": ["@us-all/android-mcp-server"],
"env": {
"ANDROID_MCP_ALLOW_WRITE": "true"
}
}
}
}
Add to your project's .mcp.json:
{
"mcpServers": {
"android": {
"type": "stdio",
"command": "npx",
"args": ["@us-all/android-mcp-server"],
"env": {
"ANDROID_MCP_ALLOW_WRITE": "true",
"ANDROID_MCP_ALLOW_SHELL": "true"
}
}
}
}
Or from a local build:
{
"mcpServers": {
"android": {
"type": "stdio",
"command": "node",
"args": ["dist/index.js"],
"cwd": "/path/to/android-mcp-server",
"env": {
"ANDROID_MCP_ALLOW_WRITE": "true",
"ANDROID_MCP_ALLOW_SHELL": "true"
}
}
}
}
| Tool | Description | R/W |
|---|---|---|
list-devices | List connected devices and emulators with status | R |
get-device-info | Device model, brand, Android version, SDK, display info | R |
get-device-properties | System properties via getprop (filterable by prefix) | R |
connect-device | Connect to device over TCP/IP (wireless ADB) | W |
disconnect-device | Disconnect TCP/IP device | W |
| Tool | Description | R/W |
|---|---|---|
list-packages | List installed packages (filter by name, type: all/system/3rd-party) | R |
get-package-info | Package version, SDK targets, install time, permissions | R |
install-app | Install APK file on device | W |
uninstall-app | Uninstall app (optionally keep data) | W |
launch-app | Launch app by package name (or specific activity) | W |
stop-app | Force stop an app | W |
| Tool | Description | R/W |
|---|---|---|
take-screenshot | Capture screen as PNG image (returned as base64) | R |
dump-ui-hierarchy | Dump accessibility tree — compact mode returns interactive elements only with center coordinates for token efficiency | R |
tap | Tap at (x, y) coordinates | W |
long-press | Long press at (x, y) with configurable duration | W |
swipe | Swipe gesture from (x1,y1) to (x2,y2) | W |
input-text | Type text (special characters escaped) | W |
press-key | Key event: BACK, HOME, ENTER, VOLUME_UP, etc. | W |
| Tool | Description | R/W |
|---|---|---|
get-logcat | Get recent logs with tag and priority filter (V/D/I/W/E/F) | R |
clear-logcat | Clear logcat buffer | W |
search-logcat | Search logs by text pattern (case-insensitive supported) | R |
get-crash-logs | Extract crash/fatal logs, optionally filtered by package | R |
| Tool | Description | R/W |
|---|---|---|
list-avds | List available Android Virtual Devices | R |
start-emulator | Start AVD (supports headless mode, data wipe) | W |
stop-emulator | Stop a running emulator | W |
list-snapshots | List emulator snapshots | R |
load-snapshot | Load an emulator snapshot | W |
| Tool | Description | R/W |
|---|---|---|
list-files | List files on device (supports recursive) | R |
pull-file | Download file from device to local filesystem | R |
push-file | Upload local file to device | W |
delete-file | Delete file or directory on device | W |
| Tool | Description | R/W |
|---|---|---|
get-battery-info | Battery level, charging state, temperature, health | R |
get-network-info | WiFi status, IP address, connectivity details | R |
change-setting | Modify system/secure/global settings | W |
| Tool | Description | R/W |
|---|---|---|
execute-shell | Execute arbitrary ADB shell command (requires ANDROID_MCP_ALLOW_SHELL) | W |
┌──────────────────────────────────────────────────────┐
│ Claude / AI Client │
└─────────────────────┬────────────────────────────────┘
│ MCP Protocol (stdio)
▼
┌──────────────────────────────────────────────────────┐
│ android-mcp-server (index.ts) │
│ │
│ ┌─────────┐ ┌──────────────────────────────────┐ │
│ │config.ts│ │ tools/ │ │
│ │ ADB path│ │ device.ts ── 5 tools │ │
│ │ serial │ │ apps.ts ── 6 tools │ │
│ │ perms │ │ ui.ts ── 7 tools │ │
│ └─────────┘ │ logcat.ts ── 4 tools │ │
│ │ emulator.ts── 5 tools │ │
│ ┌─────────┐ │ files.ts ── 4 tools │ │
│ │ adb.ts │ │ system.ts ── 3 tools │ │
│ │ wrapper │ │ shell.ts ── 1 tool │ │
│ └─────────┘ │ utils.ts ── error handling │ │
│ └──────────────────────────────────┘ │
└─────────────────────┬────────────────────────────────┘
│ child_process (execFile)
▼
┌──────────────────────────────────────────────────────┐
│ ADB (Android Debug Bridge) │
│ │
│ USB / TCP-IP / Emulator connection │
└─────────────────────┬────────────────────────────────┘
│
▼
Android Device
ANDROID_MCP_ALLOW_WRITE=trueANDROID_MCP_ALLOW_SHELL=truepnpm install # Install dependencies
pnpm run dev # Watch mode (tsc --watch)
pnpm run build # Compile TypeScript → dist/
pnpm test # Run unit tests
pnpm start # Run MCP server
src/tools/<category>.tsserver.tool() in src/index.tswrapToolHandler() for consistent response formattingassertWriteAllowed() for write operationspnpm run build && pnpm testSee CONTRIBUTING.md for development guidelines.
MIT
FAQs
Android MCP server - ADB-based device management, UI automation, logcat, emulator control, and more
We found that @us-all/android-mcp-server demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Research
/Security News
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.

Security News
GitHub Actions now supports cache-mode, a least-privilege control on the Actions cache aimed at the cache poisoning technique behind recent compromises.

Company News
Allow myself to introduce... myself.