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

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

NPM · PREFLIGHT-IOS-MCP · SCANNED AUG 3

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

Available components

+22 this week 68 Trust /100
Trust breakdown (6 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 →

Supply Chain Security80
  • No malware found by supply-chain analysis.Pass
  • Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.Partial
  • Runs a script at install time (postinstall) that we could not recognise. It may be perfectly ordinary, but we do not read the published tarball, so we cannot say what it does. View diagnostics → Partial
  • Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency45
Schema Quality & AI Usability81
  • 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 Management27
  • Stability observed for 8 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
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

npm · preflight-ios-mcp

# add to Claude Code
claude mcp add ethanackerman-git-preflight-ios-mcp -- npx -y preflight-ios-mcp
# add to Codex CLI
codex mcp add ethanackerman-git-preflight-ios-mcp -- npx -y preflight-ios-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ethanackerman-git-preflight-ios-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "preflight-ios-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add ethanackerman-git-preflight-ios-mcp --command npx --arg -y --arg preflight-ios-mcp
# ~/.hermes/config.yaml
mcp_servers:
  ethanackerman-git-preflight-ios-mcp:
    command: "npx"
    args: ["-y", "preflight-ios-mcp"]
// mcp.json
{
  "mcpServers": {
    "ethanackerman-git-preflight-ios-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "preflight-ios-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.

  • 3 Aug 26 +4
    • Stability: unverified → 0.27 functional
  • 2 Aug 26 +43
    • Provenance: unverified → fail security
    • Known CVEs: unverified → partial security
    • Install scripts: unverified → partial security
    • Malware scan: unverified → pass security
    • Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window). security
    • The scripts that run when this package is installed changed: postinstall security
    • Schema quality: unverified → excellent functional
    • License: unverified → pass functional
    • Dependency health: unverified → partial functional
    • Maintenance: unverified → pass functional
    • MCP protocol: unverified → pass functional
    • Licence: MIT functional
  • 1 Aug 26 +16
    • Tool coverage: unverified → 100 functional
  • 31 Jul 26 −19
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 −22
    • Tool coverage: 100 → unverified functional
    • First check of Schema quality: unverified functional
  • 27 Jul 26 46

    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 3 Aug 2026 · Analysed npm/[email protected]

Provenance none

Ecosystem: npm · Outcome: none

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'
Dependencies 95 packages

95 packages in the resolved dependency tree · 95 deprecated · 29 stale.

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

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.

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
deviceIdstringDevice (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
deviceIdstringDevice (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")
deviceIdstringDevice 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
deviceIdstringDevice (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
waitForBootbooleanWait 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
deviceIdstringDevice (default: booted)
domainstringyesDefaults domain (bundle ID like "com.apple.mobilesafari" or "NSGlobalDomain")
keystringSpecific 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
deviceIdstringDevice (default: booted)
domainstringyesDefaults domain (bundle ID)
keystringyesKey to write
typestringValue 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
deviceIdstringDevice 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
deviceIdstringDevice (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
deviceIdstringDevice (default: booted)
labelstringSearch for element with this accessibility label (case-insensitive partial match)
rolestringSearch for element with this role
textstringSearch 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
containerTypestringContainer type (default: data)
deviceIdstringDevice (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
deviceIdstringDevice (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
deviceIdstringDevice (default: booted)
limitnumberMax number of crash reports (default: 5)
processNamestringFilter by process/app name
sincestringOnly 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
deviceIdstringDevice (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
categorystringFilter by log category
deviceIdstringDevice (default: booted)
levelstringMinimum log level (default: default)
limitnumberMax number of log lines to return (default: 100)
messageContainsstringFilter messages containing this text
processstringFilter by process name (e.g., "MyApp", "SpringBoard")
sincestringTime range: "5m", "1h", "30s", or ISO date (default: "1m")
subsystemstringFilter 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
deviceIdstringDevice (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
deviceIdstringDevice (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
deviceIdstringDevice (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
deviceIdstringDevice 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
deviceIdstringDevice (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
deviceIdstringDevice (default: booted)
pathstringPath 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
argsarrayLaunch arguments to pass to the app
bundleIdstringyesApp bundle identifier to launch
deviceIdstringDevice UDID, name, or "booted" (default: booted)
envobjectEnvironment variables to set (will be prefixed with SIMCTL_CHILD_)
terminateRunningbooleanTerminate 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
deviceIdstringDevice (default: booted)
subPathstringSubdirectory 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
deviceIdstringDevice UDID, name, or "booted" (default: booted)
includeSystembooleanInclude 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
filterstringFilter 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
deviceIdstringDevice (default: booted)
speednumberSpeed 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
deviceIdstringDevice (default: booted)
scenariostringScenario 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
deviceIdstringDevice UDID, name, or "booted" (default: booted)
durationMsnumberPress 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
deviceIdstringDevice (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
deviceIdstringDevice (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
deviceIdstringDevice (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
deviceIdstringDevice 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
batteryLevelnumberBattery level 0-100
batteryStatestringBattery state
cellularBarsnumberCellular signal bars 0-4
clearbooleanSet to true to clear all overrides
deviceIdstringDevice (default: booted)
networkTypestringData network type: wifi, 3g, 4g, lte, lte-a, lte+, 5g, 5g+, 5g-uwb, 5g-uc
operatorNamestringCarrier/operator name
timestringStatus bar time string (e.g., "9:41")
wifiBarsnumberWiFi 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
deviceIdstringDevice UDID, name, or "booted" (default: booted)
keystringyesKey name: return, escape, delete, tab, space, up, down, left, right, home, end, pageup, pagedown, f1-f12
modifiersarrayModifier 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
deviceIdstringDevice (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
codecstringVideo codec (default: h264)
deviceIdstringDevice (default: booted)
displaystringDisplay to capture (default: internal)
maskstringFor 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
deviceIdstringDevice UDID, name, or "booted" (default: booted)
displaystringDisplay to capture (default: internal)
formatstringImage format (default: jpeg). JPEG recommended for AI — smaller, faster.
maskstringFor non-rectangular displays, handle mask by policy
savePathstringOptional: 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
deviceIdstringDevice (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
deviceIdstringDevice (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
deviceIdstringDevice (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
deviceIdstringDevice (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
deviceIdstringDevice (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
deviceIdstringDevice (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
deviceIdstringDevice 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
deviceIdstringDevice (default: booted)

No output schema declared.

No examples provided.

simulator_stop_recording ~81

Stop an active video recording and save the file.

NameTypeReqDescription
deviceIdstringDevice (default: booted)
maxFramesnumberMax number of key frames to extract (default: 3, max: 6)
savePathstringOptional: 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
bufferSizenumberMax lines to keep in buffer (default: 200)
deviceIdstringDevice (default: booted)
levelstringMinimum log level
processstringFilter by process name

No output schema declared.

No examples provided.