返回市场
弹性搜索MCP服务器

弹性搜索MCP服务器

作者:cr7258224 星标更新:2025-11-05

项目介绍

<!-- mcp-name: io.github.cr7258/elasticsearch-mcp-server -->

Elasticsearch/OpenSearch MCP 服务器

MseeP.ai 安全评估徽章

信任评分

MCP 官方注册表

概述

这是一个提供 Elasticsearch 和 OpenSearch 交互的 Model Context Protocol (MCP) 服务器实现。该服务器通过一系列工具支持文档搜索、索引分析以及集群管理。

<a href="https://glama.ai/mcp/servers/b3po3delex"><img width="380" height="200" src="https://gips2.baidu.com/it/u=184173523,3895219010&fm=3081&app=3081&f=PNG?w=760&h=400" alt="Elasticsearch MCP 服务器" /></a>

示例

https://github.com/user-attachments/assets/f7409e31-fac4-4321-9c94-b0ff2ea7ff15

功能

常规操作

  • general_api_request: 执行通用 HTTP API 请求。对于没有专用工具的任何 Elasticsearch/OpenSearch API,请使用此工具。

索引操作

  • list_indices: 列出所有索引。
  • get_index: 返回一个或多个索引的信息(映射、设置、别名)。
  • create_index: 创建新索引。
  • delete_index: 删除索引。
  • create_data_stream: 创建新的数据流(需要匹配的索引模板)。
  • get_data_stream: 获取一个或多个数据流的信息。
  • delete_data_stream: 删除一个或多个数据流及其后援索引。

文档操作

  • search_documents: 搜索文档。
  • index_document: 在索引中创建或更新文档。
  • get_document: 根据ID获取文档。
  • delete_document: 根据ID删除文档。
  • delete_by_query: 删除与提供的查询匹配的文档。

集群操作

  • get_cluster_health: 返回关于集群健康的基信息。
  • get_cluster_stats: 返回集群统计的高层次概述。

别名操作

  • list_aliases: 列出所有别名。
  • get_alias: 获取特定索引的别名信息。
  • put_alias: 创建或更新特定索引的别名。
  • delete_alias: 删除特定索引的别名。

配置环境变量

MCP 服务器支持以下环境变量:

基本认证(用户名/密码)

  • ELASTICSEARCH_USERNAME: 基本认证的用户名
  • ELASTICSEARCH_PASSWORD: 基本认证的密码
  • OPENSEARCH_USERNAME: OpenSearch 基本认证的用户名
  • OPENSEARCH_PASSWORD: OpenSearch 基本认证的密码

API 密钥认证(仅限 Elasticsearch)- 推荐

