ssh-mcp-pro 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.
Files changed (267) hide show
  1. package/AGENTS.md +127 -0
  2. package/ARCHITECTURE.md +145 -0
  3. package/LICENSE +21 -0
  4. package/LICENSES/MIT.txt +21 -0
  5. package/MIGRATION.md +14 -0
  6. package/README.md +175 -0
  7. package/REGISTRY_SUBMISSION.md +38 -0
  8. package/SECURITY.md +40 -0
  9. package/SECURITY_DECISIONS.md +59 -0
  10. package/dist/agent-bin.d.ts +3 -0
  11. package/dist/agent-bin.d.ts.map +1 -0
  12. package/dist/agent-bin.js +8 -0
  13. package/dist/agent-bin.js.map +1 -0
  14. package/dist/audit.d.ts +25 -0
  15. package/dist/audit.d.ts.map +1 -0
  16. package/dist/audit.js +50 -0
  17. package/dist/audit.js.map +1 -0
  18. package/dist/auth.d.ts +4 -0
  19. package/dist/auth.d.ts.map +1 -0
  20. package/dist/auth.js +33 -0
  21. package/dist/auth.js.map +1 -0
  22. package/dist/cli.d.ts +16 -0
  23. package/dist/cli.d.ts.map +1 -0
  24. package/dist/cli.js +99 -0
  25. package/dist/cli.js.map +1 -0
  26. package/dist/config.d.ts +103 -0
  27. package/dist/config.d.ts.map +1 -0
  28. package/dist/config.js +490 -0
  29. package/dist/config.js.map +1 -0
  30. package/dist/connector-credentials.d.ts +8 -0
  31. package/dist/connector-credentials.d.ts.map +1 -0
  32. package/dist/connector-credentials.js +132 -0
  33. package/dist/connector-credentials.js.map +1 -0
  34. package/dist/connector-profile.d.ts +17 -0
  35. package/dist/connector-profile.d.ts.map +1 -0
  36. package/dist/connector-profile.js +81 -0
  37. package/dist/connector-profile.js.map +1 -0
  38. package/dist/container.d.ts +18 -0
  39. package/dist/container.d.ts.map +1 -0
  40. package/dist/container.js +52 -0
  41. package/dist/container.js.map +1 -0
  42. package/dist/detect.d.ts +7 -0
  43. package/dist/detect.d.ts.map +1 -0
  44. package/dist/detect.js +271 -0
  45. package/dist/detect.js.map +1 -0
  46. package/dist/ensure.d.ts +17 -0
  47. package/dist/ensure.d.ts.map +1 -0
  48. package/dist/ensure.js +531 -0
  49. package/dist/ensure.js.map +1 -0
  50. package/dist/errors.d.ts +54 -0
  51. package/dist/errors.d.ts.map +1 -0
  52. package/dist/errors.js +84 -0
  53. package/dist/errors.js.map +1 -0
  54. package/dist/fs-tools.d.ts +26 -0
  55. package/dist/fs-tools.d.ts.map +1 -0
  56. package/dist/fs-tools.js +599 -0
  57. package/dist/fs-tools.js.map +1 -0
  58. package/dist/http-rate-limit.d.ts +9 -0
  59. package/dist/http-rate-limit.d.ts.map +1 -0
  60. package/dist/http-rate-limit.js +41 -0
  61. package/dist/http-rate-limit.js.map +1 -0
  62. package/dist/http-security.d.ts +22 -0
  63. package/dist/http-security.d.ts.map +1 -0
  64. package/dist/http-security.js +88 -0
  65. package/dist/http-security.js.map +1 -0
  66. package/dist/index.d.ts +10 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +201 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/logging.d.ts +52 -0
  71. package/dist/logging.d.ts.map +1 -0
  72. package/dist/logging.js +180 -0
  73. package/dist/logging.js.map +1 -0
  74. package/dist/mcp.d.ts +16 -0
  75. package/dist/mcp.d.ts.map +1 -0
  76. package/dist/mcp.js +159 -0
  77. package/dist/mcp.js.map +1 -0
  78. package/dist/metrics.d.ts +95 -0
  79. package/dist/metrics.d.ts.map +1 -0
  80. package/dist/metrics.js +204 -0
  81. package/dist/metrics.js.map +1 -0
  82. package/dist/oauth.d.ts +14 -0
  83. package/dist/oauth.d.ts.map +1 -0
  84. package/dist/oauth.js +105 -0
  85. package/dist/oauth.js.map +1 -0
  86. package/dist/policy.d.ts +64 -0
  87. package/dist/policy.d.ts.map +1 -0
  88. package/dist/policy.js +368 -0
  89. package/dist/policy.js.map +1 -0
  90. package/dist/process.d.ts +24 -0
  91. package/dist/process.d.ts.map +1 -0
  92. package/dist/process.js +212 -0
  93. package/dist/process.js.map +1 -0
  94. package/dist/prompts.d.ts +49 -0
  95. package/dist/prompts.d.ts.map +1 -0
  96. package/dist/prompts.js +191 -0
  97. package/dist/prompts.js.map +1 -0
  98. package/dist/rate-limiter.d.ts +57 -0
  99. package/dist/rate-limiter.d.ts.map +1 -0
  100. package/dist/rate-limiter.js +141 -0
  101. package/dist/rate-limiter.js.map +1 -0
  102. package/dist/remote/agent-cli.d.ts +2 -0
  103. package/dist/remote/agent-cli.d.ts.map +1 -0
  104. package/dist/remote/agent-cli.js +270 -0
  105. package/dist/remote/agent-cli.js.map +1 -0
  106. package/dist/remote/agent-executor.d.ts +26 -0
  107. package/dist/remote/agent-executor.d.ts.map +1 -0
  108. package/dist/remote/agent-executor.js +400 -0
  109. package/dist/remote/agent-executor.js.map +1 -0
  110. package/dist/remote/config.d.ts +3 -0
  111. package/dist/remote/config.d.ts.map +1 -0
  112. package/dist/remote/config.js +52 -0
  113. package/dist/remote/config.js.map +1 -0
  114. package/dist/remote/control-plane.d.ts +57 -0
  115. package/dist/remote/control-plane.d.ts.map +1 -0
  116. package/dist/remote/control-plane.js +1248 -0
  117. package/dist/remote/control-plane.js.map +1 -0
  118. package/dist/remote/crypto.d.ts +38 -0
  119. package/dist/remote/crypto.d.ts.map +1 -0
  120. package/dist/remote/crypto.js +143 -0
  121. package/dist/remote/crypto.js.map +1 -0
  122. package/dist/remote/mcp-tools.d.ts +10 -0
  123. package/dist/remote/mcp-tools.d.ts.map +1 -0
  124. package/dist/remote/mcp-tools.js +201 -0
  125. package/dist/remote/mcp-tools.js.map +1 -0
  126. package/dist/remote/policy.d.ts +11 -0
  127. package/dist/remote/policy.d.ts.map +1 -0
  128. package/dist/remote/policy.js +94 -0
  129. package/dist/remote/policy.js.map +1 -0
  130. package/dist/remote/schemas.d.ts +298 -0
  131. package/dist/remote/schemas.d.ts.map +1 -0
  132. package/dist/remote/schemas.js +111 -0
  133. package/dist/remote/schemas.js.map +1 -0
  134. package/dist/remote/scopes.d.ts +6 -0
  135. package/dist/remote/scopes.d.ts.map +1 -0
  136. package/dist/remote/scopes.js +24 -0
  137. package/dist/remote/scopes.js.map +1 -0
  138. package/dist/remote/store.d.ts +45 -0
  139. package/dist/remote/store.d.ts.map +1 -0
  140. package/dist/remote/store.js +355 -0
  141. package/dist/remote/store.js.map +1 -0
  142. package/dist/remote/types.d.ts +183 -0
  143. package/dist/remote/types.d.ts.map +1 -0
  144. package/dist/remote/types.js +103 -0
  145. package/dist/remote/types.js.map +1 -0
  146. package/dist/remote/util.d.ts +6 -0
  147. package/dist/remote/util.d.ts.map +1 -0
  148. package/dist/remote/util.js +45 -0
  149. package/dist/remote/util.js.map +1 -0
  150. package/dist/remote/websocket.d.ts +26 -0
  151. package/dist/remote/websocket.d.ts.map +1 -0
  152. package/dist/remote/websocket.js +167 -0
  153. package/dist/remote/websocket.js.map +1 -0
  154. package/dist/render-http.d.ts +2 -0
  155. package/dist/render-http.d.ts.map +1 -0
  156. package/dist/render-http.js +14 -0
  157. package/dist/render-http.js.map +1 -0
  158. package/dist/resources.d.ts +19 -0
  159. package/dist/resources.d.ts.map +1 -0
  160. package/dist/resources.js +96 -0
  161. package/dist/resources.js.map +1 -0
  162. package/dist/retry.d.ts +45 -0
  163. package/dist/retry.d.ts.map +1 -0
  164. package/dist/retry.js +120 -0
  165. package/dist/retry.js.map +1 -0
  166. package/dist/safety.d.ts +31 -0
  167. package/dist/safety.d.ts.map +1 -0
  168. package/dist/safety.js +174 -0
  169. package/dist/safety.js.map +1 -0
  170. package/dist/server-http.d.ts +2 -0
  171. package/dist/server-http.d.ts.map +1 -0
  172. package/dist/server-http.js +432 -0
  173. package/dist/server-http.js.map +1 -0
  174. package/dist/session.d.ts +116 -0
  175. package/dist/session.d.ts.map +1 -0
  176. package/dist/session.js +666 -0
  177. package/dist/session.js.map +1 -0
  178. package/dist/shell.d.ts +10 -0
  179. package/dist/shell.d.ts.map +1 -0
  180. package/dist/shell.js +83 -0
  181. package/dist/shell.js.map +1 -0
  182. package/dist/ssh-config.d.ts +94 -0
  183. package/dist/ssh-config.d.ts.map +1 -0
  184. package/dist/ssh-config.js +234 -0
  185. package/dist/ssh-config.js.map +1 -0
  186. package/dist/streaming.d.ts +36 -0
  187. package/dist/streaming.d.ts.map +1 -0
  188. package/dist/streaming.js +140 -0
  189. package/dist/streaming.js.map +1 -0
  190. package/dist/telemetry.d.ts +17 -0
  191. package/dist/telemetry.d.ts.map +1 -0
  192. package/dist/telemetry.js +101 -0
  193. package/dist/telemetry.js.map +1 -0
  194. package/dist/tools/connector.provider.d.ts +28 -0
  195. package/dist/tools/connector.provider.d.ts.map +1 -0
  196. package/dist/tools/connector.provider.js +360 -0
  197. package/dist/tools/connector.provider.js.map +1 -0
  198. package/dist/tools/ensure.provider.d.ts +18 -0
  199. package/dist/tools/ensure.provider.d.ts.map +1 -0
  200. package/dist/tools/ensure.provider.js +173 -0
  201. package/dist/tools/ensure.provider.js.map +1 -0
  202. package/dist/tools/fs.provider.d.ts +21 -0
  203. package/dist/tools/fs.provider.d.ts.map +1 -0
  204. package/dist/tools/fs.provider.js +259 -0
  205. package/dist/tools/fs.provider.js.map +1 -0
  206. package/dist/tools/index.d.ts +4 -0
  207. package/dist/tools/index.d.ts.map +1 -0
  208. package/dist/tools/index.js +68 -0
  209. package/dist/tools/index.js.map +1 -0
  210. package/dist/tools/metadata.d.ts +11 -0
  211. package/dist/tools/metadata.d.ts.map +1 -0
  212. package/dist/tools/metadata.js +10 -0
  213. package/dist/tools/metadata.js.map +1 -0
  214. package/dist/tools/output-schemas.d.ts +217 -0
  215. package/dist/tools/output-schemas.d.ts.map +1 -0
  216. package/dist/tools/output-schemas.js +300 -0
  217. package/dist/tools/output-schemas.js.map +1 -0
  218. package/dist/tools/process.provider.d.ts +22 -0
  219. package/dist/tools/process.provider.d.ts.map +1 -0
  220. package/dist/tools/process.provider.js +146 -0
  221. package/dist/tools/process.provider.js.map +1 -0
  222. package/dist/tools/registry.d.ts +12 -0
  223. package/dist/tools/registry.d.ts.map +1 -0
  224. package/dist/tools/registry.js +163 -0
  225. package/dist/tools/registry.js.map +1 -0
  226. package/dist/tools/results.d.ts +4 -0
  227. package/dist/tools/results.d.ts.map +1 -0
  228. package/dist/tools/results.js +5 -0
  229. package/dist/tools/results.js.map +1 -0
  230. package/dist/tools/session.provider.d.ts +23 -0
  231. package/dist/tools/session.provider.d.ts.map +1 -0
  232. package/dist/tools/session.provider.js +299 -0
  233. package/dist/tools/session.provider.js.map +1 -0
  234. package/dist/tools/system.provider.d.ts +18 -0
  235. package/dist/tools/system.provider.d.ts.map +1 -0
  236. package/dist/tools/system.provider.js +81 -0
  237. package/dist/tools/system.provider.js.map +1 -0
  238. package/dist/tools/transfer.provider.d.ts +16 -0
  239. package/dist/tools/transfer.provider.d.ts.map +1 -0
  240. package/dist/tools/transfer.provider.js +85 -0
  241. package/dist/tools/transfer.provider.js.map +1 -0
  242. package/dist/tools/tunnel.provider.d.ts +18 -0
  243. package/dist/tools/tunnel.provider.d.ts.map +1 -0
  244. package/dist/tools/tunnel.provider.js +142 -0
  245. package/dist/tools/tunnel.provider.js.map +1 -0
  246. package/dist/tools/types.d.ts +16 -0
  247. package/dist/tools/types.d.ts.map +1 -0
  248. package/dist/tools/types.js +2 -0
  249. package/dist/tools/types.js.map +1 -0
  250. package/dist/transfer.d.ts +40 -0
  251. package/dist/transfer.d.ts.map +1 -0
  252. package/dist/transfer.js +363 -0
  253. package/dist/transfer.js.map +1 -0
  254. package/dist/tunnel.d.ts +37 -0
  255. package/dist/tunnel.d.ts.map +1 -0
  256. package/dist/tunnel.js +234 -0
  257. package/dist/tunnel.js.map +1 -0
  258. package/dist/types.d.ts +341 -0
  259. package/dist/types.d.ts.map +1 -0
  260. package/dist/types.js +184 -0
  261. package/dist/types.js.map +1 -0
  262. package/docs/docker.md +22 -0
  263. package/examples/README.md +77 -0
  264. package/mcp.json +21 -0
  265. package/package.json +147 -0
  266. package/registry/ssh-mcp-pro/mcp.json +21 -0
  267. package/server.json +76 -0
