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 · SCANNED SEP 20

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

Available components

0 this week 80 Trust /100
Trust breakdown (7 categories)

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

Supply Chain Security92
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • 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
  • 31 of 96 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 Management90
  • Stability observed for 27 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
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
// .cursor/mcp.json
{
  "mcpServers": {
    "ethanackerman-git-preflight-ios-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "preflight-ios-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "ethanackerman-git-preflight-ios-mcp": {
      "command": "npx",
      "args": [
        "-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"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "ethanackerman-git-preflight-ios-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "preflight-ios-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add ethanackerman-git-preflight-ios-mcp -t stdio -c npx -a -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.

  • 19 Sept 26 +1

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

  • 17 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 16 Sept 26 +1
    • Stability: 0.97 → pass security
  • 14 Sept 26 +1

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

  • 12 Sept 26 +1

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

  • 10 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 9 Sept 26 +1
    • Stability: 0.97 → pass security
  • 7 Sept 26 +1

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

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 20 Sept 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 →

Dependencies 96 packages
Packages resolved 96
Stale 31
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
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.

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 80 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 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 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the 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.