Skip to main content
Glama
atom2ueki

MCP Server for iOS Simulator

shutdown-simulator-by-udid

Shutdown an iOS simulator by its unique device identifier (UDID) using a programmatic interface provided by the MCP Server for iOS Simulator.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
udidYes

Implementation Reference

  • MCP tool registration for 'shutdown-simulator-by-udid', including input schema { udid: z.string() } and handler that calls simulatorManager.directShutdownByUDID and verifySimulatorShutdown
    this.server.tool( 'shutdown-simulator-by-udid', { udid: z.string() }, async (params) => { fileLogger.info(`Shutting down simulator directly by UDID: ${params.udid}`); try { const success = await simulatorManager.directShutdownByUDID(params.udid); if (!success) { return { content: [{ type: 'text', text: `Failed to shutdown simulator with UDID: ${params.udid}` }], isError: true }; } // Verify shutdown const verifySuccess = await simulatorManager.verifySimulatorShutdown(params.udid); if (!verifySuccess) { return { content: [{ type: 'text', text: `Simulator shutdown command executed but simulator may still be running. UDID: ${params.udid}` }], isError: true }; } return { content: [{ type: 'text', text: `Simulator with UDID: ${params.udid} successfully shut down` }] }; } catch (error) { fileLogger.error(`Failed to shutdown simulator by UDID: ${params.udid}`, { error }); return { content: [{ type: 'text', text: `Error: ${error instanceof Error ? error.message : String(error)}` }], isError: true }; } } );
  • Core handler function that executes the shutdown command via xcrun simctl shutdown ${udid}
    async directShutdownByUDID(udid: string): Promise<boolean> { fileLogger.info(`Attempting direct CLI shutdown for simulator: ${udid}`); try { const execAsync = promisify(exec); await execAsync(`xcrun simctl shutdown ${udid}`); fileLogger.info(`Direct CLI shutdown command completed for simulator: ${udid}`); return true; } catch (error) { fileLogger.error(`Failed direct CLI shutdown for simulator: ${udid}`, { error }); return false; } }
  • Helper function to verify the simulator has been shut down by checking booted simulators list
    async verifySimulatorShutdown(udid: string): Promise<boolean> { try { // Get all booted simulators const bootedSimulators = await this.getBootedSimulators(); // Check if our UDID is still in the list of booted simulators const stillRunning = bootedSimulators.some(sim => sim.udid === udid); if (stillRunning) { fileLogger.warn(`Simulator ${udid} is still reported as running`); return false; } else { fileLogger.info(`Verified simulator ${udid} is shut down`); return true; } } catch (error) { fileLogger.error(`Failed to verify simulator shutdown status: ${udid}`, { error }); return false; } }
  • Zod input schema for the tool: requires 'udid' string parameter.
    { udid: z.string() },

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/atom2ueki/mcp-server-ios-simulator'

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