touchdesigner-mcp-server
Version:
MCP server for TouchDesigner
69 lines (68 loc) • 2.31 kB
JavaScript
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;
}
}