Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

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": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
check_deviceA

Check that a phone is reachable and report what it is. Call this first if anything seems wrong. Connects over Wi-Fi automatically if it can.

list_devicesA

Find phones that could be added: devices on your tailnet running the client app. This is the normal way to discover a phone.

ADB is only relevant while setting a phone up from this machine; use list_adb_devices if you specifically need that.

list_adb_devicesA

Phones reachable over ADB from this machine - cable or wireless debugging.

Only useful while setting a phone up locally. Day-to-day the phones are reached over the network, not ADB.

pair_wirelessA

Pair with a phone over Wi-Fi, once, so no cable is needed afterwards.

On the phone: Settings > Developer options > Wireless debugging > 'Pair device with pairing code'. Pass the ip:port and the 6-digit code it shows. Note that the pairing port differs from the connection port.

enable_wirelessA

Switch a cabled phone over to Wi-Fi so the cable can be unplugged.

Needs the phone plugged in for this one step, but no pairing code. Use this when the user wants to stop using the cable. It does not survive a phone reboot - pair_wireless does.

connect_wirelessA

Connect to an already-paired phone over Wi-Fi. Use after the phone reboots or wireless debugging is toggled - the port changes each time, so this rediscovers it.

disconnect_wirelessA

Drop the wireless connection. The pairing is remembered, so connect_wireless will reconnect without pairing again.

get_screenA

Read what is currently on the phone screen, as a numbered list of tappable elements. This is the main way to see the phone - call it before acting, and after anything unexpected.

take_screenshotA

Take a picture of the phone screen. Use this when get_screen doesn't show what you need - videos, games, photos, or custom-drawn interfaces.

tapA

Tap an element by its number from get_screen. This is the normal way to tap - the index comes straight from the last get_screen listing.

tap_textA

Tap the element whose label matches this text. Use when you know what the button says but not its index.

tap_coordinatesA

Tap an exact pixel position. Only use this when an element has no index - for example something you found in a screenshot.

scrollA

Scroll the screen: 'down' to see what is further down the page, 'up' to go back, or 'left'/'right' to move between pages.

type_textB

Type text into the field that is currently focused. Tap a text field first.

press_keyC

Press a hardware or system key. Common ones: back, home, recents, enter, delete, volume_up, volume_down.

wake_screenA

Wake the phone and dismiss a simple swipe lock. A PIN, pattern or fingerprint lock cannot be bypassed - the user must unlock it themselves.

list_appsB

List the apps installed on the phone and which ones this server is allowed to open.

open_appA

Open an app by name, e.g. 'youtube' or 'chrome'. Only apps on the allowlist can be opened - call list_apps to see them.

open_settingsA

Jump straight to a Settings page instead of navigating there by hand. Pages: wifi, mobile_data, network, airplane_mode, hotspot, bluetooth, display, sound, battery, storage, apps, location, security, accessibility, date_time, language, privacy, notifications, about_phone, settings_home.

check_internetA

Diagnose the phone's internet connection without touching the screen. Start here for 'my internet isn't working' - it shows whether the radios are on, whether traffic flows, and whether DNS resolves.

chrome_tabsA

List the tabs open in Chrome on the phone. Use the ids with the other chrome_ tools; most of them default to the most recent tab.

chrome_readA

Read a page in Chrome as structured content: its text plus a numbered list of links, buttons and fields. This is the web equivalent of get_screen, and far more reliable than reading the page off a screenshot.

chrome_openC

Open a URL in a new Chrome tab on the phone.

chrome_navigateC

Point an existing Chrome tab at a different URL.

chrome_clickB

Click an element by its number from chrome_read.

chrome_typeA

Type into a field in Chrome. Give the field's number from chrome_read, or omit it to type into whatever is already focused.

Unlike the phone's own keyboard, this handles any language and emoji.

chrome_javascriptA

Run JavaScript in a Chrome tab and return the result. Use for anything the other chrome_ tools do not cover - extracting data, submitting a form, scrolling to an element.

chrome_close_tabB

Close a Chrome tab by its id from chrome_tabs.

phone_healthB

Check whether the phone is reachable and why not, if not.

Worth calling first when something stops working: the accessibility service can be switched off by the system without warning, and the failure looks like a network problem until you look.

watchdog_reportA

Show what the background watchdog last saw, including when the phone went down and whether a repair was attempted. Use this to answer 'has the phone been reachable?' without poking the phone right now.

repair_phoneA

Put the phone's accessibility service back when it has been switched off.

Android periodically revokes accessibility access from apps it did not install. The phone can re-enable its own service, so this works over any network including cellular - no cable, and nobody has to touch the phone.

list_phonesA

List the phones this server can drive, and whether each is reachable.

Every other tool takes an optional device naming one of these. With more than one phone configured, always name the one you mean.

use_phoneA

Set which phone the other tools act on when no device is named.

This changes the default for everyone using this server, so prefer naming the phone per call when you are switching between them.

discover_phonesA

Look for phones on your tailnet that are running the client app.

Finds Android devices on the tailnet and checks whether each answers on the bridge port. A phone found here still needs its pairing token before it can be driven - read that from the Android Use app on the phone itself.

add_phoneA

Register a phone so it can be driven by name.

host is its Tailscale address (see discover_phones) and token is the pairing token shown in the Android Use app on that phone.

forget_phoneB

Remove a phone from the registry. The phone itself is left untouched.

lock_phoneA

Work on one phone only, until unlocked.

Every tool then acts on this phone, and a request naming a different one is refused rather than redirected. Use this when helping one person, so a misread instruction cannot reach somebody else's phone.

unlock_phoneB

Stop working on just one phone, so all registered phones are usable again.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.3/5.0

Scored across 38 tools

Disambiguation4/5

Most tools are clearly separated by domain (device discovery, connection, UI interaction, Chrome, phone management), but some overlap exists: check_device, phone_health, and watchdog_report all diagnose reachability, and unlock_phone/lock_phone are inverse operations that could be confused with disconnect_wireless. The descriptions help, but a few boundaries are fuzzy.

Naming Consistency4/5

The naming is predominantly verb_noun (check_device, list_devices, tap_text, open_app, chrome_read), with a consistent style. Minor deviations: 'watchdog_report' is noun-ish, 'use_phone' and 'lock_phone' are less descriptive, and the chrome_* prefix is a clear sub-pattern. Overall predictable and readable.

Tool Count3/5

38 tools is on the heavy side for a single server, though the scope is broad (device management, UI automation, Chrome automation, phone registry). The count feels bloated because several tools could be merged (e.g., check_device/phone_health/watchdog_report, or the wireless pairing cluster), but each tool does have a distinct function.

Completeness4/5

The server covers the full lifecycle: discovery, pairing, connection, screen interaction, app control, Chrome automation, and phone registry management. Minor gaps: no explicit tool for swiping/long-press, no way to get device logs, and no tool to manage the allowlist for open_app, but the core workflows are well covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues