Elasticsearch MCP服务器

Elasticsearch MCP服务器通过Model Context Protocol(MCP)连接AI代理与Elasticsearch数据,支持自然语言交互查询、分析和检索数据。

  • by elastic
  • Rust
  • 本地部署
  • 726 星标
  • 更新于
在 GitHub 查看 elastic/mcp-server-elasticsearch

使用说明

Elasticsearch MCP服务器

[!小心] 此MCP服务器已弃用,今后只会接收关键的安全更新。 它已被取代 弹性体生成器 MCP端点,可在Elastic 9.2.0+和Elasticsearch无服务器项目中使用。

使用Elasticsearch MCP服务器进行AI代理

Elasticsearch MCP服务器使用 模型上下文协议 (MCP)。 它支持与Elasticsearch索引的自然语言交互,允许代理在没有自定义API的情况下查询、分析和检索数据。

按照以下步骤从AWS Marketplace部署和配置Elasticsearch MCP Server容器映像。

开始之前

在开始之前,请确保您已经:

  • 可从AWS环境访问的Elasticsearch集群(版本8.x或9.x)
  • Elasticsearch身份验证凭据:
  • Docker已在AWS环境中安装并运行(例如,在EC2实例或容器服务中)
  • 配置的MCP客户端(如Claude Desktop、Cursor、VS Code或其他MCP兼容工具)
  • 部署环境和Elasticsearch集群之间的网络连接

[!注意]

这些说明适用于Elasticsearch MCP Server 0.4.0及更高版本。 对于0.3.1及更早版本,请参阅 v0.3.1的自述文件.

部署Elasticsearch MCP服务器

Elasticsearch MCP服务器作为Docker容器映像提供,可从AWS Marketplace获得。您可以使用stdio协议(用于直接客户端连接)或流式HTTP协议(用于基于web的集成)运行它。

选择协议

服务器支持两种协议:

  • 标准:MCP客户端和服务器之间的直接通信。当您的客户端支持stdio并在同一环境中运行时,请使用此选项。
  • 可流式传输HTTP:建议用于web集成、有状态会话和并发客户端的基于HTTP的协议。

注: 服务器发送事件(SSE)已弃用。请改用可流式传输的HTTP。

配置stdio协议

当您的MCP客户端直接连接到服务器进程时,请使用stdio协议。

为stdio模式设置环境变量

设置以下环境变量:

  • ES_URL:Elasticsearch集群的URL(例如, https://your-cluster.es.amazonaws.com:9200)
  • 对于身份验证,请使用以下选项之一:
    • API密钥:设置 ES_API_KEY 到您的Elasticsearch API密钥
    • 基本身份验证:设置 ES_USERNAME 和 ES_PASSWORD 到您的Elasticsearch凭据
  • (可选) ES_SSL_SKIP_VERIFY:设置为 true 连接到Elasticsearch时跳过SSL/TLS证书验证。仅将其用于开发或测试环境。

在stdio模式下运行容器

在stdio模式下启动MCP服务器:

docker run -i --rm \
  -e ES_URL \
  -e ES_API_KEY \
  docker.elastic.co/mcp/elasticsearch \
  stdio

配置Claude桌面

将此配置添加到您的Claude Desktop配置文件中:

{
  "mcpServers": {
    "elasticsearch-mcp-server": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "ES_URL",
        "-e", "ES_API_KEY",
        "docker.elastic.co/mcp/elasticsearch",
        "stdio"
      ],
      "env": {
        "ES_URL": "<elasticsearch-cluster-url>",
        "ES_API_KEY": "<elasticsearch-API-key>"
      }
    }
  }
}

替换 <elasticsearch-cluster-url> 使用您的Elasticsearch集群URL和 <elasticsearch-API-key> 使用API密钥。

配置可流式传输的HTTP协议

对于基于web的集成或需要支持多个并发客户端时,请使用可流式传输的HTTP协议。

为HTTP模式设置环境变量

设置与stdio协议相同的环境变量:

  • ES_URL:Elasticsearch集群的URL
  • 对于身份验证,请使用以下选项之一:
    • API密钥:设置 ES_API_KEY 到您的Elasticsearch API密钥
    • 基本身份验证:设置 ES_USERNAME 和 ES_PASSWORD 到您的Elasticsearch凭据
  • (可选) ES_SSL_SKIP_VERIFY:设置为 true 跳过SSL/TLS证书验证

以HTTP模式运行容器

以HTTP模式启动MCP服务器:

docker run --rm \
  -e ES_URL \
  -e ES_API_KEY \
  -p 8080:8080 \
  docker.elastic.co/mcp/elasticsearch \
  http

可流式传输的HTTP端点位于 http://<host>:8080/mcp。健康检查端点位于 http://<host>:8080/ping.

使用HTTP代理配置Claude Desktop

