第三方工具集成的两条路:CLI 直调 vs MCP server
在 CLI Agent 里接入第三方工具的决策框架 —— 何时直接 Bash 调外部 CLI,何时走 MCP server,含主流工具速查表
飞书 2026-03 开源官方 lark-cli(200+ 命令、20+ AI Skills)让 Agent 操作消息/文档/多维表,对比官方 lark-openapi-mcp 的取舍
内容摘要
`lark-cli`(npm 包名 `@larksuite/cli`)是飞书在 **2026-03-28** 开源的官方命令行工具,定位非常清晰——**给 AI Agent 一双能在飞书里干活的手**,而不是再产出一份「让你自己复制粘贴的文字」。它是用 Go 写的(占比 98%),通过 npm 全局分发,遵循 MIT 协议。截至 2026-04-22,最新版本是 **v1.0.16**(2026-04-21 发布),内含 **200+ 命令**和 **22 个 AI Skills**,覆盖了飞书云协作里几乎所有能用到的业务域。
lark-cli(npm 包名 @larksuite/cli)是飞书在 2026-03-28 开源的官方命令行工具,定位非常清晰——给 AI Agent 一双能在飞书里干活的手,而不是再产出一份「让你自己复制粘贴的文字」。它是用 Go 写的(占比 98%),通过 npm 全局分发,遵循 MIT 协议。截至 2026-04-22,最新版本是 v1.0.16(2026-04-21 发布),内含 200+ 命令和 22 个 AI Skills,覆盖了飞书云协作里几乎所有能用到的业务域。
为什么 2026 年才出现?飞书原本就有完整的 OpenAPI(2500+ 接口),也有 MCP 版本 lark-openapi-mcp,但前者太底层、后者要把工具描述常驻在模型上下文里,二者都不太符合「Claude Code 这种终端 Agent 即开即用」的形态。lark-cli 是飞书针对「2026 年 Agent 工具爆发期」专门做的一版,核心卖点是 CLI 自描述(--help 可发现)+ 内置 Skills 包(教 Agent 怎么用)。这也是同一时期 Obsidian、GitHub gh CLI 等开始走「为 Agent 重做一版 CLI」的同一波趋势。
那为什么飞书要同时维护官方 CLI 和官方 MCP?因为两者覆盖的场景不重叠:CLI 适合 Claude Code / Codex CLI / Gemini CLI 等终端环境,按需调用、不占上下文;MCP 适合 Cursor / VS Code / Claude Desktop 等非终端的客户端,工具列表预注册、跨客户端复用。后面会专门对比这一段。
| 要素 | 说明 |
|---|---|
| 官方维护 | 字节跳动飞书团队官方项目(larksuite/cli),不是社区方案 |
| AI 原生设计 | 命令、错误信息、--help 文档都是按 Agent 的可读性优化过的 |
| 三层命令架构 | Shortcuts(+ 前缀,Agent 友好)/ API Commands(结构化命令)/ Raw API(裸调 2500+ 接口) |
| 22 个内置 Skills | 一行命令把 Skills 装到 Claude Code,Agent 立刻知道怎么发消息、查日程、写多维表 |
| 凭证安全 | 鉴权 Token 加密保存在系统 Keychain,不是明文落盘 |
| 支持双重身份 | --as user(以你本人身份)/ --as bot(以应用身份)可切换 |
# 第一步:装 lark-cli 本体(Go 程序,npm 分发)
npm install -g @larksuite/cli
# 第二步:装内置 AI Skills 包到全局 Claude Code
# 这一步是关键:装完之后 Claude Code 才知道飞书 22 个业务域怎么用
npx skills add larksuite/cli -y -g
# 校验
lark-cli --version # 期望输出 v1.0.16 或更新
lark-cli --help # 看到 calendar / im / docs / base ... 等业务域
常见踩坑:只装了
npm install -g @larksuite/cli没装 Skills,Claude Code 也能调,但成功率明显低(要靠模型猜命令名和参数)。Skills 是「写给 Agent 看的说明书」,强烈建议两步都做。
# 初始化配置:会引导你创建/选择飞书自建应用,写入本地配置文件
lark-cli config init
# 推荐方式登录:自动选常用 scope,浏览器弹出 OAuth 同意页
lark-cli auth login --recommend
# 验证当前身份和已授权的 scope
lark-cli auth status
身份切换——同一台机器可以挂多个身份:
lark-cli auth login --as user # 以个人身份(能看你自己的日程、邮件)
lark-cli auth login --as bot # 以应用身份(在群里发通知、只读企业数据)
# 发一条群消息(Shortcut 用法,Agent 友好)
lark-cli im +send --chat "周会群" --text "今天 4 点开周会,议程见文档"
# 看今天的日程
lark-cli calendar +agenda
# 读一篇云文档的纯文本
lark-cli docs +read --doc-id "doccnxxxxxxxxxxxxxx"
# 在多维表里加一条记录
lark-cli base +add-record \
--app "bascnxxxxxxxxxxxxxx" \
--table "tblxxxxxxxxxxxxxx" \
--fields '{"标题":"上线检查","负责人":"yang","状态":"进行中"}'
装好 CLI + Skills 之后,在 Claude Code 里直接说人话:
你:把昨天 14:00 那场「Q2 复盘」的妙记拉出来,
抽出所有「行动项」写到 base「待办」表,
每条带负责人和截止日期。
Claude Code:
→ 调用 lark-cli vc minutes list --since "yesterday 14:00" --json
→ 调用 lark-cli vc minutes get <minute_id> --json
→ 解析出 6 条行动项
→ 调用 lark-cli base +add-record(× 6 次)
→ 完成,已写入「待办」表,链接:https://...
你:下周二上午 10 点找 @张伟 @李娜 开 30 分钟同步会,
检查这些待办进度。
Claude Code:
→ 调用 lark-cli contact +find --name "张伟"
→ 调用 lark-cli calendar +book \
--attendees "..." --start "2026-04-28 10:00" --duration 30 \
--title "Q2 复盘待办同步"
→ 已下发邀请。
整个过程你不需要记任何命令、不需要查 OpenAPI 文档,Skills 已经把命令名、参数、错误处置都教给 Agent 了。
四种「让 AI 操作飞书」的路径横向对比:
| 维度 | lark-cli(本卡) | lark-openapi-mcp | 直调 OpenAPI | 社区 lark-bot 工具 |
|---|---|---|---|---|
| 维护方 | 飞书官方 | 飞书官方 | 飞书官方 SDK | 社区个人/小团队 |
| 适配形态 | 终端 CLI(Claude Code / Codex CLI / Gemini CLI) | MCP Server(Cursor / Claude Desktop / VS Code) | 任意可发 HTTP 的程序 | 看具体项目 |
| 上下文成本 | 零常驻(按需调用) | 工具描述常驻在 token 里 | 零(自己写胶水) | 零 |
| Agent 可发现性 | --help + Skills 自描述 | MCP tools/list 返回结构化 schema | 0(要看官方文档) | 通常 0 |
| 学习/接入成本 | 装两个包,5 分钟搞定 | 改 MCP 配置,重启客户端 | 自建应用 + 写 OAuth + 写胶水代码,几小时 | 各项目差异巨大 |
| 跨客户端复用 | ❌ 仅终端类 Agent | ✅ 任意 MCP 客户端 | ✅(你自己包一层就行) | 看项目 |
| 命令/工具数量 | 200+ 命令 + 2500+ 裸 API | 数十个工具(不支持文件上传/文档编辑) | 全量 2500+ | 通常 < 20 |
| 内置 AI Skills | ✅ 22 个业务域 | ❌ 仅工具 schema | ❌ | ❌ |
| 凭证存储 | 系统 Keychain 加密 | 配置文件(明文 app_id/secret) | 自己处理 | 自己处理 |
核心区别一句话:
元卡:选型框架见 /cli/cards/cli-vs-mcp-integration-paths;不熟悉 MCP 的先看 /mcp/cards/what-is-mcp。
| 误区 | 准确理解 |
|---|---|
| 以为 lark-cli 必须自建飞书应用、配 app_id/app_secret 才能用 | lark-cli config init 会引导你完成应用创建,且支持以个人身份 OAuth 登录,普通用户场景不需要手动配凭证 |
| 以为 200+ 命令都要自己记 | 你不用记。Skills 包就是为此存在的——装完 Skills 之后,Claude Code 拿到任务会自己查 Skills 文档决定调哪个命令,你说人话即可 |
| 以为 lark-cli 只支持 Claude Code | 它是普通 CLI,任何能跑 shell 的 Agent 都能调。Codex CLI、Gemini CLI、自己写的 LangChain 脚本都行;Skills 主要适配 Claude Code 的 Skill 协议,但命令本身通用 |
| 以为 lark-cli 和 lark-openapi-mcp 是替代关系,二选一 | 飞书官方明确两者互补:CLI 给终端 Agent 用、MCP 给非终端客户端用。同一台机器同时装两个完全不冲突 |
| 以为只能操作个人数据,不适合团队场景 | --as bot 模式可以以应用身份执行,配上企业级权限可以做群通知、值班播报、自动审批催办等团队场景 |
| 以为装了就能在群聊里直接 @AI 让它办事 | CLI 是本地工具,Agent 在你本地跑,群消息里的 @AI 是另一回事(要靠飞书机器人 + Webhook + 后端服务)。CLI 的典型场景是你本地的 Claude Code 帮你处理飞书相关任务 |
| 以为 Skills 装一次就一直管用 | Skills 跟 lark-cli 版本绑定,CLI 升级后建议 npx skills add larksuite/cli -y -g 再跑一次刷新 |
| 优势 | 劣势 |
|---|---|
AI 原生设计:--help、错误信息、参数命名都是为 Agent 可读性优化过的,比直调 OpenAPI 友好一个数量级 | 必须装两个包(CLI + Skills),少一步就发挥不出实力,新手容易漏 |
| 自带 22 个业务域 Skills:装完即用,Agent 不需要靠瞎试探索命令名 | CLI 版本和 Skills 版本绑定,CLI 升级要顺手刷新 Skills,否则可能命令对不上 |
| 零常驻上下文成本:和 MCP 不同,CLI 工具描述不进 token 预算,对长会话非常友好 | 不跨客户端:Cursor、Claude Desktop 这类非终端客户端用不了,只能走 MCP |
| 凭证安全:Token 加密在系统 Keychain,不是明文配置文件落盘 | OAuth 流程依赖浏览器:纯无界面服务器(裸 SSH)首次登录会卡住,需要本地走完流程后把凭证迁过去 |
| 官方维护 + MIT 开源:版本节奏快,2026-03 首发到 2026-04 已经迭代到 1.0.16;遇到 bug 在 GitHub 直接报 | 覆盖功能仍有边界:MCP 文档明确不支持文件上传/文档编辑,CLI 大部分覆盖了,但部分新接口还在补 |
| 三层命令架构:Shortcuts 给 Agent 用、API Commands 给脚本用、Raw API 给开发者用,自由切换 | 学习曲线在「选哪一层」:同一件事用 +send 还是 im messages create 结果不同,新人会困惑 |
参考答案:不重复,两者覆盖完全不同的客户端形态。
更深一层看,飞书做这两条路也反映了 2026 年 AI 工具集成的两种主流形态:MCP 是「客户端预先知道有哪些工具」的模式,CLI 是「按需自描述发现工具」的模式。它们各有适用场景,不存在谁替代谁。
如果你团队既有人用 Cursor 又有人用 Claude Code,两个都装、各用各的就是最优解。
参考答案:分两类场景设计,永远不要让所有人共享同一套凭证。
场景一:操作个人数据(看自己的日程、回自己的邮件、读个人能看到的文档)
lark-cli auth login --as user --recommend,独立 OAuth 授权场景二:操作团队/应用数据(在群里发自动化通知、写公共多维表、查全员通讯录)
--as bot 模式调用,但凭证从环境变量或临时下发渠道注入--dry-run 让 Agent 先预演,人工确认后再执行permissions.deny 白名单里进阶建议:
参考答案:本质是为不同消费者优化不同的接口粒度。
+ 前缀)——目标用户是 AI Agent 和懒得查文档的人类。它把高频操作打包成一个带智能默认值的命令,参数最少、输出结构化、错误信息带「下一步建议」。例如 lark-cli calendar +agenda 默认查今天、按时间排序、人类可读输出。curl 的语义封装,给你完全的控制权,但你要自己处理一切细节。设计哲学有三点值得别的官方 CLI 借鉴:
--help 输出都按「让模型一次读懂」标准做,这部分投入会直接转化为 Agent 调用成功率。这套思路对 GitHub gh CLI、Notion CLI、Linear CLI 都有借鉴价值——2026 年开始,「为 Agent 重做的官方 CLI」基本都在朝这个三层结构收敛。
优先展示同分类且标签更接近的内容,方便继续串联学习。
在 CLI Agent 里接入第三方工具的决策框架 —— 何时直接 Bash 调外部 CLI,何时走 MCP server,含主流工具速查表
Obsidian v1.12.4 起官方 CLI 全量上线,让 Agent 通过 Bash 直接调 obsidian 命令毫秒级读写 vault,附 Agent 提示词模板与对比 MCP 路径的取舍
用 git worktree 跑多个并行 CLI Agent,避免分支切换打断上下文,含 worktree 管理、Agent 隔离与合并策略