Skip to main content
Glama
CT-mao

uitree-local

by CT-mao

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
UITREE_TOKENNoToken for authenticating with the local Uitree Portal API. If not set, the token is auto-discovered via an explicit --token argument or adb content provider.

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
pingB

Checks whether the Portal device API is reachable and responding.

get_screen_stateA

Returns the current UI accessibility tree (text, class names, bounds) plus phone state and screen dimensions. Call this first to understand what is on screen, then use tap / swipe / keyboard_input with coordinates taken from the returned bounds.

get_element_treeB

Returns only the accessibility element tree of the current screen as JSON.

get_phone_stateA

Returns phone state: current app, screen on/off, battery, connectivity.

get_screenshotA

Takes a screenshot of the device screen and returns it as an image. Use this for visual verification of UI before/after actions.

tapA

Taps at the given screen coordinates (pixels, 0,0 = top-left). Read coordinates from get_screen_state bounds. Prefer tap_element when you have a node's bounds: it picks the point randomly inside the element.

tap_elementA

Taps an element identified by its accessibility bounds. The tap point is chosen randomly inside the bounds after excluding margin pixels on each edge (center fallback for small elements), so repeated taps never land on identical pixels. Get bounds from get_screen_state.

long_pressA

Long-presses at (x, y) for duration_ms (default 600). Opens context menus, selects text, or grabs an icon before dragging. For element targets with humanized random points use long_press_element.

long_press_elementA

Long-presses an element identified by bounds (random point inside the bounds, edge margin excluded). For e.g. icon long-press menus.

swipeA

Swipes (or drags) from one point to another over the given duration. A slow swipe (>400ms) reads as a drag in most apps.

press_global_actionB

Performs a system-level action. Valid actions: back, home, recents, notifications, quick_settings, power_dialog, toggle_split_screen, lock_screen, take_screenshot, headphone_button, dock_and_hold. Uses Android GLOBAL_ACTION_* semantics, requires the Portal accessibility service to be enabled.

keyboard_inputA

Types text into the currently focused field using the Portal keyboard bridge. Set clear=false to append instead of replacing the field content.

keyboard_clearC

Clears the currently focused text field.

keyboard_keyB

Sends a key press. Use named keys: back, home, app_switch, menu, enter, del, tab, space, escape, search, volume_up, volume_down, arrow_up/down/left/right, or a raw Android keycode integer.

get_clipboardB

Reads the current clipboard content.

set_clipboardC

Writes text to the device clipboard.

launch_appB

Launches an app by package name (and optional activity). Use list_installed_apps to find package names.

stop_appC

Force-stops an app by package name.

open_deep_linkB

Opens a deep link / URL (or intent). Use for URLs, market links, custom schemes.

list_installed_appsA

Lists installed packages. Returns a large list; grep it for the app you want.

list_filesB

Lists files in a directory on the device.

read_fileA

Reads a file from the device and returns its content base64-encoded as data URI. Decode it if you need the raw bytes.

write_fileB

Writes base64-encoded bytes to a file on the device (max ~4MB decoded).

delete_fileC

Deletes a file on the device.

set_overlay_offsetC

Adjusts the Portal floating-offset (only meaningful when the overlay is enabled).

is_overlay_visibleA

Returns whether the Portal overlay is currently visible.

install_apkA

Installs one or more APKs from URLs on the device (WebSocket required). Automatically accepts the install confirmation via the Portal.

set_keep_awakeB

Prevents the screen from sleeping while the connection is active (WebSocket required).

get_keep_awake_statusA

Returns whether screen keep-awake is currently active.

get_versionA

Returns the installed Portal app version.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.2/5.0

Scored across 30 tools

Disambiguation3/5

Several tools overlap: get_screen_state already includes element tree and phone state, making get_element_tree and get_phone_state potentially confusing; keyboard_key and press_global_action both handle back/home; tap vs tap_element and long_press vs long_press_element split the same action by target type. Descriptions clarify intended use, but an agent still faces multiple plausible choices.

Naming Consistency4/5

Names are consistently snake_case and mostly follow verb_noun or noun_verb patterns (get_screen_state, launch_app, tap_element). Minor deviations exist: keyboard_clear and keyboard_key put the noun first, and bare verbs tap/swipe/ping lack a noun. Overall readable and predictable.

Tool Count2/5

30 tools is high for a device-automation MCP and exceeds the typical 3-15 well-scoped range; several getters are redundant because get_screen_state already bundles element tree and phone state. This inflates surface area and increases selection cost.

Completeness4/5

The surface covers core device control well: screen inspection, taps/swipes, keyboard, global actions, apps, files, clipboard, overlay, and keep-awake. Minor gaps remain (e.g., pinch/zoom or multi-touch gestures, wait-for-idle), but agents can work around them with existing swipe/tap primitives.

Maintenance

ActivityMaintained
ResponsivenessNo issues