simulator.list_devices
Retrieve available iOS simulator devices and their current operational states for development and testing purposes.
Instructions
List all available iOS simulator devices and their states
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/simulator/devices.ts:29-78 (handler)The core handler function `listDevices()` that runs `simctl list devices --json`, parses the JSON, structures devices and runtimes, and returns ListDevicesResult.export async function listDevices(): Promise<ListDevicesResult> { logger.info("simulator", "Listing available simulator devices"); const result = await simctl(["list", "devices", "--json"]); if (result.exitCode !== 0) { const { code, message } = parseSimctlError(result.stderr); throw createError(code, message, { details: result.stderr }); } try { const data = JSON.parse(result.stdout); const devices: SimulatorDevice[] = []; const runtimes: SimulatorRuntime[] = []; // Parse runtimes if (data.runtimes) { for (const runtime of data.runtimes) { runtimes.push({ identifier: runtime.identifier, name: runtime.name, version: runtime.version, }); } } // Parse devices grouped by runtime for (const [runtimeId, deviceList] of Object.entries(data.devices)) { const runtimeName = runtimeId.replace("com.apple.CoreSimulator.SimRuntime.", ""); for (const device of deviceList as Array<Record<string, unknown>>) { devices.push({ udid: device.udid as string, name: device.name as string, state: device.state as SimulatorDevice["state"], runtime: runtimeName, isAvailable: device.isAvailable as boolean, }); } } logger.info("simulator", `Found ${devices.length} devices across ${runtimes.length} runtimes`); return { devices, runtimes }; } catch (error) { throw createError("SIMCTL_FAILED", "Failed to parse device list", { details: error instanceof Error ? error.message : "Unknown error", }); } }
- src/mcp/server.ts:67-87 (registration)Registers the MCP tool "simulator.list_devices" with empty input schema, handler that calls `listDevices()` and returns JSON stringified result.server.tool( "simulator.list_devices", "List all available iOS simulator devices and their states", {}, async () => { try { const result = await listDevices(); return { content: [ { type: "text", text: JSON.stringify(result, null, 2), }, ], }; } catch (error) { return handleToolError(error); } } );
- src/simulator/devices.ts:10-28 (schema)TypeScript interfaces defining the structure of SimulatorDevice, SimulatorRuntime, and ListDevicesResult used for type safety in the handler's input/output.export interface SimulatorDevice { udid: string; name: string; state: "Shutdown" | "Booted" | "Booting" | "ShuttingDown"; runtime: string; isAvailable: boolean; } export interface SimulatorRuntime { identifier: string; name: string; version: string; } export interface ListDevicesResult { devices: SimulatorDevice[]; runtimes: SimulatorRuntime[]; }