UNPKG

elasticsearch-mcp

Version:

Secure MCP server for Elasticsearch integration with comprehensive tools and Elastic Cloud support

63 lines 2.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ElasticConfigSchema = void 0; exports.loadConfig = loadConfig; const zod_1 = require("zod"); exports.ElasticConfigSchema = zod_1.z.object({ cloudId: zod_1.z.string().optional(), apiKey: zod_1.z.string().optional(), node: zod_1.z.string().optional(), auth: zod_1.z.object({ username: zod_1.z.string(), password: zod_1.z.string(), }).optional(), maxRetries: zod_1.z.number().min(0).max(10).default(3), requestTimeout: zod_1.z.number().min(1000).max(300000).default(30000), pingTimeout: zod_1.z.number().min(1000).max(30000).default(3000), sniffOnStart: zod_1.z.boolean().default(false), sniffInterval: zod_1.z.number().positive().optional(), ssl: zod_1.z.object({ rejectUnauthorized: zod_1.z.boolean().default(true), }).optional(), }); function loadConfig() { const config = { name: 'elasticsearch-mcp', version: '0.1.3', elasticsearch: exports.ElasticConfigSchema.parse({ cloudId: process.env.ELASTIC_CLOUD_ID, apiKey: process.env.ELASTIC_API_KEY, node: process.env.ELASTIC_NODE, auth: process.env.ELASTIC_USERNAME && process.env.ELASTIC_PASSWORD ? { username: process.env.ELASTIC_USERNAME, password: process.env.ELASTIC_PASSWORD, } : undefined, maxRetries: process.env.ELASTIC_MAX_RETRIES ? parseInt(process.env.ELASTIC_MAX_RETRIES, 10) : 3, requestTimeout: process.env.ELASTIC_REQUEST_TIMEOUT ? parseInt(process.env.ELASTIC_REQUEST_TIMEOUT, 10) : 30000, pingTimeout: process.env.ELASTIC_PING_TIMEOUT ? parseInt(process.env.ELASTIC_PING_TIMEOUT, 10) : 3000, }), logging: { level: process.env.LOG_LEVEL || 'info', format: process.env.LOG_FORMAT || 'text', }, server: { maxConcurrentRequests: process.env.MAX_CONCURRENT_REQUESTS ? parseInt(process.env.MAX_CONCURRENT_REQUESTS, 10) : 10, requestTimeoutMs: process.env.REQUEST_TIMEOUT_MS ? parseInt(process.env.REQUEST_TIMEOUT_MS, 10) : 30000, }, }; validateConfig(config); return config; } function validateConfig(config) { const { elasticsearch } = config; if (!elasticsearch.cloudId && !elasticsearch.node) { throw new Error('Either ELASTIC_CLOUD_ID or ELASTIC_NODE must be provided'); } if (elasticsearch.cloudId && !elasticsearch.apiKey) { throw new Error('ELASTIC_API_KEY is required when using Elastic Cloud'); } if (elasticsearch.node && !elasticsearch.auth && !elasticsearch.apiKey) { throw new Error('Authentication (username/password or API key) is required'); } } //# sourceMappingURL=config.js.map