Skip to main content
Glama

flutter_release_build

Build signed release versions for mobile platforms (APK, AAB, IPA) from Flutter projects with optional code obfuscation to prepare apps for distribution.

Instructions

Build release versions for all platforms: APK, AAB, IPA with signing

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
cwdYesWorking directory (Flutter project root)
platformsNoPlatforms to build for
obfuscateNoObfuscate Dart code

Implementation Reference

  • Primary handler for 'flutter_release_build' tool. Orchestrates release builds for multiple platforms (APK, AAB, IPA) by invoking the underlying 'flutter_build' tool for each platform, handles errors per platform, and aggregates results with artifact paths.
    handler: async (args: any) => {
      const builds: Record<string, any> = {};
      const buildTool = flutterTools.get('flutter_build');
      
      for (const platform of args.platforms || ['apk', 'appbundle']) {
        try {
          const result = await buildTool.handler({
            cwd: args.cwd,
            target: platform,
            buildMode: 'release'
          });
          builds[platform] = result;
        } catch (error) {
          builds[platform] = {
            success: false,
            error: error instanceof Error ? error.message : String(error)
          };
        }
      }
      
      return {
        success: Object.values(builds).some((b: any) => b.success),
        data: {
          builds,
          artifacts: {
            apk: 'build/app/outputs/flutter-apk/app-release.apk',
            appbundle: 'build/app/outputs/bundle/release/app-release.aab',
            ipa: 'build/ios/ipa/*.ipa'
          }
        }
      };
    }
  • Registration of the 'flutter_release_build' super-tool, including name, description, input schema, and handler reference.
    tools.set('flutter_release_build', {
      name: 'flutter_release_build',
      description: 'Build release versions for all platforms: APK, AAB, IPA with signing',
      inputSchema: {
        type: 'object',
        properties: {
          cwd: {
            type: 'string',
            description: 'Working directory (Flutter project root)'
          },
          platforms: {
            type: 'array',
            items: {
              type: 'string',
              enum: ['apk', 'appbundle', 'ipa', 'ios']
            },
            description: 'Platforms to build for',
            default: ['apk', 'appbundle']
          },
          obfuscate: {
            type: 'boolean',
            description: 'Obfuscate Dart code',
            default: true
          }
        },
        required: ['cwd']
      },
      handler: async (args: any) => {
        const builds: Record<string, any> = {};
        const buildTool = flutterTools.get('flutter_build');
        
        for (const platform of args.platforms || ['apk', 'appbundle']) {
          try {
            const result = await buildTool.handler({
              cwd: args.cwd,
              target: platform,
              buildMode: 'release'
            });
            builds[platform] = result;
          } catch (error) {
            builds[platform] = {
              success: false,
              error: error instanceof Error ? error.message : String(error)
            };
          }
        }
        
        return {
          success: Object.values(builds).some((b: any) => b.success),
          data: {
            builds,
            artifacts: {
              apk: 'build/app/outputs/flutter-apk/app-release.apk',
              appbundle: 'build/app/outputs/bundle/release/app-release.aab',
              ipa: 'build/ios/ipa/*.ipa'
            }
          }
        };
      }
    });
  • Underlying 'flutter_build' tool handler called by 'flutter_release_build'. Executes 'flutter build <target> --release' command after validation, handles the actual Flutter CLI build process.
    tools.set('flutter_build', {
      name: 'flutter_build',
      description: 'Build Flutter app for specific target platform',
      inputSchema: {
        type: 'object',
        properties: {
          cwd: { type: 'string', minLength: 1, description: 'Working directory (Flutter project root)' },
          target: { 
            type: 'string',
            enum: ['apk', 'appbundle', 'ipa', 'ios', 'android', 'web', 'windows', 'macos', 'linux'],
            description: 'Build target platform'
          },
          buildMode: {
            type: 'string',
            enum: ['debug', 'profile', 'release'],
            description: 'Build mode'
          },
          flavor: { type: 'string', description: 'Build flavor' }
        },
        required: ['cwd', 'target']
      },
      handler: async (args: any) => {
        const validation = FlutterBuildSchema.safeParse(args);
        if (!validation.success) {
          throw new Error(`Invalid request: ${validation.error.message}`);
        }
    
        const { cwd, target, buildMode = 'debug', flavor } = validation.data;
    
        // Validate that it's a Flutter project
        await validateFlutterProject(cwd);
    
        const flutter_args = ['build', target];
        
        if (buildMode !== 'debug') {
          flutter_args.push(`--${buildMode}`);
        }
        
        if (flavor) {
          flutter_args.push('--flavor', flavor);
        }
    
        const result = await processExecutor.execute('flutter', flutter_args, {
          cwd,
          timeout: 1800000, // 30 minutes timeout for builds
        });
    
        if (result.exitCode !== 0) {
          throw new Error(`Flutter build failed: ${result.stderr || result.stdout}`);
        }
    
        return {
          success: true,
          data: {
            target,
            buildMode,
            flavor,
            projectPath: cwd,
            output: result.stdout,
            duration: result.duration,
            exitCode: result.exitCode,
          },
        };
      }
    });
  • Zod schema for validating inputs to the 'flutter_build' tool, used by 'flutter_release_build' indirectly.
    const FlutterBuildSchema = z.object({
      cwd: z.string().min(1),
      target: z.enum(['apk', 'appbundle', 'ipa', 'ios', 'android', 'web', 'windows', 'macos', 'linux']),
      buildMode: z.enum(['debug', 'profile', 'release']).default('debug'),
      flavor: z.string().optional(),
    });
  • Metadata and categorization for 'flutter_release_build' tool, defining requirements, performance expectations, and category.
    'flutter_release_build': {
      name: 'flutter_release_build',
      category: ToolCategory.ESSENTIAL,
      platform: 'flutter',
      requiredTools: [RequiredTool.FLUTTER, RequiredTool.GRADLE, RequiredTool.XCODEBUILD],
      description: 'Build release versions for all platforms: APK, AAB, IPA with signing',
      safeForTesting: false,
      performance: { expectedDuration: 300000, timeout: 1200000 }
    },

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/cristianoaredes/mcp-mobile-server'

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