touchdesigner-mcp-server
Version:
MCP server for TouchDesigner
87 lines (86 loc) • 2.72 kB
TypeScript
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<Result<void, Error>>;
/**
* Graceful shutdown
*
* Stops HTTP server and cleans up all active sessions.
*
* @returns Result indicating success or failure
*/
stop(): Promise<Result<void, Error>>;
/**
* 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[];
}