Android Studio MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| STUDIO_HOME | No | Alternative environment variable for Android Studio home directory. | C:\Program Files\Android\Android Studio |
| ANDROID_HOME | No | Alternative environment variable for Android SDK directory. | %LOCALAPPDATA%\Android\Sdk |
| ANDROID_SDK_ROOT | No | Alternative environment variable for Android SDK directory. | %LOCALAPPDATA%\Android\Sdk |
| ASMCP_BUNDLETOOL | No | Path to bundletool jar file (auto-downloaded on first use if not set). | |
| ASMCP_ANDROID_SDK | No | Android SDK directory. | %LOCALAPPDATA%\Android\Sdk |
| ASMCP_STUDIO_HOME | No | Android Studio home directory. | C:\Program Files\Android\Android Studio |
| ASMCP_WORKSPACE_ROOTS | No | Semicolon-separated list of allowed workspace root directories. | E:\Projekte;%USERPROFILE% |
| ASMCP_BUILTIN_SERVER_PORT | No | Port for the built-in IDE server. | 63342 |
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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| as_statusA | Report the full Android Studio / toolchain environment status. Use this FIRST to understand what is available before acting. It reports whether Android Studio is installed and running, the resolved paths for the SDK / JBR / adb / emulator / sdkmanager, the IDE build number, whether the built-in IDE server is reachable, connected devices and a count of AVDs. Args: params (StatusInput): response_format ('json'|'markdown') and deep (bool). Returns: str: JSON (or markdown) with keys: studio_installed (bool), studio_running (bool), studio_build (str), paths (dict of resolved tool paths), adb_version (str|None), devices (list), avds (list[str]), java_version (str|None), builtin_server_up (bool), ide_plugins (dict). |
| as_is_runningA | Quick check whether an Android Studio process (studio64.exe) is running. Returns: str: JSON with running (bool) and processes (list of {image,pid,...}). |
| as_launchA | Launch Android Studio (optionally opening a project), detached. The IDE is started as an independent process so the call returns immediately with its PID. If a project_dir is given it is passed to studio64.exe to open that project. The IDE's built-in server takes a few seconds to come up. Args: params (LaunchInput): optional project_dir to open. Returns: str: JSON with pid, already_running (bool) and the launched command. |
| as_closeA | Close Android Studio. Graceful by default; force-kill only on request. A graceful close (default) sends a normal terminate signal so the IDE can save state. force=true uses taskkill /F which can lose unsaved work, so it additionally requires confirm=true. Args: params (CloseInput): force (bool), confirm (bool). Returns: str: JSON with the taskkill result, or a confirmation_required payload. |
| as_restartA | Restart Android Studio (close then relaunch). Requires confirm=true. Args: params (CloseInput): force (bool) for the close phase, confirm (bool). Returns: str: JSON describing the close result and the relaunch pid. |
| as_open_projectA | Open an existing project directory in Android Studio. Launches (or reuses) the IDE with the given project. This does not modify project files. Args: params (OpenProjectInput): project_dir (must exist). Returns: str: JSON with the launched command and pid. |
| as_open_fileA | Open a file (optionally at a line/column) in the running Android Studio. Prefers the built-in IDE server (instant, reuses the running window). Falls back to launching studio64.exe with --line if the server is not reachable. Args: params (OpenFileInput): file (path), line (optional), column (optional). Returns: str: JSON describing which method was used and whether it succeeded. |
| as_diffA | Open the IDE's visual diff viewer for two files or directories. Uses Args: params (DiffInput): left and right paths. Returns: str: JSON with the launched command and pid. |
| as_gradle_tasksA | List the Gradle tasks available in a project. Args: params (GradleTasksInput): project_dir, all_tasks (bool), timeout. Returns: str: JSON with the raw 'tasks' output and the parsed build status. |
| as_gradle_assembleA | Build APK(s) with assemble and report the produced artefacts. Equivalent to Android Studio's "Build > Build APK(s)". After a successful build the response lists the produced .apk paths under build/outputs. Args: params (GradleAssembleInput): project_dir, variant ('Debug'/'Release'), optional module (':app'), timeout. Returns: str: JSON with gradle status, command, and 'outputs' {apk,aab,mapping}. |
| as_gradle_bundleB | Build an Android App Bundle (.aab) with bundle. Args: params (GradleAssembleInput): project_dir, variant, optional module, timeout. Returns: str: JSON with gradle status and produced 'outputs' (aab paths). |
| as_gradle_testA | Run unit tests (default) or instrumented connected tests. Args: params (GradleTestInput): project_dir, instrumented (bool), module, timeout. Returns: str: JSON with gradle status and parsed failures. HTML/XML test reports are written under /build/reports/tests and build/outputs. |
| as_gradle_lintA | Run Android Lint via Gradle and point to the generated reports. Args: params (GradleProjectInput): project_dir, timeout. Returns: str: JSON with gradle status. Reports: /build/reports/lint-results-*.html|xml. |
| as_gradle_cleanA | Delete build outputs via 'gradle clean'. Only touches the build/ dir. Args: params (GradleProjectInput): project_dir, timeout. Returns: str: JSON with gradle status. |
| as_gradle_dependenciesA | Print the dependency tree for a module. Args: params (GradleDependenciesInput): project_dir, module (':app'), optional configuration filter, timeout. Returns: str: JSON with the dependency tree in command.stdout. |
| as_gradle_signing_reportA | Show signing configs and certificate fingerprints (SHA1/SHA256). Useful for configuring API keys (Maps, Firebase). Secrets in the output are redacted by the server. Args: params (GradleProjectInput): project_dir, timeout. Returns: str: JSON with the signingReport output. |
| as_gradle_run_taskA | Run arbitrary Gradle tasks with optional extra args (power tool). Use the dedicated tools (assemble/test/lint/clean) when possible; this is the escape hatch for anything else (e.g. installDebug, uninstallAll, custom tasks). Args: params (GradleRunTaskInput): project_dir, tasks (list), args (list), timeout. Returns: str: JSON with gradle status, command output and detected build outputs. |
| as_gradle_stopA | Stop all Gradle daemons for the project (frees memory, clears stuck state). Args: params (GradleProjectInput): project_dir, timeout. Returns: str: JSON with command output. |
| as_sdk_listA | List installed (and optionally available) Android SDK packages. Args: params (ListInput): installed_only (bool), timeout. Returns: str: JSON with 'installed' and 'available' lists of {path, version, description}, plus the raw output. |
| as_sdk_installA | Install one or more Android SDK packages (downloads + accepts licenses). Args: params (InstallInput): packages (list of sdkmanager paths), confirm, timeout. Returns: str: JSON with the install command output, or confirmation_required. |
| as_sdk_accept_licensesA | Accept all pending Android SDK licenses (sdkmanager --licenses). Args: params (LicensesInput): confirm, timeout. Returns: str: JSON with the command output, or confirmation_required. |
| as_avd_listA | List configured Android Virtual Devices. Args: params (AvdListInput): detailed (bool). Returns: str: JSON with 'names' (list) and, if detailed, 'avds' (list of {name, device, target, path, based_on}). |
| as_avd_createA | Create a new Android Virtual Device from an installed system image. The system image must already be installed (use as_sdk_install with e.g. 'system-images;android-34;google_apis;x86_64'). Args: params (AvdCreateInput): name, system_image, device, confirm. Returns: str: JSON with the create command output, or confirmation_required. |
| as_avd_deleteA | Delete an Android Virtual Device permanently. Requires confirm=true. Args: params (AvdDeleteInput): name, confirm. Returns: str: JSON with the delete command output, or confirmation_required. |
| as_avd_startB | Boot an AVD in the emulator (detached) and optionally wait for boot. Args: params (AvdStartInput): name, cold_boot, wipe_data, headless, wait_boot. Returns: str: JSON with the emulator pid and (if wait_boot) the booted serial. |
| as_avd_stopA | Stop a running emulator (adb emu kill). Args: params (AvdStopInput): optional serial (else the first running emulator). Returns: str: JSON with the command output. |
| as_adb_devicesA | List connected devices and emulators (adb devices -l). Returns: str: JSON with 'devices': list of {serial, state, model, device, product, transport_id, is_emulator} and 'count'. |
| as_adb_installB | Install an APK onto a device/emulator. Args: params (InstallInput): apk_path, serial, reinstall, allow_downgrade, grant_permissions. Returns: str: JSON with the install result. |
| as_adb_uninstallA | Uninstall an application (removes app + data). Requires confirm=true. Args: params (PackageInput): package, serial, confirm. Returns: str: JSON with the uninstall result, or confirmation_required. |
| as_adb_logcatA | Dump a snapshot of the most recent device logs (non-streaming). Args: params (LogcatInput): serial, lines, filter_spec, clear_first, grep. Returns: str: JSON with 'log' (the captured text) and 'line_count'. |
| as_adb_logcat_clearB | Clear the device log buffer (adb logcat -c). Args: params (SerialInput): serial. Returns: str: JSON with the command result. |
| as_adb_shellA | Run a shell command on the device. Read-only commands run freely; anything potentially destructive requires confirm=true. Recognised safe first-words include getprop, dumpsys, pm list, settings get, ls, cat, df, ps, am, input, wm, screencap. Commands containing markers like 'rm ', 'reboot', 'uninstall', 'clear', 'wipe' always require confirm=true. Args: params (ShellInput): command, serial, confirm. Returns: str: JSON with stdout/stderr, or confirmation_required. |
| as_adb_screenshotA | Capture the device screen to a PNG on this PC (adb exec-out screencap). Args: params (ScreenshotInput): out_path (inside a workspace root), serial. Returns: str: JSON with 'saved_to' and the file size. |
| as_adb_inputB | Send a tap/swipe/text/keyevent to the device (UI automation of the app). Args: params (InputEventInput): kind ('text'|'keyevent'|'tap'|'swipe'), value, serial. Returns: str: JSON with the command result. |
| as_adb_start_appA | Launch an app by component or by package (via monkey launcher intent). Args: params (StartAppInput): component ('pkg/.Activity') or package, serial. Returns: str: JSON with the launch result. |
| as_adb_stop_appA | Force-stop an app (am force-stop). Does not delete data. Args: params (PackageInput): package, serial (confirm not required). Returns: str: JSON with the command result. |
| as_adb_pullA | Copy a file from the device to this PC (adb pull). Args: params (FileTransferInput): remote (device path), local (workspace path), serial. Returns: str: JSON with the result and saved local path. |
| as_adb_pushA | Copy a file from this PC to the device (adb push). Args: params (FileTransferInput): local (workspace path), remote (device path), serial. Returns: str: JSON with the result. |
| as_project_createA | Scaffold a new, buildable Android project (Views or Compose template). Generates settings/build Gradle files, a Gradle wrapper, local.properties (pointing at the detected SDK), manifest, MainActivity and resources, then optionally opens it in Android Studio. Args: params (CreateProjectInput): parent_dir, name, application_id, template, min_sdk, compile_sdk, open_in_studio, confirm. Returns: str: JSON with project_dir, files_written, wrapper status, and a hint to build via as_gradle_assemble. Or confirmation_required. |
| as_project_infoA | Extract metadata from an Android project without building it. Reads settings/build Gradle files and the app manifest to report the modules, applicationId, version, SDK levels, plugins and permissions. Args: params (ProjectPathInput): project_dir. Returns: str: JSON with modules, application_id, version_code/name, min_sdk/target_sdk/compile_sdk, manifest (permissions, activities), and detected gradle files. |
| as_project_validateA | Check that a project has the expected structure and report problems. Args: params (ProjectPathInput): project_dir. Returns: str: JSON with 'valid' (bool), 'problems' (list) and 'checks' (dict). |
| as_project_backupA | Create a timestamped .zip backup of a project (excluding build artefacts). Args: params (ProjectPathInput): project_dir. Returns: str: JSON with the backup zip path. |
| as_project_list_recentA | List recently opened projects from Android Studio's config. Args: params (RecentInput): limit. Returns: str: JSON with 'recent' (list of project paths). Empty if none recorded. |
| as_apk_infoA | Summarise an APK: package, version, SDK levels, permissions, label. Uses aapt2 badging (most reliable) and falls back to apkanalyzer. Args: params (ApkInput): apk_path. Returns: str: JSON with package, version_code/name, min_sdk, target_sdk, label, launchable_activity and permissions. |
| as_apk_methodsA | Report dex method counts and the largest packages (apkanalyzer dex). Args: params (ApkInput): apk_path. Returns: str: JSON with the reference method count and per-package breakdown text. |
| as_apk_filesizeA | Report the on-disk and estimated download size of an APK. Args: params (ApkInput): apk_path. Returns: str: JSON with file_size and download_size (bytes). |
| as_apk_verify_signatureA | Verify an APK's signature and print the signing certificates (apksigner). Args: params (ApkInput): apk_path. Returns: str: JSON with verified (bool) and the certificate details. |
| as_apk_compareA | Compare the file sizes of two APKs (apkanalyzer apk compare). Args: params (ApkCompareInput): apk_a (baseline), apk_b. Returns: str: JSON with the comparison table. |
| as_inspect_codeA | Run Android Studio's code inspection headlessly and return the problems. This launches the IDE's offline inspection engine (the same one behind "Analyze > Inspect Code") via studio64.exe inspect, writes XML reports to a temp dir and parses them into a structured problem list grouped by severity and inspection. It must index the project first, so it can take minutes on a large project. Do not run while Android Studio is open with the same project (config-dir contention) — close it first or expect a slower run. Args: params (InspectInput): project_dir, optional scope_dir, optional profile, max_problems, timeout. Returns: str: JSON with total_problems, by_severity, by_inspection, and a truncated 'problems' list of {inspection, severity, file, line, description}. |
| as_format_codeA | Reformat files in place using the IDE's formatter (studio64.exe format). Backups of every affected file are written to the server backup dir before formatting. Requires confirm=true. Args: params (FormatInput): target, mask, recursive, confirm. Returns: str: JSON with the formatter output and the list of backups created. |
| as_ide_statusA | Report live-IDE connectivity: process, built-in server, MCP plugin. Returns: str: JSON with studio_running (bool), builtin_server_up (bool), builtin_server_url, about (IDE build info if reachable), official_mcp_plugin_installed (bool) and guidance. |
| as_ide_list_mcp_toolsA | List the tools exposed by the running IDE's built-in MCP server. Bridges to Args: params (TimeoutInput): timeout. Returns: str: JSON with available (bool), tools (list) or an error explanation. |
| as_ide_call_mcp_toolA | Invoke a tool on the running IDE's built-in MCP server (live control). Use as_ide_list_mcp_tools first to discover available tool names/arguments. Requires the official MCP Server plugin and a running IDE. Args: params (CallMcpToolInput): name, arguments, timeout. Returns: str: JSON with the tool result, or an error explanation. |
| as_ui_screenshotA | Capture a screenshot of the Android Studio window (or full screen). Args: params (ScreenshotInput): out_path (optional), window_only (bool). Returns: str: JSON with 'saved_to' and the captured dimensions. |
| as_ui_focusA | Bring the Android Studio window to the foreground. Returns: str: JSON indicating whether a Studio window was found and focused. |
| as_ui_send_keysA | Focus Android Studio and send a raw SendKeys sequence. Requires confirm=true. This is a generic, lower-reliability fallback. Prefer the CLI/Gradle/ADB tools. After sending, a screenshot is captured for verification. Args: params (SendKeysInput): keys (SendKeys string), confirm, screenshot_after. Returns: str: JSON with the send result and a verification screenshot path. |
| as_ui_invoke_actionA | Invoke any IDE action via Find Action (Ctrl+Shift+A). Requires confirm=true. This opens Find Action, types the action name and presses Enter — giving access to essentially any IDE command (e.g. 'Sync Project with Gradle Files', 'Rebuild Project', 'Reformat Code'). It is a best-effort UI path; verify the result with the returned screenshot. Prefer dedicated tools where they exist. Args: params (InvokeActionInput): action (name), confirm, screenshot_after. Returns: str: JSON with the result and a verification screenshot path. |
| as_report_healthA | Produce a comprehensive markdown health report of the dev environment. Aggregates installation/runtime status, SDK package count, connected devices, configured AVDs and (optionally) a project's metadata into one report. Args: params (HealthInput): optional project_dir. Returns: str: JSON with a 'markdown' report plus the underlying structured data. |
| as_logs_ideA | Return the tail of Android Studio's idea.log (optionally filtered by level). Args: params (LogTailInput): lines, level (optional 'ERROR'/'WARN'). Returns: str: JSON with 'log' (text) and the source path. |
| as_logs_mcpA | Return the tail of this MCP server's own log file. Args: params (LogTailInput): lines, level (optional). Returns: str: JSON with 'log' (text) and the source path. |
| as_configA | Show the fully-resolved configuration (all discovered paths and roots). Returns: str: JSON with every resolved path, the workspace allow-list, and the built-in server URL. Use this to debug discovery/path issues. |
| as_backup_fileB | Create a timestamped backup of a single file in the server backup dir. Args: params (BackupFileInput): path. Returns: str: JSON with the backup path. |
| as_restore_backupA | Restore a previously-created backup file to a destination. Requires confirm=true. The current destination (if any) is itself backed up before being overwritten. Args: params (RestoreInput): backup_path, restore_to, confirm. Returns: str: JSON with the restore result. |
| as_run_appA | Build, install and launch an app on a device/emulator, then capture logs. One-shot equivalent of Android Studio's Run button:
Args: params (RunAppInput): project_dir, variant, module, serial, install, launch, capture_logcat_lines, screenshot, timeout. Returns: str: JSON with a 'steps' object (build/install/launch/logcat/screenshot), the apk path, package, and 'crash_detected' (bool). |
| as_logcat_watch_startA | Start a background logcat capture you can poll incrementally. Returns a watch_id; read new lines with as_logcat_watch_read (pass the returned offset back each time) and stop it with as_logcat_watch_stop. Args: params (WatchStartInput): serial, filter_spec, clear_first. Returns: str: JSON with watch_id and the initial offset (0). |
| as_logcat_watch_readA | Read new output from a running logcat watch since a byte offset. Args: params (WatchReadInput): watch_id, since_offset, grep. Returns: str: JSON with 'text' (new lines), 'offset' (pass to the next read), 'running' and 'total_bytes'. |
| as_logcat_watch_stopB | Stop a running logcat watch (or any managed process) by id. Args: params (ProcIdInput): proc_id (the watch_id). Returns: str: JSON with the final process info. |
| as_proc_listA | List all background processes started by this server (watches etc.). Returns: str: JSON with 'processes': list of {id, kind, running, pid, output_file, ...}. |
| as_proc_stopB | Stop a managed background process by id. Args: params (ProcIdInput): proc_id. Returns: str: JSON with the final process info. |
| as_retraceA | De-obfuscate an R8/ProGuard stack trace using its mapping.txt (retrace). Args: params (RetraceInput): mapping_file (mapping.txt), stacktrace (text). Returns: str: JSON with the de-obfuscated trace in 'retraced'. |
| as_screenrecordC | Record the device screen to an .mp4 and pull it to this PC. Args: params (ScreenrecordInput): out_path, seconds, serial. Returns: str: JSON with the saved local path and size. |
| as_aab_build_apksA | Convert an Android App Bundle (.aab) into an installable .apks set (bundletool). Args: params (AabBuildInput): aab_path, out_apks, universal, confirm. Returns: str: JSON with the produced .apks path. |
| as_aab_installA | Install a .apks set onto a connected device (bundletool install-apks). Args: params (AabInstallInput): apks_path, serial, confirm. Returns: str: JSON with the install result. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| run_app | Build, install and run an Android project on a device/emulator. |
| diagnose_build | Diagnose and fix a failing Gradle build. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| resource_config | Resolved server configuration (all discovered tool paths and roots). |
| resource_idea_log | The last 200 lines of Android Studio's idea.log. |
| resource_recent_projects | Recently opened Android Studio projects (from recentProjects.xml). |
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/MauricePutinas/Android-Studio-MCP-Claude-Code'
If you have feedback or need assistance with the MCP directory API, please join our Discord server