UNPKG

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