import { Effect } from 'effect'; import type { MCPClientImpl } from './client'; import type { MCPServerConfig } from './types'; import type { Tool } from '../tool/tool'; /** * Server status states */ export type ServerStatus = 'connected' | 'disconnected' | 'error'; /** * Global registry for MCP servers with centralized lifecycle management. * * Provides: * - Server registration and deduplication * - Client retrieval by server ID * - Namespaced tool discovery * - Status tracking * - Lazy server startup * - Health check management * - Graceful shutdown of all servers */ export declare class MCPServerRegistry { private servers; private lazyConfigs; private healthManager; /** * Register an MCP server with its client. * * @param id - Unique server identifier * @param config - Server configuration * @param client - Initialized MCP client * @returns Effect that completes when server is registered * @throws Error if server with same ID is already registered */ registerServer(id: string, config: MCPServerConfig, client: MCPClientImpl): Effect.Effect; /** * Get client for a registered server. * * @param id - Server identifier * @returns MCP client or undefined if not registered */ getClient(id: string): MCPClientImpl | undefined; /** * Get list of all registered server IDs. * * @returns Array of server IDs */ getRegisteredServers(): string[]; /** * Get list of all configured server IDs (both connected and lazy). * * Returns the union of connected server IDs and lazy config IDs (deduplicated). * This is useful for showing all servers that have been configured, including * those that have never been started. * * @returns Array of all configured server IDs */ getAllConfiguredServers(): string[]; /** * Get server configuration by ID. * * Checks both the active servers map and lazy configs map. * * @param id - Server identifier * @returns Server configuration or undefined if not found */ getServerConfig(id: string): MCPServerConfig | undefined; /** * Get status of a registered server. * * @param id - Server identifier * @returns Server status or undefined if not registered */ getServerStatus(id: string): ServerStatus | undefined; /** * Update server status. * * @param id - Server identifier * @param status - New status */ updateServerStatus(id: string, status: ServerStatus): void; /** * Discover tools from a specific server with namespace format. * * Tools are converted to Fred Tool format with IDs in `server/tool` format. * * @param serverId - Server identifier * @returns Effect providing array of namespaced Fred tools * @throws Error if server not found */ discoverTools(serverId: string): Effect.Effect; /** * Discover tools from all registered servers. * * Skips disconnected or error servers with warning logs. * * @returns Effect providing Map of server ID to tools array */ discoverAllTools(): Effect.Effect, never>; /** * Remove server and close its client. * * @param id - Server identifier * @returns Effect that completes when server is removed and client closed */ removeServer(id: string): Effect.Effect; /** * Register a lazy server (deferred connection). * * Server will not connect until first getClient/ensureConnected call. * * @param id - Unique server identifier * @param config - Server configuration */ registerLazyServer(id: string, config: MCPServerConfig): void; /** * Ensure a lazy server is connected. * * If server is already connected, returns existing client. * If server is lazy and not connected, connects it. * * @param serverId - Server identifier * @returns Effect providing MCP client * @throws Error if connection fails */ ensureConnected(serverId: string): Effect.Effect; /** * Register and connect a server with graceful failure handling. * * On failure: logs warning, does not throw, server not added to registry. * * @param id - Server identifier * @param config - Server configuration * @returns Effect that always succeeds (never throws) */ registerAndConnect(id: string, config: MCPServerConfig): Effect.Effect; /** * Start health checks for all registered servers. * * Uses healthCheckIntervalMs from config, or defaults: * - 30000ms (30s) for stdio transport * - 60000ms (60s) for http/sse transport */ startHealthChecks(): void; /** * Shutdown all servers and clear registry. * * Order: * 1. Stop all health checks * 2. Close all client connections * 3. Clear registry * * @returns Effect that completes when all servers are shutdown */ shutdown(): Effect.Effect; } //# sourceMappingURL=registry.d.ts.map