feat: initialize stdio mcp server
This commit is contained in:
@@ -83,9 +83,48 @@ export const io = new Server(server);
|
|||||||
*/
|
*/
|
||||||
export const browserPool = new BrowserPool();
|
export const browserPool = new BrowserPool();
|
||||||
|
|
||||||
// app.use(bodyParser.json({ limit: '10mb' }))
|
const initializeMCPServer = async () => {
|
||||||
// app.use(bodyParser.urlencoded({ extended: true, limit: '10mb', parameterLimit: 9000 }));
|
try {
|
||||||
// parse cookies - "cookie" is true in csrfProtection
|
const mcpEnabled = process.env.MCP_ENABLED === 'true';
|
||||||
|
const mcpApiKey = process.env.MCP_API_KEY;
|
||||||
|
|
||||||
|
if (!mcpEnabled) {
|
||||||
|
logger.log('info', 'MCP Server disabled (set MCP_ENABLED=true to enable)');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!mcpApiKey) {
|
||||||
|
logger.log('warning', 'MCP_API_KEY not set. MCP server will not be able to authenticate with Maxun API.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const mcpWorkerPath = path.resolve(__dirname, './mcp-worker.ts');
|
||||||
|
const mcpWorkerProcess = fork(mcpWorkerPath, [], {
|
||||||
|
execArgv: process.env.NODE_ENV === 'production' ? [] : ['--inspect=5861'],
|
||||||
|
env: {
|
||||||
|
...process.env,
|
||||||
|
MCP_WORKER: 'true'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
mcpWorkerProcess.on('message', (message: any) => {
|
||||||
|
logger.log('info', `MCP Worker message: ${message}`);
|
||||||
|
});
|
||||||
|
|
||||||
|
mcpWorkerProcess.on('error', (error: any) => {
|
||||||
|
logger.log('error', `MCP Worker error: ${error}`);
|
||||||
|
});
|
||||||
|
|
||||||
|
mcpWorkerProcess.on('exit', (code: any) => {
|
||||||
|
logger.log('info', `MCP Worker exited with code: ${code}`);
|
||||||
|
});
|
||||||
|
|
||||||
|
logger.log('info', 'MCP Server started with stdio transport in worker process');
|
||||||
|
} catch (error: any) {
|
||||||
|
logger.log('error', `Failed to initialize MCP Server: ${error.message}`);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
app.use(cookieParser())
|
app.use(cookieParser())
|
||||||
|
|
||||||
app.use('/webhook', webhook);
|
app.use('/webhook', webhook);
|
||||||
@@ -99,9 +138,9 @@ app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec));
|
|||||||
|
|
||||||
readdirSync(path.join(__dirname, 'api')).forEach((r) => {
|
readdirSync(path.join(__dirname, 'api')).forEach((r) => {
|
||||||
const route = require(path.join(__dirname, 'api', r));
|
const route = require(path.join(__dirname, 'api', r));
|
||||||
const router = route.default || route; // Use .default if available, fallback to route
|
const router = route.default || route;
|
||||||
if (typeof router === 'function') {
|
if (typeof router === 'function') {
|
||||||
app.use('/api', router); // Use the default export or named router
|
app.use('/api', router);
|
||||||
} else {
|
} else {
|
||||||
console.error(`Error: ${r} does not export a valid router`);
|
console.error(`Error: ${r} does not export a valid router`);
|
||||||
}
|
}
|
||||||
@@ -151,7 +190,6 @@ app.get('/', function (req, res) {
|
|||||||
return res.send('Maxun server started 🚀');
|
return res.send('Maxun server started 🚀');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Add CORS headers
|
|
||||||
app.use((req, res, next) => {
|
app.use((req, res, next) => {
|
||||||
res.header('Access-Control-Allow-Origin', process.env.PUBLIC_URL || 'http://localhost:5173');
|
res.header('Access-Control-Allow-Origin', process.env.PUBLIC_URL || 'http://localhost:5173');
|
||||||
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
|
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
|
||||||
@@ -168,9 +206,11 @@ server.listen(SERVER_PORT, '0.0.0.0', async () => {
|
|||||||
await connectDB();
|
await connectDB();
|
||||||
await syncDB();
|
await syncDB();
|
||||||
logger.log('info', `Server listening on port ${SERVER_PORT}`);
|
logger.log('info', `Server listening on port ${SERVER_PORT}`);
|
||||||
|
|
||||||
|
await initializeMCPServer();
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
logger.log('error', `Failed to connect to the database: ${error.message}`);
|
logger.log('error', `Failed to connect to the database: ${error.message}`);
|
||||||
process.exit(1); // Exit the process if DB connection fails
|
process.exit(1);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -204,4 +244,4 @@ process.on('SIGINT', async () => {
|
|||||||
if (recordingWorkerProcess) recordingWorkerProcess.kill();
|
if (recordingWorkerProcess) recordingWorkerProcess.kill();
|
||||||
}
|
}
|
||||||
process.exit();
|
process.exit();
|
||||||
});
|
});
|
||||||
Reference in New Issue
Block a user