字数 2696,阅读大约需 14 分钟
在本文中,我们将介绍如何利用Google MCP Toolbox与Elasticsearch[1]结合,构建一个简单的工具来从Elasticsearch索引中提取信息。
最近,我们为Google MCP Toolbox for Databases[2]开源项目贡献了代码,添加了对Elasticsearch作为数据库的支持。
通过这一新功能,您现在可以使用Google MCP Toolbox连接到Elasticsearch,并直接与您的数据进行“对话”。
首先,我们需要运行一个Elasticsearch实例。您可以在Elastic Cloud[3]上激活免费试用,或者使用start-local[4]脚本在本地安装:
curl -fsSL https://elastic.co/start-local | sh此命令将在您的电脑上安装Elasticsearch和Kibana,并生成用于配置Google MCP Toolbox的API密钥。该API密钥将在上述命令的输出中显示,并存储在elastic-start-local文件夹中的.env文件中。
安装完成后,您可以使用用户名_elastic_和start-local脚本生成的密码(存储在.env文件中)登录Kibana。
您可以安装Kibana提供的电子商务订单数据集,其中包含一个名为kibana_sample_data_ecommerce的索引,包含来自ecommerce[5]网站的4,675个订单的信息。每个订单包括以下信息:
要安装示例数据,请打开Kibana中的Integrations页面(在顶部搜索栏中搜索“Integration”),然后安装“Sample Data”。有关更多详细信息,请参考这里的文档:https://www.elastic.co/docs/explore-analyze/#gs-get-data-into-kibana。
本文的目标是展示如何轻松地配置Google MCP Toolbox以连接到Elasticsearch,并使用自然语言与kibana_sample_data_ecommerce索引进行交互。
Google MCP Toolbox是一个开源的MCP服务器,旨在简化应用程序和AI代理与数据库之间的安全高效交互。该项目以前被称为“GenAI Toolbox for Databases”,在完全兼容Model Context Protocol[6](MCP)后改名。其目的是通过处理连接池、身份验证、可观察性及其他操作性问题,来消除传统上连接代理与数据库时的繁重工作。
Toolbox的核心功能是允许开发者定义可重用的高层工具,这些工具封装了数据库交互。这些工具可以被任何兼容MCP的客户端(例如AI代理)调用,而无需客户端实现底层SQL查询或管理数据库连接。这种方法显著减少了构建数据库感知代理所需的样板代码,使得只需几行应用逻辑就能集成高级数据操作。工具一旦定义好,就可以在多个代理、框架或语言之间共享(见图1)。

请在此添加图片描述
图1: Google MCP Toolbox的总体架构
使用Toolbox的一个主要优势是其内置的安全模型。身份验证流程如OAuth2和OIDC被原生支持,使开发者无需在代理中处理或存储敏感数据库凭证。平台还通过OpenTelemetry提供可观察性特性,包括指标和跟踪,这对于调试、监控和生产部署至关重要。总体而言,MCP Toolbox作为一个统一、安全且可扩展的接口,使任何启用了MCP的系统都能与数据交互。
您可以在Linux上使用以下命令安装MCP Toolbox服务器:
export VERSION=0.21.0
curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox如果您想在macOS或Windows上安装,可以按照这里[7]的详细说明进行操作。
要为Elasticsearch配置MCP Toolbox,我们需要创建一个tools.yaml文件,如下所示:
sources:
my-cluster:
kind: elasticsearch
addresses:
- http://localhost:9200
apikey: <insert-here-api-key>
tools:
customer-orders:
kind: elasticsearch-esql
source: my-cluster
description: Get the orders made by a customer identified by name.
query: |
FROM kibana_sample_data_ecommerce | WHERE MATCH(customer_full_name, ?name, {"operator": "AND"})
parameters:
- name: name
type: string
description: The customer name.
toolsets:
elasticsearch-tools:
- customer-orders您需要将**替换为有效的Elasticsearch API密钥。如果您使用start-local在本地运行Elasticsearch,您可以在start-local生成的.env文件中找到API密钥,位于ES_LOCAL_API_KEY**变量下。如果您使用Elastic Cloud,您可以按照这里[8]描述的过程生成API密钥。
以上工具包含了以下用于Elasticsearch的ES|QL[9]查询:
FROM kibana_sample_data_ecommerce | WHERE MATCH(customer_full_name, ?name)如果您不熟悉ES|QL,它是由Elastic开发的一种查询语言,类似于SQL,可用于跨一个或多个索引进行搜索。您可以在官方文档中阅读有关ES|QL的更多信息这里[10]。
上述查询会搜索kibana_sample_data_ecommerce索引中包含指定客户姓名的所有订单,使用**?name**参数(问号表示参数)。
客户姓名在早期的YAML配置中定义,类型为字符串,描述为“客户姓名”。
该工具可用于回答关于客户订单的问题,例如:2025年10月,客户Foo下了多少订单?
工具及其参数的描述对于从用户的自然语言请求中提取相关信息至关重要。这种提取是通过大型语言模型(LLM)的函数调用功能来实现的。实际上,LLM可以确定需要执行哪个函数(工具)以获取必要的信息,并为该函数提供适当的参数。
有关函数调用的更多信息,我们建议阅读Ashish Tiwari撰写的OpenAI function calling with Elasticsearch[11]文章。
您可以使用以下命令运行MCP Toolbox,使用之前的tools.yaml文件:
./toolbox --tools-file tools.yaml --ui–ui参数会在http://127.0.0.1:5000/ui运行一个Web应用程序(图2)。

