UNPKG

pms-analysis-reports-mcp-server

Version:

PMS analysis reports server handling maintenance reports, equipment analysis, compliance tracking, and performance metrics with ERP access for data extraction

374 lines 18.3 kB
import { getTypesenseClient } from "../../utils/typesense.js"; import { fetchQADetails, getArtifact } from "../../utils/helper_functions.js"; import { logger } from "../../index.js"; export class MaintenanceToolHandler { constructor() { this.typesenseClient = getTypesenseClient(); } async getOverallMaintenanceSummary(args) { logger.info("getOverallMaintenanceSummary called", args); const mongodbEtlDevDataDbName = process.env.MONGODB_ETL_DEV_DATA_DB_NAME || process.env.mongodbEtlDevDataDbName || 'syia-etl-dev'; const mongodbEtlDevDataUri = process.env.MONGODB_ETL_DEV_DATA_URI || process.env.mongodbEtlDevDataUri || ''; try { const imo = args.imo; if (!imo) { throw new Error("imo is required. Only the following properties are allowed: imo. Please check the tool schema for getOverallMaintenanceSummary for the allowed properties."); } // Fetch QA details for question 116 (PMS Summary) const result = await fetchQADetails(imo, 116, mongodbEtlDevDataDbName, mongodbEtlDevDataUri); // Get link and vessel name for MongoDB const dataLink = result.link ?? ""; const vesselName = result.vesselName || ""; // // Insert the data link to mongodb collection // await insertDataLinkToMongoDB( // dataLink, // "overall maintenance summary", // sessionId, // imo, // vesselName, // mongodbEtlDevDataDbName, // mongodbEtlDevDataUri // ); // Format results as JSON const formattedText = JSON.stringify(result, null, 2); // Create artifact const artifactData = getArtifact("get_overall_maintenance_summary", dataLink); const content = { type: "text", text: formattedText }; const artifact = { type: "text", text: JSON.stringify(artifactData, null, 2) }; return [content, artifact]; } catch (error) { logger.error("Error in getOverallMaintenanceSummary", { error }); throw new Error(`Error retrieving maintenance summary: ${error instanceof Error ? error.message : String(error)}`); } } async getMainEngineMaintenanceSummary(args) { logger.info("getMainEngineMaintenanceSummary called", args); const mongodbEtlDevDataDbName = process.env.MONGODB_ETL_DEV_DATA_DB_NAME || process.env.mongodbEtlDevDataDbName || 'syia-etl-dev'; const mongodbEtlDevDataUri = process.env.MONGODB_ETL_DEV_DATA_URI || process.env.mongodbEtlDevDataUri || ''; try { const imo = args.imo; if (!imo) { throw new Error("imo is required. Only the following properties are allowed: imo. Please check the tool schema for getMainEngineMaintenanceSummary for the allowed properties."); } // Fetch QA details for question 112 (Main Engine Maintenance Status Summary) const result = await fetchQADetails(imo, 112, mongodbEtlDevDataDbName, mongodbEtlDevDataUri); logger.info("Result: ", { result }); // Get link and vessel name for MongoDB const dataLink = result.link ?? ""; const vesselName = result.vesselName || ""; // // Insert the data link to mongodb collection // await insertDataLinkToMongoDB( // dataLink, // "main engine maintenance summary", // sessionId, // imo, // vesselName, // mongodbEtlDevDataDbName, // mongodbEtlDevDataUri // ); // Format results as JSON const formattedText = JSON.stringify(result, null, 2); // Create artifact const artifactData = getArtifact("get_main_engine_maintenance_summary", dataLink); const content = { type: "text", text: formattedText }; const artifact = { type: "text", text: JSON.stringify(artifactData, null, 2) }; return [content, artifact]; } catch (error) { logger.error("Error in getMainEngineMaintenanceSummary", { error }); throw new Error(`Error retrieving main engine maintenance summary: ${error instanceof Error ? error.message : String(error)}`); } } async getAuxiliaryEngineMaintenanceSummary(args) { logger.info("getAuxiliaryEngineMaintenanceSummary called", args); const mongodbEtlDevDataDbName = process.env.MONGODB_ETL_DEV_DATA_DB_NAME || process.env.mongodbEtlDevDataDbName || 'syia-etl-dev'; const mongodbEtlDevDataUri = process.env.MONGODB_ETL_DEV_DATA_URI || process.env.mongodbEtlDevDataUri || ''; try { const imo = args.imo; if (!imo) { throw new Error("imo is required. Only the following properties are allowed: imo. Please check the tool schema for getAuxiliaryEngineMaintenanceSummary for the allowed properties."); } // Fetch QA details for question 7 (Aux Engine Maintenance Status Summary) const result = await fetchQADetails(imo, 7, mongodbEtlDevDataDbName, mongodbEtlDevDataUri); // Get link and vessel name for MongoDB const dataLink = result.link ?? ""; const vesselName = result.vesselName || ""; // // Insert the data link to mongodb collection // await insertDataLinkToMongoDB( // dataLink, // "auxiliary engine maintenance summary", // sessionId, // imo, // vesselName, // mongodbEtlDevDataDbName, // mongodbEtlDevDataUri // ); // Format results as JSON const formattedText = JSON.stringify(result, null, 2); // Create artifact const artifactData = getArtifact("get_auxiliary_engine_maintenance_summary", dataLink); const content = { type: "text", text: formattedText }; const artifact = { type: "text", text: JSON.stringify(artifactData, null, 2) }; return [content, artifact]; } catch (error) { logger.error("Error in getAuxiliaryEngineMaintenanceSummary", { error }); throw new Error(`Error retrieving auxiliary engine maintenance summary: ${error instanceof Error ? error.message : String(error)}`); } } async getPurifierMaintenanceSummary(args) { logger.info("getPurifierMaintenanceSummary called", args); const mongodbEtlDevDataDbName = process.env.MONGODB_ETL_DEV_DATA_DB_NAME || process.env.mongodbEtlDevDataDbName || 'syia-etl-dev'; const mongodbEtlDevDataUri = process.env.MONGODB_ETL_DEV_DATA_URI || process.env.mongodbEtlDevDataUri || ''; try { const imo = args.imo; if (!imo) { throw new Error("imo is required. Only the following properties are allowed: imo. Please check the tool schema for getPurifierMaintenanceSummary for the allowed properties."); } // Fetch QA details for question 128 (Purifier Maintenance Status Summary) const result = await fetchQADetails(imo, 128, mongodbEtlDevDataDbName, mongodbEtlDevDataUri); // Get link and vessel name for MongoDB const dataLink = result.link ?? ""; const vesselName = result.vesselName || ""; // // Insert the data link to mongodb collection // await insertDataLinkToMongoDB( // dataLink, // "purifier maintenance summary", // sessionId, // imo, // vesselName, // mongodbEtlDevDataDbName, // mongodbEtlDevDataUri // ); // Format results as JSON const formattedText = JSON.stringify(result, null, 2); // Create artifact const artifactData = getArtifact("get_purifier_maintenance_summary", dataLink); const content = { type: "text", text: formattedText }; const artifact = { type: "text", text: JSON.stringify(artifactData, null, 2) }; return [content, artifact]; } catch (error) { logger.error("Error in getPurifierMaintenanceSummary", { error }); throw new Error(`Error retrieving purifier maintenance summary: ${error instanceof Error ? error.message : String(error)}`); } } async getCompressorMaintenanceSummary(args) { logger.info("getCompressorMaintenanceSummary called", args); const mongodbEtlDevDataDbName = process.env.MONGODB_ETL_DEV_DATA_DB_NAME || process.env.mongodbEtlDevDataDbName || 'syia-etl-dev'; const mongodbEtlDevDataUri = process.env.MONGODB_ETL_DEV_DATA_URI || process.env.mongodbEtlDevDataUri || ''; try { const imo = args.imo; if (!imo) { throw new Error("imo is required. Only the following properties are allowed: imo. Please check the tool schema for getCompressorMaintenanceSummary for the allowed properties."); } // Fetch QA details for question 30 (Compressor Maintenance Status Summary) const result = await fetchQADetails(imo, 30, mongodbEtlDevDataDbName, mongodbEtlDevDataUri); // Get link and vessel name for MongoDB const dataLink = result.link ?? ""; const vesselName = result.vesselName || ""; // // Insert the data link to mongodb collection // await insertDataLinkToMongoDB( // dataLink, // "compressor maintenance summary", // sessionId, // imo, // vesselName, // mongodbEtlDevDataDbName, // mongodbEtlDevDataUri // ); // Format results as JSON const formattedText = JSON.stringify(result, null, 2); // Create artifact const artifactData = getArtifact("get_compressor_maintenance_summary", dataLink); const content = { type: "text", text: formattedText }; const artifact = { type: "text", text: JSON.stringify(artifactData, null, 2) }; return [content, artifact]; } catch (error) { logger.error("Error in getCompressorMaintenanceSummary", { error }); throw new Error(`Error retrieving compressor maintenance summary: ${error instanceof Error ? error.message : String(error)}`); } } async getCriticalSparesList(args) { logger.info("getCriticalSparesList called", args); const mongodbEtlDevDataDbName = process.env.MONGODB_ETL_DEV_DATA_DB_NAME || process.env.mongodbEtlDevDataDbName || 'syia-etl-dev'; const mongodbEtlDevDataUri = process.env.MONGODB_ETL_DEV_DATA_URI || process.env.mongodbEtlDevDataUri || ''; try { const imo = args.imo; if (!imo) { throw new Error("imo is required. Only the following properties are allowed: imo. Please check the tool schema for getCriticalSparesList for the allowed properties."); } // Fetch QA details for question 177 (Critical Spares List) let result; try { result = await fetchQADetails(imo, 177, mongodbEtlDevDataDbName, mongodbEtlDevDataUri); } catch (error) { // If no critical spares list found, return appropriate message const noDataResponse = { type: "text", text: "No critical spares list found for this vessel." }; return [noDataResponse]; } // Get link and vessel name for MongoDB const dataLink = result.link ?? ""; const vesselName = result.vesselName || ""; // // Insert the data link to mongodb collection // await insertDataLinkToMongoDB( // dataLink, // "critical spares list", // sessionId, // imo, // vesselName, // mongodbEtlDevDataDbName, // mongodbEtlDevDataUri // ); // Format results as JSON const formattedText = JSON.stringify(result, null, 2); // Create artifact const artifactData = getArtifact("get_critical_spares_list", dataLink); const content = { type: "text", text: formattedText }; const artifact = { type: "text", text: JSON.stringify(artifactData, null, 2) }; return [content, artifact]; } catch (error) { logger.error("Error in getCriticalSparesList", { error }); throw new Error(`Error retrieving critical spares list: ${error instanceof Error ? error.message : String(error)}`); } } async getMainEngineScavengeInspectionReview(args) { logger.info("getMainEngineScavengeInspectionReview called", args); const mongodbEtlDevDataDbName = process.env.MONGODB_ETL_DEV_DATA_DB_NAME || process.env.mongodbEtlDevDataDbName || 'syia-etl-dev'; const mongodbEtlDevDataUri = process.env.MONGODB_ETL_DEV_DATA_URI || process.env.mongodbEtlDevDataUri || ''; const imo = args.imo; if (!imo) { throw new Error("imo is required. Only the following properties are allowed: imo. Please check the tool schema for getMainEngineScavengeInspectionReview for the allowed properties."); } try { // Get data from QnA - Q No.70 for ME Scavenge Space Inspection Review const result = await fetchQADetails(imo, 70, mongodbEtlDevDataDbName, mongodbEtlDevDataUri); // // Insert data link to MongoDB if available // if (result.link) { // await insertDataLinkToMongoDB( // result.link, // "main engine scavenge inspection review", // sessionId, // imo.toString(), // result.vesselName || "", // mongodbEtlDevDataDbName, // mongodbEtlDevDataUri // ); // } // Generate artifact data const artifactData = getArtifact("get_main_engine_scavenge_inspection_review", result.link || ""); const content = { type: "text", text: JSON.stringify(result, null, 2) }; const artifact = { type: "text", text: JSON.stringify(artifactData, null, 2) }; return [content, artifact]; } catch (error) { logger.error("Error getting main engine scavenge inspection review:", error); throw new Error(`Error getting main engine scavenge inspection review: ${error instanceof Error ? error.message : String(error)}`); } } async getFleetMajorMachineryOverdueJobs(args) { logger.info("getFleetMajorMachineryOverdueJobs called", args); const mongodbEtlDevDataDbName = process.env.mongodbEtlDevDataDbName || 'syia-etl-dev'; const mongodbEtlDevDataUri = process.env.mongodbEtlDevDataUri || ''; try { const imo = args.imo; const sessionId = args.session_id || "testing"; if (!imo) { throw new Error("imo is required. Only the following properties are allowed: imo. Please check the tool schema for getFleetMajorMachineryOverdueJobs for the allowed properties."); } // Fetch QA details for question 110 (Fleet Major Machinery Overdue Jobs) let result; try { result = await fetchQADetails(imo, 110, mongodbEtlDevDataDbName, mongodbEtlDevDataUri); } catch (error) { // If no fuel bunker details found, return appropriate message const noDataResponse = { type: "text", text: "No fuel bunker details found for this vessel." }; return [noDataResponse]; } // Get link and vessel name for MongoDB const dataLink = result.link ?? ""; const vesselName = result.vesselName || ""; // // Insert the data link to mongodb collection // await insertDataLinkToMongoDB( // dataLink, // "fleet major machinery overdue jobs", // sessionId, // imo, // vesselName, // mongodbEtlDevDataDbName, // mongodbEtlDevDataUri // ); // Format results as JSON const formattedText = JSON.stringify(result, null, 2); // Create artifact const artifactData = getArtifact("get_fleet_major_machinery_overdue_jobs", dataLink); const content = { type: "text", text: formattedText }; const artifact = { type: "text", text: JSON.stringify(artifactData, null, 2) }; return [content, artifact]; } catch (error) { logger.error("Error in getFleetMajorMachineryOverdueJobs", { error }); throw new Error(`Error retrieving fleet major machinery overdue jobs: ${error instanceof Error ? error.message : String(error)}`); } } } //# sourceMappingURL=maintenanceTools.js.map