背景:为什么要把麦当劳 MCP 接进多维表格?
看到麦当劳发布 MCP 之后,我第一反应是:如果只在对话框里用,每次都要问 AI “今天有啥券”,交互成本太高。
更直观的方式是把优惠信息“铺”到飞书多维表格里:活动日历、卡包、领券记录全在表格里,一眼看全,还能配合飞书自动化定时提醒/一键触发。
说明:多维表格原生 Agent 节点当前有 Bug(需等待修复),所以本文采用 n8n 作为中转,完整跑通“触发 → MCP 调用 → 数据清洗 → 写入飞书”的流程。


01 获取麦当劳 MCP Token
一切的起点是先拿到麦当劳官方发给你的 Token。没有它,后面的流程都跑不通。
-
打开官网:浏览器访问 open.mcd.cn 。

-
登录账号:点击右上角的“登录”,用手机号验证码登录。

-
进入控制台:登录成功后,原来的“登录”按钮会变成“控制台”,点进去。
-
激活服务:系统会弹窗,点击“激活”按钮。

-
签署协议:勾选同意服务协议。

-
复制密钥:屏幕上会出现一串长长的 MCP Token,点击“一键复制”。

注意:这串字符就是你的身份凭证,不要泄露。建议先粘贴到记事本备用。
02 n8n 工作流搭建
这一步是整个系统的核心:在 n8n 里完成从触发到写入飞书的全过程。
整体逻辑是一条直线:
Trigger 触发 → Agent 模型 + MCP 调用 → Code 数据清洗 → Feishu 写入

1) 触发器
一切的开始。这里有两种选择:
2) Agent 节点(关键)
添加一个 AI Agent 节点,它需要连接两个助手:
- Model 模型:推荐连接 DeepSeek,成本低且好用。
- Tools 工具:在 Agent 节点 Tools 下方点加号,搜索并添加 MCP Client。(更多 MCP/Agent 相关话题可在 人工智能 板块延伸阅读)

MCP Client 配置细节
- Credentials 凭证:
- Name 填 Authorization
- Value 格式要求严格:必须是 Bearer + 空格 + 你的 Token
- 正确示范:Bearer eyJhbGci...


