A7:MCP服务器、AI代理和外部工具集成
NLU作业7 --MCP服务器、AI代理和外部工具集成 学生: 高级启动 \[st126235\]
______________________________________________________________________
概述
该项目使用 模型上下文协议(MCP) 在n8n上,通过本地部署 码头工人 (使用PostgreSQL后端)并使用 Cloudflare快速隧道 --取代ngrok作为隧道解决方案。代理已连接到 电报机器人 用于实时消息传递和 谷歌日历 完全 增删改查 事件管理(创建、读取、更新、删除),展示了一个实用的NLU驱动的调度助手,能够理解自然语言命令并采取实际行动。
基础设施说明: 此设置使用的不是ngrok(如指南中所述) cloudflared tunnel --url http://localhost:5678 其生成不需要帐户或令牌的临时公共HTTPS URL。该URL用作所有MCP和Telegram回调的n8n Webhook/Production URL。______________________________________________________________________
任务1:MCP基础设施和服务器设置(3分)
1.1服务器部署——Docker+Cloudflare隧道(0.5分)
n8n是通过以下方式自托管的 Docker Compose 由a支持 PostgreSQL 16 用于持久工作流和凭证存储的数据库。本地实例通过以下方式公开 Cloudflare快速隧道:
cloudflared tunnel --url http://localhost:5678这创建了一个稳定的HTTPS端点(例如。, https://twiki-council-appointments-injuries.trycloudflare.com)n8n用作 WEBHOOK_URL,使所有Webhook和MCP SSE端点都可以从互联网上访问。
Cloudflare Tunnel Terminal *Cloudflare快速隧道在终端中运行——生成的公共HTTPS URL被打印出来,并在整个分配过程中用作n8n Webhook URL。*
n8n Accessed via Cloudflare URL *n8n欢迎页面通过Cloudflare公共URL加载到浏览器中,确认隧道处于活动状态,并且可以从互联网访问实例。*
n8n Workflows Overview *n8n工作流仪表板显示所有工作流。两者 MCP服务器 和 客户端 已标记 发表 (绿色徽章),确认它们是活动的,可以通过公共隧道URL访问。*
______________________________________________________________________
1.2 MCP服务器工作流程——3个内部工具(1 pt)
一个名为的专用工作流 “MCP服务器” 充当工具提供者。一 MCP服务器触发器 节点是入口点;三个内部工具节点从中分支出来:
| 工具 | 节点类型 | 功能 |
|---|---|---|
| 计算器 | 内置计算器 | 计算算术表达式 |
| 日期与时间 | 代码工具(Date_and_Time) | 返回亚洲/曼谷的当前日期/时间(UTC+7) |
| 获取_最新_新闻 | HTTP请求工具 | 通过以下方式获取BBC新闻RSS api.rss2json.com -不需要API密钥 |
工作流程已切换 活跃的 (已出版)。结果 生产URL (结束于 /sse)是AI代理客户端连接到的SSE端点。
MCP Server Workflow *MCP服务器工作流:MCP服务器触发器连接到计算器、日期和时间以及HTTP请求(Get_Latest_News)。这 ↑ 发表 右上角的指示器确认工作流处于活动状态,在SSE端点上显示所有三个工具。*
______________________________________________________________________
1.3 AI代理客户端(1.5分)
第二个工作流名为 “客户端” 包含AI代理。它被配置为 工具代理 具有以下组件:
| 组件 | 配置 |
|---|---|
| 触发 | 收到聊天消息时(聊天触发器) |
| AI代理类型 | 工具代理 |
| 聊天模型 | OpenAI聊天模型节点→ 格罗克API(llama-3.3-70b-versatile),基本URL: https://api.groq.com/openai/v1 |
| 记忆 | 简单内存——窗口缓冲内存,上下文窗口长度:10 |
| 工具 | MCP客户端--SSE端点设置为MCP服务器生产URL |
通过直接在n8n中聊天来验证代理。执行日志显示MCP客户端在MCP服务器上发现和调用工具。
Client Side — MCP News Query *客户端工作流执行新闻查询。用户询问BBC的最新新闻;代理调用MCP客户端→ HTTP请求工具,返回结构化的BBC标题。右侧的执行日志确认了完整的工具调用链:AI Agent→ 简单记忆→ Groq聊天模型→ MCP客户端→ HTTP请求。*
______________________________________________________________________
任务2:电报和谷歌日历集成(3分)
2.1 Telegram Bot API(0.5分)
客户端工作流扩展为使用 电报 作为消息传递渠道:
- 这 当收到聊天消息时 触发器被替换为 电报触发器 节点(监听
message更新,凭证:来自BotFather的Bot令牌)。 - A. 发短信 在AI代理输出后添加节点,将代理的回复路由回用户的Telegram聊天。
- 机器人被命名为 “ST126235 NLP A7调度机器人”.
流量: Telegram Trigger → AI Agent → Send a text message
Telegram Workflow in n8n *客户端工作流更新为电报触发器(左)和发送短信节点(右)。执行日志显示电报发送成功,输出确认 message_id 以及聊天详情。*
Telegram Bot — Date & News *实时电报对话:机器人正确地将今天的日期报告为 2026年3月30日 (曼谷时区)使用日期和时间MCP工具,并使用Get_Latest_News MCP工具获取BBC新闻头版头条——这两个工具都是通过MCP服务器透明调用的。*
______________________________________________________________________
2.2谷歌日历工具(0.5分)
五 谷歌日历 节点通过OAuth 2.0凭据添加到AI代理的工具集(启用Google云控制台-日历API,将URI设置重定向到Cloudflare隧道URL),提供完整的 增删改查 能力:
| 工具节点 | 动作 | 目的 |
|---|---|---|
| 创建事件 | CREATE | 创建带有标题、日期范围和全天标志的新日历事件 |
| 获得许多活动 | READ | 列出日期范围内即将发生的事件 |
| 举办活动 | READ | 通过ID或查询特定日期检索单个事件 |
| 更新事件 | 更新 | 修改事件标题、日期或描述 |
| 删除事件 | DELETE | 从日历中永久删除事件 |
代理的系统提示配置为将亚洲/曼谷(UTC+7)视为默认时区,并始终使用ISO 8601日期格式。
Google Calendar Tools — Full CRUD Workflow *AI Agent,所有五个谷歌日历工具可见。执行日志显示代理使用Google日历直接链接确认所有四个项目阶段事件。*
Final Client Side Workflow — All Tools *最终客户端工作流状态:电报触发器→ AI 代理→ 发送短信。AI Agent有8个工具:Groq聊天模型、简单记忆、MCP客户端和所有五个谷歌日历工具(创建、获取多个、获取一个、更新、删除)。执行日志确认日历事件创建成功。*
______________________________________________________________________
2.3自动化项目进度安排(1分)
通过Telegram向机器人发送自然语言调度命令,请求创建四个全天项目阶段事件:
*“请为我的项目创建4个谷歌日历事件:* *1.“第一阶段:文献综述”2026年4月7日至4月20日* *2.“第二阶段:项目建议书”2026年4月21日至5月4日* *3.“第三阶段:更新进展”2026年5月5日至5月18日* *4.“第四阶段:最终(演示)”2026年5月19日至5月25日* *每一个都应该是一整天的活动。"*
代理解析意图,调用 在Google日历中创建事件 四次,并回复确认摘要。
|#|事件|开始|结束| | - | ----- | ----- | --- | |1|第一阶段:文献综述|2026-04-07|2026年04月20日| |2|第二阶段:项目建议书|2026-04-21|2026年05月4日| |3 |第三阶段:更新进度|2026-05-05 |2026年05月18日| |4|第四阶段:决赛(演讲)|2026-05-19|2026年5月25日|
Telegram — Scheduling Command & Confirmation *电报对话:用户通过MCP工具验证日期并获取新闻后,发送项目调度命令。该机器人确认所有四个阶段都是在谷歌日历中创建的,并带有确切的日期范围。*
谷歌日历——2026年4月(创建后):
Google Calendar April 2026 *2026年4月日历视图确认 “第一阶段:文献综述” (4月7日至20日)和 “第二阶段:项目建议书” (4月21日)被创建为全天事件。*
谷歌日历——2026年5月(创建后):
Google Calendar May 2026 *2026年5月日历视图确认 “第二阶段:项目建议书” (5月4日结束), “第三阶段:更新进度” (5月5日至18日),以及 “第四阶段:最终(演示)” (5月19日至25日)——日历上可见的所有四个阶段。*
______________________________________________________________________
2.4交互验证——完整CRUD(1 pt)
通过完整的 创建→ Read → 更新→ 删除 循环,所有这些都是通过Telegram中的自然语言触发的。
阅读——获取众多活动
*“我即将进行的项目阶段是什么?你能在我的日历上列出下个月的所有活动吗?”*
n8n — Get Many Execution *n8n执行日志:AI代理调用 在谷歌日历中获取许多活动,检索所有四个项目阶段,并将其返回给Telegram用户。*
Telegram — Get Many *Bot列出了所有四个项目阶段事件的确切日期范围,确认这些事件是实时的,并且可以从谷歌日历中读取。*
______________________________________________________________________
阅读--按日期获取一个事件
*“2026年4月12日我有什么活动?”*
n8n — Get One Execution *n8n执行日志: 在谷歌日历中获取活动 返回2026年4月12日的“第一阶段:文献综述”事件详细信息(ID、摘要、开始/结束时间)。*
Telegram — Get One *Bot正确识别出2026年4月12日,用户 “第一阶段:文献综述” --演示按日期查找单个事件。*
______________________________________________________________________
更新事件
*“将文献综述更新为2026年4月10日开始,2026年04月21日结束”*
n8n — Update Execution *n8n执行日志: 更新Google日历中的事件 成功修改“第一阶段:文献综述”活动——新开始:2026-04-10,新结束:2026年04月21日。输出确认更新的事件ID和时间戳。*
Telegram — Update Confirmation *Bot确认更新:“‘第一阶段:文献综述’活动已更新为2026年4月10日开始,2026年04月21日结束。”*
Google Calendar — After Update *2026年4月日历显示 “第一阶段:文献综述” 现在从4月10日开始(从4月7日开始),反映了Telegram的更新命令。*
______________________________________________________________________
删除事件
*“删除第一阶段:文献综述”*
Google Calendar — Before Delete *2026年4月的日历显示了删除前的状态——“第一阶段:文献综述”(4月10日至21日)和“第二阶段:项目建议书”可见。“事件已保存”吐司确认日历已生效。*
n8n — Delete Execution *n8n执行日志: 删除Google日历中的事件 回报 success: true --该事件已被永久删除。*
Telegram — Delete Confirmation *Bot确认:“事件‘第一阶段:文献综述’已从您的谷歌日历中删除。”*
Google Calendar — After Delete *删除后的2026年4月日历——“第一阶段:文献综述”消失了。只剩下“第二阶段:项目建议书”(4月21日以上)和一个无关的事件,确认删除成功。*
______________________________________________________________________
最终状态
CRUD循环后,重新添加事件以恢复原始计划:
*“添加‘第一阶段:文献综述’2026年4月7日至4月20日”*
Telegram — Full CRUD Conversation *显示完整CRUD周期的完整电报对话线程:创建(×4)→ 得到很多→ 更新→ 得到一个→ 删除→ 重新创建。该机器人通过自然语言正确处理每一个操作,展示了端到端的谷歌日历管理。*
______________________________________________________________________
架构概述
┌─────────────────────────────────────────────────┐
│ MCP Server Workflow │
│ MCP Server Trigger ──► Calculator │
│ ──► Date & Time (Code Tool) │
│ ──► Get_Latest_News (HTTP) │
└───────────────────────┬─────────────────────────┘
│ Production URL (SSE)
┌───────────────────────▼─────────────────────────┐
│ Client Side Workflow │
│ Telegram Trigger │
│ ↓ │
│ AI Agent (Groq llama-3.3-70b-versatile) │
│ ├── Simple Memory (Window Buffer, k=10) │
│ ├── MCP Client ──► MCP Server (SSE) │
│ ├── Create an event in Google Calendar │
│ ├── Get many events in Google Calendar │
│ ├── Get an event in Google Calendar │
│ ├── Update an event in Google Calendar │
│ └── Delete an event in Google Calendar │
│ ↓ │
│ Send a text message (Telegram) │
└─────────────────────────────────────────────────┘
↑
cloudflared tunnel --url http://localhost:5678
(Cloudflare Quick Tunnel — public HTTPS, no account needed)| 组件 | 详细信息 |
|---|---|
| n8n | 通过Docker自托管,PostgreSQL 16后端,端口5678 |
| 隧道 | Cloudflare快速隧道(cloudflared)--不需要帐户或令牌 |
| LLM | 格罗克API- llama-3.3-70b-versatile (免费版,兼容OpenAI) |
| 记忆 | 窗口缓冲存储器——上下文窗口10圈 |
| MCP工具 | 计算器、日期和时间(代码)、Get_Latest_News(通过HTTP的BBC RSS) |
| 消息传递 | 电报Bot API-ST126235 NLP A7时间表Bot |
| 日历 | 谷歌日历API通过OAuth 2.0-完整的CRUD(创建,获取多个,获取一个,更新,删除) |
______________________________________________________________________
设置
1.配置 local_n8n/.env
这 .env 该文件保存数据库凭据和n8n用作其文件的公共隧道URL WEBHOOK_URL:
# Database Config
DB_USER=n8n_admin
DB_PASSWORD=your_password
DB_NAME=n8n_db
# Tunnel URL (update this each time cloudflared generates a new URL)
NGROK_URL=https://.trycloudflare.com变量名为NGROK_URL为了与docker-compose.yaml模板,但值是 Cloudflare快速隧道 URL。
2.启动堆栈
cd local_n8n
docker compose up -d3.启动Cloudflare隧道
cloudflared tunnel --url http://localhost:5678
# → Copy the generated HTTPS URL into local_n8n/.env as NGROK_URL, then restart:
docker compose restart n8n4.配置n8n工作流
- Create / import the MCP Server workflow, publish it, note the Production URL (ends in /sse)
- Create the Client Side workflow:
- Configure Groq API credentials (llama-3.3-70b-versatile)
- Set MCP Client SSE Endpoint to the MCP Server Production URL
- Configure Telegram Bot credentials (Bot Token from BotFather)
- Configure Google Calendar OAuth2 credentials (5 nodes: Create, Get Many, Get One, Update, Delete)
- Activate the Client Side workflow______________________________________________________________________
参考文献
- n8n文档-- docs.n8n.io
- Cloudflare快速隧道-- developers.cloudflare.com/cloudflare-one/connections/connect-networks/do-more-with-tunnels/trycloudflare
- 格罗克API- console.groq.com
- 谷歌日历API- developers.google.com/calendar
- 电报机器人API- core.telegram.org/bots/api
- 作业参考环境--
______________________________________________________________________
