Skip to main content
Glama
andreahaku
by andreahaku

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
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • 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", }); } }
  • 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); } } );
  • 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[]; }

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/andreahaku/expo_ios_development_mcp'

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