Ultimate Android MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ADB_CLIENT_HOST | No | The host address of the ADB server. | 127.0.0.1 |
| ADB_CLIENT_PORT | No | The port of the ADB server. | 5037 |
| ADB_DEVICE_SERIAL | No | The serial number or IP address of the connected device. If not specified, the first available device will be 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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| all_packagesA | Returns a list of all packages (both system and user-installed) currently installed on the connected Android device. No parameters are required. |
| user_packagesA | Returns a list of user-installed application package names on the connected Android device. No parameters are required. |
| system_packagesA | Returns a list of system application package names (pre-installed apps) on the connected Android device. No parameters are required. |
| launch_appC | Launches the app with the specified package name on the connected Android device. Requires the |
| get_current_ui_labelsA | Returns a list of UI nodes currently visible on the device screen, focusing on text labels and content descriptions. Each node contains properties like text, bounds, clickable, focusable, and others. No parameters are required. |
| get_current_focused_nodesA | Returns a list of UI nodes that are currently focused on the connected Android device screen. No parameters are required. |
| input_keyeventC | Simulates a key event with the specified keycode on the connected Android device. Requires the |
| input_backB | Simulates a back button event on the connected Android device. No parameters are required. |
| input_homeA | Simulates a home button event on the connected Android device. No parameters are required. |
| input_tapA | Simulates a tap gesture at the specified (x, y) coordinates on the connected Android device screen. Requires |
| input_textA | Simulates typing the given text input into the currently focused field on the connected Android device. Requires the |
| input_pressC | Simulates a key press event with the specified keycode on the connected Android device. Requires the |
| input_rollB | Simulates a rolling gesture with the specified dx and dy values on the connected Android device. Requires |
| input_swipeB | Simulates a swipe gesture from (x1, y1) to (x2, y2) with an optional duration on the connected Android device. Requires |
| is_keyboard_openA | Checks if the virtual keyboard is currently open on the connected Android device. No parameters are required. |
| execute_adb_shellC | Executes a raw ADB shell command on the connected Android device and returns the output. Requires the |
| cpu_countA | Returns the number of CPU cores on the connected Android device. No parameters are required. |
| cpu_percentA | Returns the current CPU load percentage on the connected Android device. No parameters are required. |
| get_serial_noA | Returns the serial number of the connected Android device. No parameters are required. |
| get_propertiesA | Returns the build.prop properties of the connected Android device. No parameters are required. |
| list_featuresA | Returns the device overlay configuration properties of the connected Android device. No parameters are required. |
| get_battery_levelA | Returns the battery level of the connected Android device. No parameters are required. |
| wm_densityA | Returns the screen density of the connected Android device. No parameters are required. |
| wm_sizeA | Returns the screen size of the connected Android device. No parameters are required. |
| pull_fileA | Pulls a file from the connected Android device to the local machine. Requires |
| push_fileA | Pushes a file from the local machine to the connected Android device. Requires |
| get_pidB | Returns the process ID (PID) for the specified package name on the connected Android device. Requires the |
| get_top_activitiesB | Returns the activities currently on top on the connected Android device. No parameters are required. |
| get_top_activityA | Returns the singular activity currently on top on the connected Android device. No parameters are required. |
| install_apkB | Installs an APK on the connected Android device. Requires the |
| uninstall_packageA | Uninstalls the specified package from the connected Android device. Requires the |
| is_installedA | Checks if the specified package is installed on the connected Android device. Requires the |
| get_all_packagesB | Returns a list of all packages on the connected Android device, with optional filters for user-installed or system-installed packages. Accepts |
| get_system_packagesB | Returns a list of system-installed packages on the connected Android device. No parameters are required. |
| get_user_packagesA | Returns a list of user-installed packages on the connected Android device. No parameters are required. |
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 35 tools
Several tools are exact duplicates in purpose: all_packages/get_all_packages, user_packages/get_user_packages, system_packages/get_system_packages, and input_keyevent/input_press both accept a keycode. get_top_activity and get_top_activities also blur together, so an agent would frequently misselect.
Naming mixes bare nouns (all_packages, cpu_count, wm_size), get_-prefixed getters (get_properties, get_serial_no), and verb-first actions (launch_app, pull_file). The get_/no-prefix duplication for package listing makes the inconsistency worse, though the input_ prefix shows some grouping.
35 tools is well above the typical coherent range, mostly because of redundant package-list and input commands. A tighter set of 20-25 tools would cover the same functionality without the duplication.
The surface covers package management, UI inspection, input injection, device info, file transfer, and raw shell access, which is broad enough for many Android automation workflows. Gaps like screenshot capture or logcat are workarounds via execute_adb_shell.