Skip to main content
Glama

autonomous_create_game

Generate complete RPG Maker MZ games from concept descriptions by automatically handling project setup, story generation, battle systems, quests, assets, and optimization for rapid prototyping.

Instructions

Autonomously create a complete RPG game from a concept. This tool orchestrates all game creation steps: project setup, scenario generation, battle system, quests, assets, balancing, and optimization. Perfect for rapid game prototyping with minimal input.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
api_keyNoGemini API key (optional, uses GEMINI_API_KEY env var if not provided)
asset_countNoAsset generation counts
conceptYesGame concept/theme (e.g., 'fantasy adventure with dragons', 'cyberpunk detective story', 'space opera epic')
difficultyNoGame difficulty level
game_titleNoGame title (auto-generated from concept if not provided)
generate_assetsNoWhether to generate game assets using AI (default: true)
lengthNoGame length - short: 1-2hrs, medium: 3-5hrs, long: 8-12hrs
optimizeNoWhether to optimize the project after creation (default: true)
project_pathYesPath where the game project will be created

Implementation Reference

  • src/index.ts:669-729 (registration)
    Registration of the 'autonomous_create_game' tool in the list of available tools, including name, description, and detailed input schema.
    name: "autonomous_create_game", description: "Autonomously create a complete RPG game from a concept. This tool orchestrates all game creation steps: project setup, scenario generation, battle system, quests, assets, balancing, and optimization. Perfect for rapid game prototyping with minimal input.", inputSchema: { type: "object", properties: { project_path: { type: "string", description: "Path where the game project will be created", }, concept: { type: "string", description: "Game concept/theme (e.g., 'fantasy adventure with dragons', 'cyberpunk detective story', 'space opera epic')", }, game_title: { type: "string", description: "Game title (auto-generated from concept if not provided)", }, length: { type: "string", enum: ["short", "medium", "long"], description: "Game length - short: 1-2hrs, medium: 3-5hrs, long: 8-12hrs", }, difficulty: { type: "string", enum: ["easy", "normal", "hard"], description: "Game difficulty level", }, generate_assets: { type: "boolean", description: "Whether to generate game assets using AI (default: true)", }, asset_count: { type: "object", properties: { characters: { type: "number", description: "Number of character sprites to generate", }, enemies: { type: "number", description: "Number of enemy sprites to generate", }, tilesets: { type: "number", description: "Number of tilesets to generate", }, }, description: "Asset generation counts", }, optimize: { type: "boolean", description: "Whether to optimize the project after creation (default: true)", }, api_key: { type: "string", description: "Gemini API key (optional, uses GEMINI_API_KEY env var if not provided)", }, }, required: ["project_path", "concept"], }, },
  • MCP tool call handler dispatch for 'autonomous_create_game' that constructs the request and calls the main createGameAutonomously function.
    case "autonomous_create_game": { const request: AutonomousCreationRequest = { projectPath: args.project_path as string, concept: args.concept as string, gameTitle: args.game_title as string | undefined, length: (args.length as "short" | "medium" | "long") || "medium", difficulty: (args.difficulty as "easy" | "normal" | "hard") || "normal", generateAssets: args.generate_assets !== false, assetCount: args.asset_count as any, optimize: args.optimize !== false, }; const result = await createGameAutonomously(request); if (result.success) { let report = `πŸŽ‰ Game creation completed successfully!\n\n`; report += `πŸ“ Project: ${result.projectPath}\n\n`; if (result.summary) { report += `πŸ“Š Summary:\n`; report += ` πŸ—ΊοΈ Maps: ${result.summary.totalMaps}\n`; report += ` πŸ‘€ Actors: ${result.summary.totalActors}\n`; report += ` πŸ‘Ή Enemies: ${result.summary.totalEnemies}\n`; report += ` πŸ“ Events: ${result.summary.totalEvents}\n`; report += ` 🎯 Quests: ${result.summary.totalQuests}\n`; report += ` 🎨 Assets: ${result.summary.assetsGenerated}\n`; report += ` πŸ’Ύ Size: ${result.summary.projectSize}\n`; report += ` ⏳ Playtime: ${result.summary.estimatedPlaytime}\n\n`; } if (result.steps) { report += `\nπŸ“‹ Creation Steps:\n`; for (const step of result.steps) { const icon = step.status === "success" ? "βœ…" : step.status === "failed" ? "❌" : "⏭️"; report += `${icon} ${step.step}\n`; if (step.error) { report += ` Error: ${step.error}\n`; } } } report += `\n✨ Open with RPG Maker MZ: ${path.join(result.projectPath!, "Game.rpgproject")}`; return { content: [{ type: "text", text: report }], }; } else { return { content: [{ type: "text", text: `❌ Game creation failed: ${result.error}` }], isError: true, }; } }
  • TypeScript interface defining the input parameters for autonomous game creation, matching the tool's inputSchema.
    export interface AutonomousCreationRequest { projectPath: string; concept: string; gameTitle?: string; length?: "short" | "medium" | "long"; difficulty?: "easy" | "normal" | "hard"; generateAssets?: boolean; assetCount?: { characters?: number; enemies?: number; tilesets?: number; }; optimize?: boolean; }
  • Core handler function that implements the autonomous game creation logic. Orchestrates multiple steps including project creation, scenario generation, battle system setup, quest generation, asset creation, stat balancing, and project optimization.
    export async function createGameAutonomously(request: AutonomousCreationRequest): Promise<AutonomousCreationResult> { const steps: AutonomousCreationResult["steps"] = []; const startTime = Date.now(); try { console.log(`πŸ€– Starting autonomous game creation: "${request.concept}"`); console.log(`πŸ“ Project path: ${request.projectPath}`); // Step 1: Create Project console.log("\nπŸ“¦ Step 1/8: Creating project..."); try { const gameTitle = request.gameTitle || extractTitleFromConcept(request.concept); await createNewProject(request.projectPath, gameTitle); steps.push({ step: "Project Creation", status: "success", details: { gameTitle, projectPath: request.projectPath } }); console.log(`βœ… Project created: ${gameTitle}`); } catch (error) { steps.push({ step: "Project Creation", status: "failed", error: error instanceof Error ? error.message : String(error) }); throw error; } // Step 2: Analyze concept and determine game parameters console.log("\n🧠 Step 2/8: Analyzing concept and planning game..."); const gameParams = analyzeConceptAndPlan(request); steps.push({ step: "Concept Analysis", status: "success", details: gameParams }); console.log(`βœ… Game parameters determined:`, gameParams); // Step 3: Generate scenario console.log("\nπŸ“– Step 3/8: Generating scenario..."); try { const scenarioRequest: ScenarioGenerationRequest = { projectPath: request.projectPath, theme: request.concept, style: gameParams.style, length: request.length || "medium" }; const scenarioResult = await generateAndImplementScenario(scenarioRequest); const mapsCount = scenarioResult.scenario?.maps?.length || 0; const actorsCount = scenarioResult.scenario?.characters?.length || 0; steps.push({ step: "Scenario Generation", status: "success", details: { maps: mapsCount, actors: actorsCount, events: 0 } }); console.log(`βœ… Scenario generated: ${mapsCount} maps, ${actorsCount} actors`); } catch (error) { steps.push({ step: "Scenario Generation", status: "failed", error: error instanceof Error ? error.message : String(error) }); console.log(`⚠️ Scenario generation failed: ${error instanceof Error ? error.message : String(error)}`); } // Step 4: Generate battle system console.log("\nβš”οΈ Step 4/8: Generating battle system..."); try { const battleRequest: BattleSystemConfig = { projectPath: request.projectPath, difficulty: request.difficulty || "normal", battleType: gameParams.battleType, enemyCount: gameParams.enemyCount }; const battleResult = await generateAndImplementBattleSystem(battleRequest); const enemiesCount = battleResult.battleSystem?.enemies?.length || 0; const troopsCount = battleResult.battleSystem?.troops?.length || 0; const skillsCount = battleResult.battleSystem?.skills?.length || 0; steps.push({ step: "Battle System Generation", status: "success", details: { enemies: enemiesCount, troops: troopsCount, skills: skillsCount } }); console.log(`βœ… Battle system generated: ${enemiesCount} enemies, ${troopsCount} troops`); } catch (error) { steps.push({ step: "Battle System Generation", status: "failed", error: error instanceof Error ? error.message : String(error) }); console.log(`⚠️ Battle system generation failed: ${error instanceof Error ? error.message : String(error)}`); } // Step 5: Generate quest system console.log("\n🎯 Step 5/8: Generating quest system..."); try { const questResult = await generateQuestSystem( request.projectPath, gameParams.questCount, request.concept ); const questCount = questResult.quests?.length || 0; steps.push({ step: "Quest System Generation", status: "success", details: { quests: questCount } }); console.log(`βœ… Quest system generated: ${questCount} quests`); } catch (error) { steps.push({ step: "Quest System Generation", status: "failed", error: error instanceof Error ? error.message : String(error) }); console.log(`⚠️ Quest system generation failed: ${error instanceof Error ? error.message : String(error)}`); } // Step 6: Generate assets if (request.generateAssets !== false) { console.log("\n🎨 Step 6/8: Generating game assets..."); try { const assetRequests = prepareAssetRequests(request); const assetResults = await generateAssetBatch(assetRequests); const successCount = assetResults.filter(r => r.success).length; steps.push({ step: "Asset Generation", status: "success", details: { assetsGenerated: successCount, totalRequested: assetRequests.length } }); console.log(`βœ… Assets generated: ${successCount}/${assetRequests.length}`); } catch (error) { steps.push({ step: "Asset Generation", status: "failed", error: error instanceof Error ? error.message : String(error) }); console.log(`⚠️ Asset generation failed: ${error instanceof Error ? error.message : String(error)}`); } } else { steps.push({ step: "Asset Generation", status: "skipped", details: { reason: "Asset generation disabled" } }); console.log("⏭️ Asset generation skipped"); } // Step 7: Balance stats console.log("\nβš–οΈ Step 7/8: Balancing game stats..."); try { const balanceResult = await autoBalanceStats( request.projectPath, request.difficulty || "normal" ); steps.push({ step: "Stat Balancing", status: "success", details: balanceResult }); console.log(`βœ… Stats balanced`); } catch (error) { steps.push({ step: "Stat Balancing", status: "failed", error: error instanceof Error ? error.message : String(error) }); console.log(`⚠️ Stat balancing failed: ${error instanceof Error ? error.message : String(error)}`); } // Step 8: Optimize if (request.optimize !== false) { console.log("\nπŸš€ Step 8/8: Optimizing project..."); try { const optimizeRequest: OptimizationOptions = { projectPath: request.projectPath, assetTypes: ["all"], quality: 85, removeUnused: true }; const optimizeResult = await optimizeAssets(optimizeRequest); steps.push({ step: "Project Optimization", status: "success", details: optimizeResult }); console.log(`βœ… Project optimized`); } catch (error) { steps.push({ step: "Project Optimization", status: "failed", error: error instanceof Error ? error.message : String(error) }); console.log(`⚠️ Optimization failed: ${error instanceof Error ? error.message : String(error)}`); } } else { steps.push({ step: "Project Optimization", status: "skipped", details: { reason: "Optimization disabled" } }); console.log("⏭️ Optimization skipped"); } // Final Analysis console.log("\nπŸ“Š Analyzing final project..."); const projectSize = await getProjectSize(request.projectPath); const summary = { totalMaps: 0, // Would need to count from MapInfos.json totalActors: 0, totalEnemies: 0, totalEvents: 0, totalQuests: steps.find(s => s.step === "Quest System Generation")?.details?.quests || 0, assetsGenerated: steps.find(s => s.step === "Asset Generation")?.details?.assetsGenerated || 0, projectSize: formatBytes(projectSize.totalSize || 0), estimatedPlaytime: estimatePlaytime(request.length || "medium") }; const elapsedTime = ((Date.now() - startTime) / 1000).toFixed(1); console.log("\nπŸŽ‰ ========================================"); console.log("πŸŽ‰ GAME CREATION COMPLETE!"); console.log("πŸŽ‰ ========================================"); console.log(`\n⏱️ Time taken: ${elapsedTime}s`); console.log(`\nπŸ“Š Summary:`); console.log(` πŸ—ΊοΈ Maps: ${summary.totalMaps}`); console.log(` πŸ‘€ Actors: ${summary.totalActors}`); console.log(` πŸ‘Ή Enemies: ${summary.totalEnemies}`); console.log(` πŸ“ Events: ${summary.totalEvents}`); console.log(` 🎯 Quests: ${summary.totalQuests}`); console.log(` 🎨 Assets: ${summary.assetsGenerated}`); console.log(` πŸ’Ύ Size: ${summary.projectSize}`); console.log(` ⏳ Playtime: ${summary.estimatedPlaytime}`); console.log(`\nπŸ“‚ Project: ${request.projectPath}`); console.log(`\nβœ… Open with RPG Maker MZ: ${path.join(request.projectPath, "Game.rpgproject")}`); return { success: true, projectPath: request.projectPath, steps, summary }; } catch (error) { console.log("\n❌ Game creation failed!"); return { success: false, error: error instanceof Error ? error.message : String(error), steps }; } }

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/ShunsukeHayashi/rpgmaker-mz-mcp'

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