UNPKG

touchdesigner-mcp-server

Version:
69 lines (68 loc) 2.31 kB
import { createErrorResult, createSuccessResult } from "../core/result.js"; /** * Manages the connection between TouchDesignerServer and MCP transport */ export class ConnectionManager { server; logger; transport = null; constructor(server, logger) { this.server = server; this.logger = logger; } /** * Connect to MCP transport */ async connect(transport) { if (this.isConnected()) { this.logger.sendLog({ data: "MCP server already connected", level: "info", logger: "ConnectionManager", }); return createSuccessResult(undefined); } this.transport = transport; try { await this.server.connect(transport); this.logger.sendLog({ data: `Server connected and ready to process requests: ${process.env.TD_WEB_SERVER_HOST}:${process.env.TD_WEB_SERVER_PORT}`, level: "info", logger: "ConnectionManager", }); return createSuccessResult(undefined); } catch (error) { this.transport = null; const err = error instanceof Error ? error : new Error(String(error)); console.error("Fatal error starting server! Check TouchDesigner setup and starting webserver. For detailed setup instructions, see https://github.com/8beeeaaat/touchdesigner-mcp", err); return createErrorResult(err); } } /** * Disconnect from MCP transport */ async disconnect() { if (!this.isConnected()) { console.log("MCP server not connected"); return createSuccessResult(undefined); } try { await this.server.close(); console.log("MCP server disconnected from MCP"); this.transport = null; return createSuccessResult(undefined); } catch (error) { const err = error instanceof Error ? error : new Error(String(error)); console.error("Error disconnecting from server", err); return createErrorResult(err); } } /** * Check if connected to MCP transport */ isConnected() { return this.transport !== null; } }