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