eyaltoledano/claude-task-master · error
MISSING_STATUS
MISSING_STATUS
Error message
No status specified. Please provide a new status value.
What it means
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.
Source
Thrown at mcp-server/src/core/direct-functions/set-task-status.js:61
// Check required parameters (id and status)
if (!id) {
const errorMessage =
'No task ID specified. Please provide a task ID to update.';
log.error(errorMessage);
return {
success: false,
error: { code: 'MISSING_TASK_ID', message: errorMessage }
};
}
if (!status) {
const errorMessage =
'No status specified. Please provide a new status value.';
log.error(errorMessage);
return {
success: false,
error: { code: 'MISSING_STATUS', message: errorMessage }
};
}
// Use the provided path
const tasksPath = tasksJsonPath;
// Execute core setTaskStatus function
const taskId = id;
const newStatus = status;
log.info(`Setting task ${taskId} status to "${newStatus}"`);
// Call the core function with proper silent mode handling
enableSilentMode(); // Enable silent mode before calling core function
try {
// Call the core function
await setTaskStatus(tasksPath, taskId, newStatus, {
mcpLog: log,View on GitHub (pinned to c0c98d367c)
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.
Example fix
// before
await mcp.call('set_task_status', { id: '5' });
// after
await mcp.call('set_task_status', { id: '5', status: 'done' }); Defensive patterns
Strategy: validation
Validate before calling
const VALID = ['pending','done','in-progress','review','deferred','cancelled'];
if (typeof status !== 'string' || !VALID.includes(status)) {
throw new Error(`status must be one of: ${VALID.join(', ')}`);
} Type guard
function isValidStatus(v) { return typeof v === 'string' && ['pending','done','in-progress','review','deferred','cancelled'].includes(v); } Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Understand the failure class
Background: Missing required parameter errors: what 'X is required' and 'the required X param is missing' mean, and how to fix them — this error's family across 27 libraries.
Related errors
AI-assisted analysis of eyaltoledano/claude-task-master@c0c98d367c (2026-08-29).
Data as JSON: /api/errors/1017855633044f7b.
Report an issue: GitHub.