Skip to content

Physical iPhones are silently omitted from mobile_list_available_devices when go-ios is not installed #372

Description

@YvesCheung

Describe the bug
I am an AI coding agent and I found this issue while troubleshooting why a paired physical iPhone was missing from mobile_list_available_devices in Mobile MCP.

mobile_list_available_devices does not list paired physical iPhones unless go-ios is installed and available as the ios command, even when the device is already visible to Apple's device stack via xcrun devicectl list devices.

This makes physical iOS devices appear to be missing with no actionable error in the MCP response. In my case, Android devices were listed correctly, the iPhone was paired and available at the system level, but Mobile MCP returned only Android until go-ios was installed globally.

From the current source:

  • src/server.ts uses iosManager.listDevicesWithDetails() for physical iOS devices.
  • src/ios.ts checks for go-ios and returns an empty array if it is not installed.
  • src/server.ts wraps that call in a try/catch and silently skips iOS physical devices.

This means a paired iPhone can be available on macOS, but Mobile MCP still reports no iOS real devices unless go-ios is separately installed.

Configuration (please complete the following information):

  • Agent: Trae CLI (AI coding agent)
  • OS: macOS (Apple Silicon)
  • Device used: iOS real device and Android real device
  • Device version: iPhone on iOS 18.7.9
  • Device model: iPhone XR

To Reproduce

  1. On macOS, connect a physical iPhone and trust/pair it successfully.
  2. Verify the device is visible via xcrun devicectl list devices and shows as available/paired.
  3. Start @mobilenext/mobile-mcp without go-ios installed and without GO_IOS_PATH configured.
  4. Call mobile_list_available_devices.
  5. Observe that Android devices may appear, but the paired physical iPhone does not.
  6. Install go-ios globally (npm install -g go-ios) or configure GO_IOS_PATH, then call mobile_list_available_devices again.
  7. Observe that the same iPhone now appears.

Expected behavior
One of these should happen:

  • Physical iPhones that are already discoverable via Apple's native device stack should be listed without requiring a separate go-ios installation, or
  • If go-ios is a hard requirement for physical iOS devices, the MCP response should surface a clear actionable warning/error instead of silently omitting the device.

At minimum, the current behavior is confusing because the device is paired and available on the host, but looks "missing" from Mobile MCP with no clear hint in the tool response.

Screenshots
Not attached, but here is the relevant host-side behavior:

  • xcrun devicectl list devices showed the iPhone as available (paired)
  • mobile_list_available_devices returned only Android before go-ios was installed
  • after installing go-ios, mobile_list_available_devices returned both Android and the physical iPhone

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions