Android MCP
Provides tools for interacting with Android devices over ADB, including device selection, UI automation (tap, text input, key events), activity management, screenshots, UI tree dumps, and element finding/tapping capabilities.
Click on "Install 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., "@Android MCPtake a screenshot of my device"
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.
Android MCP ๐คโจ
Friendly MCP stdio server that chats with Android devices over ADB using @devicefarmer/adbkit, speaking newline-delimited JSON-RPC via @modelcontextprotocol/sdk (no Content-Length headers needed). Plug it into Cursor/Claude MCP and start poking at devices.
โจ What is this?
MCP transport that forwards handy ADB actions (tap, text, screenshot, UI dump, etc).
Uses newline-delimited JSON on stdin/stdout; one request per line, one response per line.
Prototype-friendly: swap out the minimal JSON-RPC loop for a full MCP SDK later if you want.
๐ฆ Requirements
Node.js 18+ and npm.
ADB on PATH (e.g., Android SDK platform-tools). Keep
adb start-serverrunning.At least one device or emulator attached (
adb devices).Optional: Android SDK/Gradle only if you plan to build the demo app; not needed for the MCP server itself.
๐ Setup (local)
git clone <repo-url> android-mcp
cd android-mcp
npm ci # or npm install
npm test # stdio + tsconfig smoke tests
npm run dev # start MCP server with tsx
# or explicitly:
npx --yes tsx src/server.tsTo build output: npm run build (emits dist/). Keep adb devices happy before invoking tools.
๐งฐ MCP config (Cursor/Claude)
Example ~/.cursor/mcp.json entry:
{
"mcpServers": {
"android-mcp": {
"type": "stdio",
"command": "npx",
"args": ["--yes", "tsx", "/home/ivan/code/android-mcp/src/server.ts"],
"cwd": "/home/ivan/code/android-mcp"
}
}
}๐ฎ Tools exposed
selectDevice{ serial }โ set default device for subsequent calls.keyEvent{ keyCode, serial? }โ sendinput keyevent.tap{ x, y, serial? }text{ text, serial? }โ usesinput text(spaces become%s).startActivity{ component, serial? }โ e.g."org.example/.MainActivity".screenshot{ serial? }โ{ mimeType: "image/png", base64 }.uiDump{ serial? }โ parseduiautomator dumptree (text, contentDesc, resourceId, bounds).findAndTap{ text?, contentDesc?, serial? }โ finds the first matching node and taps its center.listDevicesDetailedโ lists attached devices with model/manufacturer/sdk info.
๐ธ Notes & limits
Screenshot and UI dump are periodic snapshots (no streaming yet).
UI dump depends on
uiautomatorbeing present on the device.Prototype transport; you can wire in a richer MCP SDK without changing the ADB helpers.
๐งช Tests
npm test๐ฑ Optional: Build/install the demo app
Only needed if you want to exercise the sample Android UI:
# from the parent monorepo that contains the Android app
./gradlew assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apk
adb shell am start -n org.dronix.android.kindlegratis/.MainActivity๐ ๏ธ CI hints
Node workflow: checkout โ setup-node 18+ โ
npm ciโnpm test.If building the Android app in CI, add Java 17 + Android SDK setup and run
./gradlew assembleDebug.
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hamen/android-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server