Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ADB_PATHNoAbsolute path to the adb executable. If not set, adb is expected on PATH.

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

CapabilityDetails
tools
{
  "listChanged": true
}
resources
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
mobile_server_infoA

Return package version, active profiles, and the exact registered tool list. Call after reconnect to verify Cursor sees the full core surface.

mobile_devices_listA

List ADB devices with reachability, hardware serial grouping, preferred TCP serial, and aliases when the same device appears under multiple serials.

mobile_device_inspectB

Probe the selected device's actual ADB, input, command, build, and backend capabilities.

mobile_displays_listB

List logical displays and correlated physical capture IDs with evidence and focus state.

mobile_screen_captureA

Capture one logical display after resolving its SurfaceFlinger physical display ID. Images whose long edge exceeds 1280px are downscaled before they are returned. coordinateSpace.scaleX and scaleY convert those screenshot pixels into the logical coordinates used by mobile_input_tap.

mobile_screen_recordA

Blocking record of one physical-backed display for a bounded duration. Prefer mobile_record_start/mark/stop when input must be interleaved.

mobile_sessions_statusA

Return active async recording, focus, and logcat sessions (optional serial filter). Use before stop/mark to recover IDs after a reconnect.

mobile_record_startA

Start a non-blocking screenrecord on one logical display so input tools can run during capture. One active session per (serial, displayId).

mobile_record_markB

Attach a labeled timestamp (offsetMs from record start) for later correlation with analyze/focus/logcat.

mobile_record_stopB

Stop screenrecord with SIGINT, pull the MP4 into artifacts, and return marks with offsets.

mobile_analyze_recordingA

Sample mean grayscale over an MP4 (ffmpeg), detect black/dim runs, and classify OEM-agnostic brightness buckets (true_black, near_black_content, system_launcher_idle, dark_app_ui, light_app_ui). Bucket ranges are heuristics—calibrate with exportSampleFrames on the device under test. Use mode='flash' for one-call regressions. Full per-frame timeline is omitted unless includeFullTimeline=true.

mobile_theme_flash_reportC

Correlate system night mode with a recording analysis (mode=flash) and marks whose offsets fall inside any reported black/dim run (± markWindowMs).

mobile_focus_traceA

Blocking sample of focused package/activity/taskId for a fixed duration. Prefer mobile_focus_trace_start/stop when interleaving input or recording. Large sample sets are written to an artifact; only a compact prefix is inlined.

mobile_focus_trace_startA

Start non-blocking focus sampling for logical displays. Optionally bind to a recordId so samples include recordOffsetMs aligned with record marks. Default interval 250ms; samples are ring-buffered (maxSamples).

mobile_focus_trace_stopA

Stop an async focus session and return focus change events plus samples (wallClockIso, tMs, optional recordOffsetMs). Prefer changes for flash/launcher hunting. Large traces write samples JSON to an artifact.

mobile_artifacts_listA

List metadata stubs (uri, name, mime, size) for files under the artifact root. Does not embed binary contents.

mobile_artifacts_pruneA

Delete old or excess artifact files by maxAgeMs and/or maxCount. Use dryRun to preview.

mobile_screen_capture_pairB

Capture multiple logical displays as tightly paired same-moment screenshots (parallel screencap after one display resolve).

mobile_ui_snapshotA

Return parsed accessibility nodes, each with a ref (@nN) and the point that actually routes a tap to it. Pass ref to tap, double-tap, long-press, swipe, drag, or text. Refs are shared across HTTP requests until the next UI read on this serial and display. Portable ADB supports only display 0; other displays use the companion hierarchy when a companion session is active.

mobile_ui_findA

Find accessibility nodes by text, content description, or resource ID. Each match has a ref (@nN) and a tap point that accounts for clickable containers and overlays. Pass ref to mobile_input_tap. This replaces refs from the previous UI read.

mobile_ui_waitC

Poll until a matching accessibility node appears or the bounded timeout expires.

mobile_input_tapA

Inject a display-targeted touchscreen tap in logical display coordinates. Pass ref from the latest UI read, or x and y. ref wins when both are set. Prefer ref over a node's raw center.

mobile_input_double_tapB

Inject two display-targeted taps at the same point in one on-device script, so gapMs is the pause between the taps. Pass ref or x and y.

