Manos MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
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
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_devicesA | List all available local devices (Android emulators/devices via adb, iOS simulators via simctl). Returns id, platform, name, OS version, and state. |
| inspect_screenA | Get the current screen's view hierarchy as compact JSON with stable element ids. Use the 'id' field with act tools (tap/input_text/...), or target by text/resource-id. Copy text verbatim — never retype from a screenshot. |
| take_screenshotA | Capture a PNG screenshot of the current device screen. |
| run_flowA | Run a Maestro flow (delegates to the maestro CLI). Provide exactly one of: yaml (inline), files (paths), or dir. Optional include_tags/exclude_tags (for dir) and env vars. |
| cheat_sheetA | Return Maestro flow syntax guidance and best practices for writing/exporting flows. |
| device_capabilitiesA | Report which actions are supported on a device (full/partial/unavailable) with the backend and any caveats. Check this before relying on a platform-specific action. |
| tapA | Tap an element (by id/text/resource_id/accessibility) or absolute coordinates. Returns the resulting screen state (act+observe) so you don't need a separate inspect call. |
| long_pressA | Long-press an element or coordinates for a duration (ms). |
| input_textA | Type text into the focused field. Optionally target a field first (id/text/resource_id) to tap it before typing. |
| press_keyA | Press a hardware/system key. Android: back, home, enter, tab, delete, search, menu, volume_up, volume_down, app_switch, power. iOS: enter, delete, tab, space, escape, home, lock, siri. |
| swipeA | Swipe by direction (up/down/left/right) or between two coordinate points. Direction swipes are centered on the screen. |
| assertA | Assert an element is visible or not visible on the current screen. Returns pass/fail without polling (use wait_for to wait). |
| wait_forB | Poll the screen until an element becomes visible or not_visible, or timeout. Replaces fixed sleeps — fast when ready, patient when not. |
| find_elementsA | Search the current screen for elements matching a query. Returns matching elements (id, bounds, text, etc.) — handy to disambiguate before acting. |
| find_textA | OCR the current screenshot and return on-screen text with pixel bounding boxes — finds elements the accessibility tree misses (styled buttons, canvas/Flutter/game UIs, WebViews). Optionally filter by a query. Tap a result with tap{text, ocr:true}. |
| launch_appA | Launch an app by bundle id (iOS) / package name (Android). Optionally clear state first. |
| stop_appC | Force-stop / terminate an app. |
| clear_app_stateA | Reset app state. Android: full data wipe (pm clear). iOS: resets permissions (full data wipe needs reinstall). |
| open_deeplinkB | Open a deep link / universal link URL on the device. |
| set_permissionA | Grant or revoke a runtime permission for an app. Aliases: camera, microphone, location, contacts, photos, notifications, calendar, etc. |
| set_appearanceB | Switch the system appearance between light and dark mode. |
| set_orientationA | Set device orientation (portrait, landscape-left, landscape-right, upside-down). Android only; iOS simulators must be rotated via the Simulator menu. |
| set_localeA | Set app locale (BCP-47, e.g. 'fr-FR'). Android: per-app, requires API 33+. iOS: applied by relaunching the app. Provide app_id. |
| set_networkA | Toggle wifi/cellular/airplane mode. Android only (emulator/device); iOS simulators share the host network (use Network Link Conditioner). |
| set_locationA | Set the simulated GPS location. Android: emulator only. iOS: any simulator. |
| set_font_scaleA | Set text size for accessibility testing. scale 1.0 = default. Android sets font_scale directly; iOS maps to the nearest Dynamic Type size. |
| set_status_barA | Override the status bar (time, battery, signal) for clean screenshots. iOS: rich (simctl). Android: clock/battery/signal via SystemUI demo mode. |
| push_notificationA | Deliver a push notification. iOS: injects an APNs payload via simctl push. Android: unavailable (needs FCM server key + token). |
| set_conditionsA | Apply multiple device conditions in one call — the edge-case states where bugs hide. Use a named preset and/or explicit fields (explicit overrides the preset). Each condition reports applied/skipped/failed (unsupported ones are skipped with a reason, not a failure). Presets: reset (Restore defaults: light mode, 1.0 text, online.); screenshot (Clean marketing state: light mode + a pristine 9:41 status bar.); accessibility (Accessibility stress: largest text + dark mode.); offline (No connectivity (airplane mode / radios off).); dark (Dark appearance.); international (Foreign locale (defaults to fr-FR; override with |
| get_logsA | Fetch recent device logs (Android logcat / iOS unified log) with automatic crash & ANR detection. Filter by app_id, substring, time window, and line cap. |
| a11y_auditA | Audit the current screen for accessibility issues: undersized touch targets, unlabeled interactive controls, and duplicate labels. (Color-contrast needs pixels and is not evaluated.) |
| network_startA | Capture decrypted HTTP, filtered to specific endpoints. Android: hooks OkHttp via Frida in a debuggable app (app_id required; needs frida-server). iOS simulator: routes the sim through mitmproxy with a simctl-trusted CA (app_id optional; temporarily sets the macOS proxy, restored on stop). |
| network_requestsA | Return captured HTTP exchanges (method, url, status). Compact by default; set include_headers/include_body for detail. Filter by URL regex and limit count to avoid flooding. |
| network_clearA | Clear the captured-request buffer without stopping the capture. |
| network_stopA | Stop capturing (detach Frida / stop mitmproxy and restore the macOS proxy). |
| network_mockA | Override API responses to test hard-to-reproduce states (Android). Each rule matches requests by URL regex (+ optional method) and can override the status/headers, replace the body, regex-rewrite the live body (change one field, keep the rest), or inject latency. First match wins; rules hot-reload; capture keeps logging (mocked exchanges flagged). Android (Frida/OkHttp): call network_start with app_id first — mocking rides the capture hook (abort not yet supported). iOS response mocking is in development (network_start still captures). |
| start_recordingA | Begin recording subsequent act tools as a session that can be exported to a replayable Maestro flow (export_flow) or an annotated HTML report (export_report). Set report=true to also screenshot after each action for the report. |
| stop_recordingA | Stop recording the current session (keeps recorded steps for export_flow). |
| export_flowA | Export the recorded session as a replayable Maestro flow (YAML) plus a human-readable report. Run it later with run_flow. |
| export_reportA | Write a self-contained HTML report of the recorded session — a step timeline with screenshots (if report capture was on) plus an appendix with the replayable flow, captured network requests, and recent logs/crashes. Returns the file path. Best with start_recording(report=true). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 40 tools
Each tool targets a distinct action or resource with clear boundaries (assert vs wait_for, find_elements vs find_text vs inspect_screen, network_start vs network_mock). Overlapping purposes are differentiated by polling vs non-polling, OCR vs accessibility tree, and capture vs mock.
Most tools follow a verb_noun pattern, but the network_* group reverses it (network_start, network_stop, network_mock, network_clear), and several noun-style names (device_capabilities, cheat_sheet, a11y_audit) break the convention. This mix is readable but not uniform.
With 40 tools, the server is well above the 25+ 'too many' threshold. While each tool has a distinct testing purpose, the count is unwieldy for a single server and could be split into focused subdomains (device, network, recording, etc.).
The tool set covers the core mobile testing lifecycle: app launch/stop, UI interaction and inspection, assertions/waits, device conditions, network capture/mocking, flow recording/export, logs, and accessibility. Minor gaps like missing install/uninstall and explicit device selection are workarounds, not dead ends.