AI 写文档还不够?我用 MCP 把飞书文档上传也自动化了

2,625 阅读14分钟

"AI 帮我写完文档了,但我还得手动复制粘贴到飞书..." —— 这不科学!

关于作者

某大厂前端开发,热爱折腾,喜欢自动化。日常工作是写代码,业余爱好是优化写代码的流程。

座右铭:

  • 能用代码解决的,绝不动手
  • 能自动化的,绝不手动
  • 能偷懒的,绝不勤快

开篇:AI 时代的新烦恼

2024 年,AI 已经能帮我们写代码、写文档、写周报了。作为一个拥抱 AI 的程序员,我每天都在用 Claude、ChatGPT 生成各种技术文档。

但是...

作为大厂程序员,年底述职需要数据支撑。我需要整理这一年做了多少技术文档、解决了多少问题。AI 写完文档后,我还得:

  1. 复制 Markdown 内容
  2. 打开飞书网页
  3. 新建文档
  4. 粘贴(格式还经常乱)
  5. 调整格式
  6. 设置权限
  7. 移动到指定文件夹
  8. 手动记录到表格(为了后续统计)

AI 帮我省了 5 分钟,我却要花 3 分钟做这些机械操作。 更要命的是,没有统一的归档,年底统计数据时简直是噩梦。

转折:发现宝藏文章

就在我准备自己撸一个上传脚本的时候,我在知乎刷到了一篇神文:

《飞书文档操作神器!用AI+Feishu MCP实现文档自动化,效率提升10倍》

看完我直接跪了:原来 MCP(Model Context Protocol)可以直接操作飞书文档!

MCP 是什么?简单说就是让 AI 能调用各种外部服务的协议。有了它,AI 不仅能写文档,还能直接把文档传到飞书上!

这不就是我梦寐以求的自动化吗? 🤩

第一次翻车:系统权限的尴尬

按照文章配置好 MCP,我兴奋地让 AI 创建了第一个飞书文档。

# 使用 tenant_access_token(系统权限)
AI: "文档已创建成功!链接:https://xxx.feishu.cn/docx/..."

我点开链接,然后...

抱歉,你没有权限查看此文档

???我自己创建的文档我自己看不了?

原来用系统权限(tenant_access_token)创建的文档,默认只有应用自己能访问。我把链接发给同事,他们也是一脸懵:

"你发的啥玩意?打不开啊!"

第一次尝试,翻车。 🚗💨

第二次翻车:Token 过期的噩梦

既然系统权限不行,那就用用户权限(user_access_token)吧!

这次文档终于能打开了,我和同事都能看到内容。正当我以为大功告成时...

第二天,Token 过期了。 😱

AI: "上传失败:token_invalid"

飞书的 user_access_token 默认只有 2 小时有效期。也就是说,我每隔 2 小时就要:

  1. 打开飞书开放平台
  2. 重新授权
  3. 复制新的 Token
  4. 更新 MCP 配置文件

这比手动复制粘贴还麻烦啊! 我是来解决问题的,不是来制造新问题的!

破局:写个服务自动刷新 Token

作为一个程序员,遇到重复劳动的第一反应就是:写个脚本自动化它!

我用 Express 搭了个简单的 OAuth 服务器:

// feishu-oauth/server.js
const express = require('express');
const app = express();

// 授权回调:获取 Token
app.get('/callback', async (req, res) => {
  const code = req.query.code;
  // 用授权码换取 access_token 和 refresh_token
  const tokens = await getTokens(code);
  
  // 自动同步到 MCP 配置文件
  syncToMcpConfig(tokens.access_token);
});

// 刷新 Token
app.get('/refresh', async (req, res) => {
  // 用 refresh_token 换新的 access_token
  const newToken = await refreshToken();
  
  // 自动同步到所有需要的地方
  syncToAllConfigs(newToken);
});

现在只需要:

# 启动服务
node feishu-oauth/server.js

# 需要刷新时
curl http://localhost:3000/refresh

Token 问题解决了! 🎉

服务会自动:

  • 刷新 Token
  • 更新 Cursor MCP 配置
  • 保存到本地文件

从此告别手动更新 Token 的噩梦!

大规模使用:新问题接踵而至

Token 问题解决后,我开始大规模使用这个工具。每天让 AI 写完文档,直接上传到飞书,爽得飞起!

但好景不长...

