Skip to main content
Glama

build_app

Build Kotlin Multiplatform Mobile applications for Android or iOS, returning structured results with error details to facilitate debugging and automated workflows.

Instructions

Build a KMM application for Android or iOS. Returns structured build result with error details on failure.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
platformYesTarget platform to build for
variantNoBuild variant (default: debug)
cleanNoClean before building (default: false)
iosDestinationNoiOS simulator destination (e.g., "platform=iOS Simulator,name=iPhone 15 Pro")
androidModuleNoAndroid module name (default: androidApp)
iosSchemeNoiOS scheme name (default: iosApp)
timeoutMsNoBuild timeout in milliseconds (default: 30 minutes)

Implementation Reference

  • Main handler function for the 'build_app' tool. It validates the input arguments, determines the platform (Android or iOS), and delegates to the appropriate platform-specific build helper.
    export async function buildApp(args: BuildAppArgs): Promise<BuildResult> { const { platform, variant = 'debug', clean = false, iosDestination = 'platform=iOS Simulator,name=iPhone 15 Pro', androidModule = 'androidApp', iosScheme = 'iosApp', timeoutMs = DEFAULTS.BUILD_TIMEOUT_MS, } = args; // Validate platform if (!isPlatform(platform)) { throw Errors.invalidArguments(`Invalid platform: ${platform}. Must be 'android' or 'ios'`); } // Validate variant if (!isBuildVariant(variant)) { throw Errors.invalidArguments(`Invalid variant: ${variant}. Must be 'debug' or 'release'`); } // Build based on platform if (platform === 'android') { return buildAndroid({ variant, clean, moduleName: androidModule, timeoutMs, }); } else { return buildIOS({ variant, clean, destination: iosDestination, scheme: iosScheme, timeoutMs, }); } }
  • TypeScript interface defining the input arguments for the build_app tool, used for type safety and documentation.
    export interface BuildAppArgs { /** Target platform */ platform: string; /** Build variant */ variant?: string; /** Clean before build */ clean?: boolean; /** iOS simulator destination */ iosDestination?: string; /** Android module name */ androidModule?: string; /** iOS scheme name */ iosScheme?: string; /** Build timeout in milliseconds */ timeoutMs?: number; }
  • Helper function that builds the Android app by invoking the Gradle build process.
    async function buildAndroid(options: { variant: BuildVariant; clean: boolean; moduleName: string; timeoutMs: number; }): Promise<BuildResult> { const gradleOptions: GradleBuildOptions = { variant: options.variant, clean: options.clean, moduleName: options.moduleName, timeoutMs: options.timeoutMs, }; return buildGradle(gradleOptions); }
  • Helper function that builds the iOS app by invoking the Xcode build process, with availability check.
    async function buildIOS(options: { variant: BuildVariant; clean: boolean; destination: string; scheme: string; timeoutMs: number; }): Promise<BuildResult> { // Check if xcodebuild is available const available = await isXcodebuildAvailable(); if (!available) { throw Errors.platformUnavailable('ios'); } const xcodeOptions: XcodeBuildOptions = { variant: options.variant, clean: options.clean, destination: options.destination, scheme: options.scheme, timeoutMs: options.timeoutMs, }; return buildXcode(xcodeOptions); }
  • Central registration during server startup: imports and invokes registerBuildAppTool to register the 'build_app' tool in the global registry.
    const { registerBuildAppTool } = await import('./build/build-app.js'); const { registerInstallAppTool } = await import('./build/install-app.js'); const { registerLaunchAppTool } = await import('./build/launch-app.js'); registerBuildAppTool(); registerInstallAppTool();

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/abd3lraouf/specter-mcp'

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