Agent 提示词 Prompt 配置
**角色设定**: 你是麦当劳总部的“麦麦情报局长”,负责掌握所有最新的营销活动信息。你的说话风格专业、热情,带有麦当劳特色(喜欢用🍟、🍔等emoji)。
**核心任务**:
1. **日期检查**: 首先必须调用 `now-time-info` 工具获取当前日期。
2. **判断逻辑**:
- 如果当前日期是每月 **1号** (e.g., "2026-01-01"),或者用户明确要求“强制更新活动”,则调用 `campaign-calender` 获取活动日历。
- 如果不是1号,且用户未强制要求,则**不调用**活动日历工具,直接返回空数组 `[]`。
3. **数据处理**:
- 将获取到的活动信息整理为 JSON 格式。
- 必须包含字段: `活动日期`, `活动标题`, `活动内容`, `原始图片链接`。
- **关键调整 - 活动内容 (Activity Content)**:
- 必须生成为**一段紧凑的文本**,**严禁换行**。
- 模仿**朋友圈/小红书**文案风格,使用 Emoji 来分割不同的关键点。
- 格式参考: "💥开年💥劲爆💥事件!㊙️某神秘巨星天团🛫空降常驻随心配1+1🌟「鱼酷玉咖牛」五大巨星🙋个个都是美味&品质担当👀连带着随心配也全面焕新💘红白配变蓝粉配,超养眼🔍记得来麦一探究竟!"
4. **输出要求**:
- 仅输出纯 JSON 数组,不要包含 Markdown 代码块标记(如 ```json),也不要任何解释性文字。
- 格式示例: `[{"活动日期": "...", "活动标题": "...", "活动内容": "💥开年...", ...}]`

**角色设定**: 你是用户的贴身“麦麦钱包管家”,精打细算,帮你管理每一张优惠券和每一个积分。
**核心任务**:
1. **信息同步**: 调用 `now-time-info` 获取当前时间。
2. **资产盘点**:
- 调用 `my-coupons` 获取用户当前拥有的优惠券。
- (可选) 如果有积分查询工具,也一并调用。
3. **数据整合**:
- 将券包信息整理为 JSON 格式。
- 必须包含字段: `优惠券名称`, `优惠价格` (数字), `当前状态` (已领取/待使用), `优惠券图片`, `开始时间`, `结束时间`。
- **字段说明**: `优惠券图片` 字段填入该优惠券的图片链接 URL。
4. **输出要求**:
- 仅输出纯 JSON 数组,无 Markdown。

**角色设定**: 你是行动力超强的“麦麦福利官”,收到指令(Webhook触发)后立即执行领券操作。
**核心任务**:
1. **执行领券**:
- 直接调用 `auto-bind-coupons` 工具。
- **注意**:该工具会自动领取所有当前可用的优惠券,**无需任何入参**(不需要 couponId)。
- 即使接收到参数,也请忽略,直接执行全量领取。
2. **结果反馈**:
- 调用 `now-time-info` 记录执行时间。
- 输出领券结果(成功/失败、领到了什么)。
3. **输出要求**:
- 必须输出符合飞书表格要求的 **JSON 对象**。
- 包含以下五个核心字段:
- `执行时间`: 使用 `now-time-info` 获取的时间。
- `执行结果摘要`: 简短的执行总结,例如 "✅ 成功领取 2 张优惠券" 或 "⚠️ 暂无新券可领"。
- `获得的券`: 详细列出领到的券名称(如有多个用逗号分隔)。
- `成功数量`: (数字) 成功领取的优惠券数量,例如 `2`。
- `失败数量`: (数字) 领取失败的优惠券数量,例如 `0`。
- **严禁**输出 Markdown 代码块,只输出纯 JSON 字符串。
- 格式示例: `{"执行时间": "2026-01-12 10:00:00", "执行结果摘要": "✅ 领券成功", "获得的券": "麦辣鸡腿堡买一送一, 薯条(中)免费", "成功数量": 2, "失败数量": 0}`

3) Code 节点:清洗 Agent 输出(必接)
Agent 输出往往不够“干净”,常见问题:
- 会输出 ```json 这类 Markdown 标记
- JSON 被截断
- 或者某些场景输出的其实是纯文本
如果直接写进飞书,多维表格写入基本会报错。

所以必须在 Agent 后面接一个 Code 节点,填入以下代码进行清洗(代码请原样粘贴):
const aiOutput = items[0].json.output || $node["Agent"].json.output;
function robustParse(input) {
if (typeof input === 'object' && input !== null) return input;
let str = String(input).trim();
// 1. 去除 Markdown 代码块标记
str = str.replace(/^```json\s*/i, '').replace(/^```\s*/i, '').replace(/\s*```$/, '');
// 2. 尝试标准解析
try { return JSON.parse(str); } catch (e) {}
// 3. 修复被截断的 JSON 数组
if (str.startsWith('[') && !str.endsWith(']')) {
for (let i = str.length - 1; i >= 0; i--) {
if (str[i] === '}') {
const potentialJson = str.substring(0, i + 1) + ']';
try {
const res = JSON.parse(potentialJson);
if (Array.isArray(res) && res.length > 0) return res;
} catch (e) {}
}
}
}
// 4. JS 引擎执行
try { return (new Function("return (" + str + ");"))(); } catch (e) {}
// 5. 【新增】文本兜底:如果不是 JSON,直接作为文本返回
// 只要不以 { 或 [ 开头,就默认是普通文本(如战报)
if (!str.startsWith('{') && !str.startsWith('[')) {
return { "text_content": str }; // 封装为对象
}
return null;
}
try {
if (!aiOutput) throw new Error("AI 没有返回 output 字段");
const parsedData = robustParse(aiOutput);
if (!parsedData) {
const preview = aiOutput.length > 100 ? aiOutput.slice(0, 100) + "..." : aiOutput;
throw new Error(`解析彻底失败,原始内容: ${preview}`);
}
// 统一格式化为数组
const resultItems = Array.isArray(parsedData) ? parsedData : [parsedData];
return resultItems.map(item => ({ json: item }));
} catch (error) {
throw new Error(`JSON解析错误: ${error.message}`);
}
4) 飞书节点配置:写入多维表格
数据洗干净后,最后一步就是写入飞书。在 Code 节点之后添加 Feishu Lark 节点。写入步骤最容易出错,建议按下面流程做。

第一步:基础认证
目标:让 n8n 有权限操作你的飞书表格。
-
创建应用:登录飞书开放平台,点击“创建企业自建应用”。

-
获取 ID 和 Secret:在应用的“凭证与基础信息”页,复制 App ID 和 App Secret 填入 n8n。

-
关键权限(必做):在“权限管理”中开启多维表格相关权限,例如 bitable:app:read 和 bitable:record:create。
-
发布版本(必做):到“版本管理与发布”创建新版本并发布,否则权限不生效。

第二步:定位表格
告诉 n8n 数据要写到哪张表里。
-
选择“多维表格”。

-
多维表格 Token:打开你的多维表格,看浏览器链接。链接中 base/ 后面的一串字符就是 App Token。
-
多维表格 ID:同样在链接里,找到 table= 后面的那串字符。

第三步:操作与映射
-
Operation:选择“新增记录”。

-
数据映射模式:强烈建议打开 Raw JSON 模式。直接映射字段更容易因为格式问题报错。(工作流/自动化类排障也可以参考 运维/DevOps/SRE 的相关思路)
Raw JSON 参考写法:
- 必须使用 JSON.stringify() 包裹字符串类型变量,否则飞书会报 Unexpected token 错误。
{
"fields": {
"执行时间": {{ $json["执行时间"] ? JSON.stringify($json["执行时间"]) : 'null' }},
"执行结果摘要": {{ $json["执行结果摘要"] ? JSON.stringify($json["执行结果摘要"]) : 'null' }},
"获得的券": {{ $json["获得的券"] ? JSON.stringify($json["获得的券"]) : 'null' }}
}
}
特别提醒:配置完成后,请务必检查是否在多维表格右上角“添加应用”中添加了你的机器人。这一步非常容易漏掉。

03 飞书多维表格搭建
后端逻辑跑通后,需要在飞书里建好“基地”接收数据:新建一个多维表格,命名为“麦麦福利小助手”。
需要建立三张表,分别对应 n8n 的三条输出。字段类型要严格按下面设置,否则写入会报错。(飞书表格/权限/字段等常见问题也可在 技术文档 类内容里按关键词查避坑)
表 1:优惠日历
用于接收每日推送的活动信息:
- 活动日期:文本类型
- 活动标题:文本类型
- 活动内容:文本类型(存放活动文案)
- 原始图片链接:文本类型(务必选文本类型,直接存 URL;选“超链接”类型会写入报错)

表 2:我的卡包
用于同步账户里当前所有优惠券:
- 优惠券名称:文本类型
- 优惠价格:货币类型
- 当前状态:文本类型
- 优惠券图片:文本类型(同样选文本类型)
- 开始时间:文本类型
- 结束时间:文本类型

表 3:领券记录
“一键领券”后,在这里看到领了哪些券:
- 执行时间:文本类型
- 执行结果摘要:文本类型
- 获得的券:文本类型
- 成功数量:数字类型
- 失败数量:数字类型

04 飞书自动化流程配置
光有表还不够,还需要它能“主动叫你”。这里推荐两条飞书原生自动化,打通“情报 → 提醒 → 领券”。
A. 每日活动推送
功能:每天早上 9 点,自动把当天的活动发给你。

配置步骤:
- 触发器:选择“到达记录中的时间时”
- 数据表:优惠日历
- 时间字段:活动日期,时间设为 09:00
- 操作:选择“发送站内信消息”
- 消息内容:
☀️ 早安!今日麦麦福利情报:
🍟 {活动标题}
📝 {活动内容}
👉 点击查看海报: {原始图片链接}
B. 未领券提醒 & 一键领取
功能:每天下午 5 点 20 自动扫描卡包,发现有“未领取”的券就提醒,并给一个领券按钮(链接到 n8n Webhook)。

配置步骤:
- 触发器:选择“定时触发”
- 操作 1:选择“查找记录”
- 数据表:我的卡包
- 筛选条件:当前状态 等于 未领取
- 循环:系统会自动添加 Loop,遍历每条记录
- 操作 2(在循环内):选择“发送消息卡片”或“发送站内信”
⏰ 羊毛预警!这张券你还没领:
🎫 {优惠券名称}
💰 价值: {优惠价格} 元
👇 猛戳下方链接一键领取:
{这里填入你的 n8n Webhook URL}
05 写在最后:这套思路还能接什么?
即使多维表格原生 Agent 节点暂时有 Bug,用 n8n 中转也能把“表格 + MCP”这条路先跑通。
MCP 更像一条条通往外部世界的管道,多维表格则是一个可视化控制台:今天接麦当劳,明天就可以把同样的套路接到 ERP、智能家居、内部系统……你更想把哪类数据和动作自动化起来?
想继续看更多类似实战,也可以到 云栈社区 交流与沉淀。