mcp-user-system 2.2.2 → 3.0.1
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/dist/env.d.ts +2 -0
- package/dist/env.js +6 -4
- package/dist/env.js.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/tools/auth.d.ts +10 -57
- package/dist/tools/auth.js +27 -149
- package/dist/tools/auth.js.map +1 -1
- package/install.cjs +29 -8
- package/package.json +1 -1
package/dist/env.d.ts
CHANGED
package/dist/env.js
CHANGED
|
@@ -4,9 +4,11 @@
|
|
|
4
4
|
export function loadConfig() {
|
|
5
5
|
const baseUrl = process.env["TUS_BASE_URL"] || "https://models.ipsunion.com/prod-api";
|
|
6
6
|
const accessToken = process.env["TUS_ACCESS_TOKEN"] || undefined;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
const username = process.env["TUS_USERNAME"] || undefined;
|
|
8
|
+
const password = process.env["TUS_PASSWORD"] || undefined;
|
|
9
|
+
if (!accessToken && (!username || !password)) {
|
|
10
|
+
throw new Error("认证配置缺失:请设置 TUS_ACCESS_TOKEN,或同时设置 TUS_USERNAME 和 TUS_PASSWORD");
|
|
11
|
+
}
|
|
12
|
+
return { baseUrl, accessToken, username, password };
|
|
11
13
|
}
|
|
12
14
|
//# sourceMappingURL=env.js.map
|
package/dist/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,MAAM,UAAU,UAAU;IACxB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,sCAAsC,CAAC;IACtF,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,SAAS,CAAC;IACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC;IAC1D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC;IAE1D,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACtD,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -30,7 +30,7 @@ const allTools = [
|
|
|
30
30
|
// ── MCP Server Setup ──
|
|
31
31
|
const server = new Server({
|
|
32
32
|
name: "mcp-user-system",
|
|
33
|
-
version: "
|
|
33
|
+
version: "3.0.0",
|
|
34
34
|
}, {
|
|
35
35
|
capabilities: {
|
|
36
36
|
tools: {},
|
|
@@ -83,6 +83,15 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
83
83
|
});
|
|
84
84
|
// ── Start Server ──
|
|
85
85
|
async function main() {
|
|
86
|
+
// 启动时自动认证(token 或 mcpLogin)
|
|
87
|
+
try {
|
|
88
|
+
await authTools.doStartupAuth();
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
92
|
+
console.error(`[MCP] Startup authentication failed: ${message}`);
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
86
95
|
const transport = new StdioServerTransport();
|
|
87
96
|
await server.connect(transport);
|
|
88
97
|
console.error("mcp-user-system server running on stdio");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/auth.d.ts
CHANGED
|
@@ -1,59 +1,12 @@
|
|
|
1
|
-
export declare const tools:
|
|
1
|
+
export declare const tools: Array<{
|
|
2
2
|
name: string;
|
|
3
3
|
description: string;
|
|
4
|
-
inputSchema:
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
required: never[];
|
|
14
|
-
};
|
|
15
|
-
} | {
|
|
16
|
-
name: string;
|
|
17
|
-
description: string;
|
|
18
|
-
inputSchema: {
|
|
19
|
-
type: "object";
|
|
20
|
-
properties: {
|
|
21
|
-
username: {
|
|
22
|
-
type: string;
|
|
23
|
-
description: string;
|
|
24
|
-
};
|
|
25
|
-
password: {
|
|
26
|
-
type: string;
|
|
27
|
-
description: string;
|
|
28
|
-
};
|
|
29
|
-
captchaCode: {
|
|
30
|
-
type: string;
|
|
31
|
-
description: string;
|
|
32
|
-
};
|
|
33
|
-
uuid: {
|
|
34
|
-
type: string;
|
|
35
|
-
description: string;
|
|
36
|
-
};
|
|
37
|
-
token?: undefined;
|
|
38
|
-
};
|
|
39
|
-
required: string[];
|
|
40
|
-
};
|
|
41
|
-
} | {
|
|
42
|
-
name: string;
|
|
43
|
-
description: string;
|
|
44
|
-
inputSchema: {
|
|
45
|
-
type: "object";
|
|
46
|
-
properties: {
|
|
47
|
-
token: {
|
|
48
|
-
type: string;
|
|
49
|
-
description: string;
|
|
50
|
-
};
|
|
51
|
-
username?: undefined;
|
|
52
|
-
password?: undefined;
|
|
53
|
-
captchaCode?: undefined;
|
|
54
|
-
uuid?: undefined;
|
|
55
|
-
};
|
|
56
|
-
required: string[];
|
|
57
|
-
};
|
|
58
|
-
})[];
|
|
59
|
-
export declare function handle(name: string, args: Record<string, string>): Promise<unknown>;
|
|
4
|
+
inputSchema: object;
|
|
5
|
+
}>;
|
|
6
|
+
export declare function handle(_name: string, _args: Record<string, string>): Promise<unknown>;
|
|
7
|
+
/**
|
|
8
|
+
* 启动时自动登录
|
|
9
|
+
* 优先使用 TUS_ACCESS_TOKEN(直接设置),否则调用 mcpLogin
|
|
10
|
+
* 返回 true 表示认证成功,抛出异常表示失败
|
|
11
|
+
*/
|
|
12
|
+
export declare function doStartupAuth(): Promise<boolean>;
|
package/dist/tools/auth.js
CHANGED
|
@@ -1,165 +1,43 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { apiPostRaw, setToken } from "./client.js";
|
|
2
2
|
import { loadConfig } from "../env.js";
|
|
3
3
|
import { aesEncrypt } from "./crypto.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export const tools = [
|
|
9
|
-
{
|
|
10
|
-
name: "fetch_captcha",
|
|
11
|
-
description: "获取图形验证码。返回验证码图片路径和 uuid。" +
|
|
12
|
-
"调用后请用 Read 工具查看图片内容(通常是简单的数学计算题),算出答案后调用 login 工具登录。",
|
|
13
|
-
inputSchema: {
|
|
14
|
-
type: "object",
|
|
15
|
-
properties: {},
|
|
16
|
-
required: [],
|
|
17
|
-
},
|
|
18
|
-
},
|
|
19
|
-
{
|
|
20
|
-
name: "login",
|
|
21
|
-
description: "使用用户名、密码和验证码登录系统。" +
|
|
22
|
-
"需先调用 fetch_captcha 获取 uuid,再识别验证码图片得出答案后调用此工具。" +
|
|
23
|
-
"登录成功后后续请求将自动使用该令牌。",
|
|
24
|
-
inputSchema: {
|
|
25
|
-
type: "object",
|
|
26
|
-
properties: {
|
|
27
|
-
username: { type: "string", description: "用户名或手机号" },
|
|
28
|
-
password: { type: "string", description: "密码" },
|
|
29
|
-
captchaCode: { type: "string", description: "验证码计算结果(如数学题 3+5=? 则填 8)" },
|
|
30
|
-
uuid: { type: "string", description: "验证码对应的 uuid(来自 fetch_captcha)" },
|
|
31
|
-
},
|
|
32
|
-
required: ["username", "password", "captchaCode", "uuid"],
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
name: "set_access_token",
|
|
37
|
-
description: "直接设置或更新访问令牌(JWT token)。" +
|
|
38
|
-
"适用于已有 token 的场景,token 失效时可随时调用此工具更新,无需重启服务。",
|
|
39
|
-
inputSchema: {
|
|
40
|
-
type: "object",
|
|
41
|
-
properties: {
|
|
42
|
-
token: { type: "string", description: "JWT 访问令牌(以 eyJ 开头)" },
|
|
43
|
-
},
|
|
44
|
-
required: ["token"],
|
|
45
|
-
},
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
name: "get_token_status",
|
|
49
|
-
description: "查看当前认证状态(是否已设置 token、token 来源)",
|
|
50
|
-
inputSchema: {
|
|
51
|
-
type: "object",
|
|
52
|
-
properties: {},
|
|
53
|
-
required: [],
|
|
54
|
-
},
|
|
55
|
-
},
|
|
56
|
-
];
|
|
57
|
-
// ---- 处理函数 ----
|
|
58
|
-
export async function handle(name, args) {
|
|
59
|
-
switch (name) {
|
|
60
|
-
case "fetch_captcha":
|
|
61
|
-
return doFetchCaptcha();
|
|
62
|
-
case "login":
|
|
63
|
-
return doLogin(args.username, args.password, args.captchaCode, args.uuid);
|
|
64
|
-
case "set_access_token":
|
|
65
|
-
return doSetToken(args.token);
|
|
66
|
-
case "get_token_status":
|
|
67
|
-
return getTokenStatus();
|
|
68
|
-
default:
|
|
69
|
-
throw new Error(`Unknown tool: ${name}`);
|
|
70
|
-
}
|
|
4
|
+
// 不再暴露任何工具到工具列表
|
|
5
|
+
export const tools = [];
|
|
6
|
+
export async function handle(_name, _args) {
|
|
7
|
+
throw new Error("No auth tools available");
|
|
71
8
|
}
|
|
72
|
-
// ---- 内部函数 ----
|
|
73
9
|
/**
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
10
|
+
* 启动时自动登录
|
|
11
|
+
* 优先使用 TUS_ACCESS_TOKEN(直接设置),否则调用 mcpLogin
|
|
12
|
+
* 返回 true 表示认证成功,抛出异常表示失败
|
|
77
13
|
*/
|
|
78
|
-
async function
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
if (
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
uuid: "",
|
|
86
|
-
imagePath: "",
|
|
87
|
-
};
|
|
14
|
+
export async function doStartupAuth() {
|
|
15
|
+
const config = loadConfig();
|
|
16
|
+
// 优先使用预配置的 token
|
|
17
|
+
if (config.accessToken) {
|
|
18
|
+
setToken(config.accessToken);
|
|
19
|
+
console.error("[MCP] Using pre-configured TUS_ACCESS_TOKEN");
|
|
20
|
+
return true;
|
|
88
21
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
throw new Error("验证码接口返回数据异常:缺少 img 或 uuid 字段");
|
|
22
|
+
// 调用 mcpLogin 接口
|
|
23
|
+
if (!config.username || !config.password) {
|
|
24
|
+
throw new Error("认证配置缺失:请设置 TUS_ACCESS_TOKEN,或同时设置 TUS_USERNAME 和 TUS_PASSWORD");
|
|
93
25
|
}
|
|
94
|
-
|
|
95
|
-
const tmpDir = os.tmpdir();
|
|
96
|
-
const tmpFile = path.join(tmpDir, `captcha_${uuid}.jpg`);
|
|
97
|
-
fs.writeFileSync(tmpFile, Buffer.from(img, "base64"));
|
|
98
|
-
return {
|
|
99
|
-
captchaEnabled: true,
|
|
100
|
-
uuid,
|
|
101
|
-
imagePath: tmpFile,
|
|
102
|
-
message: "验证码已获取,请用 Read 工具查看图片内容,识别数学算式并计算结果,然后调用 login 工具登录",
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* 执行密码登录(含验证码)
|
|
107
|
-
* POST /console/user/login
|
|
108
|
-
* 前端 request 拦截器会将整个 JSON body AES 加密后以 { data: "<base64>" } 发送
|
|
109
|
-
*/
|
|
110
|
-
async function doLogin(username, password, captchaCode, uuid) {
|
|
111
|
-
// 构造原始请求体(与前端登录组件一致)
|
|
112
|
-
const plainBody = {
|
|
113
|
-
username,
|
|
114
|
-
password,
|
|
115
|
-
code: captchaCode,
|
|
116
|
-
uuid: uuid || "",
|
|
117
|
-
loginSms: false,
|
|
118
|
-
};
|
|
119
|
-
// AES-128-CBC 加密整个 JSON body → Base64
|
|
26
|
+
const plainBody = { username: config.username, password: config.password };
|
|
120
27
|
const encryptedData = aesEncrypt(JSON.stringify(plainBody));
|
|
121
|
-
|
|
122
|
-
const response = await apiPostRaw("/console/user/login", { data: encryptedData });
|
|
28
|
+
const response = await apiPostRaw("/console/user/mcpLogin", { data: encryptedData });
|
|
123
29
|
const code = response.code;
|
|
124
30
|
if (code !== undefined && code !== 200) {
|
|
125
|
-
throw new Error(
|
|
31
|
+
throw new Error(`mcpLogin 登录失败 (${code}): ${response.msg}`);
|
|
126
32
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
response.data
|
|
130
|
-
(typeof response.data === "string" ? response.data : undefined);
|
|
33
|
+
const token = response.token
|
|
34
|
+
?? response.data?.token
|
|
35
|
+
?? (typeof response.data === "string" ? response.data : undefined);
|
|
131
36
|
if (!token) {
|
|
132
|
-
|
|
133
|
-
throw new Error(`登录成功但未返回 token,响应字段: [${keys.join(", ")}],完整响应: ${JSON.stringify(response).slice(0, 500)}`);
|
|
37
|
+
throw new Error("mcpLogin 登录成功但未返回 token");
|
|
134
38
|
}
|
|
135
39
|
setToken(token);
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
message: "登录成功,后续请求将自动使用该令牌",
|
|
139
|
-
user: username,
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
function doSetToken(token) {
|
|
143
|
-
if (!token || !token.startsWith("eyJ")) {
|
|
144
|
-
throw new Error("无效的 token,应提供以 eyJ 开头的 JWT 令牌");
|
|
145
|
-
}
|
|
146
|
-
setToken(token);
|
|
147
|
-
return {
|
|
148
|
-
success: true,
|
|
149
|
-
message: "令牌已更新,后续请求将自动使用该令牌",
|
|
150
|
-
tokenPreview: token.slice(0, 20) + "...",
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
function getTokenStatus() {
|
|
154
|
-
const token = getToken();
|
|
155
|
-
const config = loadConfig();
|
|
156
|
-
return {
|
|
157
|
-
authenticated: !!token,
|
|
158
|
-
tokenSource: token
|
|
159
|
-
? config.accessToken === token
|
|
160
|
-
? "环境变量 (TUS_ACCESS_TOKEN)"
|
|
161
|
-
: "对话中设置"
|
|
162
|
-
: "未设置",
|
|
163
|
-
};
|
|
40
|
+
console.error(`[MCP] Auto-login successful for user: ${config.username}`);
|
|
41
|
+
return true;
|
|
164
42
|
}
|
|
165
43
|
//# sourceMappingURL=auth.js.map
|
package/dist/tools/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/tools/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/tools/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,gBAAgB;AAChB,MAAM,CAAC,MAAM,KAAK,GAAsE,EAAE,CAAC;AAE3F,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,KAAa,EAAE,KAA6B;IACvE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,iBAAiB;IACjB,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB;IACjB,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,SAAS,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC3E,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,wBAAwB,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;IAErF,MAAM,IAAI,GAAG,QAAQ,CAAC,IAA0B,CAAC;IACjD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,MAAM,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,KAAK,GAAI,QAAQ,CAAC,KAA4B;WAC7C,QAAQ,CAAC,IAA4C,EAAE,KAA4B;WACrF,CAAC,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAErE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChB,OAAO,CAAC,KAAK,CAAC,yCAAyC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/install.cjs
CHANGED
|
@@ -80,21 +80,42 @@ async function main() {
|
|
|
80
80
|
const tool = toolMap[toolChoice.trim() || "1"] || "claude";
|
|
81
81
|
|
|
82
82
|
const baseUrl = await question("Backend URL (e.g. https://api.example.com): ");
|
|
83
|
-
const token = await question("Access Token: ");
|
|
84
83
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
84
|
+
console.log("\nAuthentication method:");
|
|
85
|
+
console.log(" 1. Username + Password (auto-login via mcpLogin)");
|
|
86
|
+
console.log(" 2. Access Token (JWT)\n");
|
|
87
|
+
const authChoice = await question("Choice [1-2, default 1]: ");
|
|
88
|
+
|
|
89
|
+
let serverEnv;
|
|
90
|
+
if (authChoice.trim() === "2") {
|
|
91
|
+
const token = await question("Access Token: ");
|
|
92
|
+
if (!baseUrl || !token) {
|
|
93
|
+
console.error("Error: Both URL and token are required.");
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
serverEnv = {
|
|
97
|
+
TUS_BASE_URL: baseUrl.trim(),
|
|
98
|
+
TUS_ACCESS_TOKEN: token.trim(),
|
|
99
|
+
};
|
|
100
|
+
} else {
|
|
101
|
+
const username = await question("Username: ");
|
|
102
|
+
const password = await question("Password: ");
|
|
103
|
+
if (!baseUrl || !username || !password) {
|
|
104
|
+
console.error("Error: URL, username and password are all required.");
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
serverEnv = {
|
|
108
|
+
TUS_BASE_URL: baseUrl.trim(),
|
|
109
|
+
TUS_USERNAME: username.trim(),
|
|
110
|
+
TUS_PASSWORD: password.trim(),
|
|
111
|
+
};
|
|
88
112
|
}
|
|
89
113
|
|
|
90
114
|
const packagePath = getGlobalPackagePath();
|
|
91
115
|
const serverConfig = {
|
|
92
116
|
command: "node",
|
|
93
117
|
args: [packagePath],
|
|
94
|
-
env:
|
|
95
|
-
TUS_BASE_URL: baseUrl.trim(),
|
|
96
|
-
TUS_ACCESS_TOKEN: token.trim(),
|
|
97
|
-
},
|
|
118
|
+
env: serverEnv,
|
|
98
119
|
};
|
|
99
120
|
|
|
100
121
|
if (tool === "json") {
|