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
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
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 128 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
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
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
claude mcp add ethanackerman-git-preflight-ios-mcp -- npx -y preflight-ios-mcp
codex mcp add ethanackerman-git-preflight-ios-mcp -- npx -y preflight-ios-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"ethanackerman-git-preflight-ios-mcp": {
"type": "local",
"command": [
"npx",
"-y",
"preflight-ios-mcp"
],
"enabled": true
}
}
} openclaw mcp add ethanackerman-git-preflight-ios-mcp --command npx --arg -y --arg preflight-ios-mcp
mcp_servers:
ethanackerman-git-preflight-ios-mcp:
command: "npx"
args: ["-y", "preflight-ios-mcp"] {
"mcpServers": {
"ethanackerman-git-preflight-ios-mcp": {
"command": "npx",
"args": [
"-y",
"preflight-ios-mcp"
]
}
}
} 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.
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.
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.
simulator_accessibility_audit ~49
Get the accessibility element tree of the current Simulator screen. Shows roles, labels, values, and positions of UI elements.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device (default: booted) |
| filePaths | array | yes | Paths 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.).
| Name | Type | Req | Description |
|---|---|---|---|
| bundleId | string | yes | App bundle identifier (e.g., "com.apple.mobilesafari") |
| deviceId | string | — | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device (default: booted) |
| enrolled | boolean | yes | Whether 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | yes | Device UDID or name to boot |
| waitForBoot | boolean | — | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device (default: booted) |
| domain | string | yes | Defaults domain (bundle ID like "com.apple.mobilesafari" or "NSGlobalDomain") |
| key | string | — | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device (default: booted) |
| domain | string | yes | Defaults domain (bundle ID) |
| key | string | yes | Key to write |
| type | string | — | Value type (default: string) |
| value | string | yes | Value 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device UDID, name, or "booted" (default: booted) |
| x | number | yes | X coordinate in simulator screen points |
| y | number | yes | Y 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device (default: booted) |
| label | string | — | Search for element with this accessibility label (case-insensitive partial match) |
| role | string | — | Search for element with this role |
| text | string | — | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | yes | Device 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.
| Name | Type | Req | Description |
|---|---|---|---|
| bundleId | string | yes | App bundle identifier |
| containerType | string | — | Container type (default: data) |
| deviceId | string | — | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device (default: booted) |
| limit | number | — | Max number of crash reports (default: 5) |
| processName | string | — | Filter by process/app name |
| since | string | — | 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).
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device (default: booted) |
| variable | string | yes | Environment 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.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | — | Filter by log category |
| deviceId | string | — | Device (default: booted) |
| level | string | — | Minimum log level (default: default) |
| limit | number | — | Max number of log lines to return (default: 100) |
| messageContains | string | — | Filter messages containing this text |
| process | string | — | Filter by process name (e.g., "MyApp", "SpringBoard") |
| since | string | — | Time range: "5m", "1h", "30s", or ISO date (default: "1m") |
| subsystem | string | — | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | 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.).
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Permission action |
| bundleId | string | yes | App bundle ID |
| deviceId | string | — | Device (default: booted) |
| service | string | yes | Permission 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device UDID, name, or "booted" (default: booted) |
| path | string | yes | Path 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device (default: booted) |
| path | string | yes | Path 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.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | "add-root-cert" to add trusted root CA, "add-cert" to add certificate, "reset" to clear keychain |
| deviceId | string | — | Device (default: booted) |
| path | string | — | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| args | array | — | Launch arguments to pass to the app |
| bundleId | string | yes | App bundle identifier to launch |
| deviceId | string | — | Device UDID, name, or "booted" (default: booted) |
| env | object | — | Environment variables to set (will be prefixed with SIMCTL_CHILD_) |
| terminateRunning | boolean | — | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| bundleId | string | yes | App bundle identifier |
| deviceId | string | — | Device (default: booted) |
| subPath | string | — | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device UDID, name, or "booted" (default: booted) |
| includeSystem | boolean | — | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| filter | string | — | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device (default: booted) |
| speed | number | — | Speed in meters/second (default: ~walking speed) |
| waypoints | array | yes | Array 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.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | "list" available scenarios, "run" a scenario, "clear" to stop |
| deviceId | string | — | Device (default: booted) |
| scenario | string | — | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device UDID, name, or "booted" (default: booted) |
| durationMs | number | — | Press duration in milliseconds (default: 1000) |
| x | number | yes | X coordinate in simulator screen points |
| y | number | yes | Y 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | 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").
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device UDID, name, or "booted" (default: booted) |
| url | string | yes | URL 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.
| Name | Type | Req | Description |
|---|---|---|---|
| batteryLevel | number | — | Battery level 0-100 |
| batteryState | string | — | Battery state |
| cellularBars | number | — | Cellular signal bars 0-4 |
| clear | boolean | — | Set to true to clear all overrides |
| deviceId | string | — | Device (default: booted) |
| networkType | string | — | Data network type: wifi, 3g, 4g, lte, lte-a, lte+, 5g, 5g+, 5g-uwb, 5g-uc |
| operatorName | string | — | Carrier/operator name |
| time | string | — | Status bar time string (e.g., "9:41") |
| wifiBars | number | — | 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).
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device UDID, name, or "booted" (default: booted) |
| key | string | yes | Key name: return, escape, delete, tab, space, up, down, left, right, home, end, pageup, pagedown, f1-f12 |
| modifiers | array | — | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| bundleId | string | yes | App bundle identifier |
| deviceId | string | — | Device (default: booted) |
| filePath | string | yes | Relative 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.
| Name | Type | Req | Description |
|---|---|---|---|
| codec | string | — | Video codec (default: h264) |
| deviceId | string | — | Device (default: booted) |
| display | string | — | Display to capture (default: internal) |
| mask | string | — | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device UDID, name, or "booted" (default: booted) |
| display | string | — | Display to capture (default: internal) |
| format | string | — | Image format (default: jpeg). JPEG recommended for AI — smaller, faster. |
| mask | string | — | For non-rectangular displays, handle mask by policy |
| savePath | string | — | 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"}}).
| Name | Type | Req | Description |
|---|---|---|---|
| bundleId | string | yes | App bundle ID to receive the push |
| deviceId | string | — | Device (default: booted) |
| payload | object | yes | Push 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device (default: booted) |
| mode | string | yes | Appearance mode |
No output schema declared.
No examples provided.
simulator_set_clipboard ~52
Set text on the simulator clipboard. Useful for pasting content into apps.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device (default: booted) |
| text | string | yes | Text 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device (default: booted) |
| size | string | yes | Preferred 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device (default: booted) |
| enabled | boolean | yes | Enable 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device (default: booted) |
| latitude | number | yes | Latitude (-90 to 90) |
| longitude | number | yes | Longitude (-180 to 180) |
No output schema declared.
No examples provided.
simulator_shutdown ~39
Shut down a running simulator device.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device (default: booted) |
No output schema declared.
No examples provided.
simulator_stop_recording ~81
Stop an active video recording and save the file.
| Name | Type | Req | Description |
|---|---|---|---|
| deviceId | string | — | Device (default: booted) |
| maxFrames | number | — | Max number of key frames to extract (default: 3, max: 6) |
| savePath | string | — | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | "start" begins streaming, "read" returns current buffer, "stop" ends the stream |
| bufferSize | number | — | Max lines to keep in buffer (default: 200) |
| deviceId | string | — | Device (default: booted) |
| level | string | — | Minimum log level |
| process | string | — | Filter by process name |
No output schema declared.
No examples provided.