@lzm04521/ssh-mcp-server 1.1.5

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.
Files changed (78) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +157 -0
  3. package/admin-web/dist/assets/index-DXbr5DVR.js +494 -0
  4. package/admin-web/dist/index.html +6 -0
  5. package/admin-web/dist/logo.png +0 -0
  6. package/build/cli/command-line-parser.js +715 -0
  7. package/build/cli/command-line-parser.js.map +1 -0
  8. package/build/cli/run-mode.js +44 -0
  9. package/build/cli/run-mode.js.map +1 -0
  10. package/build/cli/stdio-proxy.js +304 -0
  11. package/build/cli/stdio-proxy.js.map +1 -0
  12. package/build/config/index.js +5 -0
  13. package/build/config/index.js.map +1 -0
  14. package/build/config/server.js +16 -0
  15. package/build/config/server.js.map +1 -0
  16. package/build/core/mcp-http-server.js +14 -0
  17. package/build/core/mcp-http-server.js.map +1 -0
  18. package/build/core/mcp-server.js +95 -0
  19. package/build/core/mcp-server.js.map +1 -0
  20. package/build/index.js +98 -0
  21. package/build/index.js.map +1 -0
  22. package/build/models/admin-types.js +135 -0
  23. package/build/models/admin-types.js.map +1 -0
  24. package/build/models/types.js +2 -0
  25. package/build/models/types.js.map +1 -0
  26. package/build/server/index.js +128 -0
  27. package/build/server/index.js.map +1 -0
  28. package/build/server/routes/admin.js +929 -0
  29. package/build/server/routes/admin.js.map +1 -0
  30. package/build/server/routes/audit.js +9 -0
  31. package/build/server/routes/audit.js.map +1 -0
  32. package/build/server/routes/backups.js +11 -0
  33. package/build/server/routes/backups.js.map +1 -0
  34. package/build/server/routes/mcp.js +52 -0
  35. package/build/server/routes/mcp.js.map +1 -0
  36. package/build/server/routes/settings.js +49 -0
  37. package/build/server/routes/settings.js.map +1 -0
  38. package/build/server/routes/system.js +147 -0
  39. package/build/server/routes/system.js.map +1 -0
  40. package/build/services/audit-store.js +123 -0
  41. package/build/services/audit-store.js.map +1 -0
  42. package/build/services/autostart-service.js +55 -0
  43. package/build/services/autostart-service.js.map +1 -0
  44. package/build/services/backup-scheduler.js +90 -0
  45. package/build/services/backup-scheduler.js.map +1 -0
  46. package/build/services/backup-service.js +113 -0
  47. package/build/services/backup-service.js.map +1 -0
  48. package/build/services/config-store.js +163 -0
  49. package/build/services/config-store.js.map +1 -0
  50. package/build/services/defaults.js +35 -0
  51. package/build/services/defaults.js.map +1 -0
  52. package/build/services/restart-helper.js +43 -0
  53. package/build/services/restart-helper.js.map +1 -0
  54. package/build/services/ssh-connection-manager.js +1775 -0
  55. package/build/services/ssh-connection-manager.js.map +1 -0
  56. package/build/services/update-service.js +93 -0
  57. package/build/services/update-service.js.map +1 -0
  58. package/build/tools/download.js +41 -0
  59. package/build/tools/download.js.map +1 -0
  60. package/build/tools/execute-command.js +53 -0
  61. package/build/tools/execute-command.js.map +1 -0
  62. package/build/tools/index.js +17 -0
  63. package/build/tools/index.js.map +1 -0
  64. package/build/tools/list-directory.js +57 -0
  65. package/build/tools/list-directory.js.map +1 -0
  66. package/build/tools/list-servers.js +51 -0
  67. package/build/tools/list-servers.js.map +1 -0
  68. package/build/tools/upload.js +41 -0
  69. package/build/tools/upload.js.map +1 -0
  70. package/build/utils/logger.js +28 -0
  71. package/build/utils/logger.js.map +1 -0
  72. package/build/utils/ssh-config-parser.js +195 -0
  73. package/build/utils/ssh-config-parser.js.map +1 -0
  74. package/build/utils/status-collector.js +226 -0
  75. package/build/utils/status-collector.js.map +1 -0
  76. package/build/utils/tool-error.js +20 -0
  77. package/build/utils/tool-error.js.map +1 -0
  78. package/package.json +69 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-line-parser.js","sourceRoot":"","sources":["../../src/cli/command-line-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /** 出现任一参数即视为传统 stdio 模式(SSH 连接与配置相关的全部开关) */
