@leonardsellem/n8n-mcp-server
Version:
Model Context Protocol (MCP) server for n8n workflow automation
72 lines • 2.73 kB
JavaScript
/**
* 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