UNPKG

@leonardsellem/n8n-mcp-server

Version:

Model Context Protocol (MCP) server for n8n workflow automation

72 lines 2.73 kB
/** * Environment Configuration * * This module handles loading and validating environment variables * required for connecting to the n8n API. */ import dotenv from 'dotenv'; import findConfig from 'find-config'; import path from 'path'; import { McpError } from '@modelcontextprotocol/sdk/types.js'; import { ErrorCode } from '../errors/error-codes.js'; // Environment variable names export const ENV_VARS = { N8N_API_URL: 'N8N_API_URL', N8N_API_KEY: 'N8N_API_KEY', N8N_WEBHOOK_USERNAME: 'N8N_WEBHOOK_USERNAME', N8N_WEBHOOK_PASSWORD: 'N8N_WEBHOOK_PASSWORD', DEBUG: 'DEBUG', }; /** * Load environment variables from .env file if present */ export function loadEnvironmentVariables() { const { N8N_API_URL, N8N_API_KEY, N8N_WEBHOOK_USERNAME, N8N_WEBHOOK_PASSWORD } = process.env; if (!N8N_API_URL && !N8N_API_KEY && !N8N_WEBHOOK_USERNAME && !N8N_WEBHOOK_PASSWORD) { const projectRoot = findConfig('package.json'); if (projectRoot) { const envPath = path.resolve(path.dirname(projectRoot), '.env'); dotenv.config({ path: envPath }); } } } /** * Validate and retrieve required environment variables * * @returns Validated environment configuration * @throws {McpError} If required environment variables are missing */ export function getEnvConfig() { const n8nApiUrl = process.env[ENV_VARS.N8N_API_URL]; const n8nApiKey = process.env[ENV_VARS.N8N_API_KEY]; const n8nWebhookUsername = process.env[ENV_VARS.N8N_WEBHOOK_USERNAME]; const n8nWebhookPassword = process.env[ENV_VARS.N8N_WEBHOOK_PASSWORD]; const debug = process.env[ENV_VARS.DEBUG]?.toLowerCase() === 'true'; // Validate required core environment variables if (!n8nApiUrl) { throw new McpError(ErrorCode.InitializationError, `Missing required environment variable: ${ENV_VARS.N8N_API_URL}`); } if (!n8nApiKey) { throw new McpError(ErrorCode.InitializationError, `Missing required environment variable: ${ENV_VARS.N8N_API_KEY}`); } // N8N_WEBHOOK_USERNAME and N8N_WEBHOOK_PASSWORD are now optional at startup. // Tools requiring them should perform checks at the point of use. // Validate URL format try { new URL(n8nApiUrl); } catch (error) { throw new McpError(ErrorCode.InitializationError, `Invalid URL format for ${ENV_VARS.N8N_API_URL}: ${n8nApiUrl}`); } return { n8nApiUrl, n8nApiKey, n8nWebhookUsername: n8nWebhookUsername || undefined, // Ensure undefined if empty n8nWebhookPassword: n8nWebhookPassword || undefined, // Ensure undefined if empty debug, }; } //# sourceMappingURL=environment.js.map