Skip to main content
Glama

MCP SQL Server

by ryudg
config.ts4.79 kB
import dotenv from 'dotenv'; import { DatabaseConfig } from '../types/database.types.js'; /** * Configuration Manager Class * * Manages environment variable loading and application configuration */ export class ConfigManager { constructor() { // Load environment variables dotenv.config(); } /** * Get environment variable value */ get(key: string, defaultValue?: string): string { return process.env[key] || defaultValue || ''; } /** * Get environment variable as number */ getNumber(key: string, defaultValue: number = 0): number { const value = process.env[key]; if (!value) return defaultValue; const parsed = parseInt(value, 10); return isNaN(parsed) ? defaultValue : parsed; } /** * Get environment variable as boolean */ getBoolean(key: string, defaultValue: boolean = false): boolean { const value = process.env[key]?.toLowerCase(); if (value === 'true' || value === '1') return true; if (value === 'false' || value === '0') return false; return defaultValue; } /** * Get database configuration */ getDatabaseConfig(): DatabaseConfig { return { host: this.get('DB_SERVER', this.get('DB_HOST', 'localhost')), database: this.get('DB_DATABASE', this.get('DB_NAME', 'master')), user: this.get('DB_USER', 'sa'), password: this.get('DB_PASSWORD', ''), port: this.getNumber('DB_PORT', 1433), ssl: this.getBoolean('DB_ENCRYPT', this.getBoolean('DB_SSL', false)), options: { trustServerCertificate: this.getBoolean( 'DB_TRUST_SERVER_CERTIFICATE', this.getBoolean('DB_TRUST_CERT', true) ), requestTimeout: this.getNumber('DB_REQUEST_TIMEOUT', 30000), connectionTimeout: this.getNumber('DB_CONNECTION_TIMEOUT', 15000), pool: { max: this.getNumber('DB_POOL_MAX', 10), min: this.getNumber('DB_POOL_MIN', 0), idleTimeoutMillis: this.getNumber('DB_POOL_IDLE_TIMEOUT', 30000), }, }, }; } /** * Get server configuration */ getServerConfig() { return { name: this.get('MCP_SERVER_NAME', 'mcp-sql'), version: `v${process.env.npm_package_version}`, logLevel: 'info', enableMetrics: this.getBoolean('ENABLE_METRICS', true), enableSecurity: this.getBoolean('ENABLE_SECURITY', true), }; } /** * Get performance monitoring configuration */ getPerformanceConfig() { return { enableMonitoring: this.getBoolean('ENABLE_PERFORMANCE_MONITORING', true), metricsInterval: this.getNumber('METRICS_INTERVAL', 5000), slowQueryThreshold: this.getNumber('SLOW_QUERY_THRESHOLD', 1000), maxCacheSize: this.getNumber('MAX_CACHE_SIZE', 100), cacheExpirationTime: this.getNumber('CACHE_EXPIRATION_TIME', 300000), }; } /** * Get security configuration */ getSecurityConfig() { return { enableSqlInjectionDetection: this.getBoolean('ENABLE_SQL_INJECTION_DETECTION', true), enableQueryValidation: this.getBoolean('ENABLE_QUERY_VALIDATION', true), maxQueryLength: this.getNumber('MAX_QUERY_LENGTH', 10000), allowedOperations: this.get('ALLOWED_OPERATIONS', 'SELECT,INSERT,UPDATE,DELETE').split(','), blockedKeywords: this.get('BLOCKED_KEYWORDS', 'DROP,TRUNCATE,ALTER').split(','), }; } /** * Validate required environment variables */ validateRequiredConfig(): void { const required = ['DB_USER']; const missing = required.filter(key => !this.get(key)); // Check if we have either DB_SERVER or DB_HOST if (!this.get('DB_SERVER') && !this.get('DB_HOST')) { missing.push('DB_SERVER or DB_HOST'); } // Check if we have either DB_DATABASE or DB_NAME if (!this.get('DB_DATABASE') && !this.get('DB_NAME')) { missing.push('DB_DATABASE or DB_NAME'); } if (missing.length > 0) { throw new Error(`Required environment variables are not set: ${missing.join(', ')}`); } } /** * Get current configuration summary */ getSummary() { return { server: { name: this.get('MCP_SERVER_NAME', 'mcp-sql'), version : `v${process.env.npm_package_version}`, logLevel: 'info', }, database: { host: this.get('DB_SERVER', this.get('DB_HOST', 'localhost')), database: this.get('DB_DATABASE', this.get('DB_NAME', 'master')), port: this.getNumber('DB_PORT', 1433), ssl: this.getBoolean('DB_ENCRYPT', this.getBoolean('DB_SSL', false)), }, features: { metrics: this.getBoolean('ENABLE_METRICS', true), security: this.getBoolean('ENABLE_SECURITY', true), performance: this.getBoolean('ENABLE_PERFORMANCE_MONITORING', true), }, }; } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ryudg/mcp-sql'

If you have feedback or need assistance with the MCP directory API, please join our Discord server