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.

io.github.EthanAckerman-git/preflight-ios-mcp

NPM · PREFLIGHT-IOS-MCP

57 tools for AI-powered iOS Simulator automation — tap, swipe, type, screenshots, and more.

Available components

−1 this week 75 Trust /100

Last scanned (1 day ago)

Scores higher than 51% 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 Security74
  • No malware found by supply-chain analysis.Pass
  • CVE check failed: a known high-severity CVE affects zod 3.25.76, a direct dependency. A fixed version is available. View diagnostics → Fail
  • Declares code that runs automatically (postinstall) and that we could not recognise. It may be perfectly ordinary, but we have not established what it does. View diagnostics → Partial
  • 30 of 93 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
Schema Quality & AI Usability80
  • AI-judged instruction clarity (excellent).Pass
  • Tool/resource definitions use about 4547 tokens (~79/item across 57 items; 57 tools + 0 resources), lean.Pass
  • 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 5 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "simulator_shutdown" implies "shutdown" 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 57 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
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 −1
    • Stability: pass → 0.93 functional
  • 29 Oct 26 0
    • Stability: 0.97 → pass security
  • 28 Oct 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.

  • 27 Oct 26 −1
    • Stability: pass → 0.93 functional
  • 26 Oct 26 0
    • Security disclosure: unverified → fail ▼ functional
  • 24 Oct 26 −6
    • CVE-2023-54404 affects this package: high ▼ security
    • Known CVEs: pass → fail ▼ security
  • 22 Oct 26 0
    • Security disclosure: fail → unverified ▼ functional
  • 17 Oct 26 +3
    • Stability: 0.83 → 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 4 Nov 2026 · Analysed npm/preflight-ios-mcp@1.0.1

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
postinstall unreviewed which idb > /dev/null 2>&1 || echo '\n[Preflight MCP] Optional: Install idb for cursor-free touch injection:\n brew tap facebook/fb && brew install idb-companion\n pip3 install fb-idb\n'

Background: Why install scripts are a supply-chain risk →

Vulnerabilities 1 finding
ID CVE Severity Vector Fix available
GHSA-mrhx-c7xc-m3w5 CVE-2023-54404 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H yes

Background: What a vulnerability scan can and cannot prove →

Dependencies 93 packages
Packages resolved 93
Stale 30
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 57 exposed · ~4,547 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
simulator_accessibility_audit ~49

Get the accessibility element tree of the current Simulator screen. Shows roles, labels, values, and positions of UI elements.

NameTypeReqDescription
deviceIdstring–Device (default: booted)

No output schema declared.

No examples provided.

simulator_add_media ~56

Add photos or videos to the simulator's camera roll from local file paths.

NameTypeReqDescription
deviceIdstring–Device (default: booted)
filePathsarrayyesPaths to photo/video files to add to camera roll

No output schema declared.

No examples provided.

simulator_app_info ~71

Get detailed metadata about an installed app (bundle ID, paths, version, etc.).

NameTypeReqDescription
bundleIdstringyesApp bundle identifier (e.g., "com.apple.mobilesafari")
deviceIdstring–Device UDID, name, or "booted" (default: booted)

No output schema declared.

No examples provided.

simulator_biometric ~53

Set Face ID / Touch ID enrollment state. Test biometric authentication flows.

NameTypeReqDescription
deviceIdstring–Device (default: booted)
enrolledbooleanyesWhether Face ID / Touch ID is enrolled

No output schema declared.

No examples provided.

simulator_boot ~69

Boot an iOS Simulator device. Opens the Simulator app. Use simulator_list_devices to find device names/UDIDs.

NameTypeReqDescription
deviceIdstringyesDevice UDID or name to boot
waitForBootboolean–Wait until device is fully booted before returning (default: true)

No output schema declared.

No examples provided.

simulator_defaults_read ~83

Read UserDefaults values from inside the simulator. Inspect app preferences, feature flags, and configuration.

NameTypeReqDescription
deviceIdstring–Device (default: booted)
domainstringyesDefaults domain (bundle ID like "com.apple.mobilesafari" or "NSGlobalDomain")
keystring–Specific key to read (omit for all keys)

No output schema declared.

No examples provided.

