Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PHONEDRIVER_ASKNoComma-separated list of extra tap categories to be asked about: any of "send" (Send, Reply, Post, Share), "delete" (Delete, Remove, Clear all) and "install" (Install, Uninstall). By default only payments and deleting an account are asked about, e.g. PHONEDRIVER_ASK=send,delete.
PHONEDRIVER_GUARDNoSet to "off" to turn off the approval check that holds taps on sensitive buttons (payments, deleting an account, and anything added via PHONEDRIVER_ASK) and asks you first.
PHONEDRIVER_DEVICENoDevice id to use when more than one device is connected, e.g. "android:emulator-5554". `phonedriver devices` lists the ids.
PHONEDRIVER_DISPLAYNoSet to "hidden" to have the agent work on a hidden second screen on Android 13 and later, so your own screen stays yours (equivalent to passing --display hidden to the CLI).

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

Operate an Android or iOS device. System settings: shell. App UI: launch takes an app name (no devices or apps first), then snapshot once and act on its @refs; each action returns what changed. Send calls one at a time on the shared screen. If an error needs the user to act on the device, say so and go on when they are done. Passwords, payments, sending and deleting need the user's word for this task.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
appsB

List apps (name id), or action install (file in app), stop, clear (data) or uninstall.

batchB

Run steps in order, one diff back; stops at the first failure. A step is {"tool":"tap","target":"@e3"}: tap, type, swipe, scroll, press, launch or wait.

clipboardC

Read the clipboard, or set it.

devicesA

List devices (id, model, OS, holder). With several, pass an id as device to the other tools. release gives up this session's hold.

launchA

Open an app (any part of its name, or its id) or a url (with app, opened in that app); returns the screen it shows, which is where the app was left unless restart. grant pre-allows permissions (camera, notifications).

pressC

Press home, back, recents, notifications, lock, volume-up, volume-down, enter or hide-keyboard.

screenshotA

Image of the screen, for what the snapshot lacks (canvas, map, photo). marks boxes tappable elements with their @ref.

scrollB

Scroll toward more content, or until the text or @ref in until shows.

shellA

Run a device shell command: exit code, output, screen change. Prefer it for settings: cmd uimode night yes, settings put system screen_brightness 20, am start -a android.intent.action.VIEW -d <url>. Simulator: simctl ui appearance dark. A physical iPhone has no shell.

snapshotB

The screen as lines like @e4 button "Save"; refs name elements for other tools. find lists matching lines (A|B for either). under-keyboard = hidden by the keyboard.

swipeA

A finger gesture: flip pages, dismiss. to drags from to a target; pinch (in, out) zooms. Use scroll for lists.

tapA

Tap by @ref, text or x,y point (from a screenshot). long holds the press that many ms (context menus). The reply is the new screen: read it, and call tools one at a time (they share one screen).

typeA

Put text in a field (replaces its content) and report what it shows; empty text clears. secret for any password or code.

waitB

Wait for settled, a text (A|B for either) or @ref to appear, or gone:<text>.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.5/5.0

Scored across 14 tools

Disambiguation4/5

Most tools have clearly distinct targets: observation (snapshot vs screenshot), gestures (tap, swipe, scroll, press) and input (type) are separated, and descriptions actively disambiguate hot spots like 'use scroll for lists' and 'screenshot for what the snapshot lacks'. Remaining overlap is real but modest: `batch` re-runs the same verbs as standalone tools, `shell` can launch apps the way `launch` does, and `tap` vs `press` require reading the descriptions to separate.

Naming Consistency4/5

Every name is a single lowercase word with no casing or separator drift, which is a strong, predictable surface. The only inconsistency is grammatical: some names are nouns naming a resource (apps, devices, clipboard, snapshot, screenshot) while others are imperative verbs (launch, tap, type, wait), and `batch` is neither.

Tool Count5/5

Fourteen tools sits squarely in the well-scoped range for mobile automation: device/app management, perception, gestures, text entry, waiting, and a batch combinator. Each tool maps to a distinct capability an agent needs and none feels like filler.

Completeness4/5

Coverage of the inspect-then-act loop is thorough: device discovery, app lifecycle (install/stop/clear/uninstall), launch with permissions, snapshot/screenshot perception, gestures, typing, waiting and batch composition, with `shell` as an escape hatch. Minor gaps remain — no permission revocation, no file push/pull, and `wait` only supports `gone:<text>` rather than `gone` for a ref — but agents can work around these via shell.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues