前言¶
給 DSH(DeepSeek Harness)做智能體開發時,接辦公協作平臺是個常見痛點:釘釘、飛書各自都有 CLI(dws、lark-cli),npm 上也能找到現成 MCP 包,但要掛進 DSH 往往還得另配 appId/appSecret,或者拿到的是 IM 橋而不是工具面。下面介紹的 dsh-chatops-mcp 就走了一個更省的路線:把釘釘、飛書、飛書項目(Meego)接成三個 MCP 工具服務器,掛進 DeepSeek Harness,釘釘和飛書直接複用本機已有 CLI 登錄態,飛書項目直接用官方服務器,不需要應用密鑰。維護者是 li-shaozhe,源碼在 GitHub,包在 npm,社區目錄頁是 SkillHub。
一句話定位與維護者¶
插件名:li-shaozhe/dsh-chatops-mcp(npm 包名 dsh-chatops-mcp,當前版本 1.7.1,許可證 MIT)。它解決的是「把企業內部 IM / 研發平臺的能力變成 DSH 裏可調用的工具,且不用維護一套憑據」。
三個 MCP 服務器¶
README 開頭就給出三個 server 的對應關係:
| MCP serverName | 工具前綴 | 實現方式 | 憑據來源 |
|---|---|---|---|
dingtalk |
mcp__dingtalk__* |
本包 server.js dingtalk,包裝 dws CLI |
%USERPROFILE%\.dws 已有登錄 |
feishu |
mcp__feishu__* |
本包 server.js feishu,包裝 lark-cli |
%USERPROFILE%\.lark-cli 已有登錄 |
meego |
mcp__meego__* |
官方 @lark-project/mcp(48 工具),經 meego-launch.js 注入 token |
%USERPROFILE%\.dsh\chatops\meego\.env |
釘釘和飛書複用本機已有 CLI 登錄態,零新增應用密鑰;飛書項目(Meego)直接用官方服務器,不自己實現 Open API。理由也很直接:dws 與 lark-cli 已登錄且能自動續期,包一層 CLI 反而零憑據、隨 CLI 升級自動獲得新能力。
工具清單跟着 CLI 升級走¶
釘釘、飛書兩條 surface 的工具清單不寫死在代碼裏,而是讀 CLI 自己的 schema 生成:
| CLI | 自描述命令 | 規模 | 冷啓動耗時 |
|---|---|---|---|
dws |
dws schema --all --compact --format json |
27 個產品 / 1098 個命令 | ~4.4 s |
lark-cli |
lark-cli schema |
15 個 service / 246 個命令 | ~1.7 s |
1300 多個工具全量展開約需 40 萬 token 的工具定義,不現實。所以每條 surface 恆定暴露三個元工具,其餘按需生成:
dingtalk_catalog/feishu_catalog:一次調用列出 CLI 當前支持的所有命令,可按 product / query / effect 過濾,CLI 升級後新命令立刻出現。dingtalk_schema/feishu_schema:查單個命令的完整 flag 列表、類型、是否必填。dingtalk_cli/feishu_cli:逃生艙,{"argv": ["..."]}原樣跑任意子命令。
在此之上,符合「產品白名單 × effect 過濾 × 數量上限」的命令各自變成一個獨立工具,工具名由 CLI 路徑規範化而來(如 contact user get-self → contact_user_get-self)。內置連接器默認 CHATOPS_TOOL_EFFECT=all,讀寫工具都會出現;想收緊成只讀就把該項改成 read。名額先按產品輪轉、再按語義優先級(CHATOPS_TOOL_PRIORITY,默認消息 / 事件 / 待辦 / 任務 / 審批 / 文檔 / 文件 / 節點 / 空間 / 工作項 / 日曆 / 用戶 / 羣 / 搜索 一類高頻名詞)與命令路徑長短排序;+快捷命令 與對應 raw API 只差 -/_ 的會去重,避免一個能力佔兩份名額。
effect 的判定規則是:只有 CLI 明確標 read 的纔算只讀,其餘(含 dws 的 destructive、飛書的 high-risk-write)一律歸爲寫,destructive 的高危命令在 catalog 與 schema 結果裏會帶 "destructive": true。schema 結果緩存在 %USERPROFILE%\.dsh\chatops\cache\<surface>.json(默認 8 小時),只有首次啓動慢;緩存過期後重新掃,失敗時回退舊緩存並在 catalog 裏標註。
連接器面板¶
裝完之後,左側欄會多一個「釘釘/飛書連接器」(order 3),點開就是連接器卡片牆,不需要手動改 cordis.patch.yml。點卡片上的 +,按狀態提示走完三步,最後寫一行 MCP 配置:
| 連接器 | 缺 CLI 時 | 缺登錄時 | 寫入的條目 |
|---|---|---|---|
| 釘釘 | npm i -g dingtalk-workspace-cli |
dws auth login --device --no-browser --recommend,橫幅裏解析驗證碼與鏈接,後臺進程輪詢到授權完成 |
chatops-conn-dingtalk,serverName dingtalk |
| 飛書 | npm i -g @larksuite/cli |
lark-cli auth login --no-wait --json --recommend 拿 device_code + verification_url,點「我已授權」再 --device-code 換 token |
chatops-conn-feishu,serverName feishu |
| 飛書項目 | 官方服務器已在全局前綴下 | 填 MCP 用戶令牌,寫進 %USERPROFILE%\.dsh\chatops\meego\.env |
chatops-conn-meego,serverName meego |
寫入走宿主 ctx.loader,而不是改文件:
await loader.create({ id: 'chatops-conn-dingtalk', name: '@deepseek-ai/dsh-mcp-client', config, disabled: false })
await loader.update(entryId, { config, disabled: false }) // 已存在時
loader.remove(entryId) // 斷開連接
持久化方面,ctx.loader.create/remove 只改 Loader 的內存根樹,Loader.write() 是空實現,所以插件自己落一份 %USERPROFILE%\.dsh\chatops\connections.json(可用 CHATOPS_CONNECTION_STORE 覆蓋)。插件 apply(ctx) 第一件事就是 rehydrate(loader),把上次的連接恢復回來;還掛了 app-boot/config-reload 鉤子 applyStoredFlags(loader),防止刷新時被 patch 裏的默認值把 disabled 位覆蓋掉。恢復結果可以通過 GET /chatops-mcp/connectors 的 rehydrate 字段看到(restored / resumed / failed / repaired)。
卡片上能直接看到狀態:徽標與名稱、右上角 +(未連接)或綠色 ·(已連接)、底部的 CLI 已裝 / 需裝 CLI / 需令牌、N 個工具(來自 tools.schemas() 裏 mcp__<server>__* 的實際註冊數)、已停用,以及頂部彙總 已連接 N / 註冊工具 N / MCP 行 N。超過 80 個工具時會出現黃色告警條,因爲工具過多會拉低迴復質量。
安裝與啓用¶
README 只指明包在 npm 上名爲 dsh-chatops-mcp,插件通過 bundle patch(cordis.patch.yml)接管宿主加載流程,左欄連接器入口在裝完即出現;已抓取的 README 片段中沒有給出獨立的 shell 安裝命令,因此這裏不替作者補一條 dsh plugin add ...。啓動後的行爲有據可依:先做 CLI 探測(server.js 通過 PATH、npm 前綴與 CHATOPS_DWS_BIN / CHATOPS_LARK_BIN / CHATOPS_NODE_BIN 等環境變量兜底找可執行文件),再按需觸發登錄與安裝,最後寫配置與落盤。
典型用法¶
README 給到的可復現路徑是:先在面板點 + 完成一鍵連接;連接後先用 *_catalog 確認當前 CLI 裏有哪些命令,再用 *_schema 取需要的 flag 列表,最後調對應獨立工具或逃生艙 *_cli。飛書項目一側直接用官方服務器原生的 48 個工具,覆蓋工作項增刪改查、字段 / 視圖 / 模板 / 角色配置、WBS 草稿、節點流轉、MQL 搜索、評論、工時、附件上傳,不需要 plugin_id / plugin_secret。要臨時跑一個沒被 surface 選中的命令,用逃生艙:
{"argv": ["message", "send", "--group", "xxx", "--text", "hi"]}
適用場景與注意¶
適合已經在本機登錄過 dws 或 lark-cli、想以最小憑據成本把企業協作平臺接進 DSH 開發者;也適合想直接用飛書項目官方 MCP 服務器的人。安裝前應當通讀 server.js、connectors.js、index.js、meego-launch.js 與 LICENSE(MIT),因爲插件以當前 DSH 進程權限執行 CLI,包括在缺 CLI 時執行 npm i -g、在缺登錄時發起設備碼授權,這些動作都作用於本機全局環境和賬號。若只想給模型可讀面,把 CHATOPS_TOOL_EFFECT 設爲 read 即可。該插件在社區目錄站 SkillHub 展示,該站是獨立站點,與 DeepSeek / 幻方無官方從屬關係。
結語¶
dsh-chatops-mcp 的價值在於:三套平臺,一條插件搞定;釘釘、飛書喫本機 CLI 登錄態,飛書項目喫官方 MCP 服務器;工具面不寫死,跟着 CLI 升級。對想省掉應用密鑰與重複實現的開發者,這是一條成本很低的接入路徑。
- 社區目錄頁:https://www.skillhub.cn/plugins/li-shaozhe/dsh-chatops-mcp
- GitHub:https://github.com/li-shaozhe/dsh-chatops-mcp
- npm:
dsh-chatops-mcp(1.7.1,MIT)
說明:本文事實均覈對自插件 README、package.json 與 npm registry;星標數與社區目錄站上的其他字段因抓取受限未單獨複覈,未在正文中填寫。