Skip to main content
Glama

install_app_sim

Install an iOS application on a specified simulator by providing the simulator UUID and the full path to the .app bundle using this MCP tool.

Instructions

Installs an app in an iOS simulator. IMPORTANT: You MUST provide both the simulatorUuid and appPath parameters. Example: install_app_sim({ simulatorUuid: 'YOUR_UUID_HERE', appPath: '/path/to/your/app.app' })

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
appPathYesPath to the .app bundle to install (full path to the .app directory)
simulatorUuidYesUUID of the simulator to use (obtained from list_simulators)

Implementation Reference

  • The main handler logic for installing an app in the iOS simulator using xcrun simctl install, including validation, bundle ID extraction, and response generation.
    export async function install_app_simLogic( params: InstallAppSimParams, executor: CommandExecutor, fileSystem?: FileSystemExecutor, ): Promise<ToolResponse> { const appPathExistsValidation = validateFileExists(params.appPath, fileSystem); if (!appPathExistsValidation.isValid) { return appPathExistsValidation.errorResponse!; } log('info', `Starting xcrun simctl install request for simulator ${params.simulatorId}`); try { const command = ['xcrun', 'simctl', 'install', params.simulatorId, params.appPath]; const result = await executor(command, 'Install App in Simulator', true, undefined); if (!result.success) { return { content: [ { type: 'text', text: `Install app in simulator operation failed: ${result.error}`, }, ], }; } let bundleId = ''; try { const bundleIdResult = await executor( ['defaults', 'read', `${params.appPath}/Info`, 'CFBundleIdentifier'], 'Extract Bundle ID', false, undefined, ); if (bundleIdResult.success) { bundleId = bundleIdResult.output.trim(); } } catch (error) { log('warning', `Could not extract bundle ID from app: ${error}`); } return { content: [ { type: 'text', text: `App installed successfully in simulator ${params.simulatorId}`, }, { type: 'text', text: `Next Steps: 1. Open the Simulator app: open_sim({}) 2. Launch the app: launch_app_sim({ simulatorId: "${params.simulatorId}"${ bundleId ? `, bundleId: "${bundleId}"` : ', bundleId: "YOUR_APP_BUNDLE_ID"' } })`, }, ], }; } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); log('error', `Error during install app in simulator operation: ${errorMessage}`); return { content: [ { type: 'text', text: `Install app in simulator operation failed: ${errorMessage}`, }, ], }; } }
  • Zod schema object for tool parameters (simulatorId and appPath), type inference, and public schema omitting simulatorId.
    const installAppSimSchemaObject = z.object({ simulatorId: z.string().describe('UUID of the simulator to use (obtained from list_sims)'), appPath: z .string() .describe('Path to the .app bundle to install (full path to the .app directory)'), }); type InstallAppSimParams = z.infer<typeof installAppSimSchemaObject>; const publicSchemaObject = installAppSimSchemaObject .omit({ simulatorId: true, } as const) .strict();
  • Default export registering the tool with name, description, schema, and session-aware handler wrapping the logic function.
    export default { name: 'install_app_sim', description: 'Installs an app in an iOS simulator.', schema: publicSchemaObject.shape, handler: createSessionAwareTool<InstallAppSimParams>({ internalSchema: installAppSimSchemaObject, logicFunction: install_app_simLogic, getExecutor: getDefaultCommandExecutor, requirements: [{ allOf: ['simulatorId'], message: 'simulatorId is required' }], }), };

Other Tools

Related Tools

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/cameroncooke/XcodeBuildMCP'

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