android-emulator
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ANDROID_HOME | No | Path to the Android SDK root. If not set, ANDROID_SDK_ROOT or the default ~/Library/Android/sdk is used. | |
| ANDROID_SDK_ROOT | No | Path to the Android SDK root. If not set, ANDROID_HOME or the default ~/Library/Android/sdk is used. |
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 |
|---|---|
| list_emulatorsA | List available Android Virtual Devices (AVDs) and currently connected devices/emulators |
| boot_emulatorA | Boot an Android emulator by AVD name and wait until it has finished booting. Returns the device serial. |
| shutdown_emulatorA | Shut down a running emulator |
| get_booted_serialA | Get the serial(s) of currently connected devices/emulators |
| get_screen_infoA | Get the screen size (pixels) and density. Screenshots, tap coordinates and describe_ui bounds all share this same pixel coordinate space — no scaling needed. |
| install_appB | Install an .apk on the device |
| uninstall_appA | Uninstall an app by package name |
| list_appsA | List installed packages (third-party only by default) |
| launch_appA | Launch an app by package name (uses its main launcher activity), or a specific activity |
| terminate_appC | Force-stop a running app |
| clear_app_dataA | Clear all data and permissions for an app (like a fresh install) |
| grant_permissionA | Grant a runtime permission to an app (e.g. android.permission.CAMERA) |
| screenshotA | Take a screenshot of the device screen. Saves a full-resolution PNG and returns a downscaled copy inline (the text notes the scale factor to map back to device pixels). |
| describe_uiA | Get the UI hierarchy of the current screen as a compact JSON list with text, content descriptions, resource IDs, bounds and tap centers (pixels). By default only elements with text/desc or that are interactive are returned. |
| find_elementA | Find UI elements whose text, content description or resource ID contains the given string (case-insensitive). Returns bounds and tap centers. |
| wait_for_elementA | Poll until an element matching the query appears (or disappears). Useful after navigation or network calls. |
| tapA | Tap at x,y pixel coordinates on the screen |
| long_pressC | Long-press at x,y pixel coordinates |
| swipeB | Swipe from one point to another (pixels) |
| type_textA | Type text into the currently focused input field (ASCII only — |
| press_buttonB | Press a hardware/navigation button (HOME, BACK, MENU, APP_SWITCH, POWER, VOLUME_UP, VOLUME_DOWN, ENTER, DEL, TAB, CAMERA, SEARCH) |
| key_eventA | Send any Android keycode (e.g. KEYCODE_ESCAPE, 66) — for keys not covered by press_button |
| open_urlC | Open a URL or deep link in the device |
| shakeA | Shake the device (emulator only — simulates accelerometer motion, e.g. to open the React Native dev menu) |
| set_orientationC | Rotate the screen |
| set_appearanceB | Switch the device between light and dark mode |
| set_locationC | Set the simulated GPS location (emulator only) |
| add_mediaB | Add a photo or video to the device's media library (Photos/Gallery) |
| record_videoA | Start recording the device screen (max 3 minutes per recording). Call stop_recording to finish and pull the .mp4. |
| stop_recordingA | Stop an active screen recording and save the video locally |
| set_status_barC | Override the status bar via SystemUI demo mode (time, battery, wifi, notifications) |
| clear_status_barA | Exit demo mode and restore the real status bar |
| logcatA | Read recent logcat output, optionally filtered by a regex or restricted to one app's process |
| clear_logcatC | Clear the logcat buffer |
| push_fileA | Copy a local file to the device |
| pull_fileB | Copy a file from the device to the local machine |
| adb_shellA | Run an arbitrary |
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 37 tools
Each tool has a clearly distinct purpose, from device control (orientation, location, appearance) to UI interaction (tap, swipe, type, find elements) to app management and file operations. Even closely related tools like press_button vs key_event are differentiated by scope (common navigation vs arbitrary keycodes).
Most tools follow a verb_noun pattern (type_text, press_button, set_orientation, install_app), but a few exceptions like 'swipe', 'tap', 'shake', 'logcat', and 'key_event' break the strict consistency. Overall the naming is clear and readable, with only minor deviations.
With 37 tools, this server is twice the typical upper bound of 15. While each tool serves a specific function for comprehensive emulator control, the sheer number feels heavy and could be consolidated (e.g., combining some status bar or UI query tools). Still, the scope justifies the count better than a generic utility server.
The toolset covers essentially all major aspects of Android emulator interaction: device control, UI automation, app lifecycle, file transfer, logging, screen capture, and emulator lifecycle management. No critical gaps are apparent for the intended domain.