问题 1:测试同学的需求

测试同学找到我:

"能不能在文档里加上应用名和分支名?我们需要知道这个文档对应哪个项目的哪个分支。"

合理需求!于是我在文档模板里加了个表格:

## 项目信息

| 字段 | 说明 |
|-----|------|
| 应用名 | [应用名] |
| 分支名称 | [分支名] |

通过解析当前路径和 git 信息,自动填充这些字段。

// 自动提取应用名(敏感信息已脱敏)
const appName = process.cwd().split('/').pop();

// 自动获取分支名
const branch = execSync('git branch --show-current').toString().trim();

通过解析当前路径和 git 信息,自动填充这些字段。

// 自动提取应用名
const appName = process.cwd().split('/').pop();

// 自动获取分支名
const branch = execSync('git branch --show-current').toString().trim();

问题 2:同事看不了文档

文档上传成功了,信息也齐全了,但同事又来找我:

"你发的文档我打不开,说没有权限。"

又是权限问题? 😤

原来新创建的文档默认是私有的,需要手动添加协作者。于是我写了个脚本:

// 自动添加协作者(敏感信息已脱敏)
async function addCollaborators(docToken, maintainers) {
  for (const name of maintainers) {
    await feishuApi.addPermission({
      token: docToken,
      member_type: 'user',
      perm: 'edit'  // 可编辑权限
    });
  }
}

现在创建文档时,自动给部门全员加上编辑权限。

问题 3:文档散落各处,述职数据难统计

随着使用量增加,我发现一个新问题:文档到处都是!

有的在个人空间,有的在临时文件夹,想找个文档比大海捞针还难。更要命的是,年底述职需要统计数据,我根本不知道自己写了多少文档!

作为大厂程序员,述职 PPT 上没有数据支撑,那就是耍流氓。领导要看的是:

  • 产出了多少技术文档
  • 解决了多少技术问题
  • 提升了多少团队效率

解决方案:统一迁移到 AI 文件夹,自动记录统计数据!

// 自动移动到指定文件夹
async function moveToFolder(docToken, folderToken) {
  await feishuApi.moveFile({
    token: docToken,
    folder_token: folderToken
  });
}

// 自动记录到本地 JSON(按周归档)
async function saveRecord(data) {
  const weekPath = getWeekPath(); // 2026/01月第4周_01月27号到02月02号
  const recordFile = `${weekPath}/records.json`;
  
  const records = readRecords(recordFile);
  records.push({
    title: data.title,
    token: data.token,
    path: data.path,
    timestamp: Date.now()
  });
  
  writeRecords(recordFile, records);
}

这样不仅方便管理,还能自动统计数量:

"本月 AI 生成文档:127 篇,节省时间:635 分钟,提升效率:60%"

年底述职 PPT 上,这些数据直接拿来用,领导看了都说好! 😊

意外收获:AI 知识库联动的可能性

统一归档到 AI 文件夹后,我突然意识到一个更大的价值:这些文档可以成为 AI 知识库的数据源!

想象一下这个场景:

新同事:这个功能怎么实现的?
AI 助手:[自动检索 AI 文件夹] 根据《XX技术方案文档》,这个功能的实现思路是...
新同事:之前遇到过类似的坑吗?
AI 助手:[检索历史文档] 在《XX问题排查记录》中提到过,解决方案是...

所有的技术文档、问题记录、方案设计,都可以成为团队的知识资产!

现在飞书已经支持 AI 知识库功能,只要把文档统一放在一个文件夹里,就可以:

  1. 智能问答:新人提问时,AI 自动从历史文档中找答案
  2. 经验传承:老员工的技术经验不会因为离职而流失
  3. 快速检索:不用翻遍所有文档,AI 帮你找到最相关的内容
  4. 持续学习:AI 会随着文档增多而变得更智能

这才是自动化的终极形态:不仅提升个人效率,还能沉淀团队知识!

我已经在规划下一步:

  • 给每个文档打上标签(技术栈、问题类型、难度等级)
  • 建立文档关联关系(这个方案参考了哪些文档)
  • 定期生成知识图谱(团队的技术全景图)

从单纯的文档上传工具,到团队知识库的基础设施,这个小工具的价值远超我的预期! 🚀

问题 4:效率还是太慢

