Skip to main content
Glama

generate

Create individual task files in the tasks/ directory from tasks.json. Specify the project root, optional output directory, and tag context to organize task management effectively.

Instructions

Generates individual task files in tasks/ directory based on tasks.json

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
fileNoAbsolute path to the tasks file
outputNoOutput directory (default: same directory as tasks file)
projectRootYesThe directory of the project. Must be an absolute path.
tagNoTag context to operate on

Implementation Reference

  • Zod schema defining input parameters for the 'generate' MCP tool: output directory, project root, and optional tag.
    const GenerateSchema = z.object({
    	output: z
    		.string()
    		.optional()
    		.describe(
    			'Output directory for generated files (default: same directory as tasks file)'
    		),
    	projectRoot: z
    		.string()
    		.describe('The directory of the project. Must be an absolute path.'),
    	tag: z.string().optional().describe('Tag context to operate on')
    });
  • Core handler logic for the 'generate' tool. Parses args, resolves output dir, calls tmCore.tasks.generateTaskFiles, handles success/error, and returns formatted result.
    const { projectRoot, tag, output } = args;
    
    try {
    	log.info(`Generating task files with args: ${JSON.stringify(args)}`);
    
    	// Resolve output directory
    	const outputDir = output
    		? path.resolve(projectRoot, output)
    		: undefined;
    
    	// Call tm-core to generate task files
    	const result = await tmCore.tasks.generateTaskFiles({
    		tag,
    		outputDir
    	});
    
    	if (result.success) {
    		log.info(
    			`Successfully generated ${result.count} task files in ${result.directory}`
    		);
    		if (result.orphanedFilesRemoved > 0) {
    			log.info(
    				`Removed ${result.orphanedFilesRemoved} orphaned task files`
    			);
    		}
    	} else {
    		log.error(
    			`Failed to generate task files: ${result.error || 'Unknown error'}`
    		);
    	}
    
    	return handleApiResult({
    		result: {
    			success: result.success,
    			data: result.success
    				? {
    						message: `Successfully generated ${result.count} task file(s)`,
    						count: result.count,
    						directory: result.directory,
    						orphanedFilesRemoved: result.orphanedFilesRemoved
    					}
    				: undefined,
    			error: result.success ? undefined : { message: result.error || 'Unknown error' }
    		},
    		log,
    		projectRoot,
    		tag
    	});
    } catch (error: any) {
    	log.error(`Error in generate tool: ${error.message}`);
    	if (error.stack) {
    		log.debug(error.stack);
    	}
    	return handleApiResult({
    		result: {
    			success: false,
    			error: {
    				message: `Failed to generate task files: ${error.message}`
    			}
    		},
    		log,
    		projectRoot
    	});
    }
  • Registration function that defines and adds the 'generate' tool to the FastMCP server instance.
    export function registerGenerateTool(server: FastMCP) {
    	server.addTool({
    		name: 'generate',
    		description:
    			'Generates individual task files in tasks/ directory based on tasks.json. Only works with local file storage.',
    		parameters: GenerateSchema,
    		execute: withToolContext(
    			'generate',
    			async (args: GenerateArgs, { log, tmCore }: ToolContext) => {
    				const { projectRoot, tag, output } = args;
    
    				try {
    					log.info(`Generating task files with args: ${JSON.stringify(args)}`);
    
    					// Resolve output directory
    					const outputDir = output
    						? path.resolve(projectRoot, output)
    						: undefined;
    
    					// Call tm-core to generate task files
    					const result = await tmCore.tasks.generateTaskFiles({
    						tag,
    						outputDir
    					});
    
    					if (result.success) {
    						log.info(
    							`Successfully generated ${result.count} task files in ${result.directory}`
    						);
    						if (result.orphanedFilesRemoved > 0) {
    							log.info(
    								`Removed ${result.orphanedFilesRemoved} orphaned task files`
    							);
    						}
    					} else {
    						log.error(
    							`Failed to generate task files: ${result.error || 'Unknown error'}`
    						);
    					}
    
    					return handleApiResult({
    						result: {
    							success: result.success,
    							data: result.success
    								? {
    										message: `Successfully generated ${result.count} task file(s)`,
    										count: result.count,
    										directory: result.directory,
    										orphanedFilesRemoved: result.orphanedFilesRemoved
    									}
    								: undefined,
    							error: result.success ? undefined : { message: result.error || 'Unknown error' }
    						},
    						log,
    						projectRoot,
    						tag
    					});
    				} catch (error: any) {
    					log.error(`Error in generate tool: ${error.message}`);
    					if (error.stack) {
    						log.debug(error.stack);
    					}
    					return handleApiResult({
    						result: {
    							success: false,
    							error: {
    								message: `Failed to generate task files: ${error.message}`
    							}
    						},
    						log,
    						projectRoot
    					});
    				}
    			}
    		)
    	});
    }
  • Central tool registry mapping the 'generate' tool name to its registration function.
    generate: registerGenerateTool
  • Dynamic registration loop that invokes the generate tool's registration function (along with others) on the MCP server.
    toolsToRegister.forEach((toolName) => {
    	try {
    		const registerFunction = getToolRegistration(toolName);
    		if (registerFunction) {
    			registerFunction(server);
    			logger.debug(`Registered tool: ${toolName}`);
    			registeredTools.push(toolName);
    		} else {
    			logger.warn(`Tool ${toolName} not found in registry`);
    			failedTools.push(toolName);
    		}
    	} catch (error) {
    		if (error.message && error.message.includes('already registered')) {
    			logger.debug(`Tool ${toolName} already registered, skipping`);
    			registeredTools.push(toolName);
    		} else {
    			logger.error(`Failed to register tool ${toolName}: ${error.message}`);
    			failedTools.push(toolName);
    		}
    	}
    });

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/eyaltoledano/claude-task-master'

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