@kikilight/envmgr-mcp-server 1.0.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 ADDED
@@ -0,0 +1,72 @@
1
+ # envmgr-mcp-server
2
+
3
+ 通过 SSH 和浏览器访问管理多套命名环境的 MCP 服务器,供 Claude 等 LLM 直接调用。
4
+
5
+ 提供三个工具:
6
+ - `envmgr_list` — 列出所有已配置环境(支持按 `type` 过滤)
7
+ - `envmgr_ssh` — 在指定环境上通过 SSH 执行 shell 命令
8
+ - `envmgr_browser` — 返回指定环境的浏览器 URL 和登录凭据(供 Playwright / chrome-devtools-mcp 使用)
9
+
10
+ ---
11
+
12
+ ## 安装
13
+
14
+ ```bash
15
+ npm install -g @kikilight/envmgr-mcp-server
16
+ claude mcp add -s user envmgr-mcp-server -- envmgr-mcp-server
17
+ ```
18
+
19
+ 完成后**重启 Claude Code** 即可使用。
20
+
21
+ > 升级到新版本:`npm install -g @kikilight/envmgr-mcp-server@latest`
22
+
23
+ ---
24
+
25
+ ## 配置环境
26
+
27
+ 首次运行时,若未找到配置文件,服务会自动生成一份示例配置:
28
+ - Windows: `%USERPROFILE%\.config\envmgr\envs.json`
29
+ - macOS / Linux: `~/.config/envmgr/envs.json`
30
+
31
+ 按需编辑该文件即可,格式如下:
32
+
33
+ ```json
34
+ {
35
+ "envs": {
36
+ "prod": {
37
+ "type": "production",
38
+ "description": "生产环境",
39
+ "ssh": {
40
+ "host": "10.0.0.1",
41
+ "user": "root",
42
+ "password": "yourpassword",
43
+ "port": 22
44
+ },
45
+ "browser": {
46
+ "url": "https://admin.example.com",
47
+ "username": "admin",
48
+ "password": "yourpassword"
49
+ }
50
+ }
51
+ }
52
+ }
53
+ ```
54
+
55
+ `ssh` 和 `browser` 均为可选,一个环境可同时拥有两者或只有其一。
56
+
57
+ ---
58
+
59
+ ## 开发 & 打包(开发者)
60
+
61
+ ```bash
62
+ npm install
63
+ npm run build # tsc 编译 → dist/
64
+ npm run dev # tsx watch 模式,自动重载
65
+ ```
66
+
67
+ 发布到 npm:
68
+
69
+ ```bash
70
+ npm run build
71
+ npm publish
72
+ ```
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,296 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { Client } from "ssh2";
5
+ import { z } from "zod";
6
+ import { readFileSync, existsSync, mkdirSync, writeFileSync } from "fs";
7
+ import { homedir } from "os";
8
+ import { join } from "path";
9
+ const PROJECT_CONFIG_NAME = ".envmgr.json";
10
+ const GLOBAL_CONFIG_PATH = join(homedir(), ".config", "envmgr", "envs.json");
11
+ function resolveConfigPath() {
12
+ if (process.env.ENVMGR_CONFIG) {
13
+ return { path: process.env.ENVMGR_CONFIG, source: "env:ENVMGR_CONFIG" };
14
+ }
15
+ let dir = process.cwd();
16
+ while (true) {
17
+ const candidate = join(dir, PROJECT_CONFIG_NAME);
18
+ if (existsSync(candidate)) {
19
+ return { path: candidate, source: `project:${candidate}` };
20
+ }
21
+ const parent = join(dir, "..");
22
+ if (parent === dir)
23
+ break;
24
+ dir = parent;
25
+ }
26
+ return { path: GLOBAL_CONFIG_PATH, source: "global" };
27
+ }
28
+ function loadEnvs() {
29
+ const { path: configPath, source } = resolveConfigPath();
30
+ if (!existsSync(configPath)) {
31
+ if (source === "global") {
32
+ const dir = join(homedir(), ".config", "envmgr");
33
+ mkdirSync(dir, { recursive: true });
34
+ const example = {
35
+ envs: {
36
+ "example": {
37
+ type: "example",
38
+ ssh: {
39
+ host: "10.0.0.1",
40
+ user: "root",
41
+ password: "yourpassword",
42
+ port: 22,
43
+ },
44
+ browser: {
45
+ url: "https://admin.example.com",
46
+ username: "admin",
47
+ password: "yourpassword",
48
+ },
49
+ description: "示例环境,含 SSH 和浏览器配置,请修改后使用"
50
+ }
51
+ }
52
+ };
53
+ writeFileSync(configPath, JSON.stringify(example, null, 2), "utf-8");
54
+ return { envs: example.envs, configPath, source };
55
+ }
56
+ return { envs: {}, configPath, source };
57
+ }
58
+ const raw = readFileSync(configPath, "utf-8").replace(/^/, "");
59
+ const parsed = JSON.parse(raw);
60
+ return { envs: parsed.envs ?? {}, configPath, source };
61
+ }
62
+ // ── SSH helper ────────────────────────────────────────────────────────────────
63
+ function sshExec(env, command, timeoutMs) {
64
+ return new Promise((resolve, reject) => {
65
+ const conn = new Client();
66
+ let output = "";
67
+ let errorOutput = "";
68
+ const timer = setTimeout(() => {
69
+ conn.destroy();
70
+ reject(new Error(`命令执行超时(${timeoutMs / 1000}s)`));
71
+ }, timeoutMs);
72
+ conn
73
+ .on("ready", () => {
74
+ conn.exec(command, (err, stream) => {
75
+ if (err) {
76
+ clearTimeout(timer);
77
+ conn.end();
78
+ return reject(err);
79
+ }
80
+ stream
81
+ .on("data", (data) => { output += data.toString(); })
82
+ .stderr.on("data", (data) => { errorOutput += data.toString(); });
83
+ stream.on("close", (code) => {
84
+ clearTimeout(timer);
85
+ conn.end();
86
+ const result = [output, errorOutput].filter(Boolean).join("\n[stderr]\n");
87
+ if (code !== 0) {
88
+ resolve(`[exit ${code}]\n${result}`);
89
+ }
90
+ else {
91
+ resolve(result || "(无输出)");
92
+ }
93
+ });
94
+ });
95
+ })
96
+ .on("error", (err) => {
97
+ clearTimeout(timer);
98
+ reject(err);
99
+ })
100
+ .connect({
101
+ host: env.host,
102
+ port: env.port ?? 22,
103
+ username: env.user,
104
+ password: env.password,
105
+ privateKey: env.privateKey,
106
+ readyTimeout: Math.min(timeoutMs, 10000),
107
+ hostVerifier: () => true, // 跳过 host key 验证,内网使用
108
+ });
109
+ });
110
+ }
111
+ // ── MCP Server ────────────────────────────────────────────────────────────────
112
+ const server = new McpServer({
113
+ name: "envmgr-mcp-server",
114
+ version: "1.0.0",
115
+ });
116
+ // Tool: envmgr_list
117
+ server.registerTool("envmgr_list", {
118
+ title: "列出环境",
119
+ description: `列出所有已配置的环境及其连接信息。
120
+ 配置文件路径:${GLOBAL_CONFIG_PATH}(可通过 ENVMGR_CONFIG 环境变量覆盖)。
121
+
122
+ 返回每个环境的:名称、类型、描述、SSH 状态、浏览器状态。密码不返回。`,
123
+ inputSchema: z.object({
124
+ type: z.string().optional().describe("按环境类型过滤,不传则返回所有"),
125
+ }).strict(),
126
+ annotations: {
127
+ readOnlyHint: true,
128
+ destructiveHint: false,
129
+ idempotentHint: true,
130
+ openWorldHint: false,
131
+ },
132
+ }, async ({ type }) => {
133
+ const { envs, configPath, source } = loadEnvs();
134
+ const filtered = type
135
+ ? Object.fromEntries(Object.entries(envs).filter(([, e]) => e.type === type))
136
+ : envs;
137
+ const names = Object.keys(filtered);
138
+ const header = `配置来源:${source}\n文件路径:${configPath}`;
139
+ if (names.length === 0) {
140
+ const hint = type ? `(类型过滤: ${type})` : "";
141
+ return {
142
+ content: [{
143
+ type: "text",
144
+ text: `${header}\n\n没有配置任何环境${hint}。\n\n项目级配置:在项目根目录创建 ${PROJECT_CONFIG_NAME}\n全局配置:编辑 ${GLOBAL_CONFIG_PATH}`,
145
+ }],
146
+ };
147
+ }
148
+ const lines = names.map((name) => {
149
+ const e = envs[name];
150
+ const hasSsh = e.ssh ? "✓ SSH" : "✗ SSH";
151
+ const hasBrowser = e.browser ? "✓ 浏览器" : "✗ 浏览器";
152
+ const desc = e.description ? ` 描述: ${e.description}` : "";
153
+ const sshDetail = e.ssh ? ` SSH: ${e.ssh.host}:${e.ssh.port ?? 22} 用户:${e.ssh.user}` : "";
154
+ const browserDetail = e.browser ? ` 浏览器: ${e.browser.url}` : "";
155
+ return `• ${name} [${e.type}]\n ${hasSsh} ${hasBrowser}${desc}${sshDetail}${browserDetail}`;
156
+ });
157
+ return {
158
+ content: [{
159
+ type: "text",
160
+ text: `${header}\n\n已配置 ${names.length} 个环境:\n\n${lines.join("\n\n")}`,
161
+ }],
162
+ };
163
+ });
164
+ // Tool: envmgr_ssh
165
+ server.registerTool("envmgr_ssh", {
166
+ title: "在环境执行 SSH 命令",
167
+ description: `通过 SSH 在指定环境上执行 shell 命令,返回命令输出。
168
+
169
+ 使用场景:
170
+ - 查看服务日志:tail -100 /data/logs/hillos-core/log-error.log
171
+ - 检查进程状态:ps aux | grep java
172
+ - 查看磁盘空间:df -h
173
+ - 统计日志错误:grep -c 'ERROR' /data/logs/xxx/log-error.log
174
+
175
+ 注意:命令在 root 权限下执行,请谨慎使用破坏性命令。`,
176
+ inputSchema: z.object({
177
+ env: z.string().min(1).describe("环境名称,与 envmgr_list 返回的名称一致"),
178
+ command: z.string().min(1).describe("要执行的 shell 命令"),
179
+ timeout_seconds: z.number().int().min(5).max(120).default(30)
180
+ .describe("超时秒数,默认 30,最大 120"),
181
+ }).strict(),
182
+ annotations: {
183
+ readOnlyHint: false,
184
+ destructiveHint: true,
185
+ idempotentHint: false,
186
+ openWorldHint: true,
187
+ },
188
+ }, async ({ env: envName, command, timeout_seconds }) => {
189
+ const { envs } = loadEnvs();
190
+ const env = envs[envName];
191
+ if (!env) {
192
+ const available = Object.keys(envs).join(", ") || "(无)";
193
+ return {
194
+ content: [{
195
+ type: "text",
196
+ text: `错误:环境 "${envName}" 不存在。可用环境:${available}`,
197
+ }],
198
+ isError: true,
199
+ };
200
+ }
201
+ if (!env.ssh) {
202
+ return {
203
+ content: [{
204
+ type: "text",
205
+ text: `错误:环境 "${envName}" 没有配置 SSH 访问`,
206
+ }],
207
+ isError: true,
208
+ };
209
+ }
210
+ try {
211
+ const output = await sshExec(env.ssh, command, timeout_seconds * 1000);
212
+ const MAX = 20000;
213
+ const truncated = output.length > MAX
214
+ ? output.slice(0, MAX) + `\n\n...[输出过长,已截断,原始长度 ${output.length} 字符]`
215
+ : output;
216
+ return {
217
+ content: [{
218
+ type: "text",
219
+ text: `[${envName}] $ ${command}\n\n${truncated}`,
220
+ }],
221
+ };
222
+ }
223
+ catch (err) {
224
+ const msg = err instanceof Error ? err.message : String(err);
225
+ return {
226
+ content: [{
227
+ type: "text",
228
+ text: `SSH 连接失败(${envName} / ${env.ssh.host}):${msg}`,
229
+ }],
230
+ isError: true,
231
+ };
232
+ }
233
+ });
234
+ // Tool: envmgr_browser
235
+ server.registerTool("envmgr_browser", {
236
+ title: "获取环境浏览器访问信息",
237
+ description: `返回指定环境的浏览器访问 URL 和认证凭据。
238
+
239
+ 输出的结构化信息可供 Playwright、chrome-devtools-mcp 等浏览器自动化工具使用。
240
+ 使用流程:
241
+ 1. 调用 envmgr_browser 获取 url / username / password
242
+ 2. 用浏览器自动化工具导航到 url
243
+ 3. 填写 username 和 password 完成登录`,
244
+ inputSchema: z.object({
245
+ env: z.string().min(1).describe("环境名称,与 envmgr_list 返回的名称一致"),
246
+ }).strict(),
247
+ annotations: {
248
+ readOnlyHint: true,
249
+ destructiveHint: false,
250
+ idempotentHint: true,
251
+ openWorldHint: false,
252
+ },
253
+ }, async ({ env: envName }) => {
254
+ const { envs } = loadEnvs();
255
+ const env = envs[envName];
256
+ if (!env) {
257
+ const available = Object.keys(envs).join(", ") || "(无)";
258
+ return {
259
+ content: [{
260
+ type: "text",
261
+ text: `错误:环境 "${envName}" 不存在。可用环境:${available}`,
262
+ }],
263
+ isError: true,
264
+ };
265
+ }
266
+ if (!env.browser) {
267
+ return {
268
+ content: [{
269
+ type: "text",
270
+ text: `错误:环境 "${envName}" 没有配置浏览器访问`,
271
+ }],
272
+ isError: true,
273
+ };
274
+ }
275
+ return {
276
+ content: [{
277
+ type: "text",
278
+ text: JSON.stringify({
279
+ url: env.browser.url,
280
+ username: env.browser.username,
281
+ password: env.browser.password,
282
+ }, null, 2),
283
+ }],
284
+ };
285
+ });
286
+ // ── Start ─────────────────────────────────────────────────────────────────────
287
+ async function main() {
288
+ const transport = new StdioServerTransport();
289
+ await server.connect(transport);
290
+ console.error("envmgr-mcp-server 已启动");
291
+ }
292
+ main().catch((err) => {
293
+ console.error("启动失败:", err);
294
+ process.exit(1);
295
+ });
296
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@kikilight/envmgr-mcp-server",
3
+ "version": "1.0.0",
4
+ "description": "MCP server for managing environment access via SSH and browser",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "envmgr-mcp-server": "dist/index.js"
9
+ },
10
+ "license": "MIT",
11
+ "author": "kiki",
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "git+https://github.com/KevinLvLight/envmgr-mcp-server.git"
15
+ },
16
+ "homepage": "https://github.com/KevinLvLight/envmgr-mcp-server#readme",
17
+ "bugs": {
18
+ "url": "https://github.com/KevinLvLight/envmgr-mcp-server/issues"
19
+ },
20
+ "scripts": {
21
+ "build": "tsc",
22
+ "dev": "tsx watch src/index.ts",
23
+ "start": "node dist/index.js",
24
+ "clean": "rm -rf dist"
25
+ },
26
+ "engines": {
27
+ "node": ">=18"
28
+ },
29
+ "files": [
30
+ "dist"
31
+ ],
32
+ "dependencies": {
33
+ "@modelcontextprotocol/sdk": "^1.6.1",
34
+ "ssh2": "^1.16.0",
35
+ "zod": "^3.23.8"
36
+ },
37
+ "devDependencies": {
38
+ "@types/node": "^22.10.0",
39
+ "@types/ssh2": "^1.15.1",
40
+ "tsx": "^4.19.2",
41
+ "typescript": "^5.7.2"
42
+ }
43
+ }