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
JavaScript
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