#!/usr/bin/env node
import { createDatabaseManager } from './database.js';
import { PostgreSQLMCPServer } from './server.js';
import { logger } from './logger.js';
async function main() {
try {
logger.info('PostgreSQL MCP Server starting up...');
// Load environment variables from .env if exists
try {
const { config } = await import('dotenv');
config();
logger.debug('Loaded environment variables from .env file');
} catch {
logger.debug('No .env file found, using system environment variables');
}
// Log configuration (hide password)
logger.info('Server configuration', {
PG_HOST: process.env.PG_HOST || 'localhost',
PG_PORT: process.env.PG_PORT || '5432',
PG_USER: process.env.PG_USER || 'postgres',
PG_DATABASE: process.env.PG_DATABASE,
PG_SCHEMA: process.env.PG_SCHEMA || 'public',
PG_SSL_MODE: process.env.PG_SSL_MODE || 'disable',
ALLOW_WRITE_OPERATIONS: process.env.ALLOW_WRITE_OPERATIONS || 'false',
MCP_DEBUG: process.env.MCP_DEBUG || 'false'
});
// Create database manager
const db = createDatabaseManager();
// Create and start MCP server
const server = new PostgreSQLMCPServer(db);
await server.start();
// Keep process alive for stdio transport
process.stdin.resume();
} catch (error) {
logger.error('Failed to start MCP server', error);
process.exit(1);
}
}
// Handle uncaught errors
process.on('uncaughtException', (error) => {
logger.error('Uncaught exception', error);
process.exit(1);
});
process.on('unhandledRejection', (reason, promise) => {
logger.error('Unhandled rejection', reason);
process.exit(1);
});
// Start the server
main().catch((error) => {
logger.error('Fatal error', error);
process.exit(1);
});