touchdesigner-mcp-server
Version:
MCP server for TouchDesigner
82 lines (81 loc) • 3.54 kB
TypeScript
import type { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
import type { ILogger } from "../core/logger.js";
import type { Result } from "../core/result.js";
import type { TransportConfig } from "./config.js";
import type { ISessionManager } from "./sessionManager.js";
/**
* Factory for creating MCP transport instances based on configuration
*
* This factory implements the Factory pattern to encapsulate transport creation logic.
* It validates configuration and creates the appropriate transport type (stdio or HTTP).
*/
export declare class TransportFactory {
/**
* Reset the internal state of a StreamableHTTPServerTransport instance
*
* WARNING: This method manipulates the private field '_initialized' using Reflect.set().
* This is fragile and may break if the MCP SDK implementation changes.
* There is currently no public API to reset the initialized state, so this is required
* to ensure the transport can be reused safely after a session is closed.
* If the SDK adds a public reset/init method, use that instead.
* If the SDK changes the field name or its semantics, update this code accordingly.
*/
private static resetStreamableHttpState;
/**
* Create a transport instance from configuration
*
* @param config - Transport configuration (stdio or streamable-http)
* @param logger - Optional logger for HTTP transport session events (ignored for stdio)
* @param sessionManager - Optional session manager for HTTP transport (ignored for stdio)
* @returns Result with Transport instance or Error
*
* @example
* ```typescript
* // Create stdio transport
* const stdioResult = TransportFactory.create({ type: 'stdio' });
*
* // Create HTTP transport with logger and session manager
* const httpResult = TransportFactory.create({
* type: 'streamable-http',
* port: 6280,
* host: '127.0.0.1',
* endpoint: '/mcp'
* }, logger, sessionManager);
* ```
*/
static create(config: TransportConfig, logger?: ILogger, sessionManager?: ISessionManager | null): Result<Transport, Error>;
/**
* Create a stdio transport instance
*
* @param _config - Stdio transport configuration (unused, kept for API consistency)
* @returns Result with StdioServerTransport instance
*/
private static createStdio;
/**
* Create a streamable HTTP transport instance
*
* Creates a StreamableHTTPServerTransport with session management support.
* The transport instance is stateful and manages session lifecycle through callbacks.
*
* Note: DNS rebinding protection is handled by Express middleware (createMcpExpressApp)
* in the ExpressHttpManager, not by the transport itself.
*
* @param config - Streamable HTTP transport configuration
* @param logger - Optional logger for session lifecycle events
* @param sessionManager - Optional session manager for tracking sessions
* @returns Result with StreamableHTTPServerTransport instance or Error
*
* @example
* ```typescript
* const config: StreamableHttpTransportConfig = {
* type: 'streamable-http',
* port: 6280,
* host: '127.0.0.1',
* endpoint: '/mcp',
* sessionConfig: { enabled: true }
* };
* const result = TransportFactory.createStreamableHttp(config, logger, sessionManager);
* ```
*/
private static createStreamableHttp;
}