eyaltoledano/claude-task-master · warning

MISSING_PARAMETER

MISSING_PARAMETER

Error message

Old tag name is required and must be a string

What it means

The tag being renamed (`oldName`) must be a non-empty string. renameTagDirect validates this after checking tasksJsonPath and returns MISSING_PARAMETER if oldName is missing, empty, or not a string.

Source

Thrown at mcp-server/src/core/direct-functions/rename-tag.js:57

			log.error('renameTagDirect called without tasksJsonPath');
			disableSilentMode();
			return {
				success: false,
				error: {
					code: 'MISSING_ARGUMENT',
					message: 'tasksJsonPath is required'
				}
			};
		}

		// Check required parameters
		if (!oldName || typeof oldName !== 'string') {
			log.error('Missing required parameter: oldName');
			disableSilentMode();
			return {
				success: false,
				error: {
					code: 'MISSING_PARAMETER',
					message: 'Old tag name is required and must be a string'
				}
			};
		}

		if (!newName || typeof newName !== 'string') {
			log.error('Missing required parameter: newName');
			disableSilentMode();
			return {
				success: false,
				error: {
					code: 'MISSING_PARAMETER',
					message: 'New tag name is required and must be a string'
				}
			};
		}

		log.info(`Renaming tag from "${oldName}" to "${newName}"`);

View on GitHub (pinned to c0c98d367c)

Solutions

  1. Provide oldName as a non-empty string matching an existing tag exactly (check task-master tags list)
  2. Coerce numeric or otherwise non-string tag values to strings before calling
  3. Fix the argument key name in the calling code so the value lands in oldName
  4. Run task-master tags to confirm the source tag exists before renaming

Example fix

// before
await client.callTool('rename_tag', { oldName: 42, newName: 'sprint-2' });

// after
await client.callTool('rename_tag', { oldName: '42', newName: 'sprint-2', projectRoot: '/project' });
Defensive patterns

Strategy: type-guard

Validate before calling

if (typeof oldName !== 'string' || oldName.trim() === '') {
  throw new Error('rename_tag: oldName must be a non-empty string');
}

Type guard

function isNonEmptyString(v) {
  return typeof v === 'string' && v.trim().length > 0;
}

Try / catch

try {
  const res = await client.callTool('rename_tag', { oldName, newName, projectRoot });
  if (res.error?.code === 'MISSING_PARAMETER' && /old tag/i.test(res.error.message)) {
    console.error('oldName missing or wrong type — pass the existing tag name as a string');
  }
} catch (e) {
  console.error('rename_tag failed:', e.message);
}

Prevention

When it happens

Trigger: rename_tag called with oldName absent, oldName: '' , oldName: null, or a non-string (number/object) — e.g. an agent passing { name: 3 } or putting oldName under a different key.

Common situations: An LLM supplying the wrong argument name so oldName is undefined; numeric tag names passed as numbers instead of strings; empty tag name from a failed upstream lookup; client schema drift renaming the field.

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/aef4a5805491eddf. Report an issue: GitHub.