Business Central MCP Server
- src
const express = require('express');
const cors = require('cors');
const helmet = require('helmet');
const morgan = require('morgan');
const bodyParser = require('body-parser');
require('dotenv').config();
// Import routes
const rulesRoutes = require('./routes/rules');
const usersRoutes = require('./routes/users');
// Import middleware
const auth = require('./middleware/auth');
// Initialize express
const app = express();
const PORT = process.env.PORT || 3000;
// Middleware
app.use(helmet()); // Security headers
app.use(cors()); // Enable CORS for all routes
app.use(morgan('combined')); // Logging
app.use(bodyParser.json()); // Parse JSON request bodies
app.use(bodyParser.urlencoded({ extended: true }));
// Public routes
app.use('/api/users/login', usersRoutes); // Login endpoint doesn't need auth
// Routes that require authentication
app.use('/api/rules', auth.authenticate, rulesRoutes);
app.use('/api/users', auth.authenticate, usersRoutes);
// Root endpoint
app.get('/', (req, res) => {
res.json({
message: 'Welcome to the Business Central MCP API',
version: '1.0.0',
documentation: '/api/docs'
});
});
// Documentation endpoint
app.get('/api/docs', (req, res) => {
res.json({
description: 'API documentation for BC-MCP',
endpoints: {
authentication: {
login: 'POST /api/users/login - Login with username and password',
register: 'POST /api/users - Register a new user'
},
rules: {
get: 'GET /api/rules - Get all rules',
getById: 'GET /api/rules/:id - Get rule by ID',
post: 'POST /api/rules - Create a new rule',
put: 'PUT /api/rules/:id - Update a rule',
delete: 'DELETE /api/rules/:id - Delete a rule'
},
users: {
get: 'GET /api/users - Get all users',
getById: 'GET /api/users/:id - Get user by ID',
post: 'POST /api/users - Create a new user',
put: 'PUT /api/users/:id - Update a user',
delete: 'DELETE /api/users/:id - Delete a user'
}
}
});
});
// Error handling middleware
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({
error: 'Internal Server Error',
message: process.env.NODE_ENV === 'development' ? err.message : undefined
});
});
// 404 handler
app.use((req, res) => {
res.status(404).json({
error: 'Not Found',
message: `The requested resource '${req.originalUrl}' was not found on this server`
});
});
// Start server
app.listen(PORT, () => {
console.log(`BC-MCP server running on port ${PORT}`);
});
module.exports = app; // Export for testing