Skip to main content
Glama

Elasticsearch MCP Server

schema.ts2.54 kB
import { z } from "zod"; import { ClientOptions } from "@elastic/elasticsearch"; import fs from "fs"; // 配置验证模式 export const ConfigSchema = z .object({ urls: z .union([ z.string().trim().min(1, "Elasticsearch URL cannot be empty").url("Invalid Elasticsearch URL format"), z.array(z.string().trim().min(1, "Elasticsearch URL cannot be empty").url("Invalid Elasticsearch URL format")) ]) .transform((val) => Array.isArray(val) ? val : [val]) .describe("Elasticsearch server URLs (single URL or array of URLs)"), apiKey: z .string() .optional() .describe("API key for Elasticsearch authentication"), username: z .string() .optional() .describe("Username for Elasticsearch authentication"), password: z .string() .optional() .describe("Password for Elasticsearch authentication"), caCert: z .string() .optional() .describe("Path to custom CA certificate for Elasticsearch"), }); export type ElasticsearchConfig = z.infer<typeof ConfigSchema>; // 根据配置创建客户端选项 export function createClientOptions(config: ElasticsearchConfig): ClientOptions { const validatedConfig = ConfigSchema.parse(config); const { urls, apiKey, username, password, caCert } = validatedConfig; const clientOptions: ClientOptions = { nodes: urls, }; // 设置认证 if (apiKey) { clientOptions.auth = { apiKey }; } else if (username && password) { clientOptions.auth = { username, password }; } // 如果提供了证书,设置 SSL/TLS if (caCert) { try { const ca = fs.readFileSync(caCert); clientOptions.tls = { ca }; } catch (error) { console.error( `Failed to read certificate file: ${ error instanceof Error ? error.message : String(error) }` ); } } return clientOptions; } // 从环境变量创建配置 export function loadConfigFromEnv(): ElasticsearchConfig { const esHost = process.env.ES_HOST || process.env.HOST || ""; // 支持多个URL,用逗号分隔 const urls = esHost.split(',').map(url => url.trim()).filter(url => url.length > 0); return { urls: urls.length > 0 ? urls : [""], apiKey: process.env.ES_API_KEY || process.env.API_KEY || "", username: process.env.ES_USERNAME || process.env.USERNAME || "", password: process.env.ES_PASSWORD || process.env.PASSWORD || "", caCert: process.env.ES_CA_CERT || process.env.CA_CERT || "", }; }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/awesimon/elasticsearch-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server