Business Central MCP Server

/** * BC-MCP Installation Script * * This script helps set up the BC-MCP server by: * 1. Creating the .env file from .env.example * 2. Installing dependencies * 3. Setting up initial configuration */ const fs = require('fs'); const path = require('path'); const { execSync } = require('child_process'); const readline = require('readline'); const crypto = require('crypto'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); console.log('╔═══════════════════════════════════════════════════════╗'); console.log('║ ║'); console.log('║ BC-MCP Server Installation ║'); console.log('║ Business Central Modeling Collaboration Platform ║'); console.log('║ ║'); console.log('╚═══════════════════════════════════════════════════════╝'); console.log(''); // Create .env file const setupEnv = () => { console.log('Creating .env file...'); if (!fs.existsSync('./.env.example')) { console.error('Error: .env.example file not found.'); process.exit(1); } // Generate a secure JWT secret const jwtSecret = crypto.randomBytes(32).toString('hex'); // Read the example file let envExample = fs.readFileSync('./.env.example', 'utf8'); // Replace the JWT_SECRET with the generated one envExample = envExample.replace('JWT_SECRET=your_jwt_secret_key_here', `JWT_SECRET=${jwtSecret}`); // Write to .env file fs.writeFileSync('./.env', envExample); console.log('✅ .env file created successfully with a secure JWT secret.'); }; // Install dependencies const installDependencies = () => { console.log('Installing dependencies...'); try { execSync('npm install', { stdio: 'inherit' }); console.log('✅ Dependencies installed successfully.'); } catch (error) { console.error('Error installing dependencies:', error.message); process.exit(1); } }; // Prepare for Azure deployment const prepareForAzure = () => { console.log('\nPreparing for Azure deployment...'); try { // Call the azure-deploy.js script require('./azure-deploy'); } catch (error) { console.error('Error preparing for Azure:', error.message); process.exit(1); } }; // Start the installation process const startInstallation = () => { // Ensure all necessary files exist const requiredFiles = ['mcp-server.js', 'package.json', 'cursor-connect.js']; const missingFiles = requiredFiles.filter(file => !fs.existsSync(path.join(__dirname, file))); if (missingFiles.length > 0) { console.error(`Missing required files: ${missingFiles.join(', ')}`); process.exit(1); } rl.question('This will set up the BC-MCP server. Do you want to continue? (y/n) ', (answer) => { if (answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes') { setupEnv(); installDependencies(); rl.question('Do you want to prepare for Azure deployment? (y/n) ', (azureAnswer) => { if (azureAnswer.toLowerCase() === 'y' || azureAnswer.toLowerCase() === 'yes') { prepareForAzure(); } console.log(''); console.log('╔═══════════════════════════════════════════════════════╗'); console.log('║ ║'); console.log('║ Installation Complete! ║'); console.log('║ ║'); console.log('║ To start the server locally: ║'); console.log('║ npm start ║'); console.log('║ ║'); console.log('║ The server will run on http://localhost:3000 ║'); console.log('║ ║'); if (azureAnswer.toLowerCase() === 'y' || azureAnswer.toLowerCase() === 'yes') { console.log('║ To deploy to Azure: ║'); console.log('║ 1. az login ║'); console.log('║ 2. az webapp up --name YOUR-APP-NAME ║'); console.log('║ --resource-group YOUR-RESOURCE-GROUP ║'); console.log('║ --plan YOUR-PLAN-NAME --sku B1 ║'); console.log('║ ║'); } console.log('╚═══════════════════════════════════════════════════════╝'); rl.close(); }); } else { console.log('Installation cancelled.'); rl.close(); } }); }; startInstallation(); /** * Installation script for Business Central MCP server */ console.log('Setting up Business Central MCP server...'); // Ensure all necessary files exist const requiredFiles = ['mcp-server.js', 'package.json', 'cursor-connect.js']; const missingFiles = requiredFiles.filter(file => !fs.existsSync(path.join(__dirname, file))); if (missingFiles.length > 0) { console.error(`Missing required files: ${missingFiles.join(', ')}`); process.exit(1); } // Install dependencies console.log('Installing dependencies...'); try { execSync('npm install', { stdio: 'inherit' }); } catch (error) { console.error('Failed to install dependencies:', error); process.exit(1); } // Create configuration file const configContent = ` # Business Central MCP Server Configuration MCP_SERVER_PORT=3000 MCP_SERVER_HOST=0.0.0.0 `; fs.writeFileSync(path.join(__dirname, '.env'), configContent); console.log('Installation complete! Run "npm start" to start the MCP server.'); console.log('Share the cursor-connect.js file with your team to connect to the server from Cursor.');