simulator_defaults_write ~89

Write UserDefaults values inside the simulator. Set feature flags, change app configuration, or inject test data.

NameTypeReqDescription
deviceIdstring–Device (default: booted)
domainstringyesDefaults domain (bundle ID)
keystringyesKey to write
typestring–Value type (default: string)
valuestringyesValue to set

No output schema declared.

No examples provided.

simulator_describe_point ~85

Returns the accessibility element at given coordinates on the iOS Simulator screen. Shows element type, label, value, and frame.

NameTypeReqDescription
deviceIdstring–Device UDID, name, or "booted" (default: booted)
xnumberyesX coordinate in simulator screen points
ynumberyesY coordinate in simulator screen points

No output schema declared.

No examples provided.

simulator_diagnose ~44

Generate a diagnostic summary: booted devices, Xcode version, disk usage, and system info.

NameTypeReqDescription
deviceIdstring–Device (default: booted)

No output schema declared.

No examples provided.

simulator_element_exists ~94

Quick check: does an element matching your criteria exist on screen right now? Returns true/false. Useful for conditional logic.

NameTypeReqDescription
deviceIdstring–Device (default: booted)
labelstring–Search for element with this accessibility label (case-insensitive partial match)
rolestring–Search for element with this role
textstring–Search for element containing this text

No output schema declared.

No examples provided.

simulator_erase ~40

Factory reset a simulator device. Erases all content and settings.

NameTypeReqDescription
deviceIdstringyesDevice UDID or name to erase (factory reset)

No output schema declared.

No examples provided.

simulator_get_app_container ~78

Get the filesystem path to an app's container (bundle, data, or shared groups). Use this to find where the app stores its files.

NameTypeReqDescription
bundleIdstringyesApp bundle identifier
containerTypestring–Container type (default: data)
deviceIdstring–Device (default: booted)

No output schema declared.

No examples provided.

simulator_get_booted_sim_id ~25

Get the UDID of the currently booted iOS Simulator.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

simulator_get_clipboard ~33

Read the text content of the simulator clipboard.

NameTypeReqDescription
deviceIdstring–Device (default: booted)

No output schema declared.

No examples provided.

simulator_get_crash_logs ~107

Retrieve crash reports from ~/Library/Logs/DiagnosticReports/. Shows stack traces, exception info, and thread states. Filter by process name.

NameTypeReqDescription
deviceIdstring–Device (default: booted)
limitnumber–Max number of crash reports (default: 5)
processNamestring–Filter by process/app name
sincestring–Only crashes since this ISO date (e.g., "2026-03-22")

No output schema declared.

No examples provided.

simulator_get_env ~68

Read an environment variable from the running simulator device (e.g., HOME, TMPDIR, PATH).

NameTypeReqDescription
deviceIdstring–Device (default: booted)
variablestringyesEnvironment variable name to read (e.g., "HOME", "TMPDIR", "PATH")

No output schema declared.

No examples provided.

simulator_get_logs ~182

Get recent device/app logs. Filter by process name, subsystem, log level, time range, and message content. Essential for debugging app behavior.

NameTypeReqDescription
categorystring–Filter by log category
deviceIdstring–Device (default: booted)
levelstring–Minimum log level (default: default)
limitnumber–Max number of log lines to return (default: 100)
messageContainsstring–Filter messages containing this text
processstring–Filter by process name (e.g., "MyApp", "SpringBoard")
sincestring–Time range: "5m", "1h", "30s", or ISO date (default: "1m")
subsystemstring–Filter by log subsystem (e.g., "com.apple.UIKit")

No output schema declared.

No examples provided.

simulator_get_screen_info ~44

Get diagnostic info about the Simulator window geometry and coordinate mapping. Useful for debugging tap/swipe accuracy.

NameTypeReqDescription
deviceIdstring–Device (default: booted)

No output schema declared.

No examples provided.

simulator_grant_permission ~106

Grant, revoke, or reset app permissions (camera, location, photos, contacts, microphone, etc.).

NameTypeReqDescription
actionstringyesPermission action
bundleIdstringyesApp bundle ID
deviceIdstring–Device (default: booted)
servicestringyesPermission service: all, calendar, contacts-limited, contacts, location, location-always, photos-add, photos, media-library, microphone, motion, reminders, siri

