@utaba/ucm-mcp-server
Version:
Universal Context Manager MCP Server - AI Productivity Platform
82 lines • 3.65 kB
JavaScript
import { BaseToolController } from '../base/BaseToolController.js';
export class DeleteArtifactTool extends BaseToolController {
constructor(ucmClient, logger, publishingAuthorId) {
super(ucmClient, logger, publishingAuthorId);
}
get name() {
return 'ucm_delete_artifact';
}
get description() {
return 'Delete a UCM artifact by path and version. This action cannot be undone. Only the latest or specified version is deleted.';
}
get inputSchema() {
return {
type: 'object',
properties: {
author: {
type: 'string',
description: `Author name (e.g., ${this.publishingAuthorId || '01234567890'})`,
minLength: 1,
maxLength: 50
},
repository: {
type: 'string',
description: 'Repository name (e.g., "main")',
minLength: 1,
maxLength: 50
},
category: {
type: 'string',
description: 'Category name (e.g., "commands")',
minLength: 1,
maxLength: 50
},
subcategory: {
type: 'string',
description: 'Subcategory name (e.g., "user")',
minLength: 1,
maxLength: 50
},
filename: {
type: 'string',
description: 'Filename with optional version suffix (e.g., "CreateUserCommand.ts" or "CreateUserCommand.ts@1.0.0")',
minLength: 1,
maxLength: 150
}
},
required: ['author', 'repository', 'category', 'subcategory', 'filename']
};
}
async handleExecute(params) {
const { author, repository, category, subcategory, filename } = params;
this.logger.debug('DeleteArtifactTool', `Deleting artifact: ${author}/${repository}/${category}/${subcategory}/${filename}`);
try {
// Parse filename to extract version if present
const parts = filename.split('@');
const actualFilename = parts[0];
const version = parts.length > 1 ? parts[1] : undefined;
// Delete artifact from API and capture the response
const deleteResponse = await this.ucmClient.deleteArtifact(author, repository, category, subcategory, actualFilename, version);
const path = `${author}/${repository}/${category}/${subcategory}/${filename}`;
this.logger.info('DeleteArtifactTool', `Artifact deleted successfully: ${path}`);
// Use actual response data from the server instead of hardcoded values
return {
success: deleteResponse.success || true,
message: `Artifact deleted successfully`,
author,
repository,
category,
subcategory,
filename: deleteResponse.filename || actualFilename,
version: deleteResponse.version, // Use actual version that was deleted from server
path,
deletedAt: deleteResponse.deletedAt || new Date().toISOString()
};
}
catch (error) {
this.logger.error('DeleteArtifactTool', `Failed to delete artifact: ${author}/${repository}/${category}/${subcategory}/${filename}`, '', error);
throw error;
}
}
}
//# sourceMappingURL=DeleteArtifactTool.js.map