AndroidBuildMCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| 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