Skip to main content
Glama

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
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • 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, }, }; } });
  • Input schema for ios_list_simulators tool, which takes no parameters (empty object).
    inputSchema: { type: 'object', properties: {}, required: [] },
  • 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`); } }
  • 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 }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/cristianoaredes/mcp-mobile-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server