android-phone-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ANDROID_MCP_ALLOW_SHELL | No | Allow arbitrary adb shell commands. Default is off. | false |
| ANDROID_MCP_ALLOW_WRITE | No | Allow write operations (tap/input/install etc.). Default is off (read-only). | false |
| ANDROID_MCP_ACTION_TIMEOUT | No | Per-action timeout. Default is 30 seconds. | 30s |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_devicesA | List all adb-connected Android devices as {serial, connection_type}. Returns an empty list (never an error) when no device is connected. |
| get_device_infoA | Read device facts: model, manufacturer, Android version, resolution, density. |
| get_screenA | Capture a compact text-mode snapshot of the current screen. Returns elements as |
| get_screen_hashA | Return a cheap fingerprint of the current screen (hash of the snapshot). Call this before and after an action to detect whether the screen changed, without refetching the full snapshot. |
| tapA | Tap a semantic target and verify the result. Prefer semantic selectors — never compute coordinates yourself:
Returns verification evidence {executed, screen_changed, changed_elements[], screen_hash}, or SELECTOR_AMBIGUOUS with candidates[] when several elements match (retry with by=id). |
| swipeA | Swipe the screen by direction (up/down/left/right). Returns verification evidence {executed, screen_changed, changed_elements[], screen_hash}. |
| scroll_pageA | Scroll exactly one viewport page (native one-page scroll). |
| type_textA | Type text into an input field. With target, the field is located semantically first (must be an editable field). Without target, the currently focused field is used. The field is cleared before typing. |
| scroll_untilA | Scroll until a semantic target appears (or the scroll reaches its end). Uses one-viewport-page scrolling and stops as soon as the container boundary is reached (no useless swipes at the end). |
| open_appA | Launch an installed app by friendly name or package name. Unknown/not-installed apps return a structured APP_NOT_INSTALLED error (with a hint to pass the exact package name). |
| open_settingsA | Open a system settings panel via ACTION deep link. Supported panels: home, about_phone, wifi, bluetooth, display, sound, apps, storage, security, location, battery, network, date, accessibility, language, developer. |
| press_keyA | Press a system key: back, home, recent, menu, enter, power, volume_up, volume_down, clear. |
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/expoli/android-phone-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server