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
- Provide oldName as a non-empty string matching an existing tag exactly (check task-master tags list)
- Coerce numeric or otherwise non-string tag values to strings before calling
- Fix the argument key name in the calling code so the value lands in oldName
- 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
- Coerce tag values from config/UI to strings before calling
- List tags (task-master tags) and use the exact existing name
- Validate both oldName and newName with a shared isNonEmptyString check
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
- Generated object does not match schema: ${validationError.me
- MISSING_ARGUMENT
- INPUT_VALIDATION_ERROR
- MISSING_ARGUMENT
- INPUT_VALIDATION_ERROR
AI-assisted analysis of eyaltoledano/claude-task-master@c0c98d367c (2026-08-29).
Data as JSON: /api/errors/aef4a5805491eddf.
Report an issue: GitHub.