@@ -0,0 +1,341 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Authentication configuration for SSH connections
4
+ */
5
+ export interface AuthConfig {
6
+ password?: string;
7
+ privateKey?: string;
8
+ privateKeyPath?: string;
9
+ passphrase?: string;
10
+ useAgent?: boolean;
11
+ }
12
+ /**
13
+ * SSH connection parameters
14
+ */
15
+ export interface ConnectionParams {
16
+ host: string;
17
+ policyHost?: string;
18
+ username: string;
19
+ port?: number;
20
+ auth?: "auto" | "password" | "key" | "agent";
21
+ password?: string;
22
+ privateKey?: string;
23
+ privateKeyPath?: string;
24
+ passphrase?: string;
25
+ useAgent?: boolean;
26
+ readyTimeoutMs?: number;
27
+ ttlMs?: number;
28
+ strictHostKeyChecking?: boolean;
29
+ hostKeyPolicy?: HostKeyPolicy;
30
+ knownHostsPath?: string;
31
+ expectedHostKeySha256?: string;
32
+ policyMode?: PolicyMode;
33
+ }
34
+ export type HostKeyPolicy = "strict" | "accept-new" | "insecure";
35
+ export type PolicyMode = "enforce" | "explain";
36
+ /**
37
+ * SSH session information
38
+ */
39
+ export interface SessionInfo {
40
+ sessionId: string;
41
+ host: string;
42
+ username: string;
43
+ port: number;
44
+ createdAt: number;
45
+ expiresAt: number;
46
+ lastUsed: number;
47
+ policyMode: PolicyMode;
48
+ hostKeyPolicy: HostKeyPolicy;
49
+ }
50
+ /**
51
+ * Session creation result
52
+ */
53
+ export interface SessionResult {
54
+ sessionId: string;
55
+ host: string;
56
+ username: string;
57
+ sftpAvailable: boolean;
58
+ expiresInMs: number;
59
+ policyMode: PolicyMode;
60
+ hostKeyPolicy: HostKeyPolicy;
61
+ wouldConnect?: boolean;
62
+ }
63
+ /**
64
+ * Command execution result
65
+ */
66
+ export interface ExecResult {
67
+ code: number;
68
+ stdout: string;
69
+ stderr: string;
70
+ durationMs: number;
71
+ }
72
+ /**
73
+ * File system entry information
74
+ */
75
+ export interface FileStatInfo {
76
+ size: number;
77
+ mtime: Date;
78
+ mode: number;
79
+ type: "file" | "directory" | "symlink" | "other";
80
+ }
81
+ /**
82
+ * Directory listing entry
83
+ */
84
+ export interface DirEntry {
85
+ name: string;
86
+ type: "file" | "directory" | "symlink" | "other";
87
+ size?: number;
88
+ mtime?: Date;
89
+ mode?: number;
90
+ }
91
+ /**
92
+ * Directory listing result with pagination
93
+ */
94
+ export interface DirListResult {
95
+ entries: DirEntry[];
96
+ nextToken?: string;
97
+ }
98
+ /**
99
+ * OS detection result
100
+ */
101
+ export type Platform = "linux" | "darwin" | "windows" | "unknown";
102
+ export type PackageManager = "apt" | "dnf" | "yum" | "pacman" | "apk" | "zypper" | "brew" | "choco" | "winget" | "unknown";
103
+ export type InitSystem = "systemd" | "service" | "launchd" | "windows-service" | "unknown";
104
+ export type ShellType = "bash" | "sh" | "powershell" | "cmd" | "unknown";
105
+ export interface OSInfo {
106
+ platform: Platform;
107
+ distro: string;
108
+ version: string;
109
+ arch: string;
110
+ shell: string;
111
+ packageManager: PackageManager;
112
+ init: InitSystem;
113
+ defaultShell?: ShellType;
114
+ tempDir?: string;
115
+ }
116
+ /**
117
+ * Package operation result
118
+ */
119
+ export interface PackageResult {
120
+ ok: boolean;
121
+ pm: string;
122
+ code: number;
123
+ stdout: string;
124
+ stderr: string;
125
+ }
126
+ /**
127
+ * Service operation result
128
+ */
129
+ export interface ServiceResult {
130
+ ok: boolean;
131
+ }
132
+ /**
133
+ * Lines in file operation result
134
+ */
135
+ export interface LinesInFileResult {
136
+ ok: boolean;
137
+ added: number;
138
+ }
139
+ /**
140
+ * Patch application result
141
+ */
142
+ export interface PatchResult {
143
+ ok: boolean;
144
+ changed: boolean;
145
+ }
146
+ /**
147
+ * Custom error codes for SSH MCP operations
148
+ */
149
+ export declare enum ErrorCode {
150
+ EAUTH = "EAUTH",
151
+ ECONN = "ECONN",
152
+ ETIMEOUT = "ETIMEOUT",
153
+ ENOSUDO = "ENOSUDO",
154
+ EPMGR = "EPMGR",
155
+ EFS = "EFS",
156
+ EPATCH = "EPATCH",
157
+ EBADREQ = "EBADREQ",
158
+ EPOLICY = "EPOLICY",
159
+ EHOSTKEY = "EHOSTKEY",
160
+ ELIMIT = "ELIMIT",
161
+ EUNSUPPORTED = "EUNSUPPORTED"
162
+ }
163
+ /**
164
+ * Structured error class for SSH MCP operations
165
+ * Enhanced for ChatGPT/AI assistant integration
166
+ */
167
+ export declare class SSHMCPError extends Error {
168
+ code: ErrorCode;
169
+ hint?: string | undefined;
170
+ userFriendlyMessage?: string | undefined;
171
+ recoverable: boolean;
172
+ suggestedAction?: string | undefined;
173
+ constructor(code: ErrorCode, message: string, hint?: string | undefined, userFriendlyMessage?: string | undefined, recoverable?: boolean, suggestedAction?: string | undefined);
174
+ /**
175
+ * Converts error to a JSON-serializable object for MCP responses
176
+ */
177
+ toJSON(): {
178
+ code: ErrorCode;
179
+ message: string;
180
+ hint: string | undefined;
181
+ userFriendlyMessage: string | undefined;
182
+ recoverable: boolean;
183
+ suggestedAction: string | undefined;
184
+ };
185
+ }
186
+ export declare const ConnectionParamsSchema: z.ZodObject<{
187
+ host: z.ZodString;
188
+ username: z.ZodString;
189
+ port: z.ZodOptional<z.ZodNumber>;
190
+ auth: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
191
+ key: "key";
192
+ auto: "auto";
193
+ password: "password";
194
+ agent: "agent";
195
+ }>>>;
196
+ password: z.ZodOptional<z.ZodString>;
197
+ privateKey: z.ZodOptional<z.ZodString>;
198
+ privateKeyPath: z.ZodOptional<z.ZodString>;
199
+ passphrase: z.ZodOptional<z.ZodString>;
200
+ useAgent: z.ZodOptional<z.ZodBoolean>;
201
+ readyTimeoutMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
202
+ ttlMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
203
+ strictHostKeyChecking: z.ZodOptional<z.ZodBoolean>;
204
+ hostKeyPolicy: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
205
+ strict: "strict";
206
+ "accept-new": "accept-new";
207
+ insecure: "insecure";
208
+ }>>>;
209
+ knownHostsPath: z.ZodOptional<z.ZodString>;
210
+ expectedHostKeySha256: z.ZodOptional<z.ZodString>;
211
+ policyMode: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
212
+ enforce: "enforce";
213
+ explain: "explain";
214
+ }>>>;
215
+ }, z.core.$strip>;
216
+ export declare const SessionIdSchema: z.ZodObject<{
217
+ sessionId: z.ZodString;
218
+ }, z.core.$strip>;
219
+ export declare const ExecSchema: z.ZodObject<{
220
+ sessionId: z.ZodString;
221
+ command: z.ZodString;
222
+ cwd: z.ZodOptional<z.ZodString>;
223
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
224
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
225
+ }, z.core.$strip>;
226
+ export declare const SudoSchema: z.ZodObject<{
227
+ sessionId: z.ZodString;
228
+ command: z.ZodString;
229
+ cwd: z.ZodOptional<z.ZodString>;
230
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
231
+ }, z.core.$strip>;
232
+ export declare const FSReadSchema: z.ZodObject<{
233
+ sessionId: z.ZodString;
234
+ path: z.ZodString;
235
+ encoding: z.ZodDefault<z.ZodOptional<z.ZodString>>;
236
+ maxBytes: z.ZodOptional<z.ZodNumber>;
237
+ }, z.core.$strip>;
238
+ export declare const FSWriteSchema: z.ZodObject<{
239
+ sessionId: z.ZodString;
240
+ path: z.ZodString;
241
+ data: z.ZodString;
242
+ mode: z.ZodOptional<z.ZodNumber>;
243
+ }, z.core.$strip>;
244
+ export declare const FSStatSchema: z.ZodObject<{
245
+ sessionId: z.ZodString;
246
+ path: z.ZodString;
247
+ }, z.core.$strip>;
248
+ export declare const FSListSchema: z.ZodObject<{
249
+ sessionId: z.ZodString;
250
+ path: z.ZodString;
251
+ page: z.ZodOptional<z.ZodNumber>;
252
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
253
+ }, z.core.$strip>;
254
+ export declare const FSPathSchema: z.ZodObject<{
255
+ sessionId: z.ZodString;
256
+ path: z.ZodString;
257
+ }, z.core.$strip>;
258
+ export declare const FSRenameSchema: z.ZodObject<{
259
+ sessionId: z.ZodString;
260
+ from: z.ZodString;
261
+ to: z.ZodString;
262
+ }, z.core.$strip>;
263
+ export declare const EnsurePackageSchema: z.ZodObject<{
264
+ sessionId: z.ZodString;
265
+ name: z.ZodString;
266
+ state: z.ZodDefault<z.ZodEnum<{
267
+ present: "present";
268
+ absent: "absent";
269
+ }>>;
270
+ }, z.core.$strip>;
271
+ export declare const EnsureServiceSchema: z.ZodObject<{
272
+ sessionId: z.ZodString;
273
+ name: z.ZodString;
274
+ state: z.ZodEnum<{
275
+ enabled: "enabled";
276
+ started: "started";
277
+ stopped: "stopped";
278
+ restarted: "restarted";
279
+ disabled: "disabled";
280
+ }>;
281
+ }, z.core.$strip>;
282
+ export declare const EnsureLinesSchema: z.ZodObject<{
283
+ sessionId: z.ZodString;
284
+ path: z.ZodString;
285
+ lines: z.ZodArray<z.ZodString>;
286
+ state: z.ZodDefault<z.ZodEnum<{
287
+ present: "present";
288
+ absent: "absent";
289
+ }>>;
290
+ createIfMissing: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
291
+ }, z.core.$strip>;
292
+ export declare const PatchApplySchema: z.ZodObject<{
293
+ sessionId: z.ZodString;
294
+ path: z.ZodString;
295
+ diff: z.ZodString;
296
+ }, z.core.$strip>;
297
+ export declare const HostAliasSchema: z.ZodObject<{
298
+ hostAlias: z.ZodString;
299
+ }, z.core.$strip>;
300
+ export declare const MetricsFormatSchema: z.ZodObject<{
301
+ format: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
302
+ json: "json";
303
+ prometheus: "prometheus";
304
+ }>>>;
305
+ }, z.core.$strip>;
306
+ export declare const ExecStreamSchema: z.ZodObject<{
307
+ sessionId: z.ZodString;
308
+ command: z.ZodString;
309
+ cwd: z.ZodOptional<z.ZodString>;
310
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
311
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
312
+ }, z.core.$strip>;
313
+ export declare const FileUploadSchema: z.ZodObject<{
314
+ sessionId: z.ZodString;
315
+ localPath: z.ZodString;
316
+ remotePath: z.ZodString;
317
+ }, z.core.$strip>;
318
+ export declare const FileDownloadSchema: z.ZodObject<{
319
+ sessionId: z.ZodString;
320
+ remotePath: z.ZodString;
321
+ localPath: z.ZodString;
322
+ }, z.core.$strip>;
323
+ export declare const TunnelLocalForwardSchema: z.ZodObject<{
324
+ sessionId: z.ZodString;
325
+ localPort: z.ZodNumber;
326
+ remoteHost: z.ZodDefault<z.ZodString>;
327
+ remotePort: z.ZodNumber;
328
+ }, z.core.$strip>;
329
+ export declare const TunnelRemoteForwardSchema: z.ZodObject<{
330
+ sessionId: z.ZodString;
331
+ remotePort: z.ZodNumber;
332
+ localHost: z.ZodDefault<z.ZodString>;
333
+ localPort: z.ZodNumber;
334
+ }, z.core.$strip>;
335
+ export declare const TunnelCloseSchema: z.ZodObject<{
336
+ tunnelId: z.ZodString;
337
+ }, z.core.$strip>;
338
+ export declare const TunnelListSchema: z.ZodObject<{
339
+ sessionId: z.ZodOptional<z.ZodString>;
340
+ }, z.core.$strip>;
341
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,184 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Custom error codes for SSH MCP operations
4
+ */
5
+ export var ErrorCode;
6
+ (function (ErrorCode) {
7
+ ErrorCode["EAUTH"] = "EAUTH";
8
+ ErrorCode["ECONN"] = "ECONN";
9
+ ErrorCode["ETIMEOUT"] = "ETIMEOUT";
10
+ ErrorCode["ENOSUDO"] = "ENOSUDO";
11
+ ErrorCode["EPMGR"] = "EPMGR";
12
+ ErrorCode["EFS"] = "EFS";
13
+ ErrorCode["EPATCH"] = "EPATCH";
14
+ ErrorCode["EBADREQ"] = "EBADREQ";
15
+ ErrorCode["EPOLICY"] = "EPOLICY";
16
+ ErrorCode["EHOSTKEY"] = "EHOSTKEY";
17
+ ErrorCode["ELIMIT"] = "ELIMIT";
18
+ ErrorCode["EUNSUPPORTED"] = "EUNSUPPORTED";
19
+ })(ErrorCode || (ErrorCode = {}));
20
+ /**
21
+ * Structured error class for SSH MCP operations
22
+ * Enhanced for ChatGPT/AI assistant integration
23
+ */
24
+ export class SSHMCPError extends Error {
25
+ code;
26
+ hint;
27
+ userFriendlyMessage;
28
+ recoverable;
29
+ suggestedAction;
30
+ constructor(code, message, hint, userFriendlyMessage, recoverable = true, suggestedAction) {
31
+ super(message);
32
+ this.code = code;
33
+ this.hint = hint;
34
+ this.userFriendlyMessage = userFriendlyMessage;
35
+ this.recoverable = recoverable;
36
+ this.suggestedAction = suggestedAction;
37
+ this.name = "SSHMCPError";
38
+ }
39
+ /**
40
+ * Converts error to a JSON-serializable object for MCP responses
41
+ */
42
+ toJSON() {
43
+ return {
44
+ code: this.code,
45
+ message: this.message,
46
+ hint: this.hint,
47
+ userFriendlyMessage: this.userFriendlyMessage,
48
+ recoverable: this.recoverable,
49
+ suggestedAction: this.suggestedAction,
50
+ };
51
+ }
52
+ }
53
+ // Zod schemas for input validation
54
+ const EnvKeySchema = z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/u);
55
+ const EnvMapSchema = z.record(EnvKeySchema, z.string());
56
+ export const ConnectionParamsSchema = z.object({
57
+ host: z.string().min(1),
58
+ username: z.string().min(1),
59
+ port: z.number().min(1).max(65535).optional(),
60
+ auth: z.enum(["auto", "password", "key", "agent"]).optional().default("auto"),
61
+ password: z.string().optional(),
62
+ privateKey: z.string().optional(),
63
+ privateKeyPath: z.string().optional(),
64
+ passphrase: z.string().optional(),
65
+ useAgent: z.boolean().optional(),
66
+ readyTimeoutMs: z.number().min(1000).optional().default(20000),
67
+ ttlMs: z.number().min(10000).optional().default(900000),
68
+ strictHostKeyChecking: z.boolean().optional(),
69
+ hostKeyPolicy: z.enum(["strict", "accept-new", "insecure"]).optional().default("strict"),
70
+ knownHostsPath: z.string().optional(),
71
+ expectedHostKeySha256: z.string().optional(),
72
+ policyMode: z.enum(["enforce", "explain"]).optional().default("enforce"),
73
+ });
74
+ export const SessionIdSchema = z.object({
75
+ sessionId: z.string().min(1),
76
+ });
77
+ export const ExecSchema = z.object({
78
+ sessionId: z.string().min(1),
79
+ command: z.string().min(1),
80
+ cwd: z.string().optional(),
81
+ env: EnvMapSchema.optional(),
82
+ timeoutMs: z.number().min(1000).optional().describe("Command execution timeout in milliseconds"),
83
+ });
84
+ export const SudoSchema = z.object({
85
+ sessionId: z.string().min(1),
86
+ command: z.string().min(1),
87
+ cwd: z.string().optional(),
88
+ timeoutMs: z.number().min(1000).optional().describe("Command execution timeout in milliseconds"),
89
+ });
90
+ export const FSReadSchema = z.object({
91
+ sessionId: z.string().min(1),
92
+ path: z.string().min(1),
93
+ encoding: z.string().optional().default("utf8"),
94
+ maxBytes: z.number().int().min(1).optional(),
95
+ });
96
+ export const FSWriteSchema = z.object({
97
+ sessionId: z.string().min(1),
98
+ path: z.string().min(1),
99
+ data: z.string(),
100
+ mode: z.number().optional(),
101
+ });
102
+ export const FSStatSchema = z.object({
103
+ sessionId: z.string().min(1),
104
+ path: z.string().min(1),
105
+ });
106
+ export const FSListSchema = z.object({
107
+ sessionId: z.string().min(1),
108
+ path: z.string().min(1),
109
+ page: z.number().min(0).optional(),
110
+ limit: z.number().min(1).max(1000).optional().default(100),
111
+ });
112
+ export const FSPathSchema = z.object({
113
+ sessionId: z.string().min(1),
114
+ path: z.string().min(1),
115
+ });
116
+ export const FSRenameSchema = z.object({
117
+ sessionId: z.string().min(1),
118
+ from: z.string().min(1),
119
+ to: z.string().min(1),
120
+ });
121
+ export const EnsurePackageSchema = z.object({
122
+ sessionId: z.string().min(1),
123
+ name: z.string().min(1),
124
+ state: z.enum(["present", "absent"]).default("present"),
125
+ });
126
+ export const EnsureServiceSchema = z.object({
127
+ sessionId: z.string().min(1),
128
+ name: z.string().min(1),
129
+ state: z.enum(["started", "stopped", "restarted", "enabled", "disabled"]),
130
+ });
131
+ export const EnsureLinesSchema = z.object({
132
+ sessionId: z.string().min(1),
133
+ path: z.string().min(1),
134
+ lines: z.array(z.string()),
135
+ state: z.enum(["present", "absent"]).default("present"),
136
+ createIfMissing: z.boolean().optional().default(true),
137
+ });
138
+ export const PatchApplySchema = z.object({
139
+ sessionId: z.string().min(1),
140
+ path: z.string().min(1),
141
+ diff: z.string(),
142
+ });
143
+ export const HostAliasSchema = z.object({
144
+ hostAlias: z.string().min(1),
145
+ });
146
+ export const MetricsFormatSchema = z.object({
147
+ format: z.enum(["json", "prometheus"]).optional().default("json"),
148
+ });
149
+ export const ExecStreamSchema = z.object({
150
+ sessionId: z.string().min(1),
151
+ command: z.string().min(1),
152
+ cwd: z.string().optional(),
153
+ env: EnvMapSchema.optional(),
154
+ timeoutMs: z.number().min(1000).optional().describe("Streaming command timeout in milliseconds"),
155
+ });
156
+ export const FileUploadSchema = z.object({
157
+ sessionId: z.string().min(1),
158
+ localPath: z.string().min(1),
159
+ remotePath: z.string().min(1),
160
+ });
161
+ export const FileDownloadSchema = z.object({
162
+ sessionId: z.string().min(1),
163
+ remotePath: z.string().min(1),
164
+ localPath: z.string().min(1),
165
+ });
166
+ export const TunnelLocalForwardSchema = z.object({
167
+ sessionId: z.string().min(1),
168
+ localPort: z.number().int().min(1).max(65535),
169
+ remoteHost: z.string().min(1).default("localhost"),
170
+ remotePort: z.number().int().min(1).max(65535),
171
+ });
172
+ export const TunnelRemoteForwardSchema = z.object({
173
+ sessionId: z.string().min(1),
174
+ remotePort: z.number().int().min(1).max(65535),
175
+ localHost: z.string().min(1).default("localhost"),
176
+ localPort: z.number().int().min(1).max(65535),
177
+ });
178
+ export const TunnelCloseSchema = z.object({
179
+ tunnelId: z.string().min(1),
180
+ });
181
+ export const TunnelListSchema = z.object({
182
+ sessionId: z.string().min(1).optional(),
183
+ });
184
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/docs/docker.md ADDED
@@ -0,0 +1,22 @@
1
+ # Docker Usage
2
+
3
+ Build the local production image:
4
+
5
+ ```bash
6
+ docker build -t ssh-mcp-pro:local .
7
+ ```
8
+
9
+ Run CLI smoke checks:
10
+
11
+ ```bash
12
+ docker run --rm ssh-mcp-pro:local --version
13
+ docker run --rm ssh-mcp-pro:local --help
14
+ ```
15
+
16
+ Run the HTTP transport on loopback on Linux hosts that support host networking:
17
+
18
+ ```bash
19
+ docker run --rm --network host ssh-mcp-pro:local http --host 127.0.0.1 --port 3000
20
+ ```
21
+
22
+ For bridge or port-mapped containers, binding inside the container to `0.0.0.0` is a non-loopback HTTP deployment. Configure bearer or OAuth auth, allowed origins, `SSH_MCP_HTTP_PUBLIC_URL`, `SSH_MCP_ALLOWED_HOSTS`, strict host-key verification, and a remote-safe tool profile. The process refuses unsafe public bindings at startup.
@@ -0,0 +1,77 @@
1
+ # ssh-mcp-pro Examples
2
+
3
+ These examples are written for v2 secure defaults. Start with discovery, open one session per host, inspect capabilities, then prefer structured tools over raw shell commands.
4
+
5
+ ## Safe Connection
6
+
7
+ ```text
8
+ Use the safe-connect prompt. Connect to prod-1.example.com as deploy with hostKeyPolicy=strict, then list active sessions.
9
+ ```
10
+
11
+ For a lab host that is not in `known_hosts` yet:
12
+
13
+ ```text
14
+ Open a session to lab-router as admin with hostKeyPolicy=accept-new, then run os_detect.
15
+ ```
16
+
17
+ ## Explain Before Mutating
18
+
19
+ ```text
20
+ Open a session to web-1 as deploy with policyMode=explain. Plan how you would update /etc/nginx/nginx.conf to add gzip settings, including policy verdicts and rollback.
21
+ ```
22
+
23
+ ## Read And Inspect
24
+
25
+ ```text
26
+ Connect to web-1 as deploy, run os_detect, read ssh-mcp-pro://policy/effective, then show df -h and uptime.
27
+ ```
28
+
29
+ ## File Operations
30
+
31
+ ```text
32
+ Read /etc/nginx/nginx.conf with fs_read. If it is larger than the read limit, use file_download instead.
33
+ ```
34
+
35
+ ```text
36
+ List /var/log with fs_list, then read the newest nginx error log if it is within the configured file-size limit.
37
+ ```
38
+
39
+ ## Managed Configuration Change
40
+
41
+ ```text
42
+ Use the managed-config-change prompt for /etc/ssh/sshd_config. Read the file, propose a minimal unified diff, dry-run the patch, then apply only if policy allows it.
43
+ ```
44
+
45
+ ## Package And Service Management
46
+
47
+ Prefer idempotent tools:
48
+
49
+ ```text
50
+ Ensure htop is present on the host, then report whether anything changed.
51
+ ```
52
+
53
+ ```text
54
+ Ensure nginx is restarted only after checking policy and explaining the service impact.
55
+ ```
56
+
57
+ ## Transfers
58
+
59
+ ```text
60
+ Upload ./release.tar.gz to /tmp/release.tar.gz with file_upload and report the SHA-256 verification result.
61
+ ```
62
+
63
+ ```text
64
+ Download /var/log/app/app.log to ./app.log with file_download and confirm checksum verification.
65
+ ```
66
+
67
+ ## Tunnels
68
+
69
+ ```text
70
+ Create a local tunnel from localhost:15432 to remote database host db.internal:5432, list active tunnels, then close the tunnel when finished.
71
+ ```
72
+
73
+ ## BusyBox/dropbear Targets
74
+
75
+ ```text
76
+ Connect to my embedded host, inspect whether SFTP is available, then use fs_stat and fs_list on /tmp. If a helper is unsupported, explain the capability gap.
77
+ ```
package/mcp.json ADDED
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "ssh-mcp-pro",
3
+ "display_name": "ssh-mcp-pro",
4
+ "description": "Secure MCP SSH automation server with policy controls, resources, prompts, stdio, and HTTP.",
5
+ "version": "1.0.0",
6
+ "author": "Osman Aslan",
7
+ "license": "MIT",
8
+ "runtime": "node",
9
+ "entrypoint": "dist/index.js",
10
+ "transport": "stdio",
11
+ "platforms": [
12
+ "linux",
13
+ "macos",
14
+ "windows"
15
+ ],
16
+ "capabilities": {
17
+ "tools": true,
18
+ "resources": true,
19
+ "prompts": true
20
+ }
21
+ }