UNPKG

rhombus-node-mcp

Version:
53 lines (51 loc) 2.86 kB
import { getOrgAlarmStatus, getAlertMonitoringThreatCases, getLocationAlarmStatus, } from "../api/alarm-monitoring-tool-api.js"; import { AlarmMonitoringRequestType, OUTPUT_SCHEMA, TOOL_ARGS, } from "../types/alarm-monitoring-tool-types.js"; import { createToolStructuredContent, extractFromToolExtra } from "../util.js"; const TOOL_NAME = "alarm-monitoring-tool"; const TOOL_DESCRIPTION = ` This tool retrieves alarm monitoring status and threat case information across Rhombus locations. It has the following modes of operation, determined by the "requestType" parameter: - ${AlarmMonitoringRequestType.ORG_STATUS}: Get the armed/disarmed alarm monitoring status for ALL locations in the organization in a single call. - ${AlarmMonitoringRequestType.GET_THREAT_CASES}: Retrieve alarm monitoring threat cases (security incidents). Supports filtering by time range and max results. - ${AlarmMonitoringRequestType.LOCATION_STATUS}: Get detailed alarm monitoring status for a specific location. Requires locationUuid. `; const TOOL_HANDLER = async (args, _extra) => { const { requestModifiers, sessionId } = extractFromToolExtra(_extra); try { switch (args.requestType) { case AlarmMonitoringRequestType.ORG_STATUS: { const locationStatuses = await getOrgAlarmStatus(requestModifiers, sessionId); return createToolStructuredContent({ locationStatuses }); } case AlarmMonitoringRequestType.GET_THREAT_CASES: { const threatCases = await getAlertMonitoringThreatCases(args.startTimeMs ?? undefined, args.endTimeMs ?? undefined, args.maxResults ?? undefined, requestModifiers, sessionId); return createToolStructuredContent({ threatCases }); } case AlarmMonitoringRequestType.LOCATION_STATUS: { if (!args.locationUuid) { return createToolStructuredContent({ error: "locationUuid is required for location-status.", }); } const locationDetail = await getLocationAlarmStatus(args.locationUuid, requestModifiers, sessionId); return createToolStructuredContent({ locationDetail }); } } } catch (error) { if (error instanceof Error) { return createToolStructuredContent({ error: error.message }); } return createToolStructuredContent({ error: "Unknown error" }); } return createToolStructuredContent({ error: "Invalid request type" }); }; export function createTool(server) { server.registerTool(TOOL_NAME, { title: "Alarm Monitoring", description: TOOL_DESCRIPTION, inputSchema: TOOL_ARGS, outputSchema: OUTPUT_SCHEMA.shape, annotations: { readOnlyHint: true }, }, TOOL_HANDLER); }