@nutrient-sdk/document-engine-mcp-server
Version:
MCP server for Nutrient Document Engine
64 lines (63 loc) • 2.42 kB
JavaScript
import { z } from 'zod';
// Environment variable schema
const environmentSchema = z.object({
// Document Engine configuration with defaults
DOCUMENT_ENGINE_BASE_URL: z
.string()
.url('DOCUMENT_ENGINE_BASE_URL must be a valid URL')
.default('http://localhost:5000'),
DOCUMENT_ENGINE_API_AUTH_TOKEN: z
.string()
.min(1, 'DOCUMENT_ENGINE_API_AUTH_TOKEN is required')
.default('secret'),
// Optional variables with defaults
CONNECTION_TIMEOUT: z.coerce.number().positive().default(30000),
MAX_RETRIES: z.coerce.number().int().min(0).default(3),
RETRY_DELAY: z.coerce.number().int().min(0).default(1000),
MAX_CONNECTIONS: z.coerce.number().int().positive().default(100),
LOG_LEVEL: z.enum(['ERROR', 'WARN', 'WARNING', 'INFO', 'DEBUG']).default('INFO'),
// MCP Transport configuration
MCP_TRANSPORT: z.enum(['stdio', 'http']).default('stdio'),
PORT: z.coerce.number().int().min(1).max(65535).default(5100),
MCP_HOST: z.string().default('localhost'),
// Dashboard configuration (optional - only enabled when both username and password are provided)
DASHBOARD_USERNAME: z.string().optional(),
DASHBOARD_PASSWORD: z.string().optional(),
// Document Engine polling configuration
DOCUMENT_ENGINE_POLL_MAX_RETRIES: z.coerce.number().int().min(1).default(30),
DOCUMENT_ENGINE_POLL_RETRY_DELAY: z.coerce.number().int().min(100).default(2000),
});
/**
* Validates and parses environment variables
* @returns Parsed environment configuration
* @throws ZodError if validation fails
*/
export function validateEnvironment() {
try {
return environmentSchema.parse(process.env);
}
catch (error) {
if (error instanceof z.ZodError) {
const errorMessages = error.errors
.map(err => {
const path = err.path.join('.');
return `${path}: ${err.message}`;
})
.join('\n');
throw new Error(`Environment validation failed:\n${errorMessages}`);
}
throw error;
}
}
/**
* Gets validated environment configuration with memoization
*/
export const getEnvironment = (() => {
let cachedEnvironment;
return () => {
if (cachedEnvironment === undefined) {
cachedEnvironment = validateEnvironment();
}
return cachedEnvironment;
};
})();