Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ERIUS_PHONE_API_KEYYesYour ERIUS PHONE API key. Every request is authenticated with it and scoped to your account.
ERIUS_PHONE_API_URLNoAPI base URL. Default `https://api.eriusphone.com`; only set it if we gave you a different one.https://api.eriusphone.com
ERIUS_PHONE_TIMEOUTNoHTTP timeout per request, in seconds. Default `30`.30
ERIUS_PHONE_DEFAULT_DEVICENoThe device id to use when a tool call doesn't name one (e.g. `vanilla`). Without it, the agent passes `device` on each call; `list_devices` shows the ids.

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

Tools

Functions exposed to the LLM to take actions

NameDescription
list_devicesA

List every Android device your API key can access, with live status (booted, Android version, screen size). Call this first to get device ids.

whoamiA

Show which ERIUS PHONE account (tenant) and key id this server is using, and the device ids it can access. Handy to check the API key works.

get_deviceA

Get full status of one device: boot state, Android version, screen size, and the app currently in the foreground. Omit device to use the default.

snapshotA

Get an accessibility-tree snapshot of the current screen: every visible element with its text, role, and a ref id you can pass to tap/type/scroll. This is how the agent 'sees' the phone — read it before acting, and take a fresh one after any action since refs reset on every snapshot.

screenshotA

Take a screenshot of the device screen right now and return it as an image you can look at, plus one line of text with the image size and the device's real screen size.

The default is a JPEG whose longest side is 1024 px (tens of KB). A full-size PNG of a 1440x3120 phone is about 3 MB, which is more than many MCP clients accept in a tool result, so ask for it only when you need it: format="png", max_side=None.

format is "jpeg", "webp" or "png"; quality is 1-100 (jpeg/webp); max_side caps the longest side in pixels (64-8192); scale (0.1-1) shrinks by a factor instead. When the image is smaller than the screen, pass its size as image_width/image_height to tap(), long_press() or swipe() so x,y are read in the image's pixels. Prefer snapshot() when you only need text and refs: it's far smaller.

foregroundA

Get just the foreground app: package, activity, and whether a crash dialog is showing. Cheaper than a full snapshot when you only need this.

tapA

Tap an element. Prefer ref from a snapshot(), or text/content_desc to tap by visible label. Falls back to raw x,y pixel coordinates: in device pixels, or, with image_width and image_height, in the pixels of a screenshot of that size (the API maps the point to the screen).

long_pressA

Long-press an element (e.g. to open a context menu or start a drag). Targets work like tap(): ref, text/content_desc, or raw x,y (with image_width/image_height when they come from a scaled screenshot). ms (hold time, default 800) only applies to the x,y form.

type_textA

Type text into a field. Optionally tap a ref or text_target label first to focus the field, clear the existing value, or press Enter after. Keystrokes sent while the field is still opening are lost, so if tapping the field opens a new screen (e.g. a search page), tap it first, wait for it with snapshot() or wait_for_text(), then type with no target. Check the result with snapshot(). Only printable ASCII is supported (adb limitation).

press_keyB

Press a hardware/navigation key: back, home, enter, delete, tab, escape, up, down, left, right, space, power, volup, voldown, recent, menu, wakeup.

swipeB

Swipe from one point to another: in device pixel coordinates, or, with image_width and image_height, in the pixels of a screenshot of that size.

scrollA

Scroll a list/container up, down, left, or right. ref must be the ref of the scrollable container itself (a ScrollView or List line in the snapshot), not of a row inside it: scrolling a single row does nothing. If the container has no ref, use swipe() instead.

wait_for_textB

Wait until text appears somewhere on screen (e.g. after a slow screen transition), up to timeout_ms (max 120000). Returns the settled snapshot.

launch_appA

Launch an installed app by package name (e.g. com.android.chrome). Pass activity only if the app has no launcher activity resolvable automatically.

open_urlC

Open a URL (http/https/market) on the device, optionally forcing it into a specific app package (e.g. open a link in Chrome specifically).

send_intentB

Start an activity with an arbitrary Android intent (am start -a ACTION), e.g. action="android.settings.WIFI_SETTINGS" to jump straight to a settings page. component is "package/.Activity"; extras values become string, int or boolean extras by their type. Returns ok plus the new foreground app.

stop_appB

Force-stop a running app by package name.

list_appsB

List installed apps on the device. Set third_party_only=True to skip pre-installed system apps and see only user-installed ones.

uninstall_appC

Uninstall an app by package name.

get_crash_logA

Read the device's crash log buffer (logcat -b crash) — use this after an app crashes during QA testing to see the real stack trace.

install_apkA

Install an APK from a local file path on the machine running this MCP server (not on the phone) onto the device. Use this for APK QA testing — the real use case ERIUS PHONE is built for. Returns the parsed package info (name, version) and whether the install actually succeeded.

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 21 tools

Disambiguation4/5

Most tools map to clearly distinct device actions, and the descriptions proactively explain when to use alternatives (e.g. snapshot vs screenshot vs foreground, tap vs swipe vs scroll). Minor overlap exists: whoami and list_devices both surface device ids, and launch_app, open_url, and send_intent can all start an app/activity. Descriptions mostly resolve these, so an agent can usually pick the right one.

Naming Consistency4/5

All names are snake_case with a consistent convention and no style mixing. Most have a clear verb_noun form (get_device, launch_app, install_apk, wait_for_text), though several core interaction tools are bare nouns (snapshot, screenshot, foreground) or verbs (tap, swipe, scroll), which is a slight deviation.

Tool Count4/5

21 tools is on the heavier end but appropriate for a full device-automation/QA surface. Each tool corresponds to a real, distinct capability (input gestures, app lifecycle, inspection, crash logs). A few could theoretically be consolidated (whoami into list_devices) but nothing feels wasted.

Completeness4/5

Coverage is strong: device discovery, screen reading (snapshot/screenshot/foreground), all input gestures, app launch/install/uninstall, intents, URL opening, and crash logs are present. Minor gaps remain—no general logcat capture beyond crash buffer, and no file push/pull or clipboard for richer QA workflows.

Maintenance

ActivityMaintained
ResponsivenessOutdated data