Skip to main content
Glama

HANA Cloud MCP Server

by HatriGt
config.js5.75 kB
/** * Configuration management utility for HANA MCP Server */ const { logger } = require('./logger'); class Config { constructor() { this.config = this.loadConfig(); } loadConfig() { return { hana: { host: process.env.HANA_HOST, port: parseInt(process.env.HANA_PORT) || 443, user: process.env.HANA_USER, password: process.env.HANA_PASSWORD, schema: process.env.HANA_SCHEMA, instanceNumber: process.env.HANA_INSTANCE_NUMBER, databaseName: process.env.HANA_DATABASE_NAME, connectionType: process.env.HANA_CONNECTION_TYPE || 'auto', ssl: process.env.HANA_SSL !== 'false', encrypt: process.env.HANA_ENCRYPT !== 'false', validateCert: process.env.HANA_VALIDATE_CERT !== 'false' }, server: { logLevel: process.env.LOG_LEVEL || 'INFO', enableFileLogging: process.env.ENABLE_FILE_LOGGING === 'true', enableConsoleLogging: process.env.ENABLE_CONSOLE_LOGGING !== 'false' } }; } getHanaConfig() { return this.config.hana; } getServerConfig() { return this.config.server; } /** * Determine HANA database type based on configuration */ getHanaDatabaseType() { const hana = this.config.hana; // Use explicit type if set and not 'auto' if (hana.connectionType && hana.connectionType !== 'auto') { return hana.connectionType; } // Auto-detect based on available parameters if (hana.instanceNumber && hana.databaseName) { return 'mdc_tenant'; } else if (hana.instanceNumber && !hana.databaseName) { return 'mdc_system'; } else { return 'single_container'; } } /** * Build connection parameters based on database type */ getConnectionParams() { const hana = this.config.hana; const dbType = this.getHanaDatabaseType(); const baseParams = { uid: hana.user, pwd: hana.password, encrypt: hana.encrypt, sslValidateCertificate: hana.validateCert }; // Build connection string based on database type switch (dbType) { case 'mdc_tenant': baseParams.serverNode = `${hana.host}:${hana.port}`; baseParams.databaseName = hana.databaseName; break; case 'mdc_system': baseParams.serverNode = `${hana.host}:${hana.port}`; break; case 'single_container': default: baseParams.serverNode = `${hana.host}:${hana.port}`; break; } return baseParams; } isHanaConfigured() { const hana = this.config.hana; return !!(hana.host && hana.user && hana.password); } getHanaConnectionString() { const hana = this.config.hana; return `${hana.host}:${hana.port}`; } // Get configuration info for display (hiding sensitive data) getDisplayConfig() { const hana = this.config.hana; const dbType = this.getHanaDatabaseType(); return { databaseType: dbType, connectionType: hana.connectionType, host: hana.host || 'NOT SET', port: hana.port, user: hana.user || 'NOT SET', password: hana.password ? 'SET (hidden)' : 'NOT SET', schema: hana.schema || 'NOT SET', instanceNumber: hana.instanceNumber || 'NOT SET', databaseName: hana.databaseName || 'NOT SET', ssl: hana.ssl, encrypt: hana.encrypt, validateCert: hana.validateCert }; } // Get environment variables for display getEnvironmentVars() { return { HANA_HOST: process.env.HANA_HOST || 'NOT SET', HANA_PORT: process.env.HANA_PORT || 'NOT SET', HANA_USER: process.env.HANA_USER || 'NOT SET', HANA_PASSWORD: process.env.HANA_PASSWORD ? 'SET (hidden)' : 'NOT SET', HANA_SCHEMA: process.env.HANA_SCHEMA || 'NOT SET', HANA_INSTANCE_NUMBER: process.env.HANA_INSTANCE_NUMBER || 'NOT SET', HANA_DATABASE_NAME: process.env.HANA_DATABASE_NAME || 'NOT SET', HANA_CONNECTION_TYPE: process.env.HANA_CONNECTION_TYPE || 'NOT SET', HANA_SSL: process.env.HANA_SSL || 'NOT SET', HANA_ENCRYPT: process.env.HANA_ENCRYPT || 'NOT SET', HANA_VALIDATE_CERT: process.env.HANA_VALIDATE_CERT || 'NOT SET' }; } // Validate configuration validate() { const hana = this.config.hana; const errors = []; const dbType = this.getHanaDatabaseType(); // Common required fields if (!hana.host) errors.push('HANA_HOST is required'); if (!hana.user) errors.push('HANA_USER is required'); if (!hana.password) errors.push('HANA_PASSWORD is required'); // Type-specific validation switch (dbType) { case 'mdc_tenant': if (!hana.instanceNumber) errors.push('HANA_INSTANCE_NUMBER is required for MDC Tenant Database'); if (!hana.databaseName) errors.push('HANA_DATABASE_NAME is required for MDC Tenant Database'); break; case 'mdc_system': if (!hana.instanceNumber) errors.push('HANA_INSTANCE_NUMBER is required for MDC System Database'); break; case 'single_container': if (!hana.schema) errors.push('HANA_SCHEMA is recommended for Single-Container Database'); break; } if (errors.length > 0) { logger.warn('Configuration validation failed:', errors); return false; } logger.info(`Configuration validation passed for ${dbType} database type`); return true; } /** * Get default schema from environment variables */ getDefaultSchema() { return this.config.hana.schema; } /** * Check if default schema is configured */ hasDefaultSchema() { return !!this.config.hana.schema; } } // Create default config instance const config = new Config(); module.exports = { Config, config };

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/HatriGt/hana-mcp-server'

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