使用 MCP 将代理连接到 Elasticsearch 并对索引进行查询

article/2025/7/14 16:39:25

本文是之前文章 “将代理连接到 Elasticsearch 使用模型上下文协议” 的扩展。在这里,我们将以详细的步骤来一步一步地展示如何安装 MCP Server 及使用 MCP 服务器和我们的 Elasticsearch 中的数据来进行对话。

安装

Elasticsearch 及 Kibana

如果你还没有安装好你自己的 Elasticsearch 及 Kibana,那么请参考如下的文章来进行安装:

  • 如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch

  • Kibana:如何在 Linux,MacOS 及 Windows 上安装 Elastic 栈中的 Kibana

在安装的时候,请参考 Elastic Stack 8.x/9.x 的安装指南来进行。在本次安装中,我将使用 Elastic Stack 9.0 来进行展示。

首次安装 Elasticsearch 的时候,我们可以看到如下的画面:

如上所示,我们可以看到超级用户 elastic 的密码。我们记下这个密码,在下面的配置中使用。

获得 Elasticsearch API key

按照如下的步骤获得 API key:

点击上面的拷贝图标。我们把得到的 API key 保存好,供下面进行使用:Vk5sVE1KY0JIckVQMG9rbVNLREo6QjhSbEh2QkdlTjFpUkFKa1dZbTRuZw==

安装 Claude Desktop

我们可以在地址 App unavailable \ Anthropic 下载并按照 Claude Desktop。由于一些原因,我们需要自己来注册一个账号。

安装 MCP 服务器

我们参考连接 mcp-server-elasticsearch 来进行安装。通过 Model Context Protocol (MCP),你可以直接从任何 MCP 客户端(例如 Claude Desktop)连接到你的 Elasticsearch 数据。这个服务器使用 Model Context Protocol (MCP) 将智能代理连接到你的 Elasticsearch 数据,使你能够通过自然语言对话与 Elasticsearch 索引进行交互。

Elasticsearch MCP Server

可用的工具

  • list_indices:列出所有可用的 Elasticsearch 索引
  • get_mappings:获取指定 Elasticsearch 索引的字段映射
  • search:使用提供的查询 DSL 执行一次 Elasticsearch 搜索
  • get_shards:获取所有或指定索引的分片信息

安装步骤

在本博客中,我们将在本地部署 MCP 服务器。使用 Elasticsearch MCP Server 最简单的方法是通过发布的 npm 包。

1)使用正确的 Node.js 版本。

如果你还没有安装 nvm (node version manager),那么请参考文章来进行安装。

brew install nvm
nvm --version
$ nvm --version
0.40.3

我们使用如下的命令来下载 MCP server 文件:

git clone https://github.com/elastic/mcp-server-elasticsearch

然后我们进入到它的根目录下:

$ pwd
/Users/liuxg/nodejs/mcp-server-elasticsearch
$ ls
LICENSE           catalog-info.yaml package.json      tsconfig.json
NOTICE.txt        docs              renovate.json     yarn.lock
README.md         index.ts          scripts

我们打入如下的命令:

nvm use
$ nvm use
Found '/Users/liuxg/nodejs/mcp-server-elasticsearch/.nvmrc' with version <22.14.0>
N/A: version "v22.14.0" is not yet installed.You need to run `nvm install` to install and use the node version specified in `.nvmrc`.
$ nvm install
Found '/Users/liuxg/nodejs/mcp-server-elasticsearch/.nvmrc' with version <22.14.0>
Downloading and installing node v22.14.0...
Downloading https://nodejs.org/dist/v22.14.0/node-v22.14.0-darwin-arm64.tar.xz...
################################################################################################## 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v22.14.0 (npm v10.9.2)
Creating default alias: default -> 22.14.0 (-> v22.14.0)

2. 构建该项目

