Skip to main content

The MCP server

mobium mcp is an MCP server on stdio with 72 tools. Add it to a client's configuration — Claude Code, for one:

claude mcp add mobium -- mobium mcp

Or, in any client that reads a JSON configuration:

{
"mcpServers": {
"mobium": { "command": "mobium", "args": ["mcp"] }
}
}

Every tool takes device (a serial, when more than one is running) and driver besides its own arguments, and every schema is additionalProperties: false: an argument a tool does not declare is refused, not ignored. A tool that fails answers with isError and a structuredContent carrying its error's code, remedy, retryable and details — never a JSON-RPC error. Read-only tools say so with readOnlyHint. The MCP guide walks through a session.

Tools​

ToolRead-onlyWhat it does
app_accessibilityRead the device's accessibility settings, or change one for the rest of the session: reduce_motion, bold_text, increase_contrast, reduce_transparency, button_shapes, differentiate_without_color, invert_colors, grayscale, and text size — text_size, a named category, on iOS, and text_scale, a number, on Android.
app_alertRead a system dialog, or answer it with accept or dismiss.
app_appearanceRead the device's light/dark setting, or change it.
app_audityesRun the platform's own accessibility audit on the screen in front.
app_backgroundSend the app in front to the background for a number of seconds, then bring the same app back — resumed where it was, not relaunched — and confirm it is in front again.
app_batchRun several tools in order, on one device, in one call — a known sequence such as tap, type, tap, without a round trip for each.
app_batteryyesRead the battery: level in percent, whether it is charging, discharging, not charging or full, and on Android what it is plugged into.
app_biometricBiometrics on an emulator or simulator: read whether a face or finger is enrolled, enroll or unenroll one, and present a matching (match) or non-matching (nomatch) one to a prompt that is up.
app_bootStart an Android emulator by its AVD's name, or an iOS simulator by its name or UDID, and wait until it has booted — adb sees it and Android says boot completed, or simctl's boot status returns — answering with its serial or UDID.
app_callSimulate an incoming call: "ring", then "accept" or "hang".
app_checkPut a checkbox or switch into a state, rather than toggling whatever it is in.
app_clear_dataDelete an app's data and leave it installed — the state of a fresh install, without reinstalling.
app_clipboardRead the device clipboard, or write it by passing text.
app_contextSwitch between the native shell and a WebView, or report the current context when called with no argument.
app_contextsyesList the automatable contexts on the device: the native shell plus any debuggable WebViews.
app_cookiesRead, set or clear the current WebView's cookies — the ones its page's URL is sent, HttpOnly ones included, which document.cookie cannot see.
app_crashesyesThe crashes the device recorded — Java exceptions, native signals and apps that stopped responding — newest first, with the line worth reading first.
app_currentyesReport the app currently in the foreground, as a package name or bundle id.
app_devicesyesList running Android emulators and devices and iOS simulators, with their serial or UDID, state and model.
app_dialogsDeclare how to answer a dialog, so an action that meets it carries on: when a dialog whose text contains when is in the way of a tap, a type or any action with a target, the button captioned press is pressed, the dialog is confirmed gone, and the action continues — and its result says which dialog was answered.
app_doctoryesCheck that the environment mobium needs is present, and say what is wrong with it.
app_downloadyesBring back a file from where the device keeps downloads — Android's shared Download folder, or on iOS an app's own Documents — to check what an app saved.
app_dragDrag and drop: press something, hold until it is picked up, carry it, and release.
app_evalRun a JavaScript expression in the current WebView and return its value as a string.
app_fillClear a specific element and type text into it, replacing what it held — Vibium's fill; app_type adds to it instead.
app_findyesFind elements matching a locator and return their refs, without tapping.
app_grantGrant an app's permissions up front, so a first-launch permission dialog never appears to block the flow.
app_hit_testyesAsk the platform's own hit test, below accessibility, whether a touch at the point app_tap would use reaches the target — and if not, what it would reach.
app_hookCall a hook the app registered with Mobium's gray-box library, by name, and return what it answered — sign in, seed data, raise a toast: state set up without walking the UI.
app_installInstall an app from a local .apk (Android) or .app bundle (iOS).
app_keyboardThe soft keyboard: whether it is up and which field has focus, typing at that field's cursor, pressing a named key, or hiding it.
app_launchBring an app to the foreground, starting it if it is not running.
app_list_appsyesList the apps installed on the device, with their id, version and whether they came with the platform.
app_localeRead or set the language one app runs in.
app_locationRead where the device believes it is, or place it somewhere.
app_lockRead whether the screen is locked, or lock and unlock it.
app_logsyesRead a log: the current WebView's console, or the device's own log (logcat on Android, the unified log on an iOS simulator, and on a real iPhone what the session has captured since it started — a phone keeps no history).
app_long_pressPress and hold an element or a point — the gesture that opens context menus and starts drag-and-drop.
app_mapyesMap the actionable elements on the current screen and return them as refs (@e1, @e2, ...) with a label and role.
app_networkRead or set the device's network conditions: offline, latency and bandwidth.
app_notificationsRead the notification shade, post a notification to it, or open it.
app_open_urlOpen a URL or deep link on the device — the quickest way to reach a specific screen without tapping through to it.
app_orientationRead which way the screen is turned, or turn it.
app_pressPress a hardware button.
app_press_dragPress and drag: one finger holds an element while a second finger drags from one place to another, and the first lifts only after the second has.
app_press_tapPress and tap: one finger holds an element while a second finger taps another, and the first lifts only after the second has.
app_recordRecord the screen to a video: start, stop with a path to save it, or omit the action to ask whether a recording is running.
app_reset_permissionsPut permissions back to asking, so the app prompts again on next use.
app_revokeDeny an app's permissions, to test how it behaves without them.
app_rotateTurn two fingers about an element or the middle of the screen.
app_screenRead the screen, or make an Android device pretend to be a different one, and optionally report what is wrong with the layout at that size.
app_screenshotyesCapture the device screen as a PNG.
app_scroll_toScroll until an element is on screen — all of it, when it fits — then return it with a ref.
app_sessionStart or end the session on a device.
app_shakeShake the device — what shake-to-undo, shake-to-report and a debug menu listen for.
app_shutdownShut down an emulator or a simulator, after ending this daemon's session on it — the order that leaves nothing driving a device that is going away — and wait until it is gone.
app_smsDeliver a simulated text message, to see what an app does when one arrives mid-flow.
app_sourceyesThe raw hierarchy, as the device-side server sent it: UiAutomator2's or uiautomator's XML on Android, WebDriverAgent's on iOS, and in a WebView context the page's current markup: the page source.
app_stateyesWhat state one app is in: not_installed, not_running, background or foreground — for any app, where app_current names only the one in front.
app_storageSave, restore or clear the current WebView's storage state: its cookies and its origin's localStorage and sessionStorage, in the shape Vibium saves — {cookies, origins: [{origin, localStorage, sessionStorage}]} — so a state saved by one restores in the other.
app_swipeSwipe the screen.
app_tapTap an element.
app_terminateStop a running app.
app_textyesRead text from the screen.
app_timeyesWhat time the device thinks it is, in its own zone — what a clock-dependent screen shows, and what a test of scheduling or a timezone change checks against.
app_timezoneRead the device timezone, or change it.
app_traceRecord a session as a trace: start, then every call on this device is a step — before and after, the point an action touched, a failure's error — and after each the screen, with the map's elements drawn over it; stop with a path saves a zip in Vibium's record format, which player.vibium.dev opens.
app_typeType text into a specific element, after what it already holds; app_fill replaces it instead.
app_uninstallRemove an app from the device.
app_uploadPut a file from this machine where the device keeps downloads, so an app's file picker finds it: Android's shared Download folder, or on iOS an app's own Documents folder, which the Files app shows under On My iPhone.
app_wait_foryesWait until an element appears, disappears, shows particular text, or reaches a state — enabled, checked, focused, holding a value — then return.
app_zoomPinch two fingers apart or together, about an element or the middle of the screen.