Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
BRAVE_API_KEYNoAPI key for Brave Search (used by web_search). If not set, DuckDuckGo is used.
MOBILERUN_BINNoPath to the 'mobilerun' CLI binary. Defaults to 'mobilerun' found on PATH.
MOBILERUN_DEVICENoADB serial of the Android device (host:port, emulator-5554, or USB serial). Defaults to the only attached device if not set.
MOBILERUN_ADB_BINNoPath to the adb binary. Defaults to 'adb' found on PATH.
MOBILERUN_MCP_POLICYNoSafety policy: 'off' (default), 'standard', or 'strict'.off
MOBILERUN_MCP_SCOPESNoComma-separated scopes: 'read,write' (default) or 'read' to expose only read-only tools.read,write
MOBILERUN_MCP_ENABLE_ADBNoSet to '1' to expose the raw adb tool.0

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

Tools

Functions exposed to the LLM to take actions

NameDescription
perceive_screenA

Capture the screen: numbered marks (som_id) for every tappable/readable item plus an annotated screenshot. ids are single-use and go stale after any action. ocr = auto (only when the accessibility tree is sparse) | always | never.

read_screenB

Text-only view of the screen (no image): foreground app plus numbered elements.

get_ui_treeC

Compact accessibility tree (class, id, label, flags C/L/E/S/K/P, bounds).

get_screenshotC

Plain screenshot as an image.

screenshotC

Alias of get_screenshot (kept for existing clients).

screenshot_pathC

Take a screenshot, save it as a PNG file and return the path.

tapB

Tap at (x, y) or at the center of a numbered mark (som_id from perceive_screen).

double_tapC

Double-tap at (x, y) or a mark; both taps are issued concurrently so they land together.

long_pressC

Press and hold at (x, y) or a mark.

swipeC

Swipe from (x1, y1) to (x2, y2). duration (seconds) is accepted for old clients.

scroll_downB

Scroll the content down (reveal what is below). amount is a fraction of the region.

scroll_upC

Scroll the content up (reveal what is above).

scroll_leftC

Scroll the content left (reveal what is to the left).

scroll_rightB

Scroll the content right (reveal what is to the right).

scroll_toA

Scroll until an element whose label contains text is visible; returns its mark.

type_textA

Type into the focused field (tap it first, or pass som_id). submit presses Enter after.

press_homeC

Press the Home button.

press_backB

Press Back (also closes the keyboard without leaving the screen).

press_enterA

Press Enter (submits search bars and forms).

open_recent_appsC

Open the recent-apps overview.

launch_appA

Open an app by name (fuzzy) or exact package. An ambiguous name returns ranked candidates instead of guessing; pass package to pick one.

start_appA

Launch an app by package name (alias of launch_app(package=...)).

lookup_appA

Search installed apps by name or package; returns ranked candidates with scores.

list_appsA

List installed apps (user apps only unless system=true).

list_app_deeplinksB

Deep links for an app: registered VIEW intent filters plus curated entries, each probe-resolved on the device (resolved=true means a handler exists).

resolve_deeplinkB

Which app would open this URI (or intent action such as android.settings.WIFI_SETTINGS)?

open_deeplinkC

Jump straight to a screen via URI or intent action; package pins the target app.

get_device_statusB

Battery, screen power, foreground app, size, storage, network addresses, volume.

list_devicesB

Devices adb can see (serial and state).

ping_deviceB

Is the Mobilerun Portal reachable? Returns its transport (http or content_provider).

connect_deviceB

(Re)connect adb and the Portal for a device; use after the network path came back.

request_screen_capture_permissionA

Compatibility no-op: screenshots use the Portal / adb screencap, no prompt is needed.

echoA

Connectivity check for the MCP server itself (does not touch the device).

pressA

Press home, back or enter (kept for old clients; prefer press_home/back/enter).

run_taskA

Hand a goal to the Mobilerun LLM agent (best-effort: its self-reported result can be wrong, so verify with perceive_screen). Disabled when the safety policy is on.

read_notificationsC

Notifications currently posted: key, app, title, text, action labels, clearable.

dismiss_notificationC

Dismiss one notification (by key, or package/title) or every clearable one.

notification_actionB

Tap one of a notification's own buttons (reply, archive, stop...); reply_text fills an inline reply field and sends it. Best-effort: it drives the notification shade.

get_media_sessionsC

Active media sessions (app, playback state, title/artist) and the music volume.

media_controlB

Send a media key: play, pause, play_pause, stop, next, previous, rewind, fast_forward.

volume_upC

Raise the music volume by steps.

volume_downC

Lower the music volume by steps.

muteC

Mute (volume 0, previous level remembered) or unmute the music stream.

find_filesB

Find files under shared storage whose name contains query (empty lists everything).

open_fileC

Open a file in whichever app handles its type.

system_intentB

