subtask_create
Create subtasks for a parent task by providing one or multiple titles in a single request.
Instructions
Create one or more subtasks (checklist items) for a task. Accepts a single title string or an array of title strings for batch creation.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Parent task ID | |
| titles | Yes |
Implementation Reference
- src/tools/subtasks.ts:60-79 (handler)Handler function that creates one or more subtasks. Accepts a task_id and titles (single string or array). Uses a DB transaction to insert each subtask and logs activity via logActivity. Returns single object or array depending on input count.
function handleSubtaskCreate(args: Record<string, unknown>) { const db = getDb(); const taskId = args.task_id as number; const rawTitles = args.titles; const titles = Array.isArray(rawTitles) ? rawTitles as string[] : [rawTitles as string]; const stmt = db.prepare( 'INSERT INTO subtasks (task_id, title) VALUES (?, ?) RETURNING *' ); const created = db.transaction(() => { return titles.map((title) => { const subtask = stmt.get(taskId, title) as Record<string, unknown>; logActivity(db, 'subtask', subtask.id as number, 'created', null, null, null, `Subtask '${title}' created`); return subtask; }); })(); return created.length === 1 ? created[0] : created; } - src/tools/subtasks.ts:7-25 (schema)Tool definition with input schema requiring task_id (integer) and titles (string or string array).
{ name: 'subtask_create', description: 'Create one or more subtasks (checklist items) for a task. Accepts a single title string or an array of title strings for batch creation.', annotations: { title: 'Create Subtask(s)', readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false }, inputSchema: { type: 'object', properties: { task_id: { type: 'integer', description: 'Parent task ID' }, titles: { oneOf: [ { type: 'string', description: 'Single subtask title' }, { type: 'array', items: { type: 'string' }, description: 'Multiple subtask titles' }, ], }, }, required: ['task_id', 'titles'], }, }, - src/tools/subtasks.ts:145-149 (registration)Exports the handlers record mapping tool name 'subtask_create' to handleSubtaskCreate function.
export const handlers: Record<string, ToolHandler> = { subtask_create: handleSubtaskCreate, subtask_update: handleSubtaskUpdate, subtask_delete: handleSubtaskDelete, }; - src/index.ts:37-49 (registration)Registration of all handlers including subtaskHandlers into the ALL_HANDLERS record used by the server.
const ALL_HANDLERS: Record<string, (args: Record<string, unknown>) => unknown> = { ...projectHandlers, ...epicHandlers, ...taskHandlers, ...subtaskHandlers, ...noteHandlers, ...commentHandlers, ...templateHandlers, ...dashboardHandlers, ...searchHandlers, ...activityHandlers, ...exportImportHandlers, }; - src/index.ts:23-35 (registration)Registration of all tool definitions including subtaskDefs into the ALL_TOOLS array.
const ALL_TOOLS: Tool[] = [ ...projectDefs, ...epicDefs, ...taskDefs, ...subtaskDefs, ...noteDefs, ...commentDefs, ...templateDefs, ...dashboardDefs, ...searchDefs, ...activityDefs, ...exportImportDefs, ];