如果您使用的是仅支持stdio协议的Claude Desktop(免费版),请使用 mcp-proxy 将stdio桥接到可流式传输的HTTP:

  1. 安装 mcp-proxy:

    uv tool install mcp-proxy
    

    有关替代安装选项,请参阅 mcp代理/README.md.

  2. 将此配置添加到Claude Desktop:

    {
      "mcpServers": {
        "elasticsearch-mcp-server": {
          "command": "/<home-directory>/.local/bin/mcp-proxy",
          "args": [
            "--transport=streamablehttp",
            "--header", "Authorization", "ApiKey <elasticsearch-API-key>",
            "http://<mcp-server-host>:<mcp-server-port>/mcp"
          ]
        }
      }
    }
    

    替换 <home-directory>, <elasticsearch-API-key>, <mcp-server-host>,以及 <mcp-server-port> 与你的价值观。

验证连接

配置MCP客户端后,验证连接是否正常工作:

  1. 启动您的MCP客户端(例如,Claude Desktop或Cursor)。
  2. 检查Elasticsearch MCP服务器是否出现在可用的MCP服务器中。
  3. 通过您的代理接口测试一个简单的查询,以确认它可以访问您的Elasticsearch索引。

如果连接失败,请验证:

  • 您的Elasticsearch集群URL正确,可以从您的AWS环境访问
  • 您的身份验证凭据有效,并且具有必要的权限
  • 容器和Elasticsearch集群之间存在网络连接(检查安全组和网络ACL)
  • Docker正在运行,容器已成功启动(使用以下命令检查容器日志 docker logs <container-id>)

监控健康状况和状态

使用以下方法监控Elasticsearch MCP服务器的健康状况和正常功能:

检查集装箱状态

验证容器是否正在运行:

docker ps | grep elasticsearch-mcp-server

容器应出现在列表中,状态为 Up.

测试健康端点(HTTP模式)

如果您使用的是可流式传输的HTTP协议,请测试健康检查端点:

curl http://<host>:8080/ping

返回成功响应 pong,表示服务器正在运行且健康。

检查容器日志

查看容器日志以识别任何问题:

docker logs <container-id>

查找与以下内容相关的错误消息:

  • Elasticsearch连接失败
  • 身份验证错误
  • 网络连接问题

验证Elasticsearch连接

测试从容器到Elasticsearch集群的连接:

docker exec <container-id> curl -k -u <username>:<password> <ES_URL>

或者使用API密钥:

docker exec <container-id> curl -k -H "Authorization: ApiKey <api-key>" <ES_URL>

成功的响应表示容器可以访问您的Elasticsearch集群。

安全和敏感信息

Elasticsearch MCP服务器安全地处理身份验证凭据:

凭证存储

  • API密钥和密码:仅存储在传递给容器的环境变量中。它们不会持久化到磁盘或记录。
  • 环境变量:运行容器时设置。使用AWS Secrets Manager或AWS Systems Manager参数存储在生产环境中安全地管理凭据。

数据加密

  • 运输中:MCP服务器通过HTTPS与Elasticsearch通信 ES_URL 使用 https:// 协议。确保您的Elasticsearch集群已启用SSL/TLS。
  • 休息时:容器不在本地存储数据。所有数据都保留在Elasticsearch集群中,该集群使用集群的加密设置。

最佳实践

  • 定期轮换API密钥(对于生产环境,每30-90天轮换一次)
  • 使用具有最低所需权限的API密钥(尽可能以只读方式访问特定索引)
  • 切勿将凭据提交到版本控制或在日志中共享
  • 使用AWS Secrets Manager或Parameter Store在运行时注入凭据,而不是对其进行硬编码

AWS服务配额

Elasticsearch MCP服务器在AWS环境中作为容器运行。考虑以下AWS服务配额:

  • EC2实例限制:如果在EC2上运行,请确保您的实例类型支持预期的工作负载
  • 弹性容器服务(ECS):如果使用ECS,请查看 ECS服务配额
  • 弹性Kubernetes服务(EKS):如果使用EKS,请查看 EKS服务配额
  • 网络带宽:确保容器和Elasticsearch集群之间有足够的网络带宽

要请求增加配额,请使用 AWS服务配额控制台 或参考 AWS通用参考指南.

可用工具

连接后,MCP服务器向您的代理提供以下工具:

  • list_indices:列出所有可用的Elasticsearch索引
  • get_mappings:获取特定Elasticsearch索引的字段映射
  • search:使用查询DSL执行Elasticsearch搜索
  • esql:执行ES|QL查询
  • get_shards:获取所有或特定索引的分片信息

您的代理可以使用这些工具通过自然语言对话与Elasticsearch数据进行交互。

下一步

  • 了解Elastic平台中可用的AI功能
  • 探索Agent Builder,使用Elasticsearch构建自定义AI代理