import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import type { ILogger } from "../core/logger.js"; import type { Result } from "../core/result.js"; import type { StreamableHttpTransportConfig } from "./config.js"; /** * Express HTTP Manager * * Manages HTTP server lifecycle for Streamable HTTP transport. * Handles multiple concurrent sessions by creating per-session transport and server instances. * * Key Features: * - /mcp endpoint → routes to appropriate transport via TransportRegistry * - /health endpoint → reports active session count * - Per-session isolation → each client gets independent MCP protocol state * - Graceful shutdown → cleans up all active sessions * * Architecture: * ``` * Client 1 → POST /mcp → TransportRegistry.getOrCreate() → Transport 1 + Server 1 * Client 2 → POST /mcp → TransportRegistry.getOrCreate() → Transport 2 + Server 2 * ``` * * @example * ```typescript * const manager = new ExpressHttpManager( * config, * () => TouchDesignerServer.create(), // Server factory * sessionManager, * logger * ); * * // Start server * const result = await manager.start(); * * // Graceful shutdown * await manager.stop(); * ``` */ export declare class ExpressHttpManager { private readonly config; private readonly serverFactory; private readonly logger; private readonly registry; private server; /** * Create ExpressHttpManager with server factory * * @param config - Streamable HTTP transport configuration * @param serverFactory - Factory function to create new Server instances per session * @param sessionManager - Session manager for TTL tracking (optional) * @param logger - Logger instance */ constructor(config: StreamableHttpTransportConfig, serverFactory: () => McpServer, sessionManager: import("./sessionManager.js").ISessionManager | null, logger: ILogger); /** * Start HTTP server with Express app from SDK * * @returns Result indicating success or failure */ start(): Promise>; /** * Graceful shutdown * * Stops HTTP server and cleans up all active sessions. * * @returns Result indicating success or failure */ stop(): Promise>; /** * Check if server is running * * @returns True if server is running */ isRunning(): boolean; /** * Get active session count * * @returns Number of active sessions */ getActiveSessionCount(): number; /** * Get all active session IDs * * @returns Array of session IDs */ getActiveSessionIds(): string[]; }