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
text/typescript
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
};