请在此添加图片描述
图2: MCP Toolbox UI
您可以选择Tools > customer-orders并在参数name中插入一个客户姓名(例如Gwen Sanders),然后点击Run Tool按钮。您应该会看到如图3所示的JSON响应。

请在此添加图片描述
图3: 执行customer-orders工具,name值为“Gwen”
设置完成后,MCP Toolbox可以执行customer-orders工具,与Elasticsearch通信,运行ES|QL查询。
我们可以使用任何MCP客户端与MCP Toolbox for Databases通信。例如,我们可以使用Gemini CLI[12],一个命令行工具来使用Gemini。您可以按照这里[13]的说明安装Gemini CLI。
Gemini CLI提供了一个MCP Toolbox的预配置扩展,可以在gemini-cli-extensions/mcp-toolbox[14]找到。您可以运行以下命令安装此扩展:
gemini extensions install https://github.com/gemini-cli-extensions/mcp-toolbox安装后,您需要进入存储MCP Toolbox的tools.yaml配置文件的目录,并按如下方式执行Gemini CLI(此步骤是为了自动配置Gemini CLI与MCP Toolbox):
gemini您应会看到如图4所示的输出。

请在此添加图片描述
图4: Gemini CLI终端
您可以使用以下命令检查MCP Toolbox是否已连接:
/mcp list您应会看到mcp_toolbox及列出的customer-orders工具(图5)。

请在此添加图片描述
图5: /mcp list命令的输出
如果MCP Toolbox已连接到Gemini CLI,我们现在可以尝试提问,例如:“给我客户Gwen Sanders的订单。”Gemini CLI将请求许可从mcp_toolbox服务器执行customer-orders工具(见图6)。

请在此添加图片描述
图6: 执行customer-orders工具的许可
确认后,Gemini CLI将向MCP Toolbox执行请求,获取JSON响应作为结果,并使用该响应格式化最终输出(图7)。

