elasticsearch-mcp
Version:
Secure MCP server for Elasticsearch integration with comprehensive tools and Elastic Cloud support
63 lines • 2.82 kB
JavaScript
"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