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 · @SNIFFSKI/SQUIRE

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

Available components

71 Trust /100

Last scanned (8 hours ago)

Scores higher than 40% of npm servers

Category Testing and QA

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 sharp 0.32.6, reached via @xenova/transformers > sharp. A fixed version is available. View diagnostics → Fail
  • No install/post-install scripts declared.Pass
  • Dependency health was assessed across the 400 of 678 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 ihubanov/squire). 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 Usability82
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 7755 tokens (~121/item across 64 items; 63 tools + 1 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 Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage99
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 98% of tool parameters carry a description.Partial
Tool Safety81
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 1 of 4 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 → Partial
  • An AI judge read all 65 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

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

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.

  • 4 Nov 26 +21
    • CVE-2026-114112 affects this package: high ▼ security
    • CVE-2026-118764 affects this package: high ▼ security
    • CVE-2026-114113 affects this package: high ▼ security
    • CVE-2026-114111 affects this package: high ▼ security
    • CVE-2026-118773 affects this package: high ▼ security
    • Known CVEs: unverified → fail ▼ security
    • Malware scan: unverified → pass ▲ security
    • Dependency health: unverified → partial ▲ functional
  • 3 Nov 26 50

    First indexed and scored.

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 5 Nov 2026 · Analysed npm/@sniffski/squire@1.31.6

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 ihubanov/squire
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/ihubanov/squire/.github/workflows/publish.yml@refs/tags/v1.31.6
Rekor log index 3673944119
Predicate type SLSA build provenance https://slsa.dev/provenance/v1
Subject digest sha512:24c370ec3ee9777e80c85a6b030960562f090aa73cf9f6dfcf7df77812bb48d0702a3439883d85e0f2dc2222c878ac48f14dfd72fa0b4f2e9ee642cde

Background: How many MCP packages publish verified provenance →

Vulnerabilities 5 findings
ID CVE Severity Vector Fix available
GHSA-3g3m-2fjr-6pw4 CVE-2026-118773 medium yes
GHSA-g3hv-75wg-m249 CVE-2026-118764 medium yes
GHSA-f88m-g3jw-g9cj CVE-2026-114113 high yes
GHSA-rgj7-g3m4-5g8c CVE-2026-114112 high yes
GHSA-wq5f-xc86-pv6w CVE-2026-114111 high yes

Background: What a vulnerability scan can and cannot prove →

Dependencies 400 packages
Packages resolved 400
Deprecated 3
Stale 106
No linked repository 1
Tree resolution Partial

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

Background: SBOMs and build attestations, explained →

MCP tools · 63 exposed · ~7,585 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
playwright_new_tab ~348

Open a new tab in the real Chromium window the user is in, optionally navigated to a URL. This is your primary tool for "go look at a website" — it does literally what a person does when they Cmd+T and type a URL. The page loads with full JavaScript, cookies, redirects, and captchas just like for a human. New tabs open in the background by default so the user's view doesn't get yanked; the AI's "active tab" follows the new one. Use this for: web search (always via http://localhost:8484/search?q=…, never google.com directly), opening a specific site the user mentioned, opening a result link from a previous search.

NameTypeReqDescription
bringToFrontboolean–Whether to bring the new tab to the foreground in the user's window. Default false — new tabs open in the background so the AI doesn't steal focus from the user. Set true only if the user explicitly…
evenIfOpenboolean–Attached to the user's Chrome only: open a new tab even when one of the user's tabs already has this site open. By default no tab is opened and you are pointed at the existing one, because users pref…
sameProfileAs––Attached to the user's Chrome only: open the tab in the same Chrome profile, with the same logins, as this tab (index or tab id from playwright_list_tabs). When Chrome has several profiles open the d…
urlstring–Optional URL to navigate to in the new tab

No output schema declared.

No examples provided.

playwright_present ~416

Show a person how to do something on a website: an animated spotlight, a pointing arrow and a caption walk them through it step by step on the real page. Use when the user says "show me how…", "where do I…", "walk me through…", "guide me". Default mode "guided" points and explains — the person clicks/types themselves, and the tour advances on their click, their input, or navigation; pressing Next does the step's action for them (never into password/payment/one-time-code fields), and Back undoes a step that navigated. Mode "demo" performs the steps itself, slowly, with a visible cursor. Guided calls return waiting:true with a tourId when the person is still busy; call again with `resume` to keep waiting, or `stop` to end it. Tours always run where the person can see them: a headless session is reopened in a visible browser first (same page, cookies and localStorage), and the call fails if no visible browser can open.

NameTypeReqDescription
accentstring–CSS colour for the spotlight, arrow and buttons (default violet).
modestring–guided (default): point and explain, the person does each step. demo: Squire does the steps itself, slowly, with a visible cursor. Demo never types into password/payment fields — those steps wait for…
resumestring–Tour id from a previous call that returned waiting:true — keep waiting for the person.
stepsarray–The tour, in order. Omit when using `resume` or `stop`.
stopstring–Tour id to end now; removes the overlay.
tabstring–Stable tab id (from playwright_list_tabs) to present on. Omit for the active tab. The tab is brought to the front.
waitSecondsnumber–Guided: how long this call waits for the person before returning waiting:true (default 120). The overlay stays up meanwhile.

No output schema declared.

No examples provided.

playwright_press_key ~105

Press a keyboard key or key combination on the AI's active tab — same as a human pressing it. Use Enter to submit a form after typing in a search box, Tab to advance focus, ArrowDown to scroll suggestions, etc. Supports modifiers (Control, Shift, Alt, Meta).

NameTypeReqDescription
keystringyesKey to press. Examples: "Enter", "Tab", "Escape", "ArrowDown", "Control+a", "Meta+c", "Shift+Tab"

No output schema declared.

No examples provided.

playwright_reload ~21

Reload the current page. Only works with Playwright web sessions.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

playwright_run_script ~467

Drive the AI's active tab through a sequence of steps in one call, like a human would. Survives page navigations (form submits no longer abort the rest of the script) and falls back to a humanised, hidden-element-revealing path only when the normal fast path fails — useful for modals/menus that a plain click cannot reach. Returns per-step results; on a failing step it stops and hands back a `continuationId` you can pass as `resume` to pick up where it left off after you adjust. Prefer this over chaining many single-action tools when a flow (login, multi-field form, open-menu-then-click) should run as one human-like unit. An upload step puts local files into a file input or the file picker a button opens.

NameTypeReqDescription
humanizestring–auto (default): normal first, human fallback only on a wall. always: human path every step. never: normal only, fail instead of falling back.
pauseAfternumber–Hand control back after this many successful steps, returning a continuation for the rest.
resumestring–Continuation id from a prior run that stopped early — resumes its remaining steps.
stepTimeoutnumber–Per-step normal-attempt timeout in ms (default 5000).
stepsarray–Ordered steps to run in one go. Each is attempted the normal fast way first; if it hits a wall (hidden/not-actionable/intercepted) and humanize allows, it escalates to a human path that reveals the e…
stopOnErrorboolean–Stop on the first failing step and return a continuation (default true).
tabstring–Stable tab id (from playwright_list_tabs) to run this script against. Omit to use the AI-active tab. Targeting a tab id drives that tab DIRECTLY without changing the active-tab pointer or foregroundi…

No output schema declared.

No examples provided.

playwright_select_option ~99

Select an option from a <select> dropdown element. Provide value, label, or index. Only works with Playwright web sessions.

NameTypeReqDescription
elementUUIDstringyesThe UUID of the <select> element returned by appium_find_element
indexinteger–Select option by its zero-based index
labelstring–Select option by its visible text label
valuestring–Select option by its value attribute

No output schema declared.

No examples provided.

playwright_switch_tab ~143

Change which existing open tab the AI is acting on. By default this does NOT change what the user sees — the user's foreground tab stays put — it only retargets subsequent playwright_* calls. Pass bringToFront=true to also surface the tab in the user's window (only do this if the user explicitly asked to be shown that tab).

NameTypeReqDescription
bringToFrontboolean–Whether to also foreground the tab in the user's window. Default false — switches the AI's internal active tab without stealing focus from the user. Set true only if the user explicitly asked to be s…
indexintegeryesZero-based index of the tab to switch to

No output schema declared.

No examples provided.

playwright_type ~145

Type text into a real input field, exactly the way a human types — character by character with optional inter-key delay. Use this for search boxes, sign-in forms, contenteditable elements, or anywhere `set_value` would skip JS-driven autocomplete/validation. Targets either a specific element (by UUID from appium_find_element) or whatever the active tab currently has focused.

NameTypeReqDescription
delaynumber–Delay between keystrokes in milliseconds. Default is 0 (instant).
elementUUIDstring–Optional UUID of the element to type into. If not provided, types into the currently focused element.
textstringyesThe text to type character by character

No output schema declared.

No examples provided.

playwright_user_activity ~147

What the user did in their own browser (clicks, field changes, Enter, form submits, page loads, new tabs) since you last looked. Attached to the user's Chrome only. Use it to work together in one tab: ask the user to do a step (log in, pick something, approve a 2FA prompt), then call this with waitSeconds to see when and what they did. Every other tool result also starts with this report when there is something new. Password and card fields never show values.

NameTypeReqDescription
waitSecondsnumber–Wait up to this long for the user to do something (returns as soon as they do). Default 0: just report.

No output schema declared.

No examples provided.

select_device ~272

Select a specific device from available LOCAL devices. For LOCAL Appium servers ONLY. DO NOT use this tool for REMOTE Appium servers - remoteServerUrl indicates a remote server. WORKFLOW FOR LOCAL SERVERS: - Use this tool ONLY when select_platform returns multiple devices - For Android: Use before calling create_session if multiple devices are found - For iOS: Use before calling boot_simulator or create_session if multiple simulators/devices are found - Ask the user which device they want to use from the list provided WORKFLOW FOR REMOTE SERVERS: - SKIP this tool entirely - Device selection should be handled via capabilities in create_session (e.g., appium:deviceName, appium:udid) - The remote Appium server is already configured for specific device(s)

NameTypeReqDescription
deviceUdidstring–The UDID of the device selected by the user. If not provided, this tool will list available devices for the user to choose from.
iosDeviceTypestring–For iOS only: Specify whether to use 'simulator' or 'real' device. REQUIRED when platform is 'ios'.
platformstringyesThe platform to list devices for (must match previously selected platform)

No output schema declared.

No examples provided.

select_platform ~375

Select the platform for LOCAL servers ONLY. DO NOT use this tool if the user mentions a REMOTE Appium server URL (e.g., http://localhost:4723, http://192.168.1.100:4723, or any other server address). WORKFLOW FOR LOCAL SERVERS: 1. First, ASK THE USER which platform they want to use (Android, iOS, or Web) 2. You MUST explicitly prompt the user to choose between Android, iOS, or Web 3. DO NOT assume or default to any platform 4. For Android/iOS: After platform selection, available devices will be listed 5. If multiple devices are available, use select_device to let the user choose 6. After device selection, proceed to create_session 7. For Web: No device selection needed, proceed directly to create_session WORKFLOW FOR REMOTE SERVERS: If user provides a remote server URL, SKIP this tool entirely. Instead, infer the platform and device type from the user's request (e.g., 'ios xcuitest driver with iphone 17 simulator' means platform='ios') and call create_session directly with the remoteServerUrl parameter.

NameTypeReqDescription
iosDeviceTypestring–For iOS only: Specify whether to use 'simulator' (iOS Simulator on macOS) or 'real' (physical iOS device). REQUIRED when platform is 'ios'.
platformstringyesREQUIRED: The platform chosen by the user - 'android' for Android devices/emulators, 'ios' for iOS devices/simulators, or 'web' for browser automation with Playwright. This must be based on the user'…

No output schema declared.

No examples provided.

select_session ~36

Set an existing Appium session as the active session for subsequent tool calls.

NameTypeReqDescription
sessionIdstringyesThe session ID to activate.

No output schema declared.

No examples provided.

setup_wda ~119

Download and setup prebuilt WebDriverAgent (WDA) for iOS/tvOS simulators only (not for real devices). This significantly speeds up the first Appium session by avoiding the need to build WDA from source. Downloads the latest version from GitHub and caches it locally.

NameTypeReqDescription
platformstring–The simulator platform to download WDA for. Default is "ios". Use "tvos" for Apple TV simulators. Note: This tool only works with simulators, not real devices.

No output schema declared.

No examples provided.

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 @sniffski/squire. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @sniffski/squire

# add to Claude Code
claude mcp add ihubanov-squire -- npx -y @sniffski/squire
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.ihubanov/squire. MCP server for Appium mobile automation on iOS and Android devices with test creation tools. This page covers its npm package (@sniffski/squire).

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

MCP Appium - Mobile Development and Automation Server scores 71 out of 100 on VerifyMCP. We recorded 5 known advisories against it as of 5 November 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 63 tools: select_platform, select_device, create_session, list_sessions, select_session, and 58 more. Their descriptions and schemas cost roughly 7,585 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 5 November 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.