plan_minestom_feature
Plan Minestom server features by generating implementation outlines for bootstrap, commands, events, instances, or scheduled tasks based on official patterns.
Instructions
Use this when you want a Minestom feature plan grounded in official patterns for bootstrap, commands, events, instances, schedulers, and threading.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| featureType | Yes | The kind of Minestom feature you want to plan. | |
| language | No | The target JVM language for the implementation. | java |
| packageName | No | Base package name for the generated outline. | dev.example.minestom |
| targetName | Yes | A short feature name such as SpawnCommand or LobbyJoinListener. | |
| useCases | No | Optional behavior notes or acceptance criteria to fold into the plan. |
Implementation Reference
- src/minestom/planning.ts:59-112 (handler)The implementation of the `plan_minestom_feature` tool handler.
export const planMinestomFeatureTool: TanStackServerTool = toolDefinition({ description: "Use this when you want a Minestom feature plan grounded in official patterns for bootstrap, commands, events, instances, schedulers, and threading.", inputSchema: planMinestomFeatureInputSchema, name: "plan_minestom_feature", outputSchema: planMinestomFeatureOutputSchema, }).server(async (args) => { const { featureType, language, packageName, targetName, useCases } = planMinestomFeatureInputSchema.parse(args); const blueprint = getFeatureBlueprint(featureType); const extension = language === "kotlin" ? "kt" : "java"; const packagePath = packageName.replaceAll(".", "/"); const files = blueprint.fileTemplates.map((template) => { const className = template.suffix ? `${targetName}${template.suffix}` : targetName; return { path: `src/main/${language}/${packagePath}/${className}.${extension}`, purpose: template.purpose, }; }); const keyApis = getApisBySymbols(blueprint.keyApiSymbols).map((api) => ({ javadocUrl: api.javadocUrl, packageName: api.packageName, symbol: api.symbol, })); const summary = useCases.length > 0 ? `${blueprint.summary} Prioritize these use cases: ${useCases.join("; ")}.` : blueprint.summary; return planMinestomFeatureOutputSchema.parse({ featureType, files, implementationSteps: [ ...blueprint.implementationSteps, ...(useCases.length > 0 ? [ `Fold the requested behavior into the design without breaking the main Minestom ownership boundary: ${useCases.join("; ")}.`, ] : []), ], keyApis, primaryTopic: blueprint.primaryTopic, summary, supportingTopics: blueprint.supportingTopics, threadSafetyNotes: blueprint.threadSafetyNotes, verificationSteps: blueprint.verificationSteps, }); }); - src/minestom/planning.ts:12-34 (schema)Input schema for the `plan_minestom_feature` tool.
const planMinestomFeatureInputSchema = z.object({ featureType: minestomFeatureTypeSchema.describe( "The kind of Minestom feature you want to plan.", ), language: languageSchema .default("java") .describe("The target JVM language for the implementation."), packageName: z .string() .default("dev.example.minestom") .describe("Base package name for the generated outline."), targetName: z .string() .describe( "A short feature name such as SpawnCommand or LobbyJoinListener.", ), useCases: z .array(z.string()) .default([]) .describe( "Optional behavior notes or acceptance criteria to fold into the plan.", ), });