ms-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
68 lines • 2.81 kB
JavaScript
import { logger } from "../../index.js";
import { getTypesenseClient } from "syia-mcp-utils";
/**
* Retrieves vessel details including IMO number, vessel name, class, flag, DOC and ERP version
* @param args - Object containing query (vessel name)
* @returns Promise<ToolResponse> - Vessel details or error message
*/
export async function getVesselDetails(args) {
const { query } = args;
if (!query || query.trim() === '') {
const errorResponse = {
type: "text",
text: "Error: Vessel name query is required. Please provide a vessel name to search for."
};
return [errorResponse];
}
try {
logger.info(`Searching for vessel details: ${query}`);
// Search in vessel collection
const collection = "vessels";
const searchQuery = {
q: query.trim(),
query_by: "vesselName,imo",
filter_by: "",
sort_by: "text_match:desc",
per_page: 10,
include_fields: "imo,vesselName,class,flag,doc,erpVersion"
};
logger.debug(`[Typesense Query] ${JSON.stringify(searchQuery)}`);
const results = await getTypesenseClient().collections(collection).documents().search(searchQuery);
if (!results || !results.hits || results.hits.length === 0) {
const noDataResponse = {
type: "text",
text: `No vessel found with name or IMO matching '${query}'. Please check the spelling or try a different search term.`
};
return [noDataResponse];
}
// Get the best match (highest text_match score)
const bestMatch = results.hits[0];
const vessel = bestMatch.document;
// Format the response
const vesselDetails = {
imo: vessel.imo || "Not available",
vesselName: vessel.vesselName || "Not available",
class: vessel.class || "Not available",
flag: vessel.flag || "Not available",
doc: vessel.doc || "Not available",
erpVersion: vessel.erpVersion || "Not available",
searchQuery: query,
totalResults: results.hits.length
};
const successResponse = {
type: "text",
text: JSON.stringify(vesselDetails, null, 2)
};
logger.info(`Successfully retrieved vessel details for: ${vessel.vesselName} (IMO: ${vessel.imo})`);
return [successResponse];
}
catch (error) {
logger.error('Error retrieving vessel details:', error);
const errorResponse = {
type: "text",
text: `Error retrieving vessel details: ${error.message || 'Unknown error occurred'}`
};
return [errorResponse];
}
}
//# sourceMappingURL=vesselTools.js.map