2
+ const STDIO_ARGS = [
3
+ "config-file",
4
+ "ssh",
5
+ "ssh-config-file",
6
+ "host", "h",
7
+ "port", "p",
8
+ "username", "u",
9
+ "password", "w",
10
+ "privateKey", "k",
11
+ "passphrase", "P",
12
+ "agent", "a",
13
+ "whitelist", "W",
14
+ "blacklist", "B",
15
+ "proxy",
16
+ "socksProxy", "s",
17
+ "allowed-local-paths",
18
+ "allowed-remote-paths",
19
+ "transport-mode",
20
+ "shell-ready-timeout",
21
+ "command-template",
22
+ "pty",
23
+ "try-keyboard",
24
+ "pre-connect",
25
+ ];
26
+ /** 解析 --admin-port 的值,非法或缺参返回 undefined */
27
+ export function parseAdminPort(argv) {
28
+ const idx = argv.indexOf("--admin-port");
29
+ if (idx === -1 || idx + 1 >= argv.length)
30
+ return undefined;
31
+ const port = parseInt(argv[idx + 1], 10);
32
+ return Number.isInteger(port) && port > 0 && port < 65536 ? port : undefined;
33
+ }
34
+ export function resolveRunMode(argv) {
35
+ if (argv.includes("--admin"))
36
+ return { mode: "admin", adminPort: parseAdminPort(argv) };
37
+ if (argv.includes("--stdio"))
38
+ return { mode: "stdio" };
39
+ const hasArg = (name) => argv.includes(`--${name}`) || argv.includes(`-${name}`);
40
+ if (STDIO_ARGS.some(hasArg))
41
+ return { mode: "stdio" };
42
+ return { mode: "proxy", adminPort: parseAdminPort(argv) };
43
+ }
44
+ //# sourceMappingURL=run-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-mode.js","sourceRoot":"","sources":["../../src/cli/run-mode.ts"],"names":[],"mappings":"AAWA,6CAA6C;AAC7C,MAAM,UAAU,GAAG;IACjB,aAAa;IACb,KAAK;IACL,iBAAiB;IACjB,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,GAAG;IACX,UAAU,EAAE,GAAG;IACf,UAAU,EAAE,GAAG;IACf,YAAY,EAAE,GAAG;IACjB,YAAY,EAAE,GAAG;IACjB,OAAO,EAAE,GAAG;IACZ,WAAW,EAAE,GAAG;IAChB,WAAW,EAAE,GAAG;IAChB,OAAO;IACP,YAAY,EAAE,GAAG;IACjB,qBAAqB;IACrB,sBAAsB;IACtB,gBAAgB;IAChB,qBAAqB;IACrB,kBAAkB;IAClB,KAAK;IACL,cAAc;IACd,aAAa;CACd,CAAC;AAEF,2CAA2C;AAC3C,MAAM,UAAU,cAAc,CAAC,IAAc;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACzC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAc;IAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;IACxF,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACvD,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACzF,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACtD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,304 @@
1
+ /**
2
+ * npx 默认模式的 stdio→HTTP 转发代理:
3
+ * - stdin 每行一条 JSON-RPC 消息,POST 到 admin 常驻服务的无状态 /mcp 端点;
4
+ * - 响应兼容 application/json 与 text/event-stream(SDK StreamableHTTP 默认 SSE),
5
+ * 提取 JSON 后回写 stdout;通知类消息(202)无回写;
6
+ * - admin 服务未运行时自动分离拉起,日志落 config 同目录 daemon.log;
7
+ * - 本进程所有日志走 stderr,stdout 仅承载 MCP 协议消息。
8
+ */
9
+ import { spawn, exec } from "node:child_process";
10
+ import fs from "node:fs";
11
+ import os from "node:os";
12
+ import path from "node:path";
13
+ import { createInterface } from "node:readline";
14
+ import { ConfigStore, getGlobalConfigPath } from "../services/config-store.js";
15
+ import { DEFAULT_ADMIN_PORT } from "../models/admin-types.js";
16
+ import { SERVER_CONFIG } from "../config/server.js";
17
+ import { Logger } from "../utils/logger.js";
18
+ /** 探测端口上是否为本项目的 admin 常驻服务(校验 system/info 返回结构) */
19
+ export async function probeAdminServer(port, timeoutMs = 800) {
20
+ try {
21
+ const res = await fetch(`http://127.0.0.1:${port}/admin/api/system/info`, {
22
+ signal: AbortSignal.timeout(timeoutMs),
23
+ });
24
+ if (!res.ok)
25
+ return false;
26
+ const body = (await res.json());
27
+ return typeof body?.version === "string" || typeof body?.port === "number";
28
+ }
29
+ catch {
30
+ return false;
31
+ }
32
+ }
33
+ /** 从 StreamableHTTP 响应体提取待回写 stdout 的 JSON 串(兼容 application/json 与 text/event-stream) */
34
+ export async function extractResponseJsonLines(res) {
35
+ const contentType = String(res.headers.get("content-type") || "");
36
+ const text = await res.text();
37
+ if (contentType.includes("text/event-stream")) {
38
+ const payloads = [];
39
+ for (const block of text.split(/\r?\n\r?\n/)) {
40
+ for (const line of block.split(/\r?\n/)) {
41
+ if (!line.startsWith("data:"))
42
+ continue;
43
+ const payload = line.slice(5).trim();
44
+ if (payload && payload !== "[DONE]")
45
+ payloads.push(payload);
46
+ }
47
+ }
48
+ return payloads;
49
+ }
50
+ // application/json 或其他:仅当 body 可解析为 JSON 时透传
51
+ const trimmed = text.trim();
52
+ if (!trimmed)
53
+ return [];
54
+ try {
55
+ JSON.parse(trimmed);
56
+ return [trimmed];
57
+ }
58
+ catch {
59
+ return [];
60
+ }
61
+ }
62
+ export class StdioProxy {
63
+ targetUrl;
64
+ constructor(targetUrl) {
65
+ this.targetUrl = targetUrl;
66
+ }
67
+ /** 持续读取 stdin 并转发,stdin 关闭(MCP 客户端退出)后返回 */
68
+ async start() {
69
+ const rl = createInterface({ input: process.stdin, crlfDelay: Infinity });
70
+ rl.on("line", (line) => {
71
+ void this.forwardLine(line);
72
+ });
73
+ await new Promise((resolve) => rl.on("close", resolve));
74
+ }
75
+ async forwardLine(line) {
76
+ const trimmed = line.trim();
77
+ if (!trimmed)
78
+ return;
79
+ let requestId;
80
+ let hasId = false;
81
+ try {
82
+ const parsed = JSON.parse(trimmed);
83
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed) && "id" in parsed) {
84
+ hasId = true;
85
+ requestId = parsed.id;
86
+ }
87
+ }
88
+ catch {
89
+ Logger.log("proxy: 收到无法解析的 stdio 行,已忽略", "error");
90
+ return;
91
+ }
92
+ try {
93
+ const res = await fetch(this.targetUrl, {
94
+ method: "POST",
95
+ headers: { "content-type": "application/json", accept: "application/json, text/event-stream" },
96
+ body: trimmed,
97
+ });
98
+ if (res.status === 202)
99
+ return;
100
+ if (!res.ok)
101
+ throw new Error(`HTTP ${res.status}`);
102
+ for (const json of await extractResponseJsonLines(res)) {
103
+ process.stdout.write(json + "\n");
104
+ }
105
+ }
106
+ catch (error) {
107
+ const message = error instanceof Error ? error.message : String(error);
108
+ Logger.log(`proxy: 转发失败: ${message}`, "error");
109
+ if (hasId) {
110
+ process.stdout.write(JSON.stringify({
111
+ jsonrpc: "2.0",
112
+ id: requestId,
113
+ error: { code: -32000, message: `ssh-mcp-server 常驻服务不可达: ${message}` },
114
+ }) + "\n");
115
+ }
116
+ }
117
+ }
118
+ }
119
+ /** 解析 admin 端口:CLI 显式指定 > 配置文件 port > 默认 61823 */
120
+ async function resolveAdminPort(cliPort) {
121
+ if (cliPort)
122
+ return cliPort;
123
+ const configPath = process.env.SSH_MCP_CONFIG ? path.resolve(process.env.SSH_MCP_CONFIG) : undefined;
124
+ try {
125
+ const store = new ConfigStore({ configPath });
126
+ const cfg = await store.load();
127
+ if (typeof cfg?.port === "number" && cfg.port > 0)
128
+ return cfg.port;
129
+ }
130
+ catch {
131
+ // 配置读取失败时回退默认端口
132
+ }
133
+ return DEFAULT_ADMIN_PORT;
134
+ }
135
+ function sleep(ms) {
136
+ return new Promise((resolve) => setTimeout(resolve, ms));
137
+ }
138
+ /** 读取目标端口 admin 常驻服务的版本号,探测失败或结构异常返回 null */
139
+ export async function getAdminServerVersion(port, timeoutMs = 800) {
140
+ try {
141
+ const res = await fetch(`http://127.0.0.1:${port}/admin/api/system/info`, {
142
+ signal: AbortSignal.timeout(timeoutMs),
143
+ });
144
+ if (!res.ok)
145
+ return null;
146
+ const body = (await res.json());
147
+ return typeof body?.version === "string" && body.version ? body.version : null;
148
+ }
149
+ catch {
150
+ return null;
151
+ }
152
+ }
153
+ /** 逐段比较 x.y.z 版本号,返回 a-b(>0 表示 a 更新;缺省段按 0 处理) */
154
+ export function compareVersions(a, b) {
155
+ const seg = (v) => v.split(".").map((n) => parseInt(n, 10) || 0);
156
+ const sa = seg(a);
157
+ const sb = seg(b);
158
+ for (let i = 0; i < 3; i++) {
159
+ const diff = (sa[i] ?? 0) - (sb[i] ?? 0);
160
+ if (diff !== 0)
161
+ return diff;
162
+ }
163
+ return 0;
164
+ }
165
+ /**
166
+ * 解析端口监听进程的 PID 集合(导出仅为测试)。
167
+ * Windows 取 netstat -ano 输出(TCP <local> <foreign> LISTENING <pid>),并按本地地址精确匹配端口;
168
+ * 其他平台取 lsof -t 输出(每行一个 PID,已由参数过滤端口)。
169
+ */
170
+ export function parseListenerOutput(stdout, platform, port) {
171
+ const pids = new Set();
172
+ for (const raw of stdout.split(/\r?\n/)) {
173
+ const line = raw.trim();
174
+ if (!line)
175
+ continue;
176
+ if (platform === "win32") {
177
+ if (!line.includes("LISTENING"))
178
+ continue;
179
+ const parts = line.split(/\s+/);
180
+ // TCP <local> <foreign> LISTENING <pid>
181
+ if (parts.length < 5 || !parts[1].endsWith(`:${port}`))
182
+ continue;
183
+ const pid = parseInt(parts[4], 10);
184
+ if (Number.isInteger(pid) && pid > 0)
185
+ pids.add(pid);
186
+ }
187
+ else {
188
+ const pid = parseInt(line, 10);
189
+ if (Number.isInteger(pid) && pid > 0)
190
+ pids.add(pid);
191
+ }
192
+ }
193
+ return [...pids];
194
+ }
195
+ /** 查询监听指定 TCP 端口的进程 PID(Windows netstat / macOS·Linux lsof),查询失败返回空数组 */
196
+ export async function findListenerPids(port) {
197
+ const cmd = process.platform === "win32"
198
+ ? `netstat -ano -p tcp | findstr "LISTENING"`
199
+ : `lsof -nP -iTCP:${port} -sTCP:LISTEN -t`;
200
+ return new Promise((resolve) => {
201
+ exec(cmd, { timeout: 5000, windowsHide: true }, (err, stdout) => {
202
+ if (err && !stdout)
203
+ return resolve([]);
204
+ resolve(parseListenerOutput(String(stdout), process.platform, port));
205
+ });
206
+ });
207
+ }
208
+ /** 定位入口脚本(argv[1]),供分离拉起 daemon 使用 */
209
+ function locateEntryScript() {
210
+ const script = process.argv[1] ? path.resolve(process.argv[1]) : "";
211
+ if (!script || !fs.existsSync(script)) {
212
+ throw new Error(`无法定位入口脚本(argv[1]=${process.argv[1] ?? "空"}),请改用 --stdio 或手动运行 --admin`);
213
+ }
214
+ return script;
215
+ }
216
+ /**
217
+ * 以分离进程拉起 admin 常驻服务并等待就绪。
218
+ * cwd 必须用主目录而非包安装目录:Windows 下进程 CWD 所在目录不可被重命名,
219
+ * npx 升级重装时 npm 需要先 rename 包目录,否则 EBUSY(v1.1.1 及之前因此升级失败)。
220
+ */
221
+ async function spawnAdminServerAndWait(port) {
222
+ const script = locateEntryScript();
223
+ const logDir = path.dirname(getGlobalConfigPath());
224
+ fs.mkdirSync(logDir, { recursive: true });
225
+ const logFile = path.join(logDir, "daemon.log");
226
+ const child = spawn(process.execPath, [script, "--admin", "--admin-port", String(port)], {
227
+ detached: true,
228
+ stdio: ["ignore", fs.openSync(logFile, "a"), fs.openSync(logFile, "a")],
229
+ cwd: os.homedir(),
230
+ });
231
+ child.unref();
232
+ const deadline = Date.now() + 15000;
233
+ while (Date.now() < deadline) {
234
+ if (child.exitCode !== null)
235
+ break;
236
+ if (await probeAdminServer(port, 500))
237
+ return;
238
+ await sleep(300);
239
+ }
240
+ throw new Error(`admin 常驻服务在端口 ${port} 未能就绪,请查看日志: ${logFile}`);
241
+ }
242
+ /**
243
+ * 已运行的 daemon 版本落后于当前包时将其停止并等待端口释放(供调用方拉起新版),否则返回 false。
244
+ * 版本未知或高于当前包(回滚场景)一律复用,避免误杀。
245
+ */
246
+ async function stopOutdatedAdminServer(port) {
247
+ const daemonVersion = await getAdminServerVersion(port);
248
+ // 非数字版本(stub/dev 等自定义构建)不参与比较,一律复用
249
+ if (!daemonVersion || !/^\d+\.\d+\.\d+/.test(daemonVersion))
250
+ return false;
251
+ if (compareVersions(daemonVersion, SERVER_CONFIG.version) >= 0)
252
+ return false;
253
+ const pids = await findListenerPids(port);
254
+ if (pids.length === 0)
255
+ return false;
256
+ Logger.log(`admin 常驻服务版本 ${daemonVersion} 低于当前 ${SERVER_CONFIG.version},自动重启以应用新版本`, "info");
257
+ for (const pid of pids) {
258
+ try {
259
+ process.kill(pid, "SIGTERM");
260
+ }
261
+ catch {
262
+ // 进程可能恰好自行退出
263
+ }
264
+ }
265
+ const deadline = Date.now() + 8000;
266
+ while (Date.now() < deadline) {
267
+ if ((await findListenerPids(port)).length === 0)
268
+ return true;
269
+ await sleep(300);
270
+ }
271
+ // 宽限期内未退出则强杀
272
+ for (const pid of await findListenerPids(port)) {
273
+ try {
274
+ process.kill(pid, "SIGKILL");
275
+ }
276
+ catch {
277
+ // 进程已退出
278
+ }
279
+ }
280
+ await sleep(500);
281
+ return true;
282
+ }
283
+ /** 确保 admin 常驻服务在目标端口可用:未运行则分离拉起;运行中但版本落后则自动换新 */
284
+ export async function ensureAdminServer(port) {
285
+ if (await probeAdminServer(port)) {
286
+ if (await stopOutdatedAdminServer(port)) {
287
+ await spawnAdminServerAndWait(port);
288
+ }
289
+ return;
290
+ }
291
+ await spawnAdminServerAndWait(port);
292
+ }
293
+ /**
294
+ * 代理模式主流程:解析端口 → 确保 admin 服务运行 → stdio 转发。
295
+ * stdin 关闭后返回(admin 服务保持常驻,供下一次 MCP 会话复用)。
296
+ */
297
+ export async function runProxyMode(opts = {}) {
298
+ const port = await resolveAdminPort(opts.adminPort);
299
+ await ensureAdminServer(port);
300
+ Logger.log(`ssh-mcp-server 管理台: http://127.0.0.1:${port}/admin/`, "info");
301
+ const proxy = new StdioProxy(`http://127.0.0.1:${port}/mcp`);
302
+ await proxy.start();
303
+ }
304
+ //# sourceMappingURL=stdio-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio-proxy.js","sourceRoot":"","sources":["../../src/cli/stdio-proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Export all configurations
3
+ */
4
+ export * from './server.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,aAAa,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { readFileSync } from "node:fs";
2
+ function readPackageVersion() {
3
+ const packageJson = JSON.parse(readFileSync(new URL("../../package.json", import.meta.url), "utf8"));
4
+ if (typeof packageJson.version !== "string") {
5
+ throw new Error("package.json must include a string version");
6
+ }
7
+ return packageJson.version;
8
+ }
9
+ /**
10
+ * MCP Server configuration
11
+ */
12
+ export const SERVER_CONFIG = {
13
+ name: "ssh-mcp-server",
14
+ version: readPackageVersion(),
15
+ };
16
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/config/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,SAAS,kBAAkB;IACzB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAC5C,CAAC;IAE3B,IAAI,OAAO,WAAW,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,kBAAkB,EAAE;CAC9B,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
3
+ import { registerAllTools } from "../tools/index.js";
4
+ import { SERVER_CONFIG } from "../config/server.js";
5
+ export async function createMcpHttpTransport() {
6
+ const server = new McpServer(SERVER_CONFIG);
7
+ registerAllTools(server);
8
+ const transport = new StreamableHTTPServerTransport({
9
+ sessionIdGenerator: undefined,
10
+ });
11
+ await server.connect(transport);
12
+ return { server, transport };
13
+ }
14
+ //# sourceMappingURL=mcp-http-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-http-server.js","sourceRoot":"","sources":["../../src/core/mcp-http-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC;IAC5C,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC;QAClD,kBAAkB,EAAE,SAAS;KAC9B,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,95 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { SSHConnectionManager } from "../services/ssh-connection-manager.js";
4
+ import { CommandLineParser } from "../cli/command-line-parser.js";
5
+ import { Logger } from "../utils/logger.js";
6
+ import { registerAllTools } from "../tools/index.js";
7
+ import { SERVER_CONFIG } from "../config/server.js";
8
+ /**
9
+ * MCP Server class
10
+ */
11
+ export class SshMcpServer {
12
+ server;
13
+ sshManager;
14
+ shutdownHandlersRegistered = false;
15
+ shutdownPromise;
16
+ constructor() {
17
+ this.server = new McpServer(SERVER_CONFIG);
18
+ this.sshManager = SSHConnectionManager.getInstance();
19
+ }
20
+ /**
21
+ * Register tools
22
+ */
23
+ registerTools() {
24
+ registerAllTools(this.server);
25
+ }
26
+ async shutdown(reason, exitCode) {
27
+ if (!this.shutdownPromise) {
28
+ this.shutdownPromise = (async () => {
29
+ Logger.log(`Received ${reason}, shutting down SSH MCP server...`, "info");
30
+ this.sshManager.disconnect();
31
+ try {
32
+ await this.server.close();
33
+ }
34
+ catch (error) {
35
+ Logger.log(`Failed to close MCP server cleanly: ${error.message}`, "error");
36
+ }
37
+ })();
38
+ }
39
+ await this.shutdownPromise;
40
+ if (exitCode !== undefined) {
41
+ process.exit(exitCode);
42
+ }
43
+ }
44
+ registerShutdownHandlers() {
45
+ if (this.shutdownHandlersRegistered) {
46
+ return;
47
+ }
48
+ const handleSignal = (signal) => {
49
+ void this.shutdown(signal, 0);
50
+ };
51
+ process.once("SIGINT", handleSignal);
52
+ process.once("SIGTERM", handleSignal);
53
+ process.stdin.resume();
54
+ process.stdin.once("end", () => void this.shutdown("stdin end", 0));
55
+ process.stdin.once("close", () => void this.shutdown("stdin close", 0));
56
+ this.shutdownHandlersRegistered = true;
57
+ }
58
+ /**
59
+ * Run the server
60
+ */
61
+ async run() {
62
+ // Initialize SSH configuration
63
+ const parsedArgs = CommandLineParser.parseArgs();
64
+ this.sshManager.setConfig(parsedArgs.configs);
65
+ this.registerShutdownHandlers();
66
+ // Register tools before accepting MCP requests.
67
+ this.registerTools();
68
+ // Create transport instance and connect.
69
+ const transport = new StdioServerTransport();
70
+ await this.server.connect(transport);
71
+ Logger.log("MCP server connection established");
72
+ // Security warning
73
+ const allConfigs = Object.values(parsedArgs.configs);
74
+ if (allConfigs.some((c) => !c.commandWhitelist || c.commandWhitelist.length === 0)) {
75
+ Logger.log("WARNING: Running without a command whitelist is strongly discouraged. Please configure a whitelist to restrict the commands that can be executed.", "info");
76
+ }
77
+ if (allConfigs.some((c) => (c.transportMode || "exec") === "exec" &&
78
+ (!c.allowedRemotePaths || c.allowedRemotePaths.length === 0))) {
79
+ Logger.log("WARNING: Running without allowedRemotePaths is strongly discouraged. SFTP upload/download can read or write any path on the remote server. Configure allowedRemotePaths to restrict the SFTP surface.", "info");
80
+ }
81
+ // Pre-connect to all servers if flag is set
82
+ if (parsedArgs.preConnect) {
83
+ Logger.log("Pre-connecting to all configured SSH servers...", "info");
84
+ void this.sshManager
85
+ .connectAll()
86
+ .then(() => {
87
+ Logger.log("Successfully pre-connected to all SSH servers", "info");
88
+ })
89
+ .catch((error) => {
90
+ Logger.log(`Warning: Some SSH connections failed during pre-connect: ${error.message}`, "error");
91
+ });
92
+ }
93
+ }
94
+ }
95
+ //# sourceMappingURL=mcp-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/core/mcp-server.ts"],"names":[],"mappings":"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"}