飞书 MCP 接入 + AI 托管飞书任务 实战记录#

一、目标#

让 Cursor 里的 AI 直接"统领飞书":读任务、读写文档/多维表格/日历、发消息,并把"飞书待办 → 调本地 skill 分析/执行 → 结果写回任务 → 回复来源消息@人"整条链路自动化。

二、接入 lark-mcp(官方 @larksuiteoapi/lark-mcp)#

  • 环境:Node ≥ 20(实测 v22 OK),最新版 0.5.x。
  • 配置写在全局 ~/.cursor/mcp.json 的 mcpServers.lark-mcp:
    {
      "command": "npx",
      "args": ["-y","@larksuiteoapi/lark-mcp","mcp",
        "-a","<App ID>","-s","<App Secret>",
        "-d","https://open.feishu.cn",
        "--token-mode","auto","--oauth",
        "-t","preset.default,preset.im.default,preset.calendar.default,preset.task.default,task.v2.task.list,task.v2.task.get,im.v1.message.reply,im.v1.message.get,im.v1.chat.get,contact.v3.user.batchGetId"]
    }
  • App ID/Secret:开放平台 → 自建应用 → 凭证与基础信息。
  • 用户身份:终端 npx -y @larksuiteoapi/lark-mcp login -a <id> -s <secret>,60s 内点授权 URL。
  • 国际版 Lark 把 -d 换 https://open.larksuite.com。

三、token-mode 选型(关键)#

  • user_access_token 模式会按 token 类型过滤工具,把"机器人发消息(send_as_bot)“等 tenant 工具滤掉 → 发消息工具不出现。
  • 解法:用 --token-mode auto,不按 token 过滤,每次调用用 useUAT 控制身份。

四、踩坑清单(最值钱的部分)#

  1. 权限是逐步暴露的:工具"注册了”≠ scope “授权了”,真调用才报 99991672 缺 scope。
  2. 加 scope 必须发版本 + 重登:新 scope 要"发布生效版本"才进授权页;login 重登才进 token。重启 MCP ≠ 重新登录(进程复用磁盘 token;且内存里可能还留着旧 token 造成假象)。
  3. 机器人名字/头像 = 已发布版本信息,改完要发版本,老消息不回刷。
  4. IM 消息发送方永远是「应用」:OpenAPI 发/回消息即使带用户令牌也显示 bot,无法以真人名义发;useUAT 只决定"能往哪些会话发 / 资源归属"。
  5. 回复原消息要 message_id:任务来源链接给的是 position(消息序号),不是 message_id;要 im.v1.message.list 读群历史定位,需 im:message.group_msg。
  6. 机器人必须在群里才能在该群发/回消息。
  7. lindorm:rows 是保留字;GROUP BY SELECT 不能放字符串常量别名;查询带 offer_id/event_date 等高选择性键。

五、实战产出#

  • 事件配置:com.paymaya offer 8037811/8037812 REGV2_SUCCESS 配 40%(offer 级 type=3,source 79/PH,event_value 沿用现有,已核验 id 23418/23419);source 19 sappoc af_complete_registration 查库已 50% → no-op。
  • 行为异常分析:6462846884 / 1658697924 / 561524792 事件执行正常(被拒属 MMP 端);1500217666 无任何 active 事件配置 → 真·“未出事件”,需补配;1615506534 仅启动事件;6739185971 停量。
  • 任务回写规约:一次 task.patch 改 summary+description;来源 URL 原样保留;执行类标 【AI已完成】、分析类标 【AI已分析】、缺信息标 【AI已分析·待补充】。

六、对账口径(行为异常)#

expected = install_total × e_rate/100,实际 = offer_retention_event_log.raw_event_count。无 active 配置或执行=0 才是真漏;事件在跑但被拒,多为 MMP 行为质量判定。

七、沉淀#

已抽象成本地 skill:~/.cursor/skills/feishu-task-autopilot/,以后一句"处理我的飞书任务"即可触发整条流水线。