Skip to main content
Glama
atom2ueki

MCP Server for iOS Simulator

launch-app

Launch an iOS app on a simulator by specifying the session ID and bundle ID, enabling programmatic control through the MCP Server for iOS Simulator.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
bundleIdYes
sessionIdYes

Implementation Reference

  • Registers the 'launch-app' MCP tool, including input schema (sessionId, bundleId) and handler function that delegates to simulatorManager.launchApp
    this.server.tool(
      'launch-app',
      {
        sessionId: z.string(),
        bundleId: z.string()
      },
      async ({ sessionId, bundleId }) => {
        fileLogger.info(`Launching app on simulator: ${sessionId}`, { bundleId });
        try {
          const success = await simulatorManager.launchApp(sessionId, bundleId);
          
          if (!success) {
            return {
              content: [{
                type: 'text',
                text: `Failed to launch app on session: ${sessionId}`
              }],
              isError: true
            };
          }
          
          return {
            content: [{
              type: 'text',
              text: `App launched on session: ${sessionId}`
            }]
          };
        } catch (error) {
          fileLogger.error(`Failed to launch app on session: ${sessionId}`, { error });
          return {
            content: [{
              type: 'text',
              text: `Error: ${error instanceof Error ? error.message : String(error)}`
            }],
            isError: true
          };
        }
      }
    );
  • Handler function for the launch-app tool that logs the action, calls simulatorManager.launchApp, and returns success/error response
    async ({ sessionId, bundleId }) => {
      fileLogger.info(`Launching app on simulator: ${sessionId}`, { bundleId });
      try {
        const success = await simulatorManager.launchApp(sessionId, bundleId);
        
        if (!success) {
          return {
            content: [{
              type: 'text',
              text: `Failed to launch app on session: ${sessionId}`
            }],
            isError: true
          };
        }
        
        return {
          content: [{
            type: 'text',
            text: `App launched on session: ${sessionId}`
          }]
        };
      } catch (error) {
        fileLogger.error(`Failed to launch app on session: ${sessionId}`, { error });
        return {
          content: [{
            type: 'text',
            text: `Error: ${error instanceof Error ? error.message : String(error)}`
          }],
          isError: true
        };
      }
    }
  • Zod input schema for launch-app tool: requires sessionId (string) and bundleId (string)
    {
      sessionId: z.string(),
      bundleId: z.string()
  • SimulatorManager.launchApp helper method that retrieves the simulator session and calls the underlying appium-ios-simulator library's launchApp(bundleId) method
    /**
     * Launches an app on the simulator
     */
    async launchApp(sessionId: string, bundleId: string): Promise<boolean> {
      const session = this.sessions.get(sessionId);
      if (!session) {
        fileLogger.warn(`Session not found: ${sessionId}`);
        return false;
      }
    
      try {
        await session.simulator.launchApp(bundleId);
        fileLogger.info(`App launched on simulator for session: ${sessionId}`);
        return true;
      } catch (error) {
        fileLogger.error(`Failed to launch app for session: ${sessionId}`, { error });
        return false;
      }
    }

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