UNPKG

clickhouse-mcp

Version:
67 lines 2.26 kB
/** * Environment configuration for the MCP ClickHouse server. * * This module handles all environment variable configuration with sensible defaults * and type conversion. */ import * as dotenv from 'dotenv'; // Load environment variables dotenv.config(); /** * Validates that all required environment variables are set. * * @throws Error if any required environment variable is missing. */ function validateRequiredVars() { const missingVars = []; ['CLICKHOUSE_HOST', 'CLICKHOUSE_USER'].forEach(varName => { if (!process.env[varName]) { missingVars.push(varName); } }); if (missingVars.length > 0) { throw new Error(`Missing required environment variables: ${missingVars.join(', ')}`); } } validateRequiredVars(); /** * Get the configuration object for the ClickHouse client. * * @returns ClickHouse client configuration */ export function getClientConfig() { // Parse boolean from environment variable const parseBoolean = (value, defaultValue) => { if (value === undefined) return defaultValue; return value.toLowerCase() === 'true'; }; // Get secure setting first as it affects default port const secure = parseBoolean(process.env.CLICKHOUSE_SECURE, true); // Get port with default based on secure setting const defaultPort = secure ? 8443 : 8123; const port = process.env.CLICKHOUSE_PORT ? parseInt(process.env.CLICKHOUSE_PORT, 10) : defaultPort; const config = { host: process.env.CLICKHOUSE_HOST, port, username: process.env.CLICKHOUSE_USER, password: process.env.CLICKHOUSE_PASSWORD, secure, verify: parseBoolean(process.env.CLICKHOUSE_VERIFY, true), connect_timeout: parseInt(process.env.CLICKHOUSE_CONNECT_TIMEOUT || '30', 10), send_receive_timeout: parseInt(process.env.CLICKHOUSE_SEND_RECEIVE_TIMEOUT || '300', 10), client_name: 'mcp_clickhouse_ts' }; // Add optional database if set if (process.env.CLICKHOUSE_DATABASE) { config.database = process.env.CLICKHOUSE_DATABASE; } return config; } export const config = { getClientConfig }; export default config; //# sourceMappingURL=config.js.map