Android Studio MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| JAVA_HOME | No | JDK location. Falls back to Android Studio's bundled JBR when unset. | |
| ASMCP_PORT | No | HTTP mode only: port (default 3939). | |
| ASMCP_TOKEN | No | HTTP mode only: auth token (random if unset). | |
| ANDROID_HOME | No | Alternative to ANDROID_SDK_ROOT for the SDK location. Falls back to the project's `local.properties` `sdk.dir`, then the default SDK path. | |
| ANDROID_SDK_ROOT | No | SDK location. Falls back to the project's `local.properties` `sdk.dir`, then the default SDK path. | |
| ANDROID_PROJECT_DIR | No | Default project. Otherwise every project tool takes `projectDir`, or the server's cwd is searched upward. Leave unset for Claude Code, which starts the server in the opened folder. | |
| ANDROID_STUDIO_HOME | No | Android Studio install dir (for `studio_open` and the JBR fallback) when it's not in the default location. |
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 |
|---|---|
| environmentA | Report the Android toolchain this server sees: SDK path and installed packages, Android Studio install, JAVA_HOME, and the resolved project. Call this first when something isn't found. |
| project_infoB | Summarize the Android project: modules, their type, namespace/applicationId, SDK levels, launcher activities, Gradle and AGP versions. |
| project_apksB | List APKs produced by previous builds, newest first. |
| studio_openB | Open a project, or a file at a line, in Android Studio (reuses the running IDE window if one is open). Handy for handing off to the human. |
| sdk_managerA | List installed/available SDK packages or install packages (e.g. 'platforms;android-36', 'system-images;android-36;google_apis;x86_64'). Requires the SDK Command-line Tools package. |
| job_statusA | Check a background job (build, run_app, emulator_start). Optionally wait for it to finish. Omit id to list all jobs. |
| job_cancelC | Cancel a running background job. |
| gradle_tasksC | List the Gradle tasks available in the project (or one module). |
| gradle_runA | Run Gradle tasks through the project's wrapper (e.g. ['assembleDebug'], [':app:testDebugUnitTest'], ['clean','build']). Returns parsed compiler errors. Runs as a job; poll with job_status if still running. |
| buildA | Assemble an APK for a module and variant (default: the app module, debug). Returns compiler errors and the APK path. |
| run_appB | The Android Studio 'Run' button: assemble the variant, install it on the device, and launch the launcher activity. Runs as a job. |
| test_resultsA | Parse JUnit XML results from the last unit test (testUnitTest) or instrumented test (connectedAndroidTest) run. Run tests with gradle_run first. |
| lint_resultsB | Parse the Android Lint XML report (run gradle_run with lintDebug or lint first). |
| devices_listA | List connected Android devices and running emulators (adb devices -l). |
| device_infoB | Model, Android version, API level, ABI, screen size and density of a device. |
| adb_shellA | Run an arbitrary shell command on the device (e.g. 'pm list packages -3', 'dumpsys battery'). Output is truncated to the tail. |
| app_installA | Install (or reinstall, keeping data) an APK on a device. Use project_apks to find built APKs. |
| app_uninstallC | Uninstall an app package from a device. |
| app_launchC | Start an app's launcher activity (or a given activity) and report launch time. |
| app_stopA | Force-stop an app, optionally also clearing all of its data. |
| packages_listB | List installed packages, third-party only by default. |
| logcatB | Read recent device logs. Filter by app package (uses its current PID), minimum priority, tag, or a regex. Use crashesOnly to get the crash buffer. |
| screenshotB | Capture the device screen as a PNG image. Optionally also save it to a file on this machine. |
| ui_dumpA | Dump the on-screen view hierarchy via uiautomator, as a compact list of nodes with text, resource-id, content-desc and tap-ready center coordinates. |
| inputA | Drive the device UI: tap or long-press at coordinates, swipe, type text, or press a key (BACK, HOME, ENTER, APP_SWITCH, DEL, or any KEYCODE_*). Get coordinates from ui_dump. |
| file_transferC | Copy a file between this machine and the device (adb push / adb pull). |
| emulator_listA | List Android Virtual Devices and which are currently running (with their serials). |
| emulator_startA | Boot an AVD in the background and wait for it to finish booting. Returns a job; if it isn't done within waitSec, poll it with job_status. |
| emulator_stopA | Shut down a running emulator by serial (e.g. emulator-5554). |
| ide_statusA | Whether Android Studio (with the bridge plugin) is running, its version, and its open projects and indexing state. |
| ide_editorsC | Files open in Android Studio, which have unsaved changes, and the active file with caret position and selection. |
| ide_read_fileA | Read a file as Android Studio currently has it, including unsaved edits. Prefer this over reading from disk when the user is editing in the IDE. |
| ide_problemsA | Errors and warnings from Android Studio's live analysis of a file (Kotlin/Java compiler checks, Android Lint, inspections), without running Gradle. Opens the file in the IDE if needed. |
| ide_openA | Open a file at a line/column in the running Android Studio and bring its window to the front. |
| ide_save_allA | Save all unsaved editor buffers to disk (build and run_app do this automatically when Studio is running). |
| ide_actionsB | Search Android Studio's action ids by id or menu text (e.g. 'sync', 'reformat', 'rebuild'). |
| ide_actionA | Invoke an Android Studio action by id, as if chosen from the menu. Useful ids: Android.SyncProject (Gradle sync), ReformatCode, OptimizeImports, MakeGradleProject (Build › Make), CompileDirty, Android.RunAndroidLint. Editor actions apply to the active editor; use ide_open first. |
| ide_run_configurationsA | List the project's run/debug configurations and which one is selected. |
| ide_runB | Run or debug a run configuration in Android Studio, like its toolbar buttons (deploys to the IDE's selected device). Defaults to the selected configuration. |
| ide_find_usagesA | Find every reference to the symbol at path:line:column across the project using the IDE's semantic index (Kotlin and Java aware, not text search). |
| ide_renameA | Rename the symbol at path:line:column and update all references, like Shift+F6 (classes also rename their file). Saves all files afterwards. If the IDE detects conflicts it shows a dialog in Studio and this call times out; resolve it there. |
| ide_project_problemsA | Run Android Studio's analysis (compiler checks, inspections, on-the-fly lint) over the project or given files/folders without opening them or running Gradle. Errors only by default; faster than a build for checking an edit compiles. |
| ide_gradle_syncB | Run 'Sync Project with Gradle Files' in Android Studio and wait for the result (success, or the failure message). |
| ide_sync_statusA | State of the most recent Gradle sync in Android Studio (running / succeeded / failed with error). |
| ide_screenshotA | Capture Android Studio's window (or just the active editor area) as an image: see Compose previews, the layout editor, tool windows and error balloons as the user does. |
| ide_find_filesA | Find project files by name using the IDE index: exact name ('MainActivity.kt') or glob ('*ViewModel.kt'). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 46 tools
Most tools target distinct resources, but several overlap enough to cause misselection: studio_open vs ide_open (both open files in Studio), run_app vs ide_run (both deploy and launch a variant), and ide_problems vs ide_project_problems vs lint_results (three ways to surface errors). The detailed descriptions mitigate but don't fully resolve the boundaries.
There is a general prefix-based convention (ide_*, app_*, emulator_*, device_*, project_*), but ordering is inconsistent (app_launch is noun_verb while ide_read_file is prefix_verb_noun) and several tools are bare unprefixed names (build, input, screenshot, logcat, environment). Readable, but the conventions are mixed rather than predictable.
46 tools is well past the '25+ is too many' threshold, and while the IDE+device+build surface is broad, there are real consolidation opportunities (multiple run tools, multiple problem-analysis tools, IDE-action plumbing). The weight increases the chance of an agent picking a near-duplicate.
The surface covers the full lifecycle: environment discovery, project introspection, Gradle build/test, IDE control, device/emulator management, UI automation, screenshots, logs, and file transfer. Gaps are minor (no breakpoint/debugger control or profiling tools), which agents can work around.