AndroidBuildMCP MCP server
✓ VerifiedLets an AI agent build, deploy, manage emulators, and perform UI automation on Android applications.
Also known as dev-jackson/androidbuild-mcp, @asjackson/androidbuild-mcp
- Stars
- 1
- Tools
- 53
- Downloads, 30 days
- 275
- Latest version
- 0.1.1
- Last commit
- Jul 28, 2026
- License
- MIT
What is AndroidBuildMCP MCP?
AndroidBuildMCP lets an AI agent build, deploy, manage emulators, and perform UI automation on Android applications. It exposes 53 tools, such as doctor, discover_projects, list_modules.
Summary generated from the project's README
About AndroidBuildMCP MCP server
Automating Android application development and testing from within an AI client is the primary function of this server. It provides developers and AI agents with the ability to manage the entire lifecycle of an Android project, including building APKs, running unit and instrumented tests, and managing emulators. By connecting to an MCP client like Claude Code or Cursor, the agent can interact directly with the Android SDK and adb to perform complex tasks.
Users must have Node 18+, a JDK 17+, and the Android SDK installed on their local machine to use these tools. The server requires access to the Android environment via the ANDROID_HOME path. It includes specialized tools for UI automation, such as snapshotting the interface to find element coordinates, capturing annotated screenshots, and simulating user interactions like swiping, dragging, or typing. It also handles debugging by providing filtered logcat captures and crash buffers to help resolve build or runtime errors.
What you can do with it
- 1Automated UI testingAn AI agent can navigate an app by tapping specific elements or using screen percentages to ensure UI stability.
- 2Debugging build failuresDevelopers can use the agent to compile code and receive concise error messages instead of long Gradle logs.
- 3Emulator lifecycle managementThe agent can automatically prepare a testing environment by creating and booting virtual devices.
- 4Project scaffoldingYou can instruct an AI to generate a new Android project structure that is ready for immediate development.
Written from the project's README. Every use case is checked against a quote from it.
How to install AndroidBuildMCP MCP
Formats verified 10 Nov 2026Add to CursorAdd to GooseInstall AndroidBuildMCP MCP in Claude Code
$ claude mcp add androidbuild-mcp -- npx -y @asjackson/androidbuild-mcpInstall AndroidBuildMCP MCP in Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"androidbuild-mcp": {
"command": "npx",
"args": [
"-y",
"@asjackson/androidbuild-mcp"
]
}
}
}Install AndroidBuildMCP MCP in VS Code
.vscode/mcp.json
{
"servers": {
"androidbuild-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@asjackson/androidbuild-mcp"
]
}
}
}Install AndroidBuildMCP MCP in VS Code CLI
$ code --add-mcp '{"name":"androidbuild-mcp","type":"stdio","command":"npx","args":["-y","@asjackson/androidbuild-mcp"]}'Install AndroidBuildMCP MCP in Claude Desktop
claude_desktop_config.json
{
"mcpServers": {
"androidbuild-mcp": {
"command": "npx",
"args": [
"-y",
"@asjackson/androidbuild-mcp"
]
}
}
}Install AndroidBuildMCP MCP in Codex
$ codex mcp add androidbuild-mcp -- npx -y @asjackson/androidbuild-mcpInstall AndroidBuildMCP MCP in Codex config.toml
~/.codex/config.toml
[mcp_servers.androidbuild-mcp] command = "npx" args = ["-y", "@asjackson/androidbuild-mcp"]
Install AndroidBuildMCP MCP in Gemini CLI
$ gemini mcp add -s user androidbuild-mcp npx -- -y @asjackson/androidbuild-mcpInstall AndroidBuildMCP MCP in Gemini settings.json
~/.gemini/settings.json
{
"mcpServers": {
"androidbuild-mcp": {
"command": "npx",
"args": [
"-y",
"@asjackson/androidbuild-mcp"
]
}
}
}AndroidBuildMCP MCP tools 53
Detected from the READMEdoctordiscover_projectslist_moduleslist_variantsget_app_idshow_gradle_configsession_set_defaultssession_show_defaultssession_clear_defaultsbuild_appbuild_runtest_app
| doctor | — | |
| discover_projects | — | |
| list_modules | — | |
| list_variants | — | |
| get_app_id | — | |
| show_gradle_config | — | |
| session_set_defaults | — | |
| session_show_defaults | — | |
| session_clear_defaults | — | |
| build_app | — | |
| build_run | — | |
| test_app | — |
Show all 53 toolsShow fewer tools
test_instrumentedlintcleanget_apk_pathstop_gradleget_coverage_reportget_file_coveragelist_deviceslist_avdsboot_emulatorkill_emulatorcreate_avddelete_avdset_emulator_locationset_appearancestatusbar_demo_modeinstall_applaunch_appstop_appuninstall_appclear_app_dataget_app_infosnapshot_uiscreenshottap_elementtapscrollswipedraglong_presstype_textkey_presskey_sequencewait_for_uiget_logsget_crash_logsstart_log_capturestop_log_capturerecord_video_startrecord_video_stopscaffold_android_project
| test_instrumented | — | |
| lint | — | |
| clean | — | |
| get_apk_path | — | |
| stop_gradle | — | |
| get_coverage_report | — | |
| get_file_coverage | — | |
| list_devices | — | |
| list_avds | — | |
| boot_emulator | — | |
| kill_emulator | — | |
| create_avd | — | |
| delete_avd | — | |
| set_emulator_location | — | |
| set_appearance | — | |
| statusbar_demo_mode | — | |
| install_app | — | |
| launch_app | — | |
| stop_app | — | |
| uninstall_app | — | |
| clear_app_data | — | |
| get_app_info | — | |
| snapshot_ui | — | |
| screenshot | — | |
| tap_element | — | |
| tap | — | |
| scroll | — | |
| swipe | — | |
| drag | — | |
| long_press | — | |
| type_text | — | |
| key_press | — | |
| key_sequence | — | |
| wait_for_ui | — | |
| get_logs | — | |
| get_crash_logs | — | |
| start_log_capture | — | |
| stop_log_capture | — | |
| record_video_start | — | |
| record_video_stop | — | |
| scaffold_android_project | — |
Automated checks
Ran Nov 14, 2026Full report →Passed our automated checks. That is not a security audit: read the code and give the server the narrowest access it needs. How checks work
- Source repository linked and reachabledev-jackson/androidbuild-mcp is public and reachablegithub.com/dev-jackson/androidbuild-mcp ↗Pass
- Package names this repository as its source@asjackson/androidbuild-mcp names dev-jackson/androidbuild-mcp as sourcenpmjs.com/package/@asjackson/androidbuild-mcp ↗Pass
- Build provenance (Sigstore attestation)No build attestation published for this releaseNot checked
- Open source license (OSI)MITspdx.org/licenses/MIT.html ↗Pass
- Commit or release in the last yearLast commit or release 2026-07-28github.com/dev-jackson/androidbuild-mcp ↗Pass
- OpenSSF ScorecardNot checked
- Package name not close to a popular packageNo popular package one edit away from @asjackson/androidbuild-mcpPass
- No critical advisory in the package or its dependencies124 resolved dependencies checked; no critical advisoryosv.dev ↗Pass
- No hidden instructions to the model53 tool descriptions and the README read; no override phrases, credential paths or hidden charactersPass
- Destructive tools are labelledNot checked
- Remote endpoint answers the MCP handshakeNot checked
README
View on GitHubAndroidBuildMCP
Give your AI agent hands on Android. AndroidBuildMCP is an MCP server that lets any MCP client (Claude Code, Cursor, ...) build, deploy, drive and debug real Android apps: Gradle builds with readable errors, emulator management, adb deployment, logcat capture and full UI automation.
Quick start
Requirements: Node 18+, the Android SDK (ANDROID_HOME or a default install), and a JDK 17+ for Gradle builds.
No install step — npx fetches the server on first run.
Claude Code
claude mcp add androidbuild -- npx -y @asjackson/androidbuild-mcp
Any other MCP client
{
"mcpServers": {
"androidbuild": {
"command": "npx",
"args": ["-y", "@asjackson/androidbuild-mcp"]
}
}
}
git clone https://github.com/dev-jackson/androidbuild-mcp.git
cd androidbuild-mcp
npm install && npm run build
claude mcp add androidbuild -- node /absolute/path/to/androidbuild-mcp/dist/index.js
Then ask your agent to run doctor — it checks the SDK, adb, emulator, Java and connected devices, and tells you exactly what is missing.
What your agent can do
- Build and test —
build_appcompiles and returns compactfile:linecompiler errors instead of a thousand lines of Gradle noise.test_app/test_instrumentedreturn parsed pass/fail summaries. Lint, clean, coverage (Kover/Jacoco) included. - Manage emulators — list, create, boot (waits for full boot, returns the serial), wipe, and kill AVDs. Set GPS location, dark mode, and a clean demo status bar for screenshots.
- Deploy —
build_runcompiles, installs and launches in one call. Install/uninstall/clear-data/app-info via adb, with the right device auto-selected when only one is connected. - See the screen —
snapshot_uireturns the UI as a compact list of named elements with tap coordinates (Compose semantics merged, noise filtered).screenshotreturns an image; withannotate: trueit draws numbered boxes using vision, catching text inside images and WebViews. - Touch the screen — tap, scroll, swipe, drag, long-press, type (keyboard-aware, with clear/submit), hardware keys, and
wait_for_uito poll until an element appears. - Read the logs — background logcat capture filtered to your app, one-shot dumps, and the crash buffer for stack traces.
- Start new apps —
scaffold_android_projectgenerates a minimal Compose project that builds out of the box.
Session defaults (session_set_defaults) mean you configure project, module, variant and device once — every other call then works without arguments.
Tool reference
53 tools over stdio. Every tool takes plain arguments and returns text (or an image, for screenshot).
Environment and project
| Tool | Description |
|---|---|
doctor |
Check SDK, adb, emulator, avdmanager, Java and connected devices; reports what is missing |
discover_projects |
Find Android/Gradle projects under a path |
list_modules |
List modules declared in settings.gradle(.kts) |
list_variants |
List build variants of a module |
get_app_id |
Read the applicationId of a module |
show_gradle_config |
Show Gradle, AGP, Kotlin and version-catalog entries |
Session defaults
| Tool | Description |
|---|---|
session_set_defaults |
Set default project, module, variant, serial and appId for all later calls |
session_show_defaults |
Show the current defaults |
session_clear_defaults |
Clear all defaults, or only the listed keys |
Build, test and quality
| Tool | Description |
|---|---|
build_app |
Build an APK; returns compact file:line compiler errors |
build_run |
Build, install and launch in one call |
test_app |
Run JVM unit tests with a parsed pass/fail summary |
test_instrumented |
Run instrumented tests on a device |
lint |
Run Android Lint and summarize the report |
clean |
Run gradle clean |
get_apk_path |
Locate the most recent APK without building |
stop_gradle |
Stop the project's Gradle daemons |
get_coverage_report |
Run Kover/Jacoco and summarize line coverage per package |
get_file_coverage |
Show covered/uncovered lines of one source file |
Devices and emulators
| Tool | Description |
|---|---|
list_devices |
List devices with serial, state, model, Android version, API level |
list_avds |
List AVDs and which are running |
boot_emulator |
Boot an AVD and wait for full boot; returns the serial |
kill_emulator |
Shut down a running emulator |
create_avd |
Create an AVD from an installed system image |
delete_avd |
Delete an AVD |
set_emulator_location |
Set GPS location |
set_appearance |
Switch dark/light mode |
statusbar_demo_mode |
Clean status bar for screenshots |
App lifecycle
| Tool | Description |
|---|---|
install_app |
Install an APK (adb install -r) |
launch_app |
Launch by application id, resolving the launcher activity |
stop_app |
Force-stop a running app |
uninstall_app |
Uninstall an app |
clear_app_data |
Reset an app to fresh-install state |
get_app_info |
Version, target/min SDK, install path, running PID |
UI automation
| Tool | Description |
|---|---|
snapshot_ui |
Dump the UI as named elements with exact tap coordinates |
screenshot |
Capture the screen; annotate: true draws numbered boxes |
tap_element |
Tap element #N from the last annotated screenshot |
tap |
Tap at pixels or screen percentages |
scroll |
Scroll in a direction with a safe computed swipe |
swipe |
Swipe between two points |
drag |
Drag from one point to another |
long_press |
Long-press, holding 1000 ms |
type_text |
Type into the focused field, waiting for the keyboard |
key_press |
Press BACK, HOME, ENTER, DPAD_*, or any keycode |
key_sequence |
Press several keys in order |
wait_for_ui |
Poll until an element appears |
Logs and recording
| Tool | Description |
|---|---|
get_logs |
One-shot logcat dump, filterable by app and tag |
get_crash_logs |
Crash buffer: Java exceptions, native crashes, ANRs |
start_log_capture |
Start background logcat capture to a file |
stop_log_capture |
Stop capture and return the file plus the last lines |
record_video_start |
Start screen recording (max 3 minutes) |
record_video_stop |
Stop recording and pull the MP4 |
Scaffolding
| Tool | Description |
|---|---|
scaffold_android_project |
Create a minimal Compose app that builds out of the box |
Tapping accurately
Everything adb-side shares one coordinate space (device pixels), but MCP clients often display screenshots scaled — estimating pixel positions by eye from the image sends taps to the wrong place. Three safe ways to hit the target:
snapshot_ui— returns exact device-pixel centers for every named element. Preferred.screenshot { annotate: true }+tap_element { element: N }— tap by the number drawn on the image; the mapping is resolved on the original PNG, so client-side scaling cannot distort it.tap { xPct, yPct }— screen percentages (0-1), also available on long_press/swipe/drag. Resolution-independent.
Raw tap { x, y } still works when you have real pixel coordinates.
Reliability
Every tool was exercised against real emulators and real projects — happy paths and corner cases — before release; the scenario-by-scenario evidence is in qa-results.md. Some of the details that keep agent flows from misfiring:
type_textwaits for the soft keyboard before injecting (typing right after focusing a field silently drops the first characters otherwise).scrollcomputes a long, slow swipe from the screen size — short fast swipes get ignored by some lists.long_pressholds 1000 ms, which launchers require.- Taps outside the screen are rejected with the actual screen size instead of silently doing nothing.
- Text-heavy screens (e-book WebViews and the like) are capped and searchable with
snapshot_ui { filter }instead of flooding the context. - Build/test/device failures come back as short, actionable messages with the next tool to call.
Optional extras
- Google's Android CLI enables
screenshot { annotate: true }.doctorprints the one-line installer for your OS. - The ADBKeyboard IME enables non-ASCII
type_text(adb alone is ASCII-only). Install its APK once; the server uses it automatically.
Development
npm install
npm test # unit tests (no real processes spawned)
npm run dev # run the server from source
npm run build # compile to dist/
License
MIT — see LICENSE.
Conceptually inspired by XcodeBuildMCP; independent implementation built around the Android toolchain.
AndroidBuildMCP MCP questions
How do I add AndroidBuildMCP MCP to Claude Code?
Run claude mcp add androidbuild-mcp -- npx -y @asjackson/androidbuild-mcp in your terminal. Add --scope user to make it available in every project.
How do I add AndroidBuildMCP MCP to Cursor?
Open ~/.cursor/mcp.json and add the server under mcpServers, using the Cursor config shown in the install section above.
What tools does AndroidBuildMCP MCP provide?
It exposes 53 tools, including doctor, discover_projects, list_modules, list_variants, get_app_id.
What are the system requirements for AndroidBuildMCP?
You need Node 18+, the Android SDK (configured via ANDROID_HOME or a default install), and JDK 17+ for Gradle builds.
How can I check if my environment is set up correctly?
You can run the doctor tool, which checks your SDK, adb, emulator, Java, and connected devices to report any missing components.
How does the server handle UI automation to ensure accurate taps?
The server provides three safe methods: using snapshot_ui for exact pixel centers, using annotated screenshots with tap_element, or using screen percentages via tap { xPct, yPct }.