UNPKG

@nutrient-sdk/dws-mcp-server

Version:

MCP server for Nutrient DWS Processor API

33 lines (32 loc) 1.59 kB
import { z } from 'zod'; /** Trims whitespace and collapses an empty result to `undefined`, so a blank env var reads as unset. */ function trimmedOrUndefined(value) { const trimmed = value?.trim(); return trimmed ? trimmed : undefined; } const RawEnvironmentSchema = z.object({ // A blank value must read as unset, or it is truthy enough to select static-key // auth and suppress the OAuth flow, while being useless as a credential. NUTRIENT_DWS_API_KEY: z.string().optional().transform(trimmedOrUndefined), // Data Extraction is a separate product with its own tenant; a Processor // static key is bound to the Processor tenant and is rejected at // /extraction/parse, so it needs its own key when not using OAuth. NUTRIENT_DWS_EXTRACTION_API_KEY: z.string().optional().transform(trimmedOrUndefined), DWS_API_BASE_URL: z.string().url().default('https://api.nutrient.io'), AUTH_SERVER_URL: z .string() .url() .refine((u) => u.startsWith('https://') || u.startsWith('http://localhost'), 'AUTH_SERVER_URL must use https:// (except localhost for local development)') .default('https://api.nutrient.io'), CLIENT_ID: z.string().optional(), }); export function getEnvironment(rawEnv = process.env) { const raw = RawEnvironmentSchema.parse(rawEnv); return { nutrientApiKey: raw.NUTRIENT_DWS_API_KEY, nutrientExtractionApiKey: raw.NUTRIENT_DWS_EXTRACTION_API_KEY, dwsApiBaseUrl: raw.DWS_API_BASE_URL, authServerUrl: raw.AUTH_SERVER_URL, clientId: raw.CLIENT_ID, }; }