UNPKG

atlas-mcp-server

Version:

ATLAS (Adaptive Task & Logic Automation System): An MCP server enabling LLM agents to manage projects, tasks, and knowledge via a Neo4j-backed, three-tier architecture. Facilitates complex workflow automation and project management through LLM Agents.

126 lines (125 loc) 5.54 kB
import { KnowledgeService } from "../../../services/neo4j/knowledgeService.js"; import { BaseErrorCode, McpError } from "../../../types/errors.js"; import { ResponseFormat, createToolResponse } from "../../../types/mcp.js"; import { logger, requestContextService } from "../../../utils/index.js"; // Import requestContextService import { AtlasKnowledgeDeleteSchema, } from "./types.js"; import { formatKnowledgeDeleteResponse } from "./responseFormat.js"; export const atlasDeleteKnowledge = async (input, context) => { let validatedInput; const reqContext = context.requestContext ?? requestContextService.createRequestContext({ toolName: "atlasDeleteKnowledge", }); try { // Parse and validate input against schema definition validatedInput = AtlasKnowledgeDeleteSchema.parse(input); // Select operation strategy based on request mode if (validatedInput.mode === "bulk") { // Process bulk removal operation const { knowledgeIds } = validatedInput; logger.info("Initiating batch knowledge item removal", { ...reqContext, count: knowledgeIds.length, knowledgeIds, }); const results = { success: true, message: `Successfully removed ${knowledgeIds.length} knowledge items`, deleted: [], errors: [], }; // Process removal operations sequentially to maintain data integrity for (const knowledgeId of knowledgeIds) { try { const deleted = await KnowledgeService.deleteKnowledge(knowledgeId); if (deleted) { results.deleted.push(knowledgeId); } else { // Knowledge item not found results.success = false; results.errors.push({ knowledgeId, error: { code: BaseErrorCode.NOT_FOUND, message: `Knowledge item with ID ${knowledgeId} not found`, }, }); } } catch (error) { results.success = false; results.errors.push({ knowledgeId, error: { code: error instanceof McpError ? error.code : BaseErrorCode.INTERNAL_ERROR, message: error instanceof Error ? error.message : "Unknown error", details: error instanceof McpError ? error.details : undefined, }, }); } } if (results.errors.length > 0) { results.message = `Removed ${results.deleted.length} of ${knowledgeIds.length} knowledge items with ${results.errors.length} errors`; } logger.info("Batch knowledge removal operation completed", { ...reqContext, successCount: results.deleted.length, errorCount: results.errors.length, }); // Conditionally format response if (validatedInput.responseFormat === ResponseFormat.JSON) { return createToolResponse(JSON.stringify(results, null, 2)); } else { return formatKnowledgeDeleteResponse(results); } } else { // Process single entity removal const { id } = validatedInput; logger.info("Removing knowledge item", { ...reqContext, knowledgeId: id, }); const deleted = await KnowledgeService.deleteKnowledge(id); if (!deleted) { logger.warning("Target knowledge item not found for removal operation", { ...reqContext, knowledgeId: id, }); throw new McpError(BaseErrorCode.NOT_FOUND, `Knowledge item with identifier ${id} not found`, { knowledgeId: id }); } logger.info("Knowledge item successfully removed", { ...reqContext, knowledgeId: id, }); const result = { id, success: true, message: `Knowledge item with ID ${id} removed successfully`, }; // Conditionally format response if (validatedInput.responseFormat === ResponseFormat.JSON) { return createToolResponse(JSON.stringify(result, null, 2)); } else { return formatKnowledgeDeleteResponse(result); } } } catch (error) { // Handle specific error cases if (error instanceof McpError) { throw error; } logger.error("Knowledge item removal operation failed", error, { ...reqContext, inputReceived: validatedInput ?? input, }); // Translate unknown errors to structured McpError format throw new McpError(BaseErrorCode.INTERNAL_ERROR, `Failed to remove knowledge item(s): ${error instanceof Error ? error.message : "Unknown error"}`); } };