到这里,上传一个文档需要:

  1. AI 生成文档
  2. 刷新 Token(如果过期)
  3. 上传到飞书
  4. 添加协作者
  5. 移动到指定文件夹
  6. 记录到本地 JSON

虽然比手动快多了,但还是要执行好几条命令。

作为一个懒惰的程序员(褒义),我决定:把所有操作合并成一个脚本!

// feishu-oauth/hooks.js
async function processDocument(options) {
  const { token, title, folder, path, maintainers } = options;
  
  // 1. 添加协作者
  await addCollaborators(token, maintainers);
  
  // 2. 移动到指定文件夹
  await moveToFolder(token, folder);
  
  // 3. 记录到本地 JSON(按周归档)
  await saveRecord({
    token,
    title,
    path,
    timestamp: Date.now()
  });
  
  console.log('✅ 所有操作完成!');
}

现在只需要一条命令:

node feishu-oauth/hooks.js \
  --token "[文档token]" \
  --title "[文档标题]" \
  --folder "[目标文件夹token]" \
  --path "[本地路径]" \
  --maintainers "[维护者1],[维护者2],Claude AI"

一条命令,搞定所有后续操作! 🚀

但这还不够,我希望 AI 能直接帮我完成这些操作,而不是我手动执行命令。

终极形态:封装成 Push 命令

经过这么多次迭代,我意识到:这个工具已经足够成熟,可以封装成一个 AI 命令了!

我在 Cursor 中创建了一个 push 命令(.cursor/commands/push.md):

---
name: push
description: 上传当前 Markdown 文档到飞书云文档
---

# 上传到飞书文档

## 前置条件
刷新 Token:curl http://localhost:3000/refresh

## 上传流程
1. 使用 MCP 的 mcp_lark_mcp_docx_builtin_import 上传文档
2. 自动执行 hooks.js 完成后续操作

## 自动化操作
- ✅ 添加协作者权限(部门全员可编辑)
- ✅ 移动到 AI 文件夹
- ✅ 记录到本地 JSON(按周归档)
- ✅ 自动提取应用名和分支信息

现在的工作流程:

我:@Cursor 帮我写一个技术方案文档
AI:[生成文档内容]
我:/push
AI:[自动上传到飞书,完成所有后续操作]
我:喝口咖啡 ☕️

从写文档到上传完成,全程 AI 自动化,我只需要说一句话!

这个 push 命令成为了其他高级 AI 操作的基石:

  • 自动化周报:AI 写完周报 → /push → 自动上传并通知
  • 代码审查报告:AI 分析代码 → 生成报告 → /push → 团队可见
  • 技术文档同步:本地 Markdown 更新 → /push → 飞书同步更新

一个小命令,撬动了整个工作流的自动化! 💪

效果对比:从 5 分钟到 5 秒

让我们来看看优化前后的对比:

优化前(手动操作)

1. AI 写文档:2 分钟
2. 复制粘贴到飞书:30 秒
3. 调整格式:1 分钟
4. 设置权限:30 秒
5. 移动文件夹:30 秒
6. 添加项目信息:30 秒

总计:5 分钟

优化后(自动化)

1. AI 写文档:2 分钟
2. 执行一条命令:5 秒

总计:2 分钟 5 秒

效率提升:60%! 而且完全不需要人工干预,可以批量处理!

技术细节:给想复现的同学

1. MCP 配置

使用 ~/.cursor/mcp.json 中添加:

{
  "mcpServers": {
    "lark-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@yingyeothon/lark-mcp@latest",
        "u-[token]"  // 这里会自动更新
      ]
    }
  }
}

2. OAuth 服务器

核心是实现 Token 的自动刷新和同步:

const hooks = {
  onTokenSuccess: [
    syncLarkMcpSettings,  // 同步到 Cursor MCP
    syncTokenToFile       // 保存到本地文件
  ]
};

3. 上传文档

使用 mcp_lark_mcp_docx_builtin_import 工具:

{
  data: {
    file_name: "文档标题",
    markdown: "# 内容..."
  },
  useUAT: true  // 使用用户权限
}

4. 后续操作脚本

// hooks.js
const operations = [
  addCollaborators,    // 添加协作者
  moveToFolder,        // 移动文件夹
  saveRecord          // 保存记录
];

for (const op of operations) {
  await op(docToken, options);
}