No output schema declared.

No examples provided.

simulator_icloud_sync ~43

Trigger iCloud sync on the device. Requires the device to be signed into an Apple ID.

NameTypeReqDescription
deviceIdstring–Device (default: booted)

No output schema declared.

No examples provided.

simulator_install_app ~65

Install a .app bundle onto the simulator from a local file path.

NameTypeReqDescription
deviceIdstring–Device UDID, name, or "booted" (default: booted)
pathstringyesPath to .app bundle or .ipa file to install

No output schema declared.

No examples provided.

simulator_install_app_data ~62

Install an .xcappdata package to replace the current app container contents. Useful for restoring test data snapshots.

NameTypeReqDescription
deviceIdstring–Device (default: booted)
pathstringyesPath to .xcappdata package to install

No output schema declared.

No examples provided.

simulator_keychain ~97

Manipulate the device keychain: add root certificates, add certificates, or reset the entire keychain.

NameTypeReqDescription
actionstringyes"add-root-cert" to add trusted root CA, "add-cert" to add certificate, "reset" to clear keychain
deviceIdstring–Device (default: booted)
pathstring–Path to certificate file (required for add-root-cert and add-cert)

No output schema declared.

No examples provided.

simulator_launch_app ~116

Launch an app by bundle ID. Optionally pass launch arguments and environment variables.

NameTypeReqDescription
argsarray–Launch arguments to pass to the app
bundleIdstringyesApp bundle identifier to launch
deviceIdstring–Device UDID, name, or "booted" (default: booted)
envobject–Environment variables to set (will be prefixed with SIMCTL_CHILD_)
terminateRunningboolean–Terminate the app first if already running (default: false)

No output schema declared.

No examples provided.

simulator_list_app_files ~91

List files in an app's data container. Shows Documents, Library, Preferences, Caches, tmp, etc. Use to find databases, plists, caches.

NameTypeReqDescription
bundleIdstringyesApp bundle identifier
deviceIdstring–Device (default: booted)
subPathstring–Subdirectory to list (e.g., "Documents", "Library/Preferences")

No output schema declared.

No examples provided.

simulator_list_apps ~60

List all installed apps on the simulator with their bundle IDs.

NameTypeReqDescription
deviceIdstring–Device UDID, name, or "booted" (default: booted)
includeSystemboolean–Include system apps (default: false)

No output schema declared.

No examples provided.

simulator_list_devices ~39

List iOS Simulator devices. Shows name, UDID, state, and runtime.

NameTypeReqDescription
filterstring–Filter devices (default: all)

No output schema declared.

No examples provided.

simulator_location_route ~81

Simulate movement along a custom route with waypoints. Specify GPS coordinates and speed for realistic location testing.

NameTypeReqDescription
deviceIdstring–Device (default: booted)
speednumber–Speed in meters/second (default: ~walking speed)
waypointsarrayyesArray of {lat, lng} waypoints to traverse

No output schema declared.

No examples provided.

simulator_location_scenario ~104

Run predefined GPS location scenarios (Freeway Drive, City Run, City Bicycle Ride). Simulates realistic movement patterns for testing location features.

NameTypeReqDescription
actionstringyes"list" available scenarios, "run" a scenario, "clear" to stop
deviceIdstring–Device (default: booted)
scenariostring–Scenario name (e.g., "Freeway Drive", "City Run", "City Bicycle Ride", "Apple")

No output schema declared.

No examples provided.

simulator_long_press ~99

Long press at a point on the simulator screen. Useful for context menus, drag-and-drop initiation, etc.

NameTypeReqDescription
deviceIdstring–Device UDID, name, or "booted" (default: booted)
durationMsnumber–Press duration in milliseconds (default: 1000)
xnumberyesX coordinate in simulator screen points
ynumberyesY coordinate in simulator screen points

No output schema declared.

No examples provided.

simulator_memory_warning ~45

Trigger a simulated memory warning. Apps will receive didReceiveMemoryWarning and can be tested for proper memory cleanup.

NameTypeReqDescription
deviceIdstring–Device (default: booted)

No output schema declared.

No examples provided.