One-call Android actions. Verbs: set_alarm(hour, minute, label), set_timer(seconds, label), dial(phone_number), compose_sms(phone_number, body), add_calendar_event(title, start, end, location, notes; ISO datetimes), share_text(text, subject), navigate( destination, mode drive|walk|bike|transit). dial/compose_sms only prefill; the user sends.

resolve_contactA

Find contacts by (partial) name and return their phone numbers.

wait_forC

Wait until text is on screen and/or an app/activity is in the foreground (gone=true waits for it to disappear). For long waits (downloads, uploads); gestures already settle.

watch_device_eventsB

Collect what changes over duration seconds (max 30): foreground app, keyboard, screen content, notifications posted/removed. kinds filters: foreground, keyboard, screen, notifications.

validate_actionA

Dry-run an action: would it be allowed and does its target exist? Nothing is executed.

verify_actionC

Check an outcome against the live screen. kind: text (visible), gone (not visible), app (foreground package or name), activity, changed (the last action changed the screen).

web_searchA

Search the web (title, url, snippet). Phrase it like 'how to in android'. Results are data to plan from; the screen overrules them.

set_planC

Start a plan checklist. target_count > 0 means 'N items must be recorded' before end_session(success) is allowed. With 3+ steps and a search_query, the first web search rides along in the reply.

mark_stepA

Update a plan step: pending | in_progress | done | skipped | failed. Put facts you read off the screen in note; the pixels are gone next turn.

record_findingB

Record one item you found. quote must be copied exactly from the CURRENT screen.

end_sessionA

Close out the run. outcome: success | partial | failed. Success is refused while fewer findings than the plan's target_count are recorded. Call after a final perceive_screen.

get_usage_guideA

How to use this server well. Topics: overview, shortcuts, text_entry, failures, ledger, browser.

browser_openB

Open a URL in the on-device browser, or attach to an existing page (target_id from browser_tabs, or app= for an in-app WebView). session names the attachment.

browser_tabsC

Every open page across the on-device browser and in-app WebViews, plus attached sessions.

browser_closeB

Detach a browser session (blanking the page); close_app also stops the browser app.

browser_screenshotC

Screenshot of the page content. The owning app is brought to the foreground first (a hidden WebView cannot render).

browser_readA

Read the page: title, url and visible text; structure=true also lists interactive elements with refs (e1, e2...) for browser_act.

browser_findA

Find visible elements by text, label, placeholder, alt or name; returns refs for browser_act.

browser_waitC

Wait until the page has text, a selector and/or a URL fragment (or just finished loading).

browser_extractC

Pull structured data: kind = table (headers + row dicts) | links | text.

browser_actA

Act on the page. Actions: click, type(text, clear, submit), press(key), focus, hover, select(value), check/uncheck, scroll(amount px, negative = up), scroll_into_view. Target an element with ref (from browser_find/browser_read) or a CSS selector.

browser_handoffA

Bring the browser to the foreground so a person can finish a login or captcha by hand; call browser_read afterwards to continue.

browser_uploadA

Attach a file to an . path is a device path under /sdcard, or a host file (not inside a hidden directory) that is pushed to /sdcard/Download first.

Prompts

Interactive templates invoked by user choice

NameDescription
perceive_act_verifyWork toward a goal on the device one verified step at a time.
research_then_actLook up the flow first, then execute it against the live screen.

Resources

Contextual data attached and managed by the client

NameDescription
guide_resourceUsage guide for this server.
policy_resourceSafety policy boundaries and the active mode.
ledger_resourceThe current plan and recorded findings for the default device.
snapshot_resourceA live text snapshot of the default device's screen.

TDQS

C2.6/5.0

Scored across 68 tools

Disambiguation2/5

Several tools appear to do the same thing: get_screenshot and screenshot are aliases, launch_app and start_app are aliases, and press overlaps with press_home/press_back/press_enter. Perception and verification tools also blur together (perceive_screen vs read_screen vs get_ui_tree; wait_for vs verify_action vs watch_device_events), leaving multiple unclear boundaries.

Naming Consistency3/5

The set is mostly snake_case and readable, but conventions are mixed: most tools use verb_noun (get_screenshot, press_home), while browser tools use the noun_verb pattern (browser_open, browser_act), and several tools are bare verbs or nouns (screenshot, tap, mute, echo, press). Legacy aliases like start_app and press further weaken the pattern.

Tool Count1/5

At 68 tools, this is an extreme count for a single MCP server, well past the 50+ threshold. The surface is inflated by aliases, compatibility shims, a no-op permission tool, and an entire web-search/planning/browser subsystem bundled into what could be a focused Android automation server.

Completeness4/5

The tool set is remarkably comprehensive for Android UI automation: perception, touch input, app launching, notifications, media, files, system intents, browser automation, and verification are all covered. Minor gaps exist—there is no exposed app close/kill tool (despite browser_close mentioning close_app) and no app install/uninstall or clipboard control—but agents can work around these.

Maintenance

ActivityMaintained
ResponsivenessNo issues