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