使用 n8n 和 MCP 创建 AI 代理
2025年10月20日 | by mebius
作者:来自 ElasticGustavo Llermaly

探索如何使用 n8n 构建趋势分析代理,同时利用 Elasticsearch MCP server。
通过我们的点播网络研讨会提升你的技能:使用 Elasticsearch 的 Agentic RAG,以及 Elasticsearch MCP Server 的 MCP 入门。
你也可以立即利用 Elastic 的生成式 AI 功能,开始免费的云端试用,或在本地运行 Elasticsearch。
在本文中,我们将学习如何使用 n8n 创建一个利用 Elasticsearch MCP server 的 AI 代理,同时分析与特定关键词相关的 Google “People Ask About” 问题。
什么是 n8n?
| 问题 | 答案 |
|---|---|
| 什么是 n8n? | n8n 是一个低代码的工作流创建工具,近年来因构建自动化流程而非常流行。它是一个开源平台,使用可视化的拖放界面来构建工作流,具有高度的灵活性。 |
| n8n 是做什么的? | n8n 让你可以通过用户界面(UI)将不同的服务节点作为构建模块连接起来。这些节点可以集成大量服务和应用,包括整个 Google 套件、各种 AI 代理以及 Model Context Protocols(MCPs)。 |
| n8n 中的工作流是如何构建的? | 工作流是通过按顺序串联节点来构建的。你从一个触发器开始(例如文章中提到的 Schedule Trigger 节点),然后连接后续节点以执行操作,例如搜索数据(SerpApi 节点)、转换数据(Split Out 节点)、存储数据(Elasticsearch Create Document 节点)和处理数据(AI Agent 节点)。 |
| n8n 的 AI Agent 节点是如何使用 Elasticsearch MCP 服务器的? | AI Agent 节点将 MCP Client Tool 作为其功能之一。当代理处理提示时,它会识别 “查找历史搜索” 的指令,然后通过 MCP Client Tool 自动调用已配置的 Elasticsearch MCP 服务器来检索所需的聚合数据,从而能够将当前执行结果与历史总数据进行比较。 |
| 为什么在这个项目中使用 n8n 比使用标准 API 脚本更灵活? | n8n 是一种比 API 脚本更方便的低代码解决方案,使技术水平较低的用户也能更轻松地构建和管理工作流。 |

n8n 是一个低代码的工作流创建工具,最近几个月非常流行。它允许你通过 UI 将不同的服务节点作为构建模块连接起来。它内置了可与大量服务和应用集成的节点,包括整个 Google 套件、AI 代理和 MCPs,或者你也可以构建自己的 API 调用或代码块节点。n8n 的口号是:连接一切到一切。
为了让它更好,还有一个社区自动化模板集合,包含免费和付费模板,你可以复制并粘贴到你的项目中。
工作流看起来像这样:
你可以将许多服务串联起来以构建输入、处理它,然后输出到你想要的任何地方。
现在我们将使用 Elasticsearch MCP 服务器作为其中一个代理工具来创建自己的工作流。
你可以在这里找到完整的工作流。
前提条件
工作流程
假设我们想对一些特定关键词的 Google 相关问题(也就是 “People also ask”)进行定期分析,将结果存储在 Elasticsearch 中以便分析,并生成关于结果的报告。

我们将设计一个 Workflow,执行以下步骤:
-
按计划搜索 Google 中我们指定的 keyword
-
收集关于顶级 “People also ask” 问题的信息
-
将问题和答案存储到 Elasticsearch 中以便未来分析
-
使用 agent 和 Elasticsearch、MCP,将本次执行的数据与该 keyword 的聚合总数据进行比较
-
生成一个包含分析结果的 Google Docs 报告
-
所有这些操作无需写一行代码,并且可以通过简单地将更多节点连接到 workflow 来轻松更改或添加任何输入或输出。
部署 MCP server
对于 MCP server,我们将利用 Elastic Agent Builder server 功能。目前,它在 Elasticsearch Serverless 可用,并将在版本 9.2 中对其他安装方式可用。
首先,进入你的 Elasticsearch 部署的 Manage Tools 页面:
https:///app/agent_builder/tools
然后复制 MCP servetgcoder 地址。

你将拥有一个带有不同工具的 MCP server,用来探索集群索引并运行搜索查询:

然后,从管理页面生成一个 API Key:
https:///app/management/security/api_keys

配置 n8n
在本地部署 n8n 的过程很简单。我们可以使用 Docker 部署我们的 server。
首先,创建一个 volume 来持久化我们的 n8n workflows,这样即使重启 container 也不会丢失:
docker volume create n8n_data
现在我们拉取并运行镜像:
docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n
在你的 shell 末尾,你将看到:
Editor is now accessible via:
http://localhost:5678
Press "o" to open in Browser.
你可以直接这样做。系统会要求你设置一个 owner 账户,继续设置即可。

点击 “Start from scratch”
现在让我们按照上面定义的步骤进行:
按每周计划,去搜索 Google 中我们指定的 keyword

首先通过点击右上角的加号创建一个 Schedule Trigger。

在这个页面上,我们将设置 workflow 执行的频率。我们设置为每周一次。

然后添加一个 SerpApi 官方节点并选择 Google Search。要设置它,你需要从他们的网站获取一个 API Key。你可以免费注册并获得每月 100 次搜索。
该节点允许你以编程方式运行搜索,并访问搜索结果和元数据。
在配置中,我们将手动将 q 设置为 elasticsearch:

之后,将这两个节点连接起来:

它收集前 10 个结果的信息
要收集信息,我们必须通过点击节点中的 “Execute step” 按钮来执行 Google Search 节点。你应该在输出窗口看到以下内容:

有很多可供分析的信息,但我们将重点关注相关问题。
相关问题由 Google 从多个来源整理而来,试图反映人们对当前搜索的提问。你可以利用它们来理解用户意图,并相应调整你的网站内容。这样,你的网站可能成为 “People also ask” 部分的答案来源之一,为你带来额外访问量。

将前 10 个结果的时间点存储到 Elasticsearch 以便未来分析
要将每个相关问题存储为独立的 Elasticsearch document,我们必须:
-
添加一个 Split Out 节点,将
related_question_fields拖到 split field -
然后将 Split Out 节点连接到 Elasticsearch Create Document 节点

首先,通过创建一个类型为 Header Auth 的 Generic Credential Type 来配置 Elasticsearch 连接,设置如下:
- Name: Authorization
- Value: ApiKey
为了简化操作,我们将配置节点将前一个输入的所有内容映射过去,通过将 body 设置为 {{ $json.toJsonString() }}。在此页面上,如果需要,你可以通过将字段从输入拖到请求 body 来选择或忽略输入的特定部分:

点击 “Execute step”,你将把结果索引到 Elasticsearch。你可以将这两个节点从此步骤连接起来:

使用 agent 和 Elasticsearch、MCP,将本次执行的数据与该 keyword 的聚合总数据进行比较
我们必须先添加一个 AI Agent 节点,它将包含 AI Model 和工具。

首先点击 “Chat Model” 下的加号来配置你偏好的 model。在此步骤中,你需要提供你的 OpenAI Api Key。
现在在 Tool 部分,我们将选择 MCP Client Tool,并将我们部署的 Elasticsearch MCP server container 设置为 client 用来与 Elasticsearch 通信的工具提供者。配置如下:
- Endpoint: 你的 MCP url
- Server Transport: HTTP Streamable
- Authentication: Header Auth
- Name: Authorization
- Value: ApiKey
- Tools tgcodeto include: 目前保留全部
你最终会得到类似这样的配置:

我们必须将 chat trigger 替换为搜索结果的输出,然后向 agent 添加关于我们希望如何处理结果的指令。
对于 prompt,我们双击 AI Agent,选择 Define Below 作为 prompt 来源,并添加以下内容:
You are a helpful assistant that helps analyzing Google "Peoople Ask About" related questions for specific keywords for a given week.
The results for the tgcodekeyword: {{ $json.search_parameters.q }} are:
{{ $json.related_questions.toJsonString() }}
I want you to use your search tool to go find historical searches using the following ESQL query:
`FROM serp_results` Run this query as is.
And then write a report analysis using the Google docs tool.
You must first create the doc, and pass the document id to the add content tool. Use the keyword and the date for the document title.
For the report I'm looking for the format:
# Todays date, keyword
# This week results summary
# Total dataset results summary
# Conclusion about differences between the current week, and the total dataset changes
该 prompt 将使用 SerpApi 调用的结果作为当前输入,同时使用 Elasticsearch MCP 结果作为历史输入。然后对比两者,并创建一个包含报告结果的 Google Docs 文件。
生成包含分析结果的 Google Docs 报告
最后一步是添加 Google Docs Tool,以便它可以根据当前搜索结果和 MCP server 提供的历史搜索结果生成报告。
为此,你必须点击 Tool 上的加号并选择 Google Drive Tool 文档。我们需要一个节点来创建文件,另一个节点用 agent 的答案更新文件内容。

为 Google Docs 添加两个工具,一个用于创建 document,另一个通过设置不同的 “Operation” 值来更新 document。通过点击输入右侧的图标,将输入参数保持为 “Define automatically by the model”。

测试
最终的 workflow 看起来如下:

你可以在这里找到完整的 workflow。
执行后,你应该能看到创建的报告:

这个 workflow 的优点是它的灵活性。你可以为 agent 添加更多工具,只需更改 prompt,就能增加额外功能。
通过这个设置,你还可以重新连接 chat trigger,与 agent 就分析结果进行对话,并根据对话按需创建特定报告。
结论
在本文中,我们探索了如何在 n8n 中使用 Elasticsearch MCP,实现它能解决的无数用例之一。你可以按顺序、并行、agent 式或三者结合地驱动你的 flows。
如果你想扩展这个项目,第一步是清理 SerpApi payload 中不需要的数据,并将 Google search 输入节点连接到一些外部数据源获取 keywords,例如 spreadsheet 或 database,这样就不用手动输入搜索词到节点中。另一个好主意是通过 email 发送 Word document,或在 Slack 上发布。
原文:https://www.elastic.co/search-labs/blog/n8n-mcp-agent-elasticsearch
文章来源于互联网:使用 n8n 和 MCP 创建 AI 代理
相关推荐: Simple MCP Client – 连接到 Elasticsearch MCP 并进行自然语言搜索
在我之前的文章 “将 agents 连接到 Elasticsearch 使用模型上下文协议 – docker”,我展示了如何使用 Claude Desktop 来连接到 Elasticsearch MCP 并进行自然语言查询。由于一些原因,Claude Des…