simulator_navigate_back ~59

Navigate back in the current app. Sends Cmd+[ (standard back navigation). Works in Safari and apps with standard UINavigationController. Workaround for edge-swipe-back gesture limitation.

NameTypeReqDescription
deviceIdstring–Device (default: booted)

No output schema declared.

No examples provided.

simulator_network_status ~40

Get the current network configuration inside the simulator — interfaces, IP addresses, DNS config.

NameTypeReqDescription
deviceIdstring–Device (default: booted)

No output schema declared.

No examples provided.

simulator_open_simulator ~17

Opens the iOS Simulator application.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

simulator_open_url ~88

Open a URL or deep link in the simulator (e.g., "https://example.com" or "myapp://screen").

NameTypeReqDescription
deviceIdstring–Device UDID, name, or "booted" (default: booted)
urlstringyesURL or deep link to open (e.g., "https://example.com" or "myapp://path")

No output schema declared.

No examples provided.

simulator_override_status_bar ~201

Override the simulator status bar: set time, battery, signal bars, carrier name, network type. Use clear=true to reset.

NameTypeReqDescription
batteryLevelnumber–Battery level 0-100
batteryStatestring–Battery state
cellularBarsnumber–Cellular signal bars 0-4
clearboolean–Set to true to clear all overrides
deviceIdstring–Device (default: booted)
networkTypestring–Data network type: wifi, 3g, 4g, lte, lte-a, lte+, 5g, 5g+, 5g-uwb, 5g-uc
operatorNamestring–Carrier/operator name
timestring–Status bar time string (e.g., "9:41")
wifiBarsnumber–WiFi signal bars 0-3

No output schema declared.

No examples provided.

simulator_press_key ~122

Press a special key (return, escape, delete, tab, arrows, etc.) with optional modifiers (command, shift, option, control).

NameTypeReqDescription
deviceIdstring–Device UDID, name, or "booted" (default: booted)
keystringyesKey name: return, escape, delete, tab, space, up, down, left, right, home, end, pageup, pagedown, f1-f12
modifiersarray–Modifier keys: command, shift, option, control

No output schema declared.

No examples provided.

simulator_read_app_file ~102

Read a file from an app's data container. Handles plists (converts to JSON), SQLite databases (shows schema), and text files. Specify path relative to data container.

NameTypeReqDescription
bundleIdstringyesApp bundle identifier
deviceIdstring–Device (default: booted)
filePathstringyesRelative path within the data container (e.g., "Documents/data.json", "Library/Preferences/com.app.plist")

No output schema declared.

No examples provided.

simulator_record_video ~96

Start recording the simulator screen to a video file. Use simulator_stop_recording to stop. Supports H.264 and HEVC codecs.

NameTypeReqDescription
codecstring–Video codec (default: h264)
deviceIdstring–Device (default: booted)
displaystring–Display to capture (default: internal)
maskstring–For non-rectangular displays, handle mask by policy

No output schema declared.

No examples provided.

simulator_screenshot ~122

Take a screenshot of the iOS Simulator screen. Returns the image directly for viewing.

NameTypeReqDescription
deviceIdstring–Device UDID, name, or "booted" (default: booted)
displaystring–Display to capture (default: internal)
formatstring–Image format (default: jpeg). JPEG recommended for AI — smaller, faster.
maskstring–For non-rectangular displays, handle mask by policy
savePathstring–Optional: save a copy to this path on disk

No output schema declared.

No examples provided.

simulator_send_push ~91

Send a push notification to an app. Provide the full APNs payload JSON (e.g., {"aps": {"alert": "Hello"}}).

NameTypeReqDescription
bundleIdstringyesApp bundle ID to receive the push
deviceIdstring–Device (default: booted)
payloadobjectyesPush notification JSON payload (e.g., {"aps": {"alert": "Hello"}})

No output schema declared.

No examples provided.

simulator_set_appearance ~42

Switch the simulator between light and dark mode.

NameTypeReqDescription
deviceIdstring–Device (default: booted)
modestringyesAppearance mode

No output schema declared.

No examples provided.

simulator_set_clipboard ~52

Set text on the simulator clipboard. Useful for pasting content into apps.

NameTypeReqDescription
deviceIdstring–Device (default: booted)
textstringyesText to copy to simulator clipboard

No output schema declared.

No examples provided.

simulator_set_content_size ~62

Set the preferred content size for Dynamic Type testing. Test your app with accessibility text sizes without changing device settings manually.

NameTypeReqDescription
deviceIdstring–Device (default: booted)
sizestringyesPreferred content size category for Dynamic Type testing

No output schema declared.

No examples provided.

simulator_set_increase_contrast ~59

Enable or disable the Increase Contrast accessibility setting. Test how your app responds to high contrast mode.

NameTypeReqDescription
deviceIdstring–Device (default: booted)
enabledbooleanyesEnable or disable Increase Contrast accessibility setting

No output schema declared.

No examples provided.

simulator_set_location ~66

Set the simulated GPS location (latitude, longitude). Useful for testing location-based features.

NameTypeReqDescription
deviceIdstring–Device (default: booted)
latitudenumberyesLatitude (-90 to 90)
longitudenumberyesLongitude (-180 to 180)

No output schema declared.

No examples provided.

simulator_shutdown ~39

Shut down a running simulator device.

NameTypeReqDescription
deviceIdstring–Device UDID, name, or "booted" (default: booted)

No output schema declared.

No examples provided.

simulator_snapshot ~66

Capture a structured accessibility snapshot of the current screen — like Playwright's browser_snapshot. Returns roles, labels, values, and positions. PREFERRED over screenshots for understanding UI structure and targeting interactions. No vision model needed.

NameTypeReqDescription
deviceIdstring–Device (default: booted)

No output schema declared.

No examples provided.

simulator_stop_recording ~81

Stop an active video recording and save the file.

NameTypeReqDescription
deviceIdstring–Device (default: booted)
maxFramesnumber–Max number of key frames to extract (default: 3, max: 6)
savePathstring–Optional: save the video file to this path instead of discarding it

No output schema declared.

No examples provided.

simulator_stream_logs ~129

Start/read/stop a live log stream. Use action="start" to begin, "read" to get the buffer, "stop" to end. Great for watching app behavior in real-time.

NameTypeReqDescription
actionstringyes"start" begins streaming, "read" returns current buffer, "stop" ends the stream
bufferSizenumber–Max lines to keep in buffer (default: 200)
deviceIdstring–Device (default: booted)
levelstring–Minimum log level
processstring–Filter by process name

No output schema declared.

No examples provided.

Install

How do I install the io.github.EthanAckerman-git/preflight-ios-mcp server?

io.github.EthanAckerman-git/preflight-ios-mcp runs locally as an npm package, launched with npx -y preflight-ios-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 · preflight-ios-mcp

# add to Claude Code
claude mcp add ethanackerman-git-preflight-ios-mcp -- npx -y preflight-ios-mcp
Common questions

What is the io.github.EthanAckerman-git/preflight-ios-mcp server?

io.github.EthanAckerman-git/preflight-ios-mcp is listed in the public MCP registry as io.github.EthanAckerman-git/preflight-ios-mcp. 57 tools for AI-powered iOS Simulator automation, tap, swipe, type, screenshots, and more. This page covers its npm package (preflight-ios-mcp).

Is the io.github.EthanAckerman-git/preflight-ios-mcp server safe to use?

io.github.EthanAckerman-git/preflight-ios-mcp scores 75 out of 100 on VerifyMCP. We recorded 1 known advisory against it as of 4 November 2026. 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 io.github.EthanAckerman-git/preflight-ios-mcp server expose?

io.github.EthanAckerman-git/preflight-ios-mcp exposes 57 tools: simulator_screenshot, simulator_list_devices, simulator_list_apps, simulator_app_info, simulator_get_clipboard, and 52 more. Their descriptions and schemas cost roughly 4,547 tokens of context every time the server is loaded.

Is the io.github.EthanAckerman-git/preflight-ios-mcp server still maintained?

io.github.EthanAckerman-git/preflight-ios-mcp is still listed as active in the MCP registry. We last reached this channel on 4 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 io.github.EthanAckerman-git/preflight-ios-mcp server under?

io.github.EthanAckerman-git/preflight-ios-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.