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

  1. Pass an explicit status value (e.g. status: 'done', 'pending', 'in-progress', 'review', 'deferred', 'cancelled') in the tool arguments.
  2. 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.
  3. 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

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.