import { EventEmitter } from "node:events"; import type { ScoreWeights } from "../score.js"; import type { HealthGrade, HealthScore, TargetConfig } from "../types.js"; /** Options for configuring the ObservatoryMonitor. */ export interface MonitorOptions { /** How often to check health (ms). Default: 60000 (1 min) */ intervalMs?: number; /** Minimum score before triggering onDegraded. Default: 70 */ degradedThreshold?: number; /** Minimum score before triggering onUnhealthy. Default: 40 */ unhealthyThreshold?: number; /** Callback when score drops below degradedThreshold */ onDegraded?: (score: HealthScore, server: string) => void; /** Callback when score drops below unhealthyThreshold */ onUnhealthy?: (score: HealthScore, server: string) => void; /** Callback when score recovers above degradedThreshold */ onRecovered?: (score: HealthScore, server: string) => void; /** Optional: report scores to a remote endpoint */ reportTo?: string; /** Custom score weights */ weights?: Partial; } export type ServerStatus = "healthy" | "degraded" | "unhealthy" | "unknown"; /** Represents a server being monitored with its current state and history. */ export interface MonitoredServer { targetId: string; lastScore?: HealthScore; lastCheck?: Date; status: ServerStatus; history: Array<{ timestamp: Date; score: number; grade: HealthGrade; }>; } /** * Real-time monitor for MCP server health. * * Uses `runTarget()` and `computeHealthScore()` under the hood to periodically * check servers and fire callbacks when health changes. */ export declare class ObservatoryMonitor extends EventEmitter { private readonly servers; private readonly options; private timer; private disposed; constructor(options?: MonitorOptions); /** Add a server to monitor. */ addServer(target: TargetConfig): void; /** Remove a server from monitoring. */ removeServer(targetId: string): void; /** Get current status of all monitored servers. */ getStatus(): MonitoredServer[]; /** Get status of a specific server. */ getServerStatus(targetId: string): MonitoredServer | undefined; /** Run an immediate health check on all servers. */ checkNow(): Promise>; /** Start periodic monitoring. */ start(): void; /** Stop periodic monitoring. */ stop(): void; /** Dispose and clean up. */ dispose(): void; private checkServer; private classifyScore; private fireCallbacks; private reportScore; }