前言
n8n是一款开源的ai工作流工具流工具,可以轻松diy自己想要的工作流,并封装成mcp
官方地址:https://github.com/n8n-io/n8n
但请注意,n8n的开源协议为仅作为企业内部或者个人使用等非商业性行为,不能使用n8n提供对外的服务
如果你希望对外使用,请你考虑使用Dify
部署
Node
Try n8n instantly with npx (requires Node.js):
立即使用 npx 试用 n8n(需要 Node.js):
npx n8n
Docker
Or deploy with Docker:
或使用 Docker 进行部署:
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
Access the editor at http://localhost:5678
在 http://localhost:5678 中访问编辑器
我们这里采用node的方式
问题
如果你遇到以下错误信息
Your Node.js version 18.16.0 is currently not supported by n8n.
Please use a Node.js version that satisfies the following version range: >=20.19 <= 24.x
使用node安装n8n建议使用20.19版本以上的node
成功之后会自动运行启动
There is a deprecation related to your environment variables. Please take the recommended actions to update your configuration:
- N8N_RUNNERS_ENABLED -> Running n8n without task runners is deprecated. Task runners will be turned on by default in a future version. Please set `N8N_RUNNERS_ENABLED=true` to enable task runners now and avoid potential issues in the future. Learn more: https://docs.n8n.io/hosting/configuration/task-runners/
[license SDK] Skipping renewal on init because renewal is not due yet or cert is not initialized
Version: 1.100.1
Editor is now accessible via:
http://localhost:5678
Press "o" to open in Browser.
使用
直接访问本地http://localhost:5678
然后输入邮箱密钥进入即可
接下来跳过并进入主界面
创建工作流
我们直接上手创建工作流,遇到的问题可以在实战中讲到
创建工作流
- 点击右上角
create workflow
创建一个工作流
这里我们的工作流以定时的从hacker news上面筛选我感兴趣的新闻,比整理成简报推送到个人邮箱中为例子
添加触发器
- 添加一个触发器
这里我们先选择手动触发
获取数据源
点击加号,这里我希望使用RSS
的方式获取,右边搜索RSS,RSS是一种消息订阅机制
接着搜索hacker news的rss地址
它的作用就是通过热度进行新闻的筛选,当然你可以根据你的需要来使用其他rss消息
https://hnrss.org/newest?points=300
通过修改points的值就可以获取不同的数据,当points修改为20,就是说当前热度大于等于20的新闻数据
我们把url添加到rss reader插件中,然后点击测试
结果显示为有20条数据,这样就算成功了
然后我想要做的是打开link网页读取里面的内容,然后再交给ai去进行汇总总结
爬虫爬取数据
对大模型友好的爬虫工具,Firecrawl是一个非常好爬虫工具,但是n8n没有内置,这个时候就可以借助社区插件了
我们点击右下角三个点:
接着点击setting,保存我们当前的工作流,选择社区节点
下载Firecrawl,点击Browse进行搜索
第一个就是了:
复制名称 n8n-nodes-firecrawl,填到选项框中,打上对勾,开始下载
安装完成之后,我们需要重启n8n,先中断之前的,然后重新运行即可
然后回到网页,点击加号就能够搜索到Firecrawl了
我们需要的能力是爬取一个url并获得他的内容:
获取Firecrawl api凭证
我们需要先添加一个api凭证
去官方网址 :https://www.firecrawl.dev/
进来之后登录之后,右边有一个api key
拿到api key 填入到n8n中即可。
api key每个月都有免费额度,你也可以选择本地部署Firecrawl
,这样就可以无限使用了
点击这个按钮,执行上一个节点,就是获取数据源,接着获取link节点
长按link,拖动到url中
这样就会循环爬取20条数据
补充限制
我们还可以补充限制爬取条数,在他们之间补充一个limit限制阀
这一步可以限制上一步的输出
接着我们测试一下爬虫数据
可以看到,加了限制节点,确实获取到了只有3条数据,并且爬虫节点循环的爬取完了所有的数据:
接入大模型整理数据
选择AI Agent
选择自定义提示词
拖拽data到prompt
添加一个选项,选择系统提示词
然后添加一个大模型来帮助我们
我们可以选择自己想要的大模型,依旧是补充相应的api key,这里我使用DeepSeek
https://platform.deepseek.com/top_up
配置完成之后,我们点击测试
这样就算成功了,我们可以点击右上角的固定按钮,把这个数据变成测试数据来使用,这样我们测试就不需要重新跑一遍工作流了。
合并数据
这里我想要将数据合并成为一个list,我们继续添加一个节点Aggregate
拖拽节点
测试一下,从3条数据合并成了一条
转换为html格式
我们添加一个markdown,将markdown转换为html
由于我们是一个list,因此我们需要补充换行符 {{ $json.output.join("\n\n") }}
结果也是成功的:
发送邮件
这里我们以qq邮箱为例子,去qq邮箱创建一个SMTP服务
密码就是你申请的smtp服务密钥
测试一下,已经成功了
修改为定时触发,自动执行工作流
删除最开始的手动触发,右上角点击新增一个节点,补充自动触发
修改为每4个小时执行一次,复杂的触发规则可以选择Cron
点击保存,点击启动执行
工作流持久化
数据库存储
我们启动n8n的时候,显示了一个文件夹的地址
打开可以发现
本质就是存放在sqlite数据库中,我们也可以选择其他数据库,确保工作流的持久化
下载本地
我们也可以选择下载
右上角有一个download,可以选择下载为json
其他人拿到这个文件之后,可以选择 Import from File
,导入工作流
在http://n8n.io/workfilows/这里,有社区分享的其他人的工作流
n8n MCP
n8n既可以作为MCP Server ,也可以作为MCP Client。
同时支持两种协议,SSE和STDIO
我们这里创建一个新的工作流
聊天触发
我们选择 on Chat Messgae,也就是当有对话时触发
接着选择AI agent 使用deepseek,接着选择Tool
搜索MCP Client Tool
官方仅支持SSE协议的调用,我们使用百度地图的MCP server
来到百度开放平台获取ak
https://lbsyun.baidu.com/apiconsole/key
然后搜索百度地图mcp
https://lbs.baidu.com/faq/api?title=mcpserver/base
快速开始中有一个sse的服务
{
"mcpServers": {
"baidu-maps": {
"url": "https://mcp.map.baidu.com/sse?ak=您的AK"
}
}
}
复制链接回到n8n,输入url即可
我们测试一下对话
结果可以看到调用到mcp服务以及使用大模型。
封装成mcp服务
我们将我们的workflow封装成mcp服务,提供给其他人使用
右上角点击+号,点击MCP Server Trigger
接着选择触发,调用n8n工作流
然后选择我们刚刚写的工作流,可以看到mcp server已经暴露出来了一个sse链接
这个时候当外部工具调用到这个链接的时候,就会自动触发刚才的工作流
重点:
这里我们给刚才的工作流再添加一个触发事件
配置一个变量名称
这一步是为了跟ai的变量名对应起来
最终是这样的结果:
然后修改Call n8n Workflow Tool,让ai自行决定调用工作流
到这里,就配置完成了,复制我们的sse地址,然后点击test workflow,这样就启动好了sse服务的监听
我们使用一个mcp客户端,来尝试n8n创建的mcp服务
我们使用Cherry studio
:https://www.cherry-ai.com/download
填写我们的url即可
回到对话,选择我们的mcp服务,输入问题,可以看到成功调用了我们的mcp服务
总结
-
n8n在这里作为了
mcp server
给Cherry Studio 提供了地图服务 -
同时又作为了
mcp client
使用了百度地图的mcp服务 -
这种就是
双向mcp
的能力 -
sse链接中有两个,一个是测试的url,测试的url使用一次之后,就会自动停止监听,生产的url可以不断的监听使用
配置支持STDIO协议
还是来到社区节点
下载这个插件 n8n-nodes-mcp
替换之前的mcp client,因为官方默认是用的sse
选择下面的节点,上面的是官方的,下面的是社区的
选择stdio,重新命名
这个的功能就是列出所有可用的mcp服务
再新建一个服务,这个服务就是用于,让大模型自己选择使用哪个mcp服务
到这里,就支持了stdio协议的了
docker部署
使用这种方式就可以放在linux服务器上面运行了
安装docker
sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
https://blog.csdn.net/igrsol/article/details/136025857
部署n8n
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
docker stop n8n
# 2. 删除容器
docker rm n8n
# 3. 删除镜像(先获取镜像ID)
docker images | grep n8nio/n8n
# 假设输出:swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/n8nio/n8n latest-linuxarm64 a1b2c3d4e5f6
docker rmi a1b2c3d4e5f6
# 4. 删除卷
docker volume rm n8n_data
# 5. 验证清理结果
docker ps -a # 应看不到 n8n 容器
docker images # 应看不到 n8n 镜像
docker volume ls # 应看不到 n8n_data 卷
这里修改命令
修改为-d,表示可以后台静默运行 -e N8N_SECURE_COOKIE=false ,可以让n8n使用http协议被访问到
接着尝试从其他地方拉取镜像,不然国内服务器无法下载
docker run -d \
-e N8N_SECURE_COOKIE=false \
--name n8n \
-p 5678:5678 \
-v n8n_data:/home/node/.n8n \
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/n8nio/n8n:latest
然后记得开放5678端口的安全组,然后重启服务器
然后访问公网ip加5678端口即可
注意我的服务器上amd64的,下载镜像注意选择对应服务器的版本
https://docker.aityp.com/r/docker.io/n8nio/n8n
我们在启动的时候,也可以选择存放数据的数据库
修改数据存储位置
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-e DB_TYPE=postgresdb \
-e DB_POSTGRESDB_DATABASE=<POSTGRES_DATABASE> \
-e DB_POSTGRESDB_HOST=<POSTGRES_HOST> \
-e DB_POSTGRESDB_PORT=<POSTGRES_PORT> \
-e DB_POSTGRESDB_USER=<POSTGRES_USER> \
-e DB_POSTGRESDB_SCHEMA=<POSTGRES_SCHEMA> \
-e DB_POSTGRESDB_PASSWORD=<POSTGRES_PASSWORD> \
-v n8n_data:/home/node/.n8n \
docker.n8n.io/n8nio/n8n
在运行的时候可以补充数据库环境变量,这样数据就会存储在指定的数据库中