连接设置

  • ELASTICSEARCH_HOSTS / OPENSEARCH_HOSTS: 主机的逗号分隔列表(默认:https://localhost:9200
  • ELASTICSEARCH_VERIFY_CERTS / OPENSEARCH_VERIFY_CERTS: 是否验证 SSL 证书(默认:false

禁用高风险操作

  • DISABLE_HIGH_RISK_OPERATIONS: 设置为 true 以禁用所有写入操作(默认:false
  • DISABLE_OPERATIONS: 要禁用的具体操作的逗号分隔列表(可选,如果未设置则使用默认的写入操作列表)

DISABLE_HIGH_RISK_OPERATIONS 设置为 true 时,所有执行写入操作的 MCP 工具都会完全从 MCP 客户端隐藏。在这种模式下,默认禁用以下 MCP 工具。

  • 索引操作:

    • create_index
    • delete_index
  • 文档操作:

    • index_document
    • delete_document
    • delete_by_query
  • 数据流操作:

    • create_data_stream
    • delete_data_stream
  • 别名操作:

    • put_alias
    • delete_alias
  • 通用 API 操作:

    • general_api_request

可选地,您可以在 DISABLE_OPERATIONS 环境变量中指定要禁用的操作的逗号分隔列表。

# 禁用高风险操作
export DISABLE_HIGH_RISK_OPERATIONS=true
# 仅禁用特定操作
export DISABLE_OPERATIONS="delete_index,delete_document,delete_by_query"

启动 Elasticsearch/OpenSearch 集群

使用 Docker Compose 启动 Elasticsearch/OpenSearch 集群:

# 对于 Elasticsearch
docker-compose -f docker-compose-elasticsearch.yml up -d

# 对于 OpenSearch
docker-compose -f docker-compose-opensearch.yml up -d

默认的 Elasticsearch 用户名是 elastic,密码是 test123。默认的 OpenSearch 用户名是 admin,密码是 admin

您可以从 http://localhost:5601 访问 Kibana/OpenSearch 控制面板。

Stdio

方案 1: 使用 uvx

使用 uvx 将自动从 PyPI 安装包,无需本地克隆仓库。在配置文件 claude_desktop_config.json 中添加以下配置。

// 对于使用用户名/密码的 Elasticsearch
{
  "mcpServers": {
    "elasticsearch-mcp-server": {
      "command": "uvx",
      "args": [
        "elasticsearch-mcp-server"
      ],
      "env": {
        "ELASTICSEARCH_HOSTS": "https://localhost:9200",
        "ELASTICSEARCH_USERNAME": "elastic",
        "ELASTICSEARCH_PASSWORD": "test123"
      }
    }
  }
}

// 对于使用 API 密钥的 Elasticsearch
{
  "mcpServers": {
    "elasticsearch-mcp-server": {
      "command": "uvx",
      "args": [
        "elasticsearch-mcp-server"
      ],
      "env": {
        "ELASTICSEARCH_HOSTS": "https://localhost:9200",
        "ELASTICSEARCH_API_KEY": "<YOUR_ELASTICSEARCH_API_KEY>"
      }
    }
  }
}

// 对于 OpenSearch
{
  "mcpServers": {
    "opensearch-mcp-server": {
      "command": "uvx",
      "args": [
        "opensearch-mcp-server"
      ],
      "env": {
        "OPENSEARCH_HOSTS": "https://localhost:9200",
        "OPENSEARCH_USERNAME": "admin",
        "OPENSEARCH_PASSWORD": "admin"
      }
    }
  }
}

方案 2: 使用 uv 进行本地开发

使用 uv 需要本地克隆仓库并指定源代码路径。在配置文件 claude_desktop_config.json 中添加以下配置。

// 对于使用用户名/密码的 Elasticsearch
{
  "mcpServers": {
    "elasticsearch-mcp-server": {
      "command": "uv",
      "args": [
        "--directory",
        "path/to/elasticsearch-mcp-server",
        "run",
        "elasticsearch-mcp-server"
      ],
      "env": {
        "ELASTICSEARCH_HOSTS": "https://localhost:9200",
        "ELASTICSEARCH_USERNAME": "elastic",
        "ELASTICSEARCH_PASSWORD": "test123"
      }
    }
  }
}

// 对于使用 API 密钥的 Elasticsearch
{
  "mcpServers": {
    "elasticsearch-mcp-server": {
      "command": "uv",
      "args": [
        "--directory",
        "path/to/elasticsearch-mcp-server",
        "run",
        "elasticsearch-mcp-server"
      ],
      "env": {
        "ELASTICSEARCH_HOSTS": "https://localhost:9200",
        "ELASTICSEARCH_API_KEY": "<YOUR_ELASTICSEARCH_API_KEY>"
      }
    }
  }
}

// 对于 OpenSearch
{
  "mcpServers": {
    "opensearch-mcp-server": {
      "command": "uv",
      "args": [
        "--directory",
        "path/to/elasticsearch-mcp-server",
        "run",
        "opensearch-mcp-server"
      ],
      "env": {
        "OPENSEARCH_HOSTS": "https://localhost:9200",
        "OPENSEARCH_USERNAME": "admin",
        "OPENSEARCH_PASSWORD": "admin"
      }
    }
  }
}

SSE

方案 1: 使用 uvx

# 导出环境变量(使用用户名/密码)
export ELASTICSEARCH_HOSTS="https://localhost:9200"
export ELASTICSEARCH_USERNAME="elastic"
export ELASTICSEARCH_PASSWORD="test123"

# 或导出环境变量(使用 API 密钥)
export ELASTICSEARCH_HOSTS="https://localhost:9200"
export ELASTICSEARCH_API_KEY="<YOUR_ELASTICSEARCH_API_KEY>"

# 默认情况下,SSE MCP 服务器将在 http://127.0.0.1:8000/sse 提供服务
uvx elasticsearch-mcp-server --transport sse

# 可以使用 --host, --port 和 --path 选项指定主机、端口和路径
uvx elasticsearch-mcp-server --transport sse --host 0.0.0.0 --port  8000 --path /sse

方案 2: 使用 uv

# 默认情况下,SSE MCP 服务器将在 http://127.0.0.1:8000/sse 提供服务
uv run src/server.py elasticsearch-mcp-server --transport sse

# 可以使用 --host, --port 和 --path 选项指定主机、端口和路径
uv run src/server.py elasticsearch-mcp-server --transport sse --host 0.0.0.0 --port 8000 --path /sse

流式 HTTP

方案 1: 使用 uvx

# 导出环境变量(使用用户名/密码)
export ELASTICSEARCH_HOSTS="https://localhost:9200"
export ELASTICSEARCH_USERNAME="elastic"
export ELASTICSEARCH_PASSWORD="test123"

# 或导出环境变量(使用 API 密钥)
export ELASTICSEARCH_HOSTS="https://localhost:9200"
export ELASTICSEARCH_API_KEY="<YOUR_ELASTICSEARCH_API_KEY>"

# 默认情况下,流式 HTTP MCP 服务器将在 http://127.0.0.1:8000/mcp 提供服务
uvx elasticsearch-mcp-server --transport streamable-http

# 可以使用 --host, --port 和 --path 选项指定主机、端口和路径
uvx elasticsearch-mcp-server --transport streamable-http --host 0.0.0.0 --port 8000 --path /mcp

方案 2: 使用 uv

# 默认情况下,流式 HTTP MCP 服务器将在 http://127.0.0.1:8000/mcp 提供服务
uv run src/server.py elasticsearch-mcp-server --transport streamable-http

# 可以使用 --host, --port 和 --path 选项指定主机、端口和路径
uv run src/server.py elasticsearch-mcp-server --transport streamable-http --host 0.0.0.0 --port 8000 --path /mcp

兼容性

MCP 服务器兼容 Elasticsearch 7.x、8.x 和 9.x。默认情况下,它使用 Elasticsearch 8.x 客户端(无后缀)。

MCP 服务器Elasticsearch
elasticsearch-mcp-server-es7Elasticsearch 7.x
elasticsearch-mcp-serverElasticsearch 8.x
elasticsearch-mcp-server-es9Elasticsearch 9.x
opensearch-mcp-serverOpenSearch 1.x, 2.x, 3.x

若要使用 Elasticsearch 7.x 客户端,请运行 elasticsearch-mcp-server-es7 版本。对于 Elasticsearch 9.x,请使用 elasticsearch-mcp-server-es9。例如:

uvx elasticsearch-mcp-server-es7

如果您想在本地运行不同的 Elasticsearch 版本(如 7.x 或 9.x),只需在 pyproject.toml 中更新 elasticsearch 依赖项版本,然后启动服务器:

uv run src/server.py elasticsearch-mcp-server

许可证

本项目根据 Apache 许可证版本 2.0 授权 - 详情见 LICENSE 文件。