踩坑总结

  1. 系统权限 vs 用户权限

    • 系统权限:创建的文档只有应用能访问
    • 用户权限:创建的文档可以正常分享
    • 结论:用用户权限!
  2. Token 过期问题

    • 手动更新:每 2 小时一次,太痛苦
    • 自动刷新:写个服务,一劳永逸
    • 结论:自动化是王道!
  3. 权限设置

    • 默认私有:同事看不了
    • 自动添加协作者:部门全员可见
    • 结论:创建时就设置好权限!
  4. 文件管理

    • 散落各处:难以查找和统计
    • 统一归档:方便管理和追踪
    • 结论:规范化很重要!
  5. 操作流程

    • 多步操作:容易遗漏
    • 一键完成:省心省力
    • 结论:能合并就合并!

未来展望:从工具到生态

这个工具还有很多可以优化的地方:

短期优化(已在规划)

  1. 批量上传:一次上传多个文档
  2. 增量更新:本地文档更新后自动同步到飞书
  3. 双向同步:飞书文档修改后同步回本地
  4. 权限模板:不同类型文档使用不同权限配置
  5. 统计面板:可视化展示文档创建数量、节省时间等

长期愿景(AI 知识库生态)

更激动人心的是 AI 知识库联动

  1. 智能文档分类

    • AI 自动识别文档类型(技术方案、问题记录、代码审查等)
    • 自动打标签、建立关联关系
    • 生成知识图谱
  2. 团队知识问答

    • 新人提问 → AI 从历史文档中找答案
    • 遇到问题 → AI 推荐相关的解决方案
    • 技术选型 → AI 总结团队的历史经验
  3. 知识沉淀与传承

    • 老员工的经验自动归档
    • 技术债务可追溯
    • 团队技术栈全景图
  4. 智能推荐系统

    • 写新方案时,AI 推荐相关的历史文档
    • 代码审查时,AI 提醒类似的历史问题
    • 技术分享时,AI 生成知识脉络图

想象一下:

场景 1:新人入职
新人:这个项目的架构是怎样的?
AI:[检索 AI 文件夹] 为你找到 15 篇相关文档,按重要性排序...

场景 2:技术选型
你:我们要不要用 XXX 技术?
AI:[分析历史文档] 团队在 3 个月前评估过,当时的结论是...

场景 3:问题排查
你:这个 bug 之前遇到过吗?
AI:[检索问题记录] 在《XX问题排查》中有类似案例,解决方案是...

这不仅是效率工具,更是团队知识资产的基础设施!

从一个简单的文档上传工具,到团队知识库的核心引擎,这个演进路径让我越来越兴奋。

AI + 自动化 + 知识沉淀 = 团队效能的指数级提升! 🌟

写在最后

从最开始的手动复制粘贴,到现在的一键上传,再到未来的 AI 知识库联动,这个工具的演进让我深刻体会到:

好的工具不仅解决当下的问题,更要为未来创造可能性。

当初只是想偷个懒,少复制几次粘贴。没想到最后做出了一个:

  • 提升个人效率的自动化工具
  • 方便述职统计的数据系统
  • 团队知识沉淀的基础设施
  • AI 知识库联动的数据源

程序员的浪漫,就是把重复劳动变成一行命令,再把一行命令变成团队资产。

现在每次同事问我:"能不能把这个文档发到飞书上?"

我只需要淡定地回一句:

"AI 写完就自动上传了,你去飞书 AI 文件夹找吧。顺便,这些文档以后都能用来训练团队知识库。"

这种感觉,真爽! 😎


彩蛋:关于 AI 知识库

如果你对 AI 知识库联动感兴趣,可以关注我的后续文章。我会分享:

  • 如何用飞书 AI 知识库构建团队问答系统
  • 如何给文档打标签、建立知识图谱
  • 如何让 AI 从历史文档中学习团队经验

从工具到生态,这才刚刚开始! 🚀


相关资源

快速开始

想要使用这个工具?只需三步:

# 1. 克隆项目
git clone https://github.com/mczhaozl/feishu-auto-upload.git

# 2. 安装依赖
cd feishu-auto-upload && npm install

# 3. 启动服务
npm start

详细使用文档请查看 GitHub README


如果你也被飞书文档折磨过,欢迎在评论区分享你的故事!

如果这篇文章对你有帮助,别忘了:

  • 👍 点赞支持
  • ⭐️ GitHub Star
  • 💬 评论交流