{"record":{"id":"1017855633044f7b","repo":"eyaltoledano/claude-task-master","slug":"missing-status","errorCode":"MISSING_STATUS","errorMessage":"No status specified. Please provide a new status value.","messagePattern":"No status specified\\. Please provide a new status value\\.","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"mcp-server/src/core/direct-functions/set-task-status.js","lineNumber":61,"sourceCode":"\n\t\t// Check required parameters (id and status)\n\t\tif (!id) {\n\t\t\tconst errorMessage =\n\t\t\t\t'No task ID specified. Please provide a task ID to update.';\n\t\t\tlog.error(errorMessage);\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: 'MISSING_TASK_ID', message: errorMessage }\n\t\t\t};\n\t\t}\n\n\t\tif (!status) {\n\t\t\tconst errorMessage =\n\t\t\t\t'No status specified. Please provide a new status value.';\n\t\t\tlog.error(errorMessage);\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: 'MISSING_STATUS', message: errorMessage }\n\t\t\t};\n\t\t}\n\n\t\t// Use the provided path\n\t\tconst tasksPath = tasksJsonPath;\n\n\t\t// Execute core setTaskStatus function\n\t\tconst taskId = id;\n\t\tconst newStatus = status;\n\n\t\tlog.info(`Setting task ${taskId} status to \"${newStatus}\"`);\n\n\t\t// Call the core function with proper silent mode handling\n\t\tenableSilentMode(); // Enable silent mode before calling core function\n\t\ttry {\n\t\t\t// Call the core function\n\t\t\tawait setTaskStatus(tasksPath, taskId, newStatus, {\n\t\t\t\tmcpLog: log,","sourceCodeStart":43,"sourceCodeEnd":79,"githubUrl":"https://github.com/eyaltoledano/claude-task-master/blob/c0c98d367c55296bfe69e65680625b6db437af02/mcp-server/src/core/direct-functions/set-task-status.js#L43-L79","documentation":"setTaskStatusDirect in the MCP server requires a `status` parameter indicating the new status for a task (e.g. 'done', 'in-progress'). When the caller omits it or passes an empty string, the direct function short-circuits before touching the tasks file and returns this structured error object instead of throwing. It is a defensive input-validation guard at the top of the function.","triggerScenarios":"Calling the set-task-status MCP tool without the `status` argument, passing status: \"\" or status: null, or a tool-schema/argument-mapping bug that drops the status field before it reaches setTaskStatusDirect.","commonSituations":"LLM agents invoking the tool with only the task ID, hand-written MCP clients that forget optional-seeming fields, schema drift between client and server after a version update where status moved from optional to required.","solutions":["Pass an explicit status value (e.g. status: 'done', 'pending', 'in-progress', 'review', 'deferred', 'cancelled') in the tool arguments.","Check your MCP client/agent prompt so the model always fills `status`; add it to the required fields in your tool schema if you control it.","Verify argument wiring: log the arguments object reaching setTaskStatusDirect to confirm status is not being dropped by your transport layer."],"exampleFix":"// before\nawait mcp.call('set_task_status', { id: '5' });\n// after\nawait mcp.call('set_task_status', { id: '5', status: 'done' });","handlingStrategy":"validation","validationCode":"const VALID = ['pending','done','in-progress','review','deferred','cancelled'];\nif (typeof status !== 'string' || !VALID.includes(status)) {\n  throw new Error(`status must be one of: ${VALID.join(', ')}`);\n}","typeGuard":"function isValidStatus(v) { return typeof v === 'string' && ['pending','done','in-progress','review','deferred','cancelled'].includes(v); }","tryCatchPattern":null,"preventionTips":["Define the status enum as a shared constant and reuse it in every call site","Use TypeScript union types for status so invalid values fail at compile time","Validate tool arguments at the boundary before invoking MCP tools"],"tags":["mcp","validation","missing-argument"],"backgroundTag":"missing-required-parameter","analyzedSha":"c0c98d367c55296bfe69e65680625b6db437af02","analyzedAt":"2026-08-29T02:56:26.071Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}