UNPKG

mcp-context-engineering

Version:

The intelligent context optimization system for AI coding assistants. Built with Cole's PRP methodology, Context Portal knowledge graphs, and production-ready MongoDB architecture.

131 lines (114 loc) • 4.13 kB
import { z } from 'zod'; /** * Environment Configuration Schema with Zod Validation * Ensures all required environment variables are present and valid */ export const EnvironmentSchema = z.object({ // MongoDB Configuration MONGODB_URI: z.string().url('MongoDB URI must be a valid URL'), MONGODB_DATABASE: z.string().min(1, 'MongoDB database name is required'), // Optional MongoDB Performance Settings MONGODB_MAX_POOL_SIZE: z.coerce.number().positive().default(10), MONGODB_SERVER_SELECTION_TIMEOUT_MS: z.coerce.number().positive().default(5000), MONGODB_SOCKET_TIMEOUT_MS: z.coerce.number().positive().default(45000), // AI Services Configuration VOYAGE_API_KEY: z.string().min(1, 'Voyage AI API key is required'), OPENAI_API_KEY: z.string().min(1, 'OpenAI API key is required'), // Environment Configuration NODE_ENV: z.enum(['development', 'production', 'test']).default('development'), LOG_LEVEL: z.enum(['error', 'warn', 'info', 'debug']).default('info'), // Vector Search Configuration VECTOR_SEARCH_INDEX_NAME: z.string().default('vector_index'), VECTOR_DIMENSIONS: z.coerce.number().positive().default(1024), // MCP Server Configuration MCP_SERVER_NAME: z.string().default('universal-context-engineering'), MCP_SERVER_VERSION: z.string().default('1.0.0'), // Cache Configuration ENABLE_CACHE: z.coerce.boolean().default(true), CACHE_TTL_SECONDS: z.coerce.number().positive().default(3600), // Debug Configuration DEBUG_RESEARCH_ENGINE: z.coerce.boolean().default(false), DEBUG_PRP_GENERATION: z.coerce.boolean().default(false), DEBUG_MONGODB_OPERATIONS: z.coerce.boolean().default(false) }); export type Environment = z.infer<typeof EnvironmentSchema>; /** * Validate and parse environment variables * Throws detailed error if validation fails */ export function validateEnvironment(): Environment { try { const parsed = EnvironmentSchema.parse(process.env); // Log configuration summary (without secrets) console.log('šŸ”§ Environment Configuration:'); console.log(` • Environment: ${parsed.NODE_ENV}`); console.log(` • Database: ${parsed.MONGODB_DATABASE}`); console.log(` • Log Level: ${parsed.LOG_LEVEL}`); console.log(` • Cache Enabled: ${parsed.ENABLE_CACHE}`); console.log(` • Vector Dimensions: ${parsed.VECTOR_DIMENSIONS}`); return parsed; } catch (error) { if (error instanceof z.ZodError) { console.error('āŒ Environment Configuration Error:'); error.errors.forEach(err => { console.error(` • ${err.path.join('.')}: ${err.message}`); }); console.error('\nšŸ’” Check your .env file or environment variables'); console.error('šŸ“„ See .env.example for required configuration'); } else { console.error('āŒ Environment validation failed:', error); } process.exit(1); } } /** * Get validated environment configuration * Call this once at startup */ export const env = validateEnvironment(); /** * MongoDB configuration derived from environment */ export const mongoConfig = { uri: env.MONGODB_URI, database: env.MONGODB_DATABASE, options: { maxPoolSize: env.MONGODB_MAX_POOL_SIZE, serverSelectionTimeoutMS: env.MONGODB_SERVER_SELECTION_TIMEOUT_MS, socketTimeoutMS: env.MONGODB_SOCKET_TIMEOUT_MS, maxIdleTimeMS: 30000, retryWrites: true, retryReads: true } }; /** * AI Services configuration */ export const aiConfig = { voyage: { apiKey: env.VOYAGE_API_KEY, model: 'voyage-3-large', dimensions: env.VECTOR_DIMENSIONS }, openai: { apiKey: env.OPENAI_API_KEY, model: 'text-embedding-ada-002', dimensions: 1536 // OpenAI ada-002 dimensions } }; /** * Vector search configuration */ export const vectorConfig = { indexName: env.VECTOR_SEARCH_INDEX_NAME, dimensions: env.VECTOR_DIMENSIONS, similarity: 'cosine' as const }; /** * Debug configuration */ export const debugConfig = { researchEngine: env.DEBUG_RESEARCH_ENGINE, prpGeneration: env.DEBUG_PRP_GENERATION, mongodbOperations: env.DEBUG_MONGODB_OPERATIONS };