AndroidBuildMCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| doctorA | Check the Android development environment: SDK location, adb, emulator, avdmanager, Java, and connected devices. Run this first if any other tool fails with a missing-binary error. |
| session_set_defaultsA | Set default projectDir/module/variant/serial/appId used by other tools when the corresponding argument is omitted. Set these once after discovering the project. |
| session_show_defaultsA | Show the current session defaults. |
| session_clear_defaultsB | Clear all session defaults, or only the listed keys. |
| discover_projectsA | Find Android/Gradle projects (directories with settings.gradle[.kts]) under a path. Use the result to session_set_defaults projectDir. |
| list_modulesA | List modules declared in settings.gradle(.kts) of the project. |
| list_variantsA | List build variants of a module by inspecting its Gradle assemble tasks (runs './gradlew :tasks'). |
| get_app_idA | Get the applicationId (package name) of a module, parsed from its build.gradle(.kts). Needed by install/launch/log tools. |
| show_gradle_configA | Show toolchain versions: Gradle (from wrapper properties) and everything in the version catalog (AGP, Kotlin, Compose, ...). |
| build_appA | Build an APK with Gradle (assemble). On failure returns compact compiler errors with file:line. On success returns the APK path. |
| build_runA | Build the APK, install it on a device/emulator (adb install -r), and launch the app. Needs appId (session default or argument) to launch. |
| test_appA | Run local JVM unit tests (testUnitTest) and return a parsed pass/fail summary with failure messages. |
| test_instrumentedB | Run instrumented tests on a connected device/emulator (connectedAndroidTest) and return a parsed summary. Requires a booted device. |
| lintB | Run Android Lint (lint) and return the textual report summary. |
| cleanB | Run gradle clean for the project. |
| get_apk_pathA | Locate the most recent built APK for a module/variant without building. |
| stop_gradleA | Stop the project's Gradle daemons (use when a build hangs or to free memory). |
| list_devicesA | List connected devices and emulators with serial, state, model, Android version and API level. |
| install_appA | Install an APK on a device/emulator (adb install -r). |
| launch_appA | Launch an app by application id (resolves the launcher activity automatically). |
| stop_appA | Force-stop a running app (am force-stop). |
| uninstall_appB | Uninstall an app from a device/emulator. |
| clear_app_dataA | Clear all data of an app (pm clear) — resets it to a fresh-install state. |
| get_app_infoA | Get installed-app info from the device: version, target/min SDK, install path, running PID. |
| list_avdsA | List available Android Virtual Devices and which ones are currently running. |
| boot_emulatorA | Boot an AVD in the background and wait until Android finishes booting. Returns the adb serial. Set wipeData to factory-reset the AVD on boot. |
| kill_emulatorA | Shut down a running emulator (adb emu kill). |
| create_avdA | Create an AVD from an installed system image (e.g. 'system-images;android-35;google_apis;arm64-v8a'). If systemImage is omitted, lists the installed images to choose from. |
| delete_avdB | Delete an AVD permanently. |
| set_emulator_locationB | Set the GPS location of a running emulator. |
| set_appearanceA | Switch a device/emulator between dark and light mode (cmd uimode night). |
| statusbar_demo_modeA | Enable clean status bar for screenshots (fixed clock, full battery, full signal) or disable it. |
| record_video_startA | Start recording the device screen (adb screenrecord, max 3 minutes). Returns a recordingId for record_video_stop. |
| record_video_stopA | Stop a screen recording and pull the MP4 to the local machine. |
| start_log_captureA | Start capturing logcat to a file in the background. Filter by app (via its pid) and/or tag. Returns a sessionId for stop_log_capture. The app must be running to filter by appId. |
| stop_log_captureA | Stop a log capture session and return the file path plus the last lines. |
| get_logsA | One-shot dump of recent logcat lines, optionally filtered by app (must be running) and/or tag. |
| get_crash_logsA | Dump the crash log buffer (Java exceptions, native crashes, ANRs). |
| screenshotA | Take a screenshot of the device/emulator screen and return it as an image. With annotate: true (needs the Google android CLI), UI elements get numbered bounding boxes — including text inside images/WebViews that snapshot_ui cannot see. |
| snapshot_uiA | Dump the current UI as a compact list of actionable elements (text, id, content-desc, tap coordinates). Use the @(x,y) centers with tap/long_press. Text-heavy screens are capped; pass 'filter' to search within them. |
| tapA | Tap the screen. Coordinates from snapshot_ui are exact device pixels — prefer them over estimating positions by looking at a screenshot image. Instead of pixels you can pass screen percentages (0-1): safer when estimating positions from a screenshot image. |
| tap_elementA | Tap element #N from the most recent screenshot { annotate: true } capture — no coordinate math needed. The mapping is exact even if your client displays the image scaled. Re-capture after the UI changes: element numbers go stale. |
| scrollA | Scroll the screen in a direction (computes a safe swipe in the middle of the screen, avoiding the status bar and navigation areas). Prefer this over raw swipe for scrolling. |
| long_pressA | Long-press the screen at coordinates. Instead of pixels you can pass screen percentages (0-1): safer when estimating positions from a screenshot image. |
| swipeA | Swipe from one point to another (scrolling, dismissing). For drag-and-drop use drag instead. Instead of pixels you can pass screen percentages (0-1): safer when estimating positions from a screenshot image. |
| dragB | Drag an element from one point to another (input draganddrop). Instead of pixels you can pass screen percentages (0-1): safer when estimating positions from a screenshot image. |
| type_textA | Type ASCII text into the focused field. Waits for the soft keyboard first, so it is safe to call right after tapping a field. Options: clear the field first, press ENTER after. Non-ASCII characters are not supported by adb input. |
| key_pressA | Press a hardware/navigation key: BACK, HOME, ENTER, TAB, DELETE, ESCAPE, MENU, APP_SWITCH, DPAD_*, or any KEYCODE_ name. |
| key_sequenceA | Press several keys in order (same names as key_press). |
| wait_for_uiA | Poll the UI until an element containing the given text / content-desc / resource-id appears. Returns its tap coordinates. |
| get_coverage_reportA | Run a coverage Gradle task (Kover or Jacoco) and summarize line coverage per package. Tries koverXmlReport by default; pass 'task' for a custom one (e.g. jacocoTestReport). The project must apply a coverage plugin. |
| get_file_coverageA | Show covered/uncovered line numbers of one source file from the latest coverage report (run get_coverage_report first). |
| scaffold_android_projectA | Create a new minimal Jetpack Compose app project (single module, version catalog, Gradle wrapper included) ready to build with build_app. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/dev-jackson/androidbuild-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server