Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

MCP Appium - Mobile Development and Automation Server

NPM · APPIUM-MCP · SCANNED SEP 22

MCP server for Appium mobile automation on iOS and Android devices with test creation tools.

Available components

−1 this week 83 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security85
  • No malware found by supply-chain analysis.Pass
  • CVE check failed: a known high-severity CVE affects js-yaml 4.1.0, reached via applesign > mocha > js-yaml. A fixed version is available. View diagnostics → Fail
  • No install/post-install scripts declared.Pass
  • Dependency health was assessed across the 400 of 672 dependencies we could resolve, so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency71
  • Repository check failed: no source repository is declared. See how to fix → View diagnostics → Fail
  • Cryptographically verified build provenance (signed, bound to appium/appium-mcp). View diagnostics → Pass
  • Clear OSI-approved license (Apache-2.0).Pass
  • Actively maintained (last published 1 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability78
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 6834 tokens (~195/item across 35 items; 31 tools + 4 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management93
  • Stability observed for 28 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "appium_drag_and_drop" implies "drop" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 33 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
  • Supports UI / widget rendering.Pass
Install

How do I install the MCP Appium - Mobile Development and Automation Server server?

MCP Appium - Mobile Development and Automation Server runs locally as an npm package, launched with npx -y appium-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · appium-mcp

# add to Claude Code
claude mcp add appium-appium-mcp -- npx -y appium-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "appium-appium-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "appium-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "appium-appium-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "appium-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add appium-appium-mcp -- npx -y appium-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "appium-appium-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "appium-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add appium-appium-mcp --command npx --arg -y --arg appium-mcp
# ~/.hermes/config.yaml
mcp_servers:
  appium-appium-mcp:
    command: "npx"
    args: ["-y", "appium-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "appium-appium-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "appium-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add appium-appium-mcp -t stdio -c npx -a -y appium-mcp
// mcp.json
{
  "mcpServers": {
    "appium-appium-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "appium-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 21 Sept 26 −1
    • Stability: pass → 0.90 functional
  • 20 Sept 26 0
    • Stability: 0.97 → pass security
  • 19 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 17 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.

  • 16 Sept 26 −2
    • Stability: pass → 0.87 functional
  • 14 Sept 26 0
    • Stability: 0.97 → pass security
  • 13 Sept 26 0
    • Stability: pass → 0.97 functional
  • 11 Sept 26 0
    • Stability: 0.97 → pass security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 22 Sept 2026 · Analysed npm/appium-mcp@1.94.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo appium/appium-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/appium/appium-mcp/.github/workflows/publish.yml@refs/heads/main
Rekor log index 2778008978
Predicate type https://slsa.dev/provenance/v1
Subject digest sha512:a918466234d3121e5dfd8a7d706211d3f9a729241e1e6afa353ba281eb6b51883fa693fff8e074c91602d771cb73f1ae6da21ef8c9600aea7ca95bc16

Background: How many MCP packages publish verified provenance →

Vulnerabilities 18 findings
ID CVE Severity Vector Fix available
GHSA-73rr-hh4g-fpgx CVE-2026-24001 low yes
GHSA-2883-xcg3-v3hh CVE-2026-84375 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H yes
GHSA-52cp-r559-cp3m CVE-2026-59869 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H yes
GHSA-5p4m-2wfm-xmqj high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H yes
GHSA-h67p-54hq-rp68 CVE-2026-53550 medium CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L yes
GHSA-mh29-5h37-fv8m CVE-2025-64718 medium CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N yes
GHSA-23c5-xmqv-rm74 CVE-2026-27904 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H yes
GHSA-3ppc-4f35-3m26 CVE-2026-26996 high yes
GHSA-7r86-cg39-jmmj CVE-2026-27903 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H yes
GHSA-jxfw-x594-9x9m CVE-2026-15603 medium CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N yes
GHSA-28wg-ghj8-5hjv CVE-2026-67214 medium CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H yes
GHSA-2v37-7h3g-55p8 CVE-2026-67213 medium CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H yes
GHSA-mwcw-c2x4-8c55 CVE-2024-55565 medium CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N yes
GHSA-xwg4-73v4-xw9w CVE-2026-73086 high CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N yes
GHSA-5c6j-r48x-rmvq high CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H yes
GHSA-76p7-773f-r4q5 CVE-2024-11831 medium CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N yes
GHSA-qj8w-gfj5-8c6v CVE-2026-34043 medium CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H yes
GHSA-w5hq-g745-h8pq CVE-2026-41907 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N yes

Background: What a vulnerability scan can and cannot prove →

Dependencies 400 packages
Packages resolved 400
Deprecated 5
Stale 118
Tree resolution Partial

The dependency tree was only partially resolved, so these counts may be incomplete.

Background: SBOMs and build attestations, explained →

MCP tools · 31 exposed · ~6,463 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
appium_alert ~83

Handle system alerts with action=accept|dismiss, or read alert text with action=get_text.

NameTypeReqDescription
actionstringyesAction to perform on alert: accept, dismiss, or get_text
buttonLabelstringOptional label of the button to click for accept/dismiss.
sessionIdstringSession ID; defaults to the active session.

No output schema declared.

No examples provided.

appium_app_lifecycle ~318

Manage app lifecycle, installation, state, data, and deep links.

NameTypeReqDescription
actionstringyesactivate: foreground app; terminate: stop app; is_installed: check installation; clear: clear app data without uninstalling (all require id or name). install: requires path. uninstall: requires id/na…
applicationTypestringiOS list filter: User (default) or System.
idstringAndroid package or iOS bundle ID; takes precedence over name.
keepDatabooleanAndroid uninstall: preserve app data and cache.
namestringHuman-readable app name resolved to an ID; alternative to id.
pathstringApp file path; required for install.
secondsnumberBackground duration; default 5. Use -1 to remain in background.
sessionIdstringSession ID; defaults to the active session.
urlstringURL for deep_link (e.g. https://example.com or myapp://path).
waitForLaunchbooleanAndroid deep_link: wait for the activity to return; default true.

No output schema declared.

No examples provided.

appium_context ~97

Manage Appium contexts with one tool. action=list returns all contexts and current context. action=switch changes to a target context.

NameTypeReqDescription
actionstringyesUse list to fetch contexts or switch to change context.
contextstringRequired when action is switch. Common values: NATIVE_APP or WEBVIEW_<id>/WEBVIEW_<package>.
sessionIdstringSession ID; defaults to the active session.

No output schema declared.

No examples provided.

appium_drag_and_drop ~278

Perform a drag-and-drop gesture from a source location to a target location. The gesture: long press the source (default 600ms), drag to the target (default 1200ms), then release. Source and target can each be specified as either an element UUID or coordinates. Useful for reordering lists, moving items, drag-to-delete.

NameTypeReqDescription
durationintegerDuration of the drag movement in milliseconds. Default 1200.
longPressDurationintegerDuration of the long press before dragging in milliseconds. Default 600.
sessionIdstringSession ID; defaults to the active session.
sourceElementUUIDstringUUID of source element to drag from. Either sourceElementUUID or sourceX+sourceY must be provided.
sourceXintegerSource X coordinate. Required if sourceElementUUID is not provided.
sourceYintegerSource Y coordinate. Required if sourceElementUUID is not provided.
targetElementUUIDstringUUID of target element to drop on. Either targetElementUUID or targetX+targetY must be provided.
targetXintegerTarget X coordinate. Required if targetElementUUID is not provided.
targetYintegerTarget Y coordinate. Required if targetElementUUID is not provided.

No output schema declared.

No examples provided.

appium_driver_settings ~180

Read or update Appium driver session settings (e.g. idle timeouts, selector waits). Use action=get to return JSON settings; action=update merges a map into the session. Works for embedded UiAutomator2/XCUITest sessions and remote WebDriver clients that support Appium settings.

NameTypeReqDescription
actionstringyesget: read current Appium driver session settings (timeouts, selector waits, flags). update: merge a settings map into the session (requires settings).
sessionIdstringSession ID; defaults to the active session.
settingsobjectRequired when action is update. Driver-specific keys (e.g. Android UiAutomator2: waitForIdleTimeout, waitForSelectorTimeout, ignoreUnimportantViews; iOS XCUITest has its own set). Use action=get firs…

No output schema declared.

No examples provided.

appium_find_element ~369

Find an element by strategy and selector; the primary tool for locating a specific target. Returns its ID for interactions. Pass that ID as elementUUID to interaction tools. Prefer accessibility id > id > platform-native > xpath (last resort: slow/brittle). See strategy for platform-specific guidance. To scroll until a target is found, use appium_gesture action=scroll_to_element with the same strategy and selector, rather than repeatedly calling this tool. For natural-language/vision finding, use appium_ai action=find_element if enabled and stable locators do not work.

NameTypeReqDescription
selectorstringyesSelector string for the chosen strategy. Do not pass natural-language descriptions of the target here; use appium_ai action=find_element if enabled for vision-based finding.
sessionIdstringSession ID; defaults to the active session.
strategystringyesLocator strategy. Prefer stable identifiers, then platform-native queries; xpath is the last resort. - accessibility id: cross-platform, fast and stable when available. - id: Android resource-id; an…

No output schema declared.

No examples provided.

appium_generate_tests ~55

Return a workflow to execute the scenario with MCP tools, then generate test code from observed interactions. Prefer appium_find_element; generate_locators is for broad inspection.

NameTypeReqDescription
stepsarrayyesThe steps of the test

No output schema declared.

No examples provided.

appium_geolocation ~292

Get, set, or reset the device geolocation (GPS coordinates). Works on both iOS (simulators and real devices) and Android (emulators and real devices with mock location enabled). Use action=get to read current coordinates, action=set with latitude/longitude (and optional altitude for Android) to simulate a location, or action=reset to restore the system default. Note: On Android emulators, reset is not supported — use action=set to manually restore coordinates instead. On Android real devices, the mocked location may persist until the GPS cache refreshes.

NameTypeReqDescription
actionstringyesAction to perform. get: read the current device geolocation. set: set the device geolocation (requires latitude and longitude; optional altitude for Android). reset: reset the geolocation to the defa…
altitudenumberAltitude value in meters. Android only, defaults to 0. Ignored on iOS. Used with: set.
latitudenumberLatitude value (-90 to 90). Measurement of distance north or south of the Equator. Required for: set.
longitudenumberLongitude value (-180 to 180). Measurement of distance east or west of the prime meridian. Required for: set.
sessionIdstringSession ID; defaults to the active session.

No output schema declared.

No examples provided.

appium_gesture ~1,085

Perform a touch gesture. Use 'action' to choose: tap, double_tap, long_press, scroll, swipe, pinch_zoom, scroll_to_element, back. Choose scroll vs swipe by intent: scroll to browse content in a list or feed; swipe to dismiss, switch screens, navigate carousels, or pull-to-refresh (speed=fast). For drag-and-drop use appium_drag_and_drop. For custom multi-touch use appium_perform_actions.

NameTypeReqDescription
actionstringyesGesture to perform: - tap: tap an element or a coordinate. - double_tap: double-tap, for example to zoom an image or favorite a post. - long_press: press and hold to open a context menu or initiate a…
directionstringDirection for scroll/swipe. Coordinates are calculated from the screen or element bounds. Provide either direction or custom coordinates (x, y, endX, endY); direction takes precedence if both are giv…
durationintegerDuration in milliseconds. long_press defaults to 2000 (range 500–10000); scroll defaults to 800. For swipe, prefer speed unless a custom movement duration is needed. For W3C swipe, overrides movement…
elementUUIDstringElement UUID for tap, double_tap, long_press, or pinch_zoom; overrides x/y for these actions. For scroll/swipe with direction, coordinates are calculated relative to this element instead of the whole…
endXintegerEnding X coordinate in pixels for scroll/swipe; requires x, y, endY.
endYintegerEnding Y coordinate in pixels for scroll/swipe; requires x, y, endX.
maxScrollAttemptsintegerscroll_to_element only: maximum scroll attempts after the initial lookup fails. Default 10.
scalenumberRequired for pinch_zoom. Scale < 1 zooms out (fingers close); scale > 1 zooms in (fingers spread). Examples: 0.5 zooms out; 2.0 zooms in 2x.
scrollDistancenumberscroll_to_element only: vertical swipe distance fraction (0.05–1). Ignored when scrollDistancePreset is set. Default 0.45 when neither option is supplied.
scrollDistancePresetstringscroll_to_element only: small is a light nudge (0.25), medium is 0.45, large is the full default swipe (1). Overrides scrollDistance when set.
selectorstringLocator selector value. Required for: scroll_to_element.
sessionIdstringSession ID; defaults to the active session.
speedstringSwipe only. slow: deliberate drag; normal: default navigation speed; fast: flick without an initial hold. Use fast for pull-to-refresh and other velocity-sensitive interfaces.
strategystringRequired for scroll_to_element. Prefer accessibility id > id > platform-native (iOS: -ios predicate string / -ios class chain; Android: -android uiautomator) > xpath (last resort: slow/brittle). name…
velocitynumberPinch velocity in scale factor per second. Default 2.2. Used by pinch_zoom.
xintegerX coordinate in pixels. For tap/double_tap/long_press: tap location, paired with y. For scroll/swipe: starting X in custom-coordinate mode; requires y, endX, endY. For pinch_zoom: center X, paired wi…
yintegerY coordinate in pixels, paired with x. For tap/double_tap/long_press: tap location. For scroll/swipe: starting Y in custom-coordinate mode. For pinch_zoom: center Y. The same elementUUID precedence a…

No output schema declared.

No examples provided.

appium_get_active_element ~64

Get the currently active/focused element and return its UUID for follow-up interactions. [PRIORITY 1: Use this first when you need to find what element currently has focus]

NameTypeReqDescription
sessionIdstringSession ID; defaults to the active session.

No output schema declared.

No examples provided.

appium_get_element_attribute ~156

Get the value of an element attribute. Use this to check element state (enabled, selected, checked, focused, displayed, clickable) or read properties (name, value, label, content-desc, resource-id, class).

NameTypeReqDescription
attributestringyesThe attribute name to retrieve. Common attributes: "enabled", "selected", "displayed", "checked", "focused", "clickable", "scrollable", "focusable", "name", "value", "label", "text", "content-desc",…
elementUUIDstringyesElement ID from appium_find_element.
sessionIdstringSession ID; defaults to the active session.

No output schema declared.

No examples provided.

appium_get_page_source ~39

Get the page source (XML) from the current screen

NameTypeReqDescription
sessionIdstringSession ID; defaults to the active session.

No output schema declared.

No examples provided.

appium_get_text ~47

Get text from an element

NameTypeReqDescription
elementUUIDstringyesElement ID from appium_find_element.
sessionIdstringSession ID; defaults to the active session.

No output schema declared.

No examples provided.

appium_get_window_size ~53

Get the width and height of the device screen in pixels. Useful for calculating coordinates for swipes, taps, and scrolls.

NameTypeReqDescription
sessionIdstringSession ID; defaults to the active session.

No output schema declared.

No examples provided.

appium_mobile_clipboard ~104

Read or set the device clipboard as plain text (Android UiAutomator2 / iOS XCUITest). action=get returns current text; action=set requires content.

NameTypeReqDescription
actionstringyesget: read device clipboard as plain text. set: write plain text to the clipboard.
contentstringRequired when action is set. Plain text to put on the clipboard.
sessionIdstringSession ID; defaults to the active session.

No output schema declared.

No examples provided.

appium_mobile_device_control ~134

Control device behavior: lock/unlock the screen, shake the device, or open the notifications panel. Use the action parameter to choose what to do.

NameTypeReqDescription
actionstringyesAction to perform. lock: lock the device (optional seconds for timed lock). unlock: unlock the device. shake: perform shake gesture (iOS only). open_notifications: open notifications panel (Android o…
secondsintegerOnly for action=lock: lock duration in seconds before auto-unlock. Omit to remain locked until unlock.
sessionIdstringSession ID; defaults to the active session.

No output schema declared.

No examples provided.

appium_mobile_device_info ~144

Get device information, battery status, or current device time in a single call. Use the "action" parameter to select which data to retrieve. Works on both iOS and Android.

NameTypeReqDescription
actionstringyesAction to perform: "info" returns device model/OS/locale/etc., "battery" returns battery level and charging state, "time" returns the current device time.
formatstringOnly used when action is "time". moment.js format string for the returned time. Defaults to ISO 8601 (YYYY-MM-DDTHH:mm:ssZ).
sessionIdstringSession ID; defaults to the active session.

No output schema declared.

No examples provided.

appium_mobile_file ~175

Push or pull a file using Appium mobile extensions. action=push uses payloadBase64, action=pull returns contentBase64.

NameTypeReqDescription
actionstringyespush uploads a file to device; pull downloads from device.
payloadBase64stringRequired when action=push. Ignored when action=pull.
remotePathstringyesPath to the file on the device. Android (UiAutomator2): use an absolute path (e.g. /data/local/tmp/foo.txt or /sdcard/Download/foo.txt). iOS (XCUITest): use the formats described in the Appium XCUITe…
sessionIdstringSession ID; defaults to the active session.

No output schema declared.

No examples provided.

appium_mobile_keyboard ~144

Hide the software keyboard or check if it is visible (Android UiAutomator2 / iOS XCUITest). action=hide uses mobile: hideKeyboard; action=is_shown uses mobile: isKeyboardShown.

NameTypeReqDescription
actionstringyeshide: dismiss the software keyboard (mobile: hideKeyboard). is_shown: whether the keyboard is visible (mobile: isKeyboardShown).
keysarrayhide only: optional key names to dismiss the keyboard (e.g. "done"). Forwarded to mobile: hideKeyboard when non-empty. Ignored for is_shown.
sessionIdstringSession ID; defaults to the active session.

No output schema declared.

No examples provided.

appium_mobile_permissions ~340

Get/update Android app permissions or iOS Simulator privacy services; reset iOS privacy prompts. See action-specific parameters.

NameTypeReqDescription
accessobjectiOS update only: map of access rule → yes|no|unset|limited (Simulator + AppleSimulatorUtils). Required for iOS update.
actionstringyesget: list (Android) or read one privacy state (iOS Simulator). update: grant/revoke (Android) or set privacy map (iOS Simulator). reset: restore a privacy prompt for the app under test (iOS only).
idstringApp ID; overrides name. Android defaults to the app under test; required for iOS get/update.
namestringApp name resolved to an ID. Android defaults to the app under test; alternative to id for iOS get/update.
permissionChangeActionstringAndroid update: for pm target grant (default) or revoke; for appops allow, deny, ignore, default.
permissionFilterstringAndroid get only: which bucket to return. Defaults to requested per UiAutomator2.
permissionsAndroid update only: permission name(s), `all` (with pm target), or appops names. Required for Android update.
servicestring|numberiOS get: privacy service name (e.g. camera, microphone, photos). iOS reset: service name or numeric XCUIProtectedResource id.
sessionIdstringSession ID; defaults to the active session.
targetstringAndroid update: pm (default) or appops.

No output schema declared.

No examples provided.

appium_mobile_press_key ~157

Press navigation keys (BACK, HOME, APP_SWITCH) on Android or physical buttons (HOME, volume, etc.) on iOS/tvOS.

NameTypeReqDescription
isLongPressbooleanAndroid only. Whether to perform a long press. Defaults to false.
keystringLogical key/button to press. On Android: BACK, HOME, APP_SWITCH. On iOS/tvOS: HOME, VOLUME_UP, VOLUME_DOWN, UP, DOWN, LEFT, RIGHT, MENU, PLAY_PAUSE, SELECT.
keyCodeintegerAndroid keycode to press. If provided, takes precedence over key for Android.
sessionIdstringSession ID; defaults to the active session.

No output schema declared.

No examples provided.

appium_orientation ~79

Get or set the device/screen orientation. Supports action=get and action=set (LANDSCAPE or PORTRAIT).

NameTypeReqDescription
actionstringyesUse get to read current orientation, set to change orientation.
orientationstringRequired when action is set.
sessionIdstringSession ID; defaults to the active session.

No output schema declared.

No examples provided.

appium_perform_actions ~172

Execute raw W3C Actions API sequences for advanced multi-touch gestures not covered by appium_gesture. Use this for custom multi-finger gestures (rotate, three-finger swipe, edge swipes), complex timing sequences, or any gesture requiring precise control over individual touch points. Prefer appium_gesture for standard gestures (tap, scroll, swipe, pinch) — it handles platform differences automatically.

NameTypeReqDescription
actionsarrayyesW3C Actions API input source array. Each entry is one input source (pointer/key/none) with its action sequence. Multiple pointer sources enable multi-touch gestures (e.g. two-finger rotate, three-fin…
sessionIdstringSession ID; defaults to the active session.

No output schema declared.

No examples provided.

appium_prepare_ios_real_device ~220

Prepare signed WDA for a real iOS device. Omit provisioningProfileUuid to list profiles; ask the user to choose, highlighting recommendedForWda. Pass the chosen UUID to download, package, and sign WDA; wildcard profiles use a concrete WDA bundle ID. Downloads/unsigned IPA are cached per version; signing always reruns. Pass capabilitiesHint to appium_session_management action=create to install/launch the signed WDA. Requires macOS, Xcode 16+, and a paired developer-mode device.

NameTypeReqDescription
forceRebuildbooleanIf true, ignore the cached WDA download and unsigned IPA and start clean. The signed IPA is always rebuilt regardless. Default: false.
provisioningProfileUuidstringUUID of the .mobileprovision profile to sign WDA with. If omitted, the tool returns the list of available profiles so you can ask the user to pick one.
udidstringyesUDID of the connected iOS real device. Use select_device to discover it.

No output schema declared.

No examples provided.

appium_screen_recording ~342

Start or stop screen recording. action=start begins recording; action=stop stops and saves to MP4.

NameTypeReqDescription
actionstringyesstart begins recording; stop ends, retrieves, and saves it.
bitRateintegerAndroid only. Video bit rate in bits per second.
bugReportbooleanAndroid only. Display timestamp overlay. Requires API level 27+.
forceRestartbooleanRestart and discard any active recording; default false.
hardwareAccelerationstringiOS only. FFMPEG hardware acceleration backend.
pixelFormatstringiOS only. Output pixel format (e.g. yuv420p).
sessionIdstringSession ID; defaults to the active session.
timeLimitintegerRecorder limit in seconds; it does not retrieve/save automatically, so call stop. iOS default 180/max 4200; Android default 180/max 1800.
videoFiltersstringiOS only. FFMPEG video filters. Takes precedence over videoScale.
videoFpsintegeriOS only. Frames per second. Default: 10.
videoQualitystringiOS only. Video quality preset. Default: medium.
videoScalestringiOS only. Scaling value (e.g. 1280:720).
videoSizestringAndroid only. Frame size in WIDTHxHEIGHT format (e.g. 1280x720).
videoTypestringiOS only. Video codec to use (e.g. libx264).

No output schema declared.

No examples provided.

appium_screenshot ~121

Take a screenshot and save as PNG. Optionally provide elementUUID to capture only that element.

NameTypeReqDescription
elementUUIDstringCapture this element; omit for the full screen.
maxWidthnumberResize to at most this width in pixels, preserving aspect ratio.
returnRawBase64booleanReturn inline PNG instead of saving, for explicit manual use when the server file is inaccessible. LLMs must keep false and use the saved path.
sessionIdstringSession ID; defaults to the active session.

No output schema declared.

No examples provided.

appium_session_management ~694

Manage Appium sessions. Use action=create to start a session, attach to connect to an existing one, detach to forget an attached session, delete to stop one, list to see all active sessions, or select to switch the active session.

NameTypeReqDescription
actionstringyescreate: Create a new Appium session. DEFAULT MODE (no remoteServerUrl): use unless the user explicitly provides a server URL. - Drivers run embedded inside this MCP server; no separate Appium process…
capabilitiesstringOptional W3C capabilities as a JSON string, e.g. '{"appium:app":"/path/to/app","appium:platformVersion":"17.0"}'. Create: overrides defaults for ios/android; passed through as-is for general. Common…
platformstringRequired for create. For local sessions, match the platform selected via select_device. For remote sessions, infer from the request; general supports non-Android/iOS drivers (Windows, macOS, custom)…
remoteServerUrlstringRemote Appium server URL for create or attach (e.g. http://localhost:4723). Omit to use local server for create.
sessionIdstringRequired for attach and select: the existing session to connect to or activate. For delete: session to delete. For detach: attached session to forget without stopping it. Delete/detach default to the…

No output schema declared.

No examples provided.

appium_set_value ~115

Enter text into an element

NameTypeReqDescription
elementUUIDstringElement ID from appium_find_element.
sessionIdstringSession ID; defaults to the active session.
textstringyesThe text to enter
w3cActionsbooleanWhen true, type text via the W3C Actions API (performActions) instead of the driver-specific setValue. No elementUUID needed — key events are sent to whatever element currently has focus. Works on bo…

No output schema declared.

No examples provided.

generate_locators ~62

Generate locators for all interactable elements on the current page. [PRIORITY 3: Use this for debugging/inspection or when you need comprehensive element info with locator suggestions]

NameTypeReqDescription
sessionIdstringSession ID; defaults to the active session.

No output schema declared.

No examples provided.

prepare_ios_simulator ~201

Boot an iOS/tvOS simulator, download/cache WDA, and launch it on a free per-simulator port. Pass capabilitiesHint (appium:webDriverAgentUrl) to appium_session_management action=create to reuse WDA. skipWda=true only boots. APPIUM_MCP_WDA_APP_PATH can point to an extracted WebDriverAgentRunner-Runner.app (absolute path) to skip download.

NameTypeReqDescription
forceRefreshWdabooleanIf true, re-download WDA even if already cached. Default: false.
platformstringThe simulator platform to download WDA for. Default is "ios". Use "tvos" for Apple TV simulators.
skipWdabooleanIf true, only boot the simulator without downloading or installing WDA. Default: false.
udidstringyesThe UDID of the iOS simulator to prepare. Use select_device to get this.

No output schema declared.

No examples provided.

select_device ~143

Discover/select a LOCAL device. Ask for platform if unknown; one device is auto-selected. For multiple devices, ask the user to choose, then pass deviceUdid. Next: prepare_ios_simulator for iOS simulators, then appium_session_management action=create. Skip for REMOTE servers: pass device capabilities (appium:deviceName/appium:udid) and the user-provided remoteServerUrl to session creation.

NameTypeReqDescription
deviceUdidstringUser-selected UDID. Omit to discover devices.
iosDeviceTypestringRequired for ios: simulator or real device.
platformstringyesPlatform chosen by the user.

No output schema declared.

No examples provided.

Common questions

What is the MCP Appium - Mobile Development and Automation Server server?

MCP Appium - Mobile Development and Automation Server is listed in the public MCP registry as io.github.appium/appium-mcp. MCP server for Appium mobile automation on iOS and Android devices with test creation tools. This page covers its npm package (appium-mcp).

Is the MCP Appium - Mobile Development and Automation Server server safe to use?

MCP Appium - Mobile Development and Automation Server scores 83 out of 100 on VerifyMCP. We recorded 18 known advisories against it as of 22 September 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the MCP Appium - Mobile Development and Automation Server server expose?

MCP Appium - Mobile Development and Automation Server exposes 31 tools: select_device, appium_session_management, appium_mobile_device_control, appium_geolocation, appium_mobile_device_info, and 26 more. Their descriptions and schemas cost roughly 6,463 tokens of context every time the server is loaded.

Is the MCP Appium - Mobile Development and Automation Server server still maintained?

MCP Appium - Mobile Development and Automation Server is still listed as active in the MCP registry. We last reached this channel on 22 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the MCP Appium - Mobile Development and Automation Server server under?

MCP Appium - Mobile Development and Automation Server declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.