作者:来自 Elastic Jedr Blaszyk 及 Joe McElroy
让我们使用 Model Context Protocol 服务器 与 你的 数据 在 Elasticsearch 中聊天。
如果与你的数据交互像与同事聊天一样轻松,会怎样?想象一下,你只需简单地问:“显示上个月所有超过 $500 的订单” 或 “哪些产品获得最多的 5 星评价?”就能立即获得准确答案,无需查询。
模型上下文协议(Model Context Protocol - MCP)让这一切成为可能。它无缝连接对话式 AI 与你的数据库和外部 API,将复杂请求转换为自然对话。现代 LLM 在理解语言方面表现出色,但当它们与现实世界系统集成时,其真正潜力才能得到释放。MCP 架起了它们之间的桥梁,使数据交互更直观、更高效。
在本篇文章中,我们将探讨:
MCP 架构 —— 它如何在底层运行
连接 Elasticsearch 的 MCP 服务器的优势
令人兴奋的时代来了!MCP 与你的 Elastic 技术栈集成,使你与信息的交互方式焕然一新,让复杂查询像日常对话一样直观。
模型上下文协议
模型上下文协议(MCP)由 Anthropic 开发,是一种开放标准,通过安全的双向通道将 AI 模型连接到外部数据源。它解决了 AI 的一大限制:在保持对话上下文的同时,实现对外部系统的实时访问。
MCP 架构
模型上下文协议的架构由两个关键组件组成:
MCP 客户端 – 代表用户请求信息或执行任务的 AI 助手和聊天机器人。
MCP 服务器 – 负责检索相关信息或执行请求操作(例如调用外部 API)的数据存储库、搜索引擎和 API。
MCP 服务器向客户端提供两项主要功能:
资源(Resources) - 结构化数据、文档和内容,可用于 LLM 交互的上下文。这使得 AI 助手能够访问数据库、搜索索引或其他来源的相关信息。
工具(Tools) - 可执行函数,使 LLM 能够与外部系统交互、执行计算或采取现实世界的操作。这些工具扩展了 AI 的能力,不仅限于文本生成,还可以触发工作流、调用 API 或动态操作数据。
提示(Prompts) - 可复用的提示模板和工作流,用于标准化和共享常见的 LLM 交互。
采样(Sampling) - 通过客户端请求 LLM 补全,以实现复杂的自主智能行为,同时保持安全性和隐私性。
MCP 服务器 + Elasticsearch
传统的检索增强生成(RAG)系统根据用户查询检索文档,而 MCP 更进一步:它使 AI 代理能够实时动态构建和执行任务。用户可以使用自然语言提问,例如:
“显示上个月所有超过 $500 的订单。”
“哪些产品获得最多的 5 星评价?”
并立即获得精准答案,无需编写任何查询语句。
MCP 通过以下方式实现这一目标:
动态工具选择 – 代理根据用户意图智能选择 MCP 服务器提供的合适工具。“更智能” 的 LLM 能够基于上下文选择合适的工具和参数。
双向通信 – 代理与数据源流畅交互,按需优化查询(例如,先查找索引映射,再构造 Elasticsearch 查询)。
多工具编排 – 工作流可同时利用多个 MCP 服务器的工具。
持久上下文 – 代理记住先前的交互,在对话中保持连续性。
连接到 Elasticsearch 的 MCP 服务器解锁了强大的实时检索架构。AI 代理可以按需探索、查询和分析 Elasticsearch 数据,使你的数据可通过简单的聊天界面进行搜索。
MCP 不仅限于数据检索,还能执行操作。它与其他工具集成,以触发工作流、自动化流程,并将洞察结果输入分析系统。通过将搜索与执行分离,MCP 使 AI 驱动的应用程序更加灵活、始终保持最新,并无缝集成到自主智能工作流中。
动手实践:通过 MCP 服务器与 Elasticsearch 数据聊天
要通过 MCP 服务器与 Elasticsearch 交互,我们至少需要具备以下功能:
检索索引
获取映射
使用 Elasticsearch 的查询 DSL 执行搜索
我们的服务器是用 TypeScript 编写的,并且我们将使用官方的 MCP TypeScript SDK。为了设置,我们建议安装 Claude 桌面应用程序(免费版即可),因为它包括内置的 MCP 客户端。我们的 MCP 服务器本质上通过 MCP 工具暴露了官方的 JavaScript Elasticsearch 客户端。
让我们首先定义 Elasticsearch 客户端和 MCP 服务器:
const esClient = new Client({
node: url,
auth: {
apiKey: apiKey,
},
});
const server = new McpServer({
name: "elasticsearch-mcp-server",
version: "0.1.0",
});
我们将使用以下 MCP 服务器工具与 Elasticsearch 交互:
列出索引(list_indices):此工具检索所有可用的 Elasticsearch 索引,提供如索引名称、健康状态和文档计数等详细信息。
获取映射(get_mappings):此工具获取指定 Elasticsearch 索引的字段映射,帮助用户了解存储文档的结构和数据类型。
搜索(search):此工具使用提供的查询 DSL 执行 Elasticsearch 搜索。它会自动启用文本字段的高亮显示,方便识别相关的搜索结果。
完整的 Elasticsearch MCP 服务器实现可以在 elastic/mcp-server-elasticsearch 仓库中找到。
与你的索引对话
让我们探索如何设置 Elasticsearch MCP 服务器,以便你可以用自然语言提问关于数据的问题,例如:“查找上个月所有超过 $500 的订单。”
配置 Claude 桌面应用程序
打开 Claude 桌面应用程序
转到 设置 > 开发者 > MCP 服务器(Settings > Developer > MCP Servers)
点击 “Edit Config” 并将以下配置添加到你的
claude_desktop_config.json
:
{
"mcpServers": {
"Elasticsearch MCP Server": {
"command": "npx",
"args": [
"-y",
"@elastic/mcp-server-elasticsearch"
],
"env": {
"ES_URL": "",
"ES_API_KEY": ""
}
}
}
}
注意:此设置使用了由 Elastic 发布的 @elastic/mcp-server-elasticsearch npm 包。如果你想在本地开发,可以在这里找到更多关于启动 Elasticsearch MCP 服务器的详细信息。
填充你的 Elasticsearch 索引
- 你可以使用我们的示例数据填充 "orders" 索引用于本次演示
- 这将允许你尝试像 “Find all orders over $500 from last month” 这样的查询
开始使用
打开 Claude 桌面应用程序中的新对话
MCP 服务器将自动连接
开始提问关于你 Elasticsearch 数据的问题!
查看这个演示,看看使用自然语言查询 Elasticsearch 数据有多简单:
MCP server 展示
它是如何工作的?
当被问到 “Find all orders over $500 from last month”时,LLM 会识别出意图是用指定的约束条件搜索 Elasticsearch 索引。为了执行有效的搜索,代理会这样操作:
确定索引名称:
orders
理解
orders
索引的映射构建与索引映射兼容的查询 DSL,并最终执行搜索请求
这种交互可以表示为:
结论
模型上下文协议(MCP)增强了你与 Elasticsearch 数据的交互方式,使你能够进行自然语言对话,而不是复杂的查询。通过将 AI 能力与你的数据连接,MCP 创建了一个更加直观和高效的工作流,并在整个交互过程中保持上下文。
Elasticsearch MCP 服务器作为一个公开的 npm 包(@elastic/mcp-server-elasticsearch)提供,便于开发者进行集成。只需少量设置,你的团队就可以开始通过简单的对话探索数据、触发工作流并获得洞察。
准备好亲自体验了吗?今天就尝试 Elasticsearch MCP 服务器,开始与你的数据对话吧。
想获得 Elastic 认证吗?查看下一期 Elasticsearch 工程师培训的时间!
Elasticsearch 拥有众多新功能,帮助你为特定用例构建最佳搜索解决方案。深入了解我们的示例笔记本,开始免费的云试用,或立即在本地机器上尝试 Elastic。
原文:Connect Agents to Elasticsearch with Model Context Protocol - Elasticsearch Labs