ios_list_simulators
Lists available iOS simulators for development and testing. Use this tool to view and select simulators for running iOS applications.
Instructions
List available iOS simulators
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/tools/ios.ts:265-317 (handler)The handler function for 'ios_list_simulators' tool. It checks macOS platform, executes 'xcrun simctl list devices --json', parses the output, extracts simulator details (UDID, name, state, runtime, etc.), computes counts, and returns structured data.tools.set('ios_list_simulators', { name: 'ios_list_simulators', description: 'List available iOS simulators', inputSchema: { type: 'object', properties: {}, required: [] }, handler: async () => { checkMacOS(); const result = await processExecutor.execute('xcrun', ['simctl', 'list', 'devices', '--json']); if (result.exitCode !== 0) { throw new Error(`Failed to list iOS simulators: ${result.stderr}`); } let devicesData; try { devicesData = JSON.parse(result.stdout); } catch (parseError) { throw new Error(`Failed to parse simulator list JSON: ${parseError}`); } const simulators = []; const devices = devicesData.devices || {}; for (const [runtime, deviceList] of Object.entries(devices)) { if (Array.isArray(deviceList)) { for (const device of deviceList as any[]) { simulators.push({ udid: device.udid, name: device.name, state: device.state, runtime: runtime.replace('com.apple.CoreSimulator.SimRuntime.', ''), deviceTypeIdentifier: device.deviceTypeIdentifier, isAvailable: device.isAvailable || false, }); } } } return { success: true, data: { simulators, totalCount: simulators.length, bootedCount: simulators.filter((s: any) => s.state === 'Booted').length, availableCount: simulators.filter((s: any) => s.isAvailable).length, }, }; } });
- src/tools/ios.ts:268-272 (schema)Input schema for ios_list_simulators tool, which takes no parameters (empty object).inputSchema: { type: 'object', properties: {}, required: [] },
- src/tools/ios.ts:265-317 (registration)Local registration of the tool in the createIOSTools factory function, which returns a Map added to the main tools registry in server.ts.tools.set('ios_list_simulators', { name: 'ios_list_simulators', description: 'List available iOS simulators', inputSchema: { type: 'object', properties: {}, required: [] }, handler: async () => { checkMacOS(); const result = await processExecutor.execute('xcrun', ['simctl', 'list', 'devices', '--json']); if (result.exitCode !== 0) { throw new Error(`Failed to list iOS simulators: ${result.stderr}`); } let devicesData; try { devicesData = JSON.parse(result.stdout); } catch (parseError) { throw new Error(`Failed to parse simulator list JSON: ${parseError}`); } const simulators = []; const devices = devicesData.devices || {}; for (const [runtime, deviceList] of Object.entries(devices)) { if (Array.isArray(deviceList)) { for (const device of deviceList as any[]) { simulators.push({ udid: device.udid, name: device.name, state: device.state, runtime: runtime.replace('com.apple.CoreSimulator.SimRuntime.', ''), deviceTypeIdentifier: device.deviceTypeIdentifier, isAvailable: device.isAvailable || false, }); } } } return { success: true, data: { simulators, totalCount: simulators.length, bootedCount: simulators.filter((s: any) => s.state === 'Booted').length, availableCount: simulators.filter((s: any) => s.isAvailable).length, }, }; } });
- src/server.ts:61-72 (registration)Global MCP server registration loop that includes 'ios_list_simulators' from iosTools Map into the main server tools Map.for (const toolName of Object.keys(TOOL_REGISTRY)) { if (allAvailableTools.has(toolName)) { tools.set(toolName, allAvailableTools.get(toolName)); } else if (toolName === 'health_check') { // health_check is handled separately below continue; } else { // Tool is in registry but not implemented - log warning console.warn(`Warning: Tool '${toolName}' is in TOOL_REGISTRY but not implemented`); } }
- src/utils/tool-categories.ts:111-118 (schema)Metadata/schema in TOOL_REGISTRY defining category, platform, requirements (XCRUN), and performance expectations for the tool.'ios_list_simulators': { name: 'ios_list_simulators', category: ToolCategory.ESSENTIAL, platform: 'ios', requiredTools: [RequiredTool.XCRUN], description: 'List available iOS simulators', safeForTesting: true, performance: { expectedDuration: 150, timeout: 10000 }