请在此添加图片描述
图7: MCP Toolbox的响应和Gemini CLI的最终响应
Gemini CLI的响应将报告Gwen Sanders仅下了一次订单,购买了2种产品,总价为132欧元。
Google MCP Toolbox还提供了SDK,用于从用Go、Python和Javascript编写的程序中访问所有功能。
例如,Python SDK可以在Github的以下页面上找到:https://github.com/googleapis/mcp-toolbox-sdk-python。
我们需要创建一个简单的代理来连接到MCP Toolbox。我们需要安装以下软件包:
pip install toolbox-core
pip install google-adk然后使用以下命令创建一个新的代理项目:
adk create my_agent这将在当前目录下创建一个名为my_agent的目录,并包含一个agent.py文件。
更新my_agent/agent.py文件内容以连接到Toolbox:
from google.adk import Agent
from google.adk.apps import App
from toolbox_core import ToolboxSyncClient
client = ToolboxSyncClient("http://127.0.0.1:5000")
root_agent = Agent(
name='root_agent',
model='gemini-2.5-flash',
instruction="You are a helpful AI assistant designed to search information about a dataset of ecommerce orders.",
tools=client.load_toolset(),
)
app = App(root_agent=root_agent, name="my_agent")创建一个包含Google API密钥的**.env**文件:
echo 'GOOGLE_API_KEY="YOUR_API_KEY"' > my_agent/.env最后,我们可以运行代理并观察结果。要执行代理,您可以运行以下命令:
adk run my_agent或者,您可以通过Web界面提供服务:
adk web --port 8000在这两种情况下,您都可以通过问答界面与MCP Toolbox交互。例如,您可以询问之前的问题:给我客户Gwen Sanders的订单。
有关不同SDK的更多信息,您可以参考该文档页面[15]。
在本文中,我们演示了Google MCP Toolbox for Databases的Elasticsearch集成。通过一个简单的YAML配置文件,我们可以定义一组工具,将自然语言问题转化为使用ES|QL语言的Elasticsearch查询。
我们展示了如何与包含来自电子商务[5]网站订单的kibana_sample_data_ecommerce数据集进行交互。通过此配置文件,我们只需运行MCP Toolbox服务器,并从任何MCP客户端连接到它。
最后,我们演示了如何使用Gemini CLI作为客户端连接到MCP Toolbox for Databases,并查询存储在Elasticsearch中的电子商务数据。我们执行了一个自然语言查询,以检索关于特定客户订单的信息。
随着MCP生态系统的不断发展,这种轻量级工具定义模式,加上安全、可生产的基础设施,为构建功能越来越强大的数据感知代理创造了新的机会,所需的工作量却很少。无论您是在本地使用Elastic的示例数据集进行实验,还是在更大型的应用程序中集成搜索功能,MCP Toolbox都提供了一个可靠、可扩展的基础,以使用自然语言与您的Elasticsearch数据进行交互。
有关开发代理AI应用程序的更多信息,您可以阅读Anish Mathur和Dana Juratoni撰写的构建AI代理工作流与Elasticsearch[16]文章。
有关Google MCP Toolbox的更多信息,您可以访问https://googleapis.github.io/genai-toolbox/getting-started/introduction/。
[1] Elasticsearch: https://github.com/elastic/elasticsearch
[2] Google MCP Toolbox for Databases: https://github.com/googleapis/genai-toolbox
[3] Elastic Cloud: https://www.elastic.co/cloud
[4] start-local: https://github.com/elastic/start-local
[5] ecommerce: https://www.elastic.co/enterprise-search/ecommerce
[6] Model Context Protocol: https://www.anthropic.com/news/model-context-protocol
[7] 这里: https://googleapis.github.io/genai-toolbox/getting-started/introduction/#installing-the-server
[8] 这里: https://www.elastic.co/docs/deploy-manage/api-keys/elastic-cloud-api-keys
[9] ES|QL: https://www.elastic.co/docs/explore-analyze/query-filter/languages/esql
[10] 这里: https://www.elastic.co/docs/reference/query-languages/esql
[11] OpenAI function calling with Elasticsearch: https://www.elastic.co/search-labs/blog/function-calling-with-elastic
[12] Gemini CLI: https://github.com/google-gemini/gemini-cli
[13] 这里: https://geminicli.com/docs/get-started/installation/
[14] gemini-cli-extensions/mcp-toolbox: https://github.com/gemini-cli-extensions/mcp-toolbox
[15] 该文档页面: https://googleapis.github.io/genai-toolbox/sdks/
[16] 构建AI代理工作流与Elasticsearch: https://search-labs-redesign.vercel.app/search-labs/blog/ai-agentic-workflows-elastic-ai-agent-builder