sudo npm install typescript -g
sudo npm install zod
npm run build
$ npm run build> @elastic/mcp-server-elasticsearch@0.1.1 build
> tsc && shx chmod +x dist/*.js

3. 在 Claude 桌面应用中本地运行:

  1. 打开 Claude 桌面应用

  2. 前往 Settings > Developer > MCP Servers

  3. 点击 Edit Config 并添加一个新的 MCP 服务器,配置如下:

针对我们的配置,我们使用如下的配置:

{"mcpServers": {"elasticsearch-mcp-server-local": {"command": "node","args": ["/Users/liuxg/nodejs/mcp-server-elasticsearch/dist/index.js"],"env": {"ES_URL": "https://localhost:9200","ES_API_KEY": "Vk5sVE1KY0JIckVQMG9rbVNLREo6QjhSbEh2QkdlTjFpUkFKa1dZbTRuZw==","ES_CA_CERT": "/Users/liuxg/elastic/elasticsearch-9.0.1/config/certs/http_ca.crt"}}}
}

我们需要根据自己的配置进行相应的修改。

4. 使用 MCP Inspector 进行调试

sudo npm install @modelcontextprotocol/inspector@0.13.0
ES_URL=your-elasticsearch-url ES_API_KEY=your-api-key npm run inspector
ES_URL=https://localhost:9200 ES_API_KEY=Vk5sVE1KY0JIckVQMG9rbVNLREo6QjhSbEh2QkdlTjFpUkFKa1dZbTRuZw== npm run inspector

5. 检查 Claude desktop 是否连接到 Elasticsearch:

从上面的展示中,我们可以看出来 elasticsearch-mcp-server-local 已经被成功地连接成功,并且它展示了 4 个工具。

Demo 时刻

我们现在使用 Claude Deskop 来展示几个功能:

1)查询 Elasticsearch 有哪些索引:

What are the indices in Elasticsearch?

我们选择 Allow always:

它返回了一些我自己创建的索引。我们也可以在 Kibana 中进行查看:

GET /_cat/indices/*,-.*?v

2) 创建一个索引

我们可以参考文章 “Elasticsearch:基于 Langchain 的 Elasticsearch Agent 对文档的搜索”。我们使用如下的命令来创建 people 索引:

PUT /people
{"mappings": {"properties": {"name": {"type": "text"},"description": {"type": "text"},"sex": {"type": "keyword"},"age": {"type": "integer"},"address": {"type": "text"}}}
}
POST /_bulk
{ "index" : { "_index" : "people", "_id" : "1" } }
{ "name" : "John Doe", "description" : "A software developer", "sex" : "Male", "age" : 30, "address" : "123 Elm Street, Springfield" }
{ "index" : { "_index" : "people", "_id" : "2" } }
{ "name" : "Jane Smith", "description" : "A project manager", "sex" : "Female", "age" : 28, "address" : "456 Maple Avenue, Anytown" }
{ "index" : { "_index" : "people", "_id" : "3" } }
{ "name" : "Alice Johnson", "description" : "A graphic designer", "sex" : "Female", "age" : 26, "address" : "789 Oak Lane, Metropolis" }
{ "index" : { "_index" : "people", "_id" : "4" } }
{ "name" : "Bob Brown", "description" : "A marketing specialist", "sex" : "Male", "age" : 32, "address" : "321 Pine Street, Gotham" }
{ "index" : { "_index" : "people", "_id" : "5" } }
{ "name" : "Charlie Davis", "description" : "An IT analyst", "sex" : "Male", "age" : 29, "address" : "654 Cedar Blvd, Star City" }
{ "index" : { "_index" : "people", "_id" : "6" } }
{ "name" : "Diana Prince", "description" : "A diplomat", "sex" : "Female", "age" : 35, "address" : "987 Birch Road, Themyscira" }
{ "index" : { "_index" : "people", "_id" : "7" } }
{ "name" : "Evan Wright", "description" : "A journalist", "sex" : "Male", "age" : 27, "address" : "213 Willow Lane, Central City" }
{ "index" : { "_index" : "people", "_id" : "8" } }
{ "name" : "Fiona Gallagher", "description" : "A nurse", "sex" : "Female", "age" : 31, "address" : "546 Spruce Street, South Side" }
{ "index" : { "_index" : "people", "_id" : "9" } }
{ "name" : "George King", "description" : "A teacher", "sex" : "Male", "age" : 34, "address" : "879 Elm St, Smallville" }
{ "index" : { "_index" : "people", "_id" : "10" } }
{ "name" : "Helen Parr", "description" : "A full-time superhero", "sex" : "Female", "age" : 37, "address" : "123 Metro Avenue, Metroville" }

我们使用如下的命令来进行提问:

How many documents are there in people index?

我们接下来用中文进行提问:

有多少个文档是男的,有多少个文档是女的?

我们接着提问:

他们的平均年龄是多少?

我们再来提个问:

哪个人的年龄是最大的?

哪个人是程序员?

好的,我们的今天的展示就到这里。我们在以后给大家更多的展示。


http://www.hkcw.cn/article/MVGcsoGMOH.shtml

相关文章

PMI Suite V5.9.125 (Byos and Byosphere)2025年5月15日版本PMI Suite V5.9

1、完整质量分析 Intact Mass™工作流程提供自动MS/MS光谱注释、MS级反卷积和鉴定&#xff0c;与传统的自下而上方法相比&#xff0c;减少了数据分析所需的时间。 2、肽水平分析 鉴定复杂样品中的蛋白质和修饰肽。大幅缩短以肽为中心的工作流程的分析时间 3、色谱图分析 将…

MDP的curriculums部分

文章目录 1. isaaclab中的curriculums1.1 modify_reward_weight1.1.1 函数功能1.1.2 参数详解1.1.3 函数逻辑1.1.4 如何使用 2. isaaclab_task中的curriculums2.1 terrain_levels_vel2.1 功能概述2.2 函数参数2.3 函数逻辑 3. robot_lab中的curriculums3.1 command_levels_vel …

【AUTOSAR OS】事件机制解析:定义、实现与应用

文章目录 一、Event的定义与作用二、核心数据结构三、重要函数实现与原理1. **事件初始化 Os_InitEvent()**2. **设置事件 SetEvent()/Os_SetEvent()**3. **等待事件 WaitEvent()/Os_WaitEvent()**4. **清除事件 ClearEvent()**5. **获取事件状态 GetEvent()** 四、应用示例&am…

单元测试-断言常见注解

目录 1.断言 2.常见注解 3.依赖范围 1.断言 断言练习 package com.gdcp;import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test;//测试类 public class UserServiceTest {Testpublic void testGetGender(){UserService userService new UserService…

5.3.1_1二叉树的先中后序遍历

知识总览&#xff1a; 什么是遍历&#xff1a; 按照某种次序把所有节点都访问一遍 二叉树的遍历-分支节点逐层展开法(会这个就行)&#xff1a; 先序(根)遍历&#xff1a;根左右 中序(根)遍历&#xff1a;左根右 后序(根)遍历&#xff1a;左右根 分支节点逐层展开法&am…

SpringMVC的注解

1. SpringMVC:Spring Web MVC 2. RequestMapping 既是类注解&#xff0c;又是方法注解 3. 访问的URL路径&#xff1a;类路径方法路径 4.后端开发人员测试接口&#xff0c;通常使用postman或其他类似工具来发起请求 对于后端而言&#xff0c;使用postman或form表单&#xff0…

ipfs下载和安装(windows)

关于ipfs介绍&#xff0c;网上一大堆&#xff0c;这里就不讲了。 zip安装包下载衔接&#xff1a;https://github.com/ipfs/kubo/releases/download/v0.35.0/kubo_v0.35.0_windows-amd64.zip 下载之后解压&#xff0c;将文件放到一个合适的目录。 配置系统环境变量&#xff08…

World of Warcraft Hunter [Grandel] [Ancient Petrified Leaf]

World of Warcraft Hunter [Grandel] [Ancient Petrified Leaf] 猎人史诗弓任务 [远古石叶][罗克迪洛尔&#xff0c;上古守护者的手杖][伦鲁迪洛尔&#xff0c;上古守护者的长弓] 最伟大的猎手 Grandel&#xff0c;很多年前的图片。史诗弓流程。

【LeetCode 题解】两数之和(C++/Python 双解法):从语法到算法的全面解析

【LeetCode题解】两数之和&#xff08;C/Python双解法&#xff09;&#xff1a;从语法到算法的全面解析 一、题目描述 题目链接&#xff1a;1. 两数之和 难度&#xff1a;简单 要求&#xff1a;给定一个整数数组 nums 和一个整数目标值 target&#xff0c;在数组中找出两个数…

《AI Agent项目开发实战》DeepSeek R1模型蒸馏入门实战

一、模型蒸馏环境部署 注&#xff1a;本次实验仍然采用Ubuntu操作系统&#xff0c;基本配置如下&#xff1a; 需要注意的是&#xff0c;本次公开课以Qwen 1.5-instruct模型为例进行蒸馏&#xff0c;从而能省略冷启动SFT过程&#xff0c;并且 由于Qwen系列模型本身性能较强&…

17.进程间通信(三)

一、System V 消息队列基本结构与理解 消息队列是全双工通信&#xff0c;可以同时收发消息。 结论1&#xff1a;消息队列提供了一种&#xff0c;一个进程给另一个进程发送有类型数据块的方式&#xff01; 结论2&#xff1a;OS中消息队列可能有多个&#xff0c;要对消息队列进行…

【汽车电子入门】一文了解LIN总线

前言&#xff1a;LIN&#xff08;Local Interconnect Network&#xff09;总线&#xff0c;也就是局域互联网的意思&#xff0c;它的出现晚于CAN总线&#xff0c;于20世纪90年代末被摩托罗拉、宝马、奥迪、戴姆勒、大众以及沃尔沃等多家公司联合开发&#xff0c;其目的是提供一…

BayesFlow:基于神经网络的摊销贝叶斯推断框架

贝叶斯推断为不确定性条件下的推理、复杂系统建模以及基于观测数据的预测提供了严谨且功能强大的理论框架。尽管贝叶斯建模在理论上具有优雅性&#xff0c;但在实际应用中经常面临显著的计算挑战&#xff1a;后验分布通常缺乏解析解&#xff0c;模型验证和比较需要进行重复的推…

高压电绝缘子破损目标检测数据集简介与应用

在电力系统中&#xff0c;高压电绝缘子起着关键的绝缘与机械支撑作用。一旦发生破损&#xff0c;不仅影响输电线路的安全运行&#xff0c;还可能引发电力事故。因此&#xff0c;利用目标检测技术对高压绝缘子的破损情况进行智能识别&#xff0c;已成为当前电力巡检中的重要研究…

深度学习与神经网络 前馈神经网络

1.神经网络特征 无需人去告知神经网络具体的特征是什么&#xff0c;神经网络可以自主学习 2.激活函数性质 &#xff08;1&#xff09;连续并可导&#xff08;允许少数点不可导&#xff09;的非线性函数 &#xff08;2&#xff09;单调递增 &#xff08;3&#xff09;函数本…

paoxiaomo的XCPC算法竞赛训练经验

楼主作为一个普通二本的ICPC选手&#xff0c;在0基础的情况下凭借自学&#xff0c;获得过南昌邀请赛金牌&#xff0c;杭州区域赛银牌&#xff0c;一路上经历过不少的跌宕起伏&#xff0c;如今将曾经摸索出来的学习路线分享给大家 一&#xff0c;语言基础 学习C语言基础语法&a…

电力系统时间同步系统

电力系统中&#xff0c;电压、电流、功率变化等特征量测量都是时间相关函数[1]&#xff0c;统一精准的时间源对于电网安全稳定运行至关重要&#xff0c;因此&#xff0c;电力系统运行规程[2]中明确要求继电保护装置、自动化装置、安全稳定控制系统、能量管理系统和生产信息管理…

Codeforces Round 1028 (Div. 2)(A-D)

题面链接&#xff1a;Dashboard - Codeforces Round 1028 (Div. 2) - Codeforces A. Gellyfish and Tricolor Pansy 思路 要知道骑士如果没了那么这个人就失去了攻击手段&#xff0c;贪心的来说我们只需要攻击血量少的即可&#xff0c;那么取min比较一下即可 代码 void so…

金属材料资料

一、金属材料 1. 黑色金属材料&#xff08;钢铁材料&#xff09; 铸铁&#xff08;含碳量&#xff1e;2.11%&#xff09; 分类&#xff1a; 按碳存在形式&#xff1a;白口铸铁&#xff08;硬脆&#xff0c;炼钢原料&#xff09;、灰口铸铁&#xff08;应用最广&#xff09;、…