im-connector 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -139
- package/dist/cli/runner.d.ts.map +1 -1
- package/dist/cli/runner.js +54 -4
- package/dist/cli/runner.js.map +1 -1
- package/mcp-bundle/README.md +10 -0
- package/package.json +5 -1
package/README.md
CHANGED
|
@@ -1,182 +1,93 @@
|
|
|
1
|
-
#
|
|
1
|
+
# im-connector
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
让 AI Agent 通过 MCP 调用**钉钉(dws)**和**企业微信(wecom-cli)**的 CLI,在渠道里干活:发消息、写日志/日报、建待办、查日程、处理审批。
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
DSH Agent ── mcp__im__run { provider, args } ──▶ dist/mcp/server.js
|
|
7
|
-
├─ provider=dingtalk ──▶ dws ──▶ 钉钉
|
|
8
|
-
└─ provider=wecom ──▶ wecom-cli ──▶ 企业微信
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## 定位:Agent 侧集成(让机器人在渠道里干活)
|
|
12
|
-
|
|
13
|
-
本连接器只负责**「Agent → 渠道」方向**:Agent 通过 MCP 工具调用 dws / wecom-cli,让机器人在钉钉/企微里完成实际工作——发消息、写日志/日报、建待办、查日程、处理审批等。
|
|
14
|
-
|
|
15
|
-
**渠道 → Agent 方向**(在群里/私聊里跟机器人对话)由独立的 `dsh-im` 插件负责,不在本连接器的范围内。
|
|
16
|
-
|
|
17
|
-
## 典型用法(让机器人在渠道里干活)
|
|
18
|
-
|
|
19
|
-
```json
|
|
20
|
-
// 发消息到群 / 私聊
|
|
21
|
-
{ "provider": "dingtalk", "args": ["chat", "+messages-send", "--group", "<openConversationId>", "--markdown", "今天 18:00 前提交周报", "--yes"] }
|
|
22
|
-
{ "provider": "dingtalk", "args": ["chat", "+messages-send", "--user", "<userId>", "--markdown", "私聊通知", "--yes"] }
|
|
5
|
+
> 本包只负责「Agent → 渠道」方向。在群里/私聊里与机器人对话(渠道 → Agent)请用 dsh-im 插件。
|
|
23
6
|
|
|
24
|
-
|
|
25
|
-
{ "provider": "dingtalk", "args": ["report", "+create", "--template", "日报", "--content", "...", "--yes"] }
|
|
26
|
-
{ "provider": "dingtalk", "args": ["report", "+my", "--type", "日报"] }
|
|
27
|
-
|
|
28
|
-
// 待办
|
|
29
|
-
{ "provider": "dingtalk", "args": ["todo", "+create", "--title", "整理今日测试报告", "--due", "2026-10-23 18:00"] }
|
|
30
|
-
{ "provider": "dingtalk", "args": ["todo", "+get-my-tasks"] }
|
|
7
|
+
## 前置条件
|
|
31
8
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
{ "provider": "dingtalk", "args": ["contact", "+me"] }
|
|
9
|
+
- Node.js >= 18
|
|
10
|
+
- 两个命令行工具(dws / wecom-cli)**已随包一起安装**(可选依赖),无需单独安装
|
|
11
|
+
- 首次使用只需各登录一次(凭据保存在 CLI 自己的本地登录态,本包不接触凭据):
|
|
36
12
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
13
|
+
```bash
|
|
14
|
+
dws auth login --recommend # 钉钉
|
|
15
|
+
wecom-cli auth init --noninteractive # 企业微信(扫码授权)
|
|
40
16
|
```
|
|
41
17
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
## 设计核心:Provider 注册表
|
|
45
|
-
|
|
46
|
-
每个 IM 平台只是 `src/providers/*.ts` 里的一条规格(`ImProviderSpec`),描述:
|
|
47
|
-
|
|
48
|
-
- 该平台的 CLI 命令名、npm 包名与 bin 脚本路径(用于自动解析 npm 全局安装、规避 Windows shim)
|
|
49
|
-
- 请求 JSON 输出的 flag(dws 用 `--format json`;wecom 默认 JSON 则留空)
|
|
50
|
-
- 覆盖 bin 的环境变量名、示例命令
|
|
51
|
-
|
|
52
|
-
**新增一个平台(飞书 / Discord / …)只需**:
|
|
53
|
-
1. 新建 `src/providers/feishu.ts`,导出一个 `ImProviderSpec`;
|
|
54
|
-
2. 在 `src/providers/registry.ts` 的 `providers` 数组里追加它。
|
|
18
|
+
> 使用 pnpm 安装时,若提示 CLI 不可用,允许依赖的安装脚本(`pnpm approve-builds`)或手动 `npm i -g dingtalk-workspace-cli @wecom/cli` 即可。
|
|
55
19
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
## 快速开始(npm)
|
|
20
|
+
## 安装
|
|
59
21
|
|
|
60
22
|
```bash
|
|
61
|
-
|
|
62
|
-
#
|
|
63
|
-
npx -y im-connector
|
|
23
|
+
npx -y im-connector # 直接用,无需安装
|
|
24
|
+
npm i -g im-connector # 或全局安装
|
|
64
25
|
```
|
|
65
26
|
|
|
66
|
-
|
|
27
|
+
> 注意:首次安装会下载两个 CLI(dws 约 130MB),之后无需再装。
|
|
28
|
+
|
|
29
|
+
## 配置 MCP 客户端
|
|
30
|
+
|
|
31
|
+
通用 MCP 客户端(如 Claude Desktop):
|
|
67
32
|
|
|
68
33
|
```json
|
|
69
34
|
{
|
|
70
35
|
"mcpServers": {
|
|
71
|
-
"im": {
|
|
72
|
-
"command": "npx",
|
|
73
|
-
"args": ["-y", "im-connector"],
|
|
74
|
-
"env": {
|
|
75
|
-
"DINGTALK_DWS_BIN": "<npm root -g>/dingtalk-workspace-cli/bin/dws.js",
|
|
76
|
-
"WECOM_CLI_BIN": "<npm root -g>/@wecom/cli/bin/wecom.js"
|
|
77
|
-
}
|
|
78
|
-
}
|
|
36
|
+
"im": { "command": "npx", "args": ["-y", "im-connector"] }
|
|
79
37
|
}
|
|
80
38
|
}
|
|
81
39
|
```
|
|
82
40
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
DSH 用户:本包**同时是 DSH 的 MCP 连接 bundle**(`package.json` 里声明了 `dsh.bundle.patch`),一条命令完成"装包 + 注册 MCP 连接":
|
|
41
|
+
**DSH 用户**一条命令即可(装包 + 注册 MCP 连接):
|
|
86
42
|
|
|
87
43
|
```
|
|
88
44
|
plugin_manager install_bundle target: im-connector
|
|
89
45
|
```
|
|
90
46
|
|
|
91
|
-
安装后工具名为 `mcp__im__run
|
|
92
|
-
|
|
93
|
-
## 前置条件
|
|
94
|
-
|
|
95
|
-
```bash
|
|
96
|
-
# 钉钉
|
|
97
|
-
npm install -g dingtalk-workspace-cli
|
|
98
|
-
dws auth login --recommend --format json
|
|
99
|
-
|
|
100
|
-
# 企业微信
|
|
101
|
-
npm install -g @wecom/cli
|
|
102
|
-
wecom-cli auth show --status # 未授权时:wecom-cli auth init --noninteractive 扫码
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
连接器不保存任何凭据,认证复用各 CLI 的本地登录态。
|
|
106
|
-
|
|
107
|
-
## 构建与验证
|
|
108
|
-
|
|
109
|
-
```bash
|
|
110
|
-
pnpm install
|
|
111
|
-
pnpm verify # typecheck + 测试 + build + MCP 冒烟
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
## 接入 DSH(官方推荐路径)
|
|
115
|
-
|
|
116
|
-
按 DSH 官方 `references/mcp-bundle.md` 的做法:**配置型 bundle**(只插入一条 `@deepseek-ai/dsh-mcp-client` 行,无 Host/Client 入口文件),display 元数据用 `locale/*.json` + `icon.svg`,patch 用官方 stdio 形式:
|
|
117
|
-
|
|
118
|
-
```yaml
|
|
119
|
-
- insert:
|
|
120
|
-
- id: im-connector-mcp
|
|
121
|
-
name: '@deepseek-ai/dsh-mcp-client'
|
|
122
|
-
config:
|
|
123
|
-
serverName: im
|
|
124
|
-
transport: stdio
|
|
125
|
-
command: npx
|
|
126
|
-
args: ['-y', 'im-connector']
|
|
127
|
-
failOnStartupError: true
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
- 推荐安装:`plugin_manager install_bundle target: im-connector`(包内已声明 `dsh.bundle.patch`,一步完成)
|
|
131
|
-
- 手工安装:把 `mcp-bundle/` 复制到任意目录后 `install_bundle` 指向该目录
|
|
132
|
-
- 不需要写死路径或凭据(`npx` 跨平台;凭据保持在两个 CLI 自己的登录态里,env 覆盖用 Loader `!!js`)
|
|
47
|
+
安装后工具名为 `mcp__im__run`。
|
|
133
48
|
|
|
134
49
|
## 使用
|
|
135
50
|
|
|
136
|
-
调用 `mcp__im__run
|
|
51
|
+
Agent 调用 `mcp__im__run`,参数是 `{ provider, args }`,`args` 就是对应 CLI 的原生命令参数:
|
|
137
52
|
|
|
138
53
|
```json
|
|
139
|
-
//
|
|
140
|
-
{ "provider": "dingtalk", "args": ["
|
|
54
|
+
// 发消息
|
|
55
|
+
{ "provider": "dingtalk", "args": ["chat", "+messages-send", "--group", "<群ID>", "--markdown", "内容", "--yes"] }
|
|
56
|
+
|
|
57
|
+
// 待办
|
|
58
|
+
{ "provider": "dingtalk", "args": ["todo", "+create", "--title", "整理今日测试报告", "--due", "2026-10-23 18:00"] }
|
|
141
59
|
{ "provider": "dingtalk", "args": ["todo", "+get-my-tasks"] }
|
|
60
|
+
|
|
61
|
+
// 日志 / 日报周报
|
|
62
|
+
{ "provider": "dingtalk", "args": ["report", "+create", "--template", "日报", "--content", "..."] }
|
|
63
|
+
|
|
64
|
+
// 日程 / 审批 / 通讯录
|
|
65
|
+
{ "provider": "dingtalk", "args": ["calendar", "+today"] }
|
|
142
66
|
{ "provider": "dingtalk", "args": ["oa", "approval", "list-pending"] }
|
|
143
|
-
{ "provider": "dingtalk", "args": ["
|
|
144
|
-
{ "provider": "dingtalk", "args": ["chat", "+messages-send", "--group", "<cid>", "--markdown", "内容", "--title", "标题", "--yes"] }
|
|
67
|
+
{ "provider": "dingtalk", "args": ["contact", "+me"] }
|
|
145
68
|
|
|
146
|
-
//
|
|
69
|
+
// 企业微信
|
|
147
70
|
{ "provider": "wecom", "args": ["contact", "users", "search", "--keywords", "张三"] }
|
|
148
|
-
{ "provider": "wecom", "args": ["chat", "messages", "list", "--chat-id", "<id>", "--begin-time", "2026-10-01 00:00:00", "--end-time", "2026-10-21 00:00:00"] }
|
|
149
|
-
{ "provider": "wecom", "args": ["auth", "show", "--status"] }
|
|
150
71
|
```
|
|
151
72
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
## 发布(维护者)
|
|
73
|
+
完整命令见各 CLI 的 `--help`(如 `dws chat --help`、`wecom-cli message --help`)。
|
|
155
74
|
|
|
156
|
-
|
|
157
|
-
npm login # 首次发布前登录(已登录则跳过)
|
|
158
|
-
pnpm verify # typecheck + 测试 + build + MCP 冒烟(prepublishOnly 也会跑)
|
|
159
|
-
npm publish # 发布到 npm(publishConfig.access=public)
|
|
160
|
-
```
|
|
75
|
+
## 说明
|
|
161
76
|
|
|
162
|
-
|
|
77
|
+
- **写操作**(发消息、提交审批等)请先让 Agent 确认意图;不确定时用 `--dry-run` 预览(两平台都支持)
|
|
78
|
+
- 参数会原样透传给 CLI,返回其 JSON 输出
|
|
79
|
+
- 支持的 provider:`dingtalk`、`wecom`
|
|
163
80
|
|
|
164
|
-
|
|
81
|
+
## 开发
|
|
165
82
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
src/
|
|
170
|
-
cli/runner.ts CliRunner:通用 CLI 透传(npm 全局解析、JSON 解析、错误信封映射)
|
|
171
|
-
cli/errors.ts CliError + stderr 错误信封解析
|
|
172
|
-
providers/ ImProviderSpec + registry(dingtalk / wecom,可扩展)
|
|
173
|
-
mcp/server.ts MCP stdio server,暴露单一 `run { provider, args }` 工具
|
|
174
|
-
index.ts 包入口
|
|
175
|
-
tests/ fake-cli.mjs + cli/mcp 测试
|
|
176
|
-
mcp-bundle/ DSH MCP 连接 bundle
|
|
177
|
-
scripts/ mcp-smoke.mjs / duty-reminder.mjs(钉钉值班提醒,独立任务)
|
|
83
|
+
```bash
|
|
84
|
+
pnpm install
|
|
85
|
+
pnpm verify # typecheck + 测试 + 构建 + MCP 冒烟
|
|
178
86
|
```
|
|
179
87
|
|
|
180
|
-
|
|
88
|
+
发布(维护者):
|
|
181
89
|
|
|
182
|
-
|
|
90
|
+
```bash
|
|
91
|
+
npm version patch
|
|
92
|
+
npm publish --registry=https://registry.npmjs.org/
|
|
93
|
+
```
|
package/dist/cli/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,+BAA+B;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,oCAAoC;IACpC,IAAI,EAAE,OAAO,CAAC;CACf;AAQD;;;;GAIG;AACH,qBAAa,SAAS;IACR,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,cAAc;IAEjD,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,0CAA0C;IACpC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/D,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;YAmExD,MAAM;CAkCrB"}
|
package/dist/cli/runner.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
-
import { existsSync } from "node:fs";
|
|
3
|
-
import {
|
|
2
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
3
|
+
import { createRequire } from "node:module";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
4
5
|
import { CliError, parseErrorEnvelope } from "./errors.js";
|
|
5
6
|
/**
|
|
6
7
|
* 通用 CLI 透传执行器:按 provider 规格定位 CLI(npm 全局 bin 脚本 → node 直跑,
|
|
@@ -95,8 +96,13 @@ export class CliRunner {
|
|
|
95
96
|
if (bin !== this.spec.bin && existsSync(bin)) {
|
|
96
97
|
return { command: bin, prefix: [], shell: false };
|
|
97
98
|
}
|
|
98
|
-
// 3)
|
|
99
|
+
// 3) 随包安装的 CLI(optionalDependencies 里的依赖,开箱即用)
|
|
99
100
|
if (bin === this.spec.bin) {
|
|
101
|
+
const local = localCliScript(this.spec);
|
|
102
|
+
if (local) {
|
|
103
|
+
return { command: process.execPath, prefix: [local], shell: false };
|
|
104
|
+
}
|
|
105
|
+
// 4) 回退:npm 全局安装的 CLI
|
|
100
106
|
const globalRoot = await npmGlobalRoot();
|
|
101
107
|
if (globalRoot) {
|
|
102
108
|
const script = join(globalRoot, ...this.spec.binScript.split("/"));
|
|
@@ -104,11 +110,55 @@ export class CliRunner {
|
|
|
104
110
|
return { command: process.execPath, prefix: [script], shell: false };
|
|
105
111
|
}
|
|
106
112
|
}
|
|
113
|
+
// 5) 通过 package.json 的 bin 字段再找一次(处理 binScript 与安装布局不一致)
|
|
114
|
+
const viaManifest = await cliScriptFromManifest(this.spec);
|
|
115
|
+
if (viaManifest) {
|
|
116
|
+
return { command: process.execPath, prefix: [viaManifest], shell: false };
|
|
117
|
+
}
|
|
107
118
|
}
|
|
108
|
-
//
|
|
119
|
+
// 6) 回退:shell 执行(Windows shim)
|
|
109
120
|
return { command: bin, prefix: [], shell: process.platform === "win32" };
|
|
110
121
|
}
|
|
111
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* 解析随包安装的 CLI 脚本(包内 node_modules,如 optionalDependencies)。
|
|
125
|
+
* 返回可直接用 `node <script>` 执行的脚本路径;找不到返回 undefined。
|
|
126
|
+
*/
|
|
127
|
+
function localCliScript(spec) {
|
|
128
|
+
try {
|
|
129
|
+
const require = createRequire(import.meta.url);
|
|
130
|
+
const pkgJson = require.resolve(`${spec.npmPackage}/package.json`);
|
|
131
|
+
const pkgDir = dirname(pkgJson);
|
|
132
|
+
// binScript = "<npmPackage>/bin/xxx.js" → 相对包目录的脚本路径
|
|
133
|
+
const rel = spec.binScript.slice(spec.npmPackage.length + 1);
|
|
134
|
+
const script = join(pkgDir, rel);
|
|
135
|
+
if (existsSync(script))
|
|
136
|
+
return script;
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/** 通过包 manifest 的 bin 字段定位脚本(兼容 binScript 与实际 bin 布局不同的情况)。 */
|
|
144
|
+
async function cliScriptFromManifest(spec) {
|
|
145
|
+
try {
|
|
146
|
+
const require = createRequire(import.meta.url);
|
|
147
|
+
const pkgJson = require.resolve(`${spec.npmPackage}/package.json`);
|
|
148
|
+
const manifest = JSON.parse(readFileSync(pkgJson, "utf8"));
|
|
149
|
+
const pkgDir = dirname(pkgJson);
|
|
150
|
+
const bins = typeof manifest.bin === "string" ? [manifest.bin] : Object.values(manifest.bin ?? {});
|
|
151
|
+
for (const rel of bins) {
|
|
152
|
+
const script = join(pkgDir, rel);
|
|
153
|
+
if (existsSync(script))
|
|
154
|
+
return script;
|
|
155
|
+
}
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
return undefined;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
112
162
|
function parseStdoutJson(stdout) {
|
|
113
163
|
const text = stdout.trim();
|
|
114
164
|
if (!text)
|
package/dist/cli/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"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"}
|
package/mcp-bundle/README.md
CHANGED
|
@@ -34,6 +34,16 @@ plugin_manager install_bundle target: im-connector
|
|
|
34
34
|
- `failOnStartupError: true`:连接失败时让该行激活失败,便于发现问题(官方模板同款)。
|
|
35
35
|
- 对照官方 `templates/mcp/`:manifest 只需 name/version/`dsh.bundle.patch`(配置型 bundle 无 Host/Client 入口文件),display 元数据走 `locale/*.json` + `icon.svg`。
|
|
36
36
|
|
|
37
|
+
> ⚠️ 个别 Windows 环境下 `npx` 转发 stdio 到本包 server 不稳定(`npx --version` 与其它包正常,但管道下 MCP 握手被关闭)。遇到这种情况改用 node + 绝对路径:
|
|
38
|
+
|
|
39
|
+
```yaml
|
|
40
|
+
config:
|
|
41
|
+
serverName: im
|
|
42
|
+
transport: stdio
|
|
43
|
+
command: node
|
|
44
|
+
args: ['<npm root -g>/im-connector/dist/mcp/server.js']
|
|
45
|
+
```
|
|
46
|
+
|
|
37
47
|
## 验证
|
|
38
48
|
|
|
39
49
|
安装后在会话里调用 `mcp__im__run`(例如 `{ provider: "dingtalk", args: ["contact", "+me"] }`)确认连接可用。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "im-connector",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "MCP server that lets agents drive DingTalk (dws) and WeCom (wecom-cli) CLIs: send messages, write reports, create todos, query calendars and approvals. Extensible provider registry for more IM platforms.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -40,6 +40,10 @@
|
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@modelcontextprotocol/sdk": "^1.12.0"
|
|
42
42
|
},
|
|
43
|
+
"optionalDependencies": {
|
|
44
|
+
"dingtalk-workspace-cli": "^1.0.65",
|
|
45
|
+
"@wecom/cli": "^1.3.4"
|
|
46
|
+
},
|
|
43
47
|
"devDependencies": {
|
|
44
48
|
"@types/node": "^22.10.0",
|
|
45
49
|
"typescript": "^5.7.0",
|