mobile_input_long_pressB

Hold a display-targeted touch at one point by swiping from that point to itself. Pass ref or x and y.

mobile_input_swipeB

Inject a display-targeted touchscreen swipe with explicit duration. startRef and endRef come from the latest UI read and win over start and end.

mobile_input_dragB

Inject a capability-gated long-press drag-and-drop on one logical display. startRef and endRef come from the latest UI read and win over start and end.

mobile_input_key_combinationB

Inject a device-supported key combination with explicit ordering and chord duration.

mobile_input_keyC

Send symbolic or numeric Android keys with gamepad source and capability-gated press options.

mobile_input_key_sequenceA

Send a timed sequence of Android keys and touchscreen taps in one call. Digits between actions are millisecond pauses, not a simultaneous chord. An x,y token is a tap; join points with + for a touch combo with no pause between them. Pass stepped.checks, one entry per action, to run each action on its own and poll for a UI node before continuing.

mobile_input_textA

Type text through ADB's virtual keyboard. Pass ref to tap that node first. Reports the Unicode limitation instead of hiding it.

mobile_app_inspectB

Read package state, permissions, components, users, and installation metadata.

mobile_app_launchB

Resolve and launch an activity on a logical display with ActivityManager wait diagnostics.

mobile_app_stopB

Force-stop a package, including its processes and pending implicit launches.

mobile_app_relaunch_on_displaysA

Force-stop a package, then launch its main (or given) activity on each logical display in order. Use for dual-display cold-start / flash reproduction.

mobile_app_installB

Install one local APK with a bounded timeout and structured ADB result.

mobile_app_uninstallB

Uninstall a package, optionally retaining its data.

mobile_app_foregroundA

Return the focused package and activity for one logical display. Window focus is preferred; activity tops are the fallback.

mobile_open_urlA

Start ACTION_VIEW for an http or https URL on one logical display. Other schemes are rejected.

mobile_orientationA

Read or set user rotation for one logical display. action lock uses rotation 0, 1, 2, or 3. action free lets the accelerometer decide. action get returns free or lock N, plus observedRotation from the live display when it is known.

mobile_device_foldB

List cmd device_state postures and, when state is set, switch to a name such as OPEN or CLOSED or a numeric identifier. Non-foldables return foldable false.

mobile_locationA

On an emulator, set uses adb emu geo fix (longitude then latitude). Clearing an emulator fix fails because the console has no clear. On a device, set requires Android 12 (API 31) and injects a gps test provider via cmd location. Fused location clients can ignore that provider. clear removes it.

mobile_clipboardA

Read dumpsys clipboard, then cmd clipboard get when the dump is redacted. set uses cmd clipboard set. When the shell cannot read or write, an active companion session uses ClipboardManager. Without a companion, the result says the read was denied and names the companion. An empty string is returned only when a read can see that the clipboard is empty. A clip the companion cannot see stays readable false.

mobile_batchA

Call other registered tools in one request. Each step is validated with that tool's schema. Nested mobile_batch, screenshots, and blocking screen records are rejected. stopOnError ends the sequence at the first failure.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.4/5.0

Scored across 43 tools

Disambiguation4/5

Most tools have distinct resource/action targets, and descriptions explicitly distinguish blocking vs async recording/focus and input variants. Some overlap remains among UI node reads (snapshot/find/wait) and capture/record families, but guidance usually clarifies selection.

Naming Consistency4/5

All tools use a mobile_ prefix and snake_case, so the convention is broadly readable. However the ordering is mixed: many use noun_verb (mobile_screen_capture, mobile_app_launch) while others use verb_noun (mobile_open_url, mobile_analyze_recording).

Tool Count2/5

43 tools is heavy for one device-automation server; many variants (blocking vs async capture/record/focus, several input primitives) could be consolidated or grouped. The broad Android testing scope justifies some breadth, but the surface exceeds the 25-tool threshold in the rubric.

Completeness4/5

Coverage is broad across device/display discovery, capture, recording, UI inspection, input, app lifecycle, location, clipboard, and batching. Minor gaps include no direct logcat tool despite session status mentioning logcat, and no generic file/shell operations, but core device-control workflows are well supported.

Maintenance

ActivityMaintained
ResponsivenessNo issues