synapse-mcp 1.0.0 → 1.0.2

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 (413) hide show
  1. package/README.md +1820 -147
  2. package/dist/constants.d.ts +10 -4
  3. package/dist/constants.d.ts.map +1 -1
  4. package/dist/constants.js +18 -8
  5. package/dist/constants.js.map +1 -1
  6. package/dist/events/emitter.d.ts +63 -0
  7. package/dist/events/emitter.d.ts.map +1 -0
  8. package/dist/events/emitter.js +112 -0
  9. package/dist/events/emitter.js.map +1 -0
  10. package/dist/events/index.d.ts +3 -0
  11. package/dist/events/index.d.ts.map +1 -0
  12. package/dist/events/index.js +3 -0
  13. package/dist/events/index.js.map +1 -0
  14. package/dist/events/types.d.ts +51 -0
  15. package/dist/events/types.d.ts.map +1 -0
  16. package/dist/events/types.js +3 -0
  17. package/dist/events/types.js.map +1 -0
  18. package/dist/formatters/compose.d.ts +185 -0
  19. package/dist/formatters/compose.d.ts.map +1 -0
  20. package/dist/formatters/compose.js +397 -0
  21. package/dist/formatters/compose.js.map +1 -0
  22. package/dist/formatters/container.d.ts +84 -0
  23. package/dist/formatters/container.d.ts.map +1 -0
  24. package/dist/formatters/container.js +323 -0
  25. package/dist/formatters/container.js.map +1 -0
  26. package/dist/formatters/diagnostics.d.ts +20 -0
  27. package/dist/formatters/diagnostics.d.ts.map +1 -0
  28. package/dist/formatters/diagnostics.js +73 -0
  29. package/dist/formatters/diagnostics.js.map +1 -0
  30. package/dist/formatters/docker.d.ts +139 -0
  31. package/dist/formatters/docker.d.ts.map +1 -0
  32. package/dist/formatters/docker.js +216 -0
  33. package/dist/formatters/docker.js.map +1 -0
  34. package/dist/formatters/host.d.ts +137 -0
  35. package/dist/formatters/host.d.ts.map +1 -0
  36. package/dist/formatters/host.js +198 -0
  37. package/dist/formatters/host.js.map +1 -0
  38. package/dist/formatters/index.d.ts +17 -270
  39. package/dist/formatters/index.d.ts.map +1 -1
  40. package/dist/formatters/index.js +21 -456
  41. package/dist/formatters/index.js.map +1 -1
  42. package/dist/formatters/scout.d.ts +424 -0
  43. package/dist/formatters/scout.d.ts.map +1 -0
  44. package/dist/formatters/scout.js +687 -0
  45. package/dist/formatters/scout.js.map +1 -0
  46. package/dist/formatters/strategy.d.ts +105 -0
  47. package/dist/formatters/strategy.d.ts.map +1 -0
  48. package/dist/formatters/strategy.js +120 -0
  49. package/dist/formatters/strategy.js.map +1 -0
  50. package/dist/formatters/utils.d.ts +84 -0
  51. package/dist/formatters/utils.d.ts.map +1 -0
  52. package/dist/formatters/utils.js +129 -0
  53. package/dist/formatters/utils.js.map +1 -0
  54. package/dist/health-rate-limiter.d.ts +59 -0
  55. package/dist/health-rate-limiter.d.ts.map +1 -0
  56. package/dist/health-rate-limiter.js +159 -0
  57. package/dist/health-rate-limiter.js.map +1 -0
  58. package/dist/index.js +61 -100
  59. package/dist/index.js.map +1 -1
  60. package/dist/middleware/async-handler.d.ts +62 -0
  61. package/dist/middleware/async-handler.d.ts.map +1 -0
  62. package/dist/middleware/async-handler.js +58 -0
  63. package/dist/middleware/async-handler.js.map +1 -0
  64. package/dist/middleware/auth.d.ts +32 -0
  65. package/dist/middleware/auth.d.ts.map +1 -0
  66. package/dist/middleware/auth.js +63 -0
  67. package/dist/middleware/auth.js.map +1 -0
  68. package/dist/middleware/csrf-protection.d.ts +58 -0
  69. package/dist/middleware/csrf-protection.d.ts.map +1 -0
  70. package/dist/middleware/csrf-protection.js +123 -0
  71. package/dist/middleware/csrf-protection.js.map +1 -0
  72. package/dist/middleware/error-handler.d.ts +49 -0
  73. package/dist/middleware/error-handler.d.ts.map +1 -0
  74. package/dist/middleware/error-handler.js +90 -0
  75. package/dist/middleware/error-handler.js.map +1 -0
  76. package/dist/middleware/error-mapper.d.ts +44 -0
  77. package/dist/middleware/error-mapper.d.ts.map +1 -0
  78. package/dist/middleware/error-mapper.js +127 -0
  79. package/dist/middleware/error-mapper.js.map +1 -0
  80. package/dist/middleware/index.d.ts +13 -0
  81. package/dist/middleware/index.d.ts.map +1 -0
  82. package/dist/middleware/index.js +13 -0
  83. package/dist/middleware/index.js.map +1 -0
  84. package/dist/middleware/request-id.d.ts +22 -0
  85. package/dist/middleware/request-id.d.ts.map +1 -0
  86. package/dist/middleware/request-id.js +31 -0
  87. package/dist/middleware/request-id.js.map +1 -0
  88. package/dist/middleware/types.d.ts +33 -0
  89. package/dist/middleware/types.d.ts.map +1 -0
  90. package/dist/middleware/types.js +2 -0
  91. package/dist/middleware/types.js.map +1 -0
  92. package/dist/schemas/common.d.ts +205 -8
  93. package/dist/schemas/common.d.ts.map +1 -1
  94. package/dist/schemas/common.js +290 -17
  95. package/dist/schemas/common.js.map +1 -1
  96. package/dist/schemas/flux/compose.d.ts +307 -44
  97. package/dist/schemas/flux/compose.d.ts.map +1 -1
  98. package/dist/schemas/flux/compose.js +74 -48
  99. package/dist/schemas/flux/compose.js.map +1 -1
  100. package/dist/schemas/flux/container.d.ts +423 -56
  101. package/dist/schemas/flux/container.d.ts.map +1 -1
  102. package/dist/schemas/flux/container.js +83 -61
  103. package/dist/schemas/flux/container.js.map +1 -1
  104. package/dist/schemas/flux/docker.d.ts +254 -37
  105. package/dist/schemas/flux/docker.d.ts.map +1 -1
  106. package/dist/schemas/flux/docker.js +69 -39
  107. package/dist/schemas/flux/docker.js.map +1 -1
  108. package/dist/schemas/flux/host.d.ts +312 -29
  109. package/dist/schemas/flux/host.d.ts.map +1 -1
  110. package/dist/schemas/flux/host.js +74 -31
  111. package/dist/schemas/flux/host.js.map +1 -1
  112. package/dist/schemas/flux/index.d.ts +503 -11
  113. package/dist/schemas/flux/index.d.ts.map +1 -1
  114. package/dist/schemas/flux/index.js +34 -70
  115. package/dist/schemas/flux/index.js.map +1 -1
  116. package/dist/schemas/host-config.d.ts +76 -0
  117. package/dist/schemas/host-config.d.ts.map +1 -0
  118. package/dist/schemas/host-config.js +105 -0
  119. package/dist/schemas/host-config.js.map +1 -0
  120. package/dist/schemas/scout/index.d.ts +80 -23
  121. package/dist/schemas/scout/index.d.ts.map +1 -1
  122. package/dist/schemas/scout/index.js +26 -11
  123. package/dist/schemas/scout/index.js.map +1 -1
  124. package/dist/schemas/scout/logs.d.ts +17 -5
  125. package/dist/schemas/scout/logs.d.ts.map +1 -1
  126. package/dist/schemas/scout/logs.js +41 -31
  127. package/dist/schemas/scout/logs.js.map +1 -1
  128. package/dist/schemas/scout/simple.d.ts +126 -11
  129. package/dist/schemas/scout/simple.d.ts.map +1 -1
  130. package/dist/schemas/scout/simple.js +112 -57
  131. package/dist/schemas/scout/simple.js.map +1 -1
  132. package/dist/schemas/scout/zfs.d.ts +17 -5
  133. package/dist/schemas/scout/zfs.d.ts.map +1 -1
  134. package/dist/schemas/scout/zfs.js +34 -25
  135. package/dist/schemas/scout/zfs.js.map +1 -1
  136. package/dist/services/cache-layer.d.ts +160 -0
  137. package/dist/services/cache-layer.d.ts.map +1 -0
  138. package/dist/services/cache-layer.js +138 -0
  139. package/dist/services/cache-layer.js.map +1 -0
  140. package/dist/services/compose-cache.d.ts +75 -0
  141. package/dist/services/compose-cache.d.ts.map +1 -0
  142. package/dist/services/compose-cache.js +178 -0
  143. package/dist/services/compose-cache.js.map +1 -0
  144. package/dist/services/compose-discovery.d.ts +46 -0
  145. package/dist/services/compose-discovery.d.ts.map +1 -0
  146. package/dist/services/compose-discovery.js +219 -0
  147. package/dist/services/compose-discovery.js.map +1 -0
  148. package/dist/services/compose-project-lister.d.ts +27 -0
  149. package/dist/services/compose-project-lister.d.ts.map +1 -0
  150. package/dist/services/compose-project-lister.js +71 -0
  151. package/dist/services/compose-project-lister.js.map +1 -0
  152. package/dist/services/compose-scanner.d.ts +63 -0
  153. package/dist/services/compose-scanner.d.ts.map +1 -0
  154. package/dist/services/compose-scanner.js +253 -0
  155. package/dist/services/compose-scanner.js.map +1 -0
  156. package/dist/services/compose.d.ts +64 -28
  157. package/dist/services/compose.d.ts.map +1 -1
  158. package/dist/services/compose.js +220 -98
  159. package/dist/services/compose.js.map +1 -1
  160. package/dist/services/config-loader.d.ts +23 -0
  161. package/dist/services/config-loader.d.ts.map +1 -0
  162. package/dist/services/config-loader.js +124 -0
  163. package/dist/services/config-loader.js.map +1 -0
  164. package/dist/services/config-service.d.ts +38 -0
  165. package/dist/services/config-service.d.ts.map +1 -0
  166. package/dist/services/config-service.js +225 -0
  167. package/dist/services/config-service.js.map +1 -0
  168. package/dist/services/container-host-map-cache.d.ts +121 -0
  169. package/dist/services/container-host-map-cache.d.ts.map +1 -0
  170. package/dist/services/container-host-map-cache.js +188 -0
  171. package/dist/services/container-host-map-cache.js.map +1 -0
  172. package/dist/services/container.d.ts +194 -6
  173. package/dist/services/container.d.ts.map +1 -1
  174. package/dist/services/container.js +386 -11
  175. package/dist/services/container.js.map +1 -1
  176. package/dist/services/diagnostics.d.ts +57 -0
  177. package/dist/services/diagnostics.d.ts.map +1 -0
  178. package/dist/services/diagnostics.js +271 -0
  179. package/dist/services/diagnostics.js.map +1 -0
  180. package/dist/services/docker/container-service.d.ts +123 -0
  181. package/dist/services/docker/container-service.d.ts.map +1 -0
  182. package/dist/services/docker/container-service.js +347 -0
  183. package/dist/services/docker/container-service.js.map +1 -0
  184. package/dist/services/docker/image-service.d.ts +82 -0
  185. package/dist/services/docker/image-service.d.ts.map +1 -0
  186. package/dist/services/docker/image-service.js +193 -0
  187. package/dist/services/docker/image-service.js.map +1 -0
  188. package/dist/services/docker/index.d.ts +80 -0
  189. package/dist/services/docker/index.d.ts.map +1 -0
  190. package/dist/services/docker/index.js +103 -0
  191. package/dist/services/docker/index.js.map +1 -0
  192. package/dist/services/docker/network-service.d.ts +22 -0
  193. package/dist/services/docker/network-service.d.ts.map +1 -0
  194. package/dist/services/docker/network-service.js +43 -0
  195. package/dist/services/docker/network-service.js.map +1 -0
  196. package/dist/services/docker/system-service.d.ts +49 -0
  197. package/dist/services/docker/system-service.d.ts.map +1 -0
  198. package/dist/services/docker/system-service.js +215 -0
  199. package/dist/services/docker/system-service.js.map +1 -0
  200. package/dist/services/docker/utils/client-factory.d.ts +56 -0
  201. package/dist/services/docker/utils/client-factory.d.ts.map +1 -0
  202. package/dist/services/docker/utils/client-factory.js +139 -0
  203. package/dist/services/docker/utils/client-factory.js.map +1 -0
  204. package/dist/services/docker/utils/client-manager.d.ts +88 -0
  205. package/dist/services/docker/utils/client-manager.d.ts.map +1 -0
  206. package/dist/services/docker/utils/client-manager.js +124 -0
  207. package/dist/services/docker/utils/client-manager.js.map +1 -0
  208. package/dist/services/docker/utils/exec-handler.d.ts +94 -0
  209. package/dist/services/docker/utils/exec-handler.d.ts.map +1 -0
  210. package/dist/services/docker/utils/exec-handler.js +197 -0
  211. package/dist/services/docker/utils/exec-handler.js.map +1 -0
  212. package/dist/services/docker/utils/formatters.d.ts +13 -0
  213. package/dist/services/docker/utils/formatters.d.ts.map +1 -0
  214. package/dist/services/docker/utils/formatters.js +33 -0
  215. package/dist/services/docker/utils/formatters.js.map +1 -0
  216. package/dist/services/docker/utils/log-parser.d.ts +10 -0
  217. package/dist/services/docker/utils/log-parser.d.ts.map +1 -0
  218. package/dist/services/docker/utils/log-parser.js +48 -0
  219. package/dist/services/docker/utils/log-parser.js.map +1 -0
  220. package/dist/services/docker/utils/stats-calculator.d.ts +68 -0
  221. package/dist/services/docker/utils/stats-calculator.d.ts.map +1 -0
  222. package/dist/services/docker/utils/stats-calculator.js +61 -0
  223. package/dist/services/docker/utils/stats-calculator.js.map +1 -0
  224. package/dist/services/docker/volume-service.d.ts +22 -0
  225. package/dist/services/docker/volume-service.d.ts.map +1 -0
  226. package/dist/services/docker/volume-service.js +48 -0
  227. package/dist/services/docker/volume-service.js.map +1 -0
  228. package/dist/services/docker-interfaces.d.ts +283 -0
  229. package/dist/services/docker-interfaces.d.ts.map +1 -0
  230. package/dist/services/docker-interfaces.js +13 -0
  231. package/dist/services/docker-interfaces.js.map +1 -0
  232. package/dist/services/docker.d.ts +42 -5
  233. package/dist/services/docker.d.ts.map +1 -1
  234. package/dist/services/docker.js +335 -127
  235. package/dist/services/docker.js.map +1 -1
  236. package/dist/services/file-service.d.ts +6 -2
  237. package/dist/services/file-service.d.ts.map +1 -1
  238. package/dist/services/file-service.js +156 -52
  239. package/dist/services/file-service.js.map +1 -1
  240. package/dist/services/host-config-repository.d.ts +133 -0
  241. package/dist/services/host-config-repository.d.ts.map +1 -0
  242. package/dist/services/host-config-repository.js +323 -0
  243. package/dist/services/host-config-repository.js.map +1 -0
  244. package/dist/services/host-resolver.d.ts +49 -0
  245. package/dist/services/host-resolver.d.ts.map +1 -0
  246. package/dist/services/host-resolver.js +176 -0
  247. package/dist/services/host-resolver.js.map +1 -0
  248. package/dist/services/interfaces.d.ts +61 -194
  249. package/dist/services/interfaces.d.ts.map +1 -1
  250. package/dist/services/local-executor.d.ts +31 -0
  251. package/dist/services/local-executor.d.ts.map +1 -0
  252. package/dist/services/local-executor.js +71 -0
  253. package/dist/services/local-executor.js.map +1 -0
  254. package/dist/services/ssh-config-loader.d.ts +35 -0
  255. package/dist/services/ssh-config-loader.d.ts.map +1 -0
  256. package/dist/services/ssh-config-loader.js +218 -0
  257. package/dist/services/ssh-config-loader.js.map +1 -0
  258. package/dist/services/ssh-pool.d.ts +26 -1
  259. package/dist/services/ssh-pool.d.ts.map +1 -1
  260. package/dist/services/ssh-pool.js +166 -25
  261. package/dist/services/ssh-pool.js.map +1 -1
  262. package/dist/services/ssh-service.d.ts +3 -0
  263. package/dist/services/ssh-service.d.ts.map +1 -1
  264. package/dist/services/ssh-service.js +53 -31
  265. package/dist/services/ssh-service.js.map +1 -1
  266. package/dist/services/ssh.d.ts +2 -6
  267. package/dist/services/ssh.d.ts.map +1 -1
  268. package/dist/services/ssh.js +9 -40
  269. package/dist/services/ssh.js.map +1 -1
  270. package/dist/tools/definitions/flux.d.ts +13 -0
  271. package/dist/tools/definitions/flux.d.ts.map +1 -0
  272. package/dist/tools/definitions/flux.js +101 -0
  273. package/dist/tools/definitions/flux.js.map +1 -0
  274. package/dist/tools/definitions/index.d.ts +8 -0
  275. package/dist/tools/definitions/index.d.ts.map +1 -0
  276. package/dist/tools/definitions/index.js +8 -0
  277. package/dist/tools/definitions/index.js.map +1 -0
  278. package/dist/tools/definitions/scout.d.ts +13 -0
  279. package/dist/tools/definitions/scout.d.ts.map +1 -0
  280. package/dist/tools/definitions/scout.js +78 -0
  281. package/dist/tools/definitions/scout.js.map +1 -0
  282. package/dist/tools/flux.d.ts +16 -8
  283. package/dist/tools/flux.d.ts.map +1 -1
  284. package/dist/tools/flux.js +27 -66
  285. package/dist/tools/flux.js.map +1 -1
  286. package/dist/tools/handlers/base-handler.d.ts +172 -0
  287. package/dist/tools/handlers/base-handler.d.ts.map +1 -0
  288. package/dist/tools/handlers/base-handler.js +234 -0
  289. package/dist/tools/handlers/base-handler.js.map +1 -0
  290. package/dist/tools/handlers/compose-handlers.d.ts +108 -0
  291. package/dist/tools/handlers/compose-handlers.d.ts.map +1 -0
  292. package/dist/tools/handlers/compose-handlers.js +293 -0
  293. package/dist/tools/handlers/compose-handlers.js.map +1 -0
  294. package/dist/tools/handlers/compose-utils.d.ts +35 -0
  295. package/dist/tools/handlers/compose-utils.d.ts.map +1 -0
  296. package/dist/tools/handlers/compose-utils.js +76 -0
  297. package/dist/tools/handlers/compose-utils.js.map +1 -0
  298. package/dist/tools/handlers/compose.d.ts +23 -0
  299. package/dist/tools/handlers/compose.d.ts.map +1 -0
  300. package/dist/tools/handlers/compose.js +125 -0
  301. package/dist/tools/handlers/compose.js.map +1 -0
  302. package/dist/tools/handlers/container.d.ts +23 -0
  303. package/dist/tools/handlers/container.d.ts.map +1 -0
  304. package/dist/tools/handlers/container.js +333 -0
  305. package/dist/tools/handlers/container.js.map +1 -0
  306. package/dist/tools/handlers/docker.d.ts +24 -0
  307. package/dist/tools/handlers/docker.d.ts.map +1 -0
  308. package/dist/tools/handlers/docker.js +155 -0
  309. package/dist/tools/handlers/docker.js.map +1 -0
  310. package/dist/tools/handlers/host.d.ts +23 -0
  311. package/dist/tools/handlers/host.d.ts.map +1 -0
  312. package/dist/tools/handlers/host.js +196 -0
  313. package/dist/tools/handlers/host.js.map +1 -0
  314. package/dist/tools/handlers/scout-logs.d.ts +24 -0
  315. package/dist/tools/handlers/scout-logs.d.ts.map +1 -0
  316. package/dist/tools/handlers/scout-logs.js +119 -0
  317. package/dist/tools/handlers/scout-logs.js.map +1 -0
  318. package/dist/tools/handlers/scout-simple.d.ts +23 -0
  319. package/dist/tools/handlers/scout-simple.d.ts.map +1 -0
  320. package/dist/tools/handlers/scout-simple.js +286 -0
  321. package/dist/tools/handlers/scout-simple.js.map +1 -0
  322. package/dist/tools/handlers/scout-zfs.d.ts +23 -0
  323. package/dist/tools/handlers/scout-zfs.d.ts.map +1 -0
  324. package/dist/tools/handlers/scout-zfs.js +82 -0
  325. package/dist/tools/handlers/scout-zfs.js.map +1 -0
  326. package/dist/tools/index.d.ts +32 -2
  327. package/dist/tools/index.d.ts.map +1 -1
  328. package/dist/tools/index.js +41 -35
  329. package/dist/tools/index.js.map +1 -1
  330. package/dist/tools/registry.d.ts +135 -0
  331. package/dist/tools/registry.d.ts.map +1 -0
  332. package/dist/tools/registry.js +151 -0
  333. package/dist/tools/registry.js.map +1 -0
  334. package/dist/tools/scout.d.ts +16 -8
  335. package/dist/tools/scout.d.ts.map +1 -1
  336. package/dist/tools/scout.js +36 -78
  337. package/dist/tools/scout.js.map +1 -1
  338. package/dist/types.d.ts +629 -1
  339. package/dist/types.d.ts.map +1 -1
  340. package/dist/types.js.map +1 -1
  341. package/dist/utils/command-security.d.ts +82 -0
  342. package/dist/utils/command-security.d.ts.map +1 -0
  343. package/dist/utils/command-security.js +122 -0
  344. package/dist/utils/command-security.js.map +1 -0
  345. package/dist/utils/error-sanitization.d.ts +77 -0
  346. package/dist/utils/error-sanitization.d.ts.map +1 -0
  347. package/dist/utils/error-sanitization.js +107 -0
  348. package/dist/utils/error-sanitization.js.map +1 -0
  349. package/dist/utils/errors.d.ts +30 -6
  350. package/dist/utils/errors.d.ts.map +1 -1
  351. package/dist/utils/errors.js +91 -12
  352. package/dist/utils/errors.js.map +1 -1
  353. package/dist/utils/help-handler.d.ts +23 -0
  354. package/dist/utils/help-handler.d.ts.map +1 -0
  355. package/dist/utils/help-handler.js +21 -0
  356. package/dist/utils/help-handler.js.map +1 -0
  357. package/dist/utils/help.d.ts +1 -1
  358. package/dist/utils/help.d.ts.map +1 -1
  359. package/dist/utils/help.js +57 -16
  360. package/dist/utils/help.js.map +1 -1
  361. package/dist/utils/host-utils.d.ts +31 -0
  362. package/dist/utils/host-utils.d.ts.map +1 -0
  363. package/dist/utils/host-utils.js +80 -0
  364. package/dist/utils/host-utils.js.map +1 -0
  365. package/dist/utils/index.d.ts +8 -2
  366. package/dist/utils/index.d.ts.map +1 -1
  367. package/dist/utils/index.js +8 -2
  368. package/dist/utils/index.js.map +1 -1
  369. package/dist/utils/init-detection.d.ts +36 -0
  370. package/dist/utils/init-detection.d.ts.map +1 -0
  371. package/dist/utils/init-detection.js +79 -0
  372. package/dist/utils/init-detection.js.map +1 -0
  373. package/dist/utils/logger.d.ts +11 -0
  374. package/dist/utils/logger.d.ts.map +1 -0
  375. package/dist/utils/logger.js +32 -0
  376. package/dist/utils/logger.js.map +1 -0
  377. package/dist/utils/pagination.d.ts +20 -0
  378. package/dist/utils/pagination.d.ts.map +1 -0
  379. package/dist/utils/pagination.js +29 -0
  380. package/dist/utils/pagination.js.map +1 -0
  381. package/dist/utils/path-security.d.ts +132 -18
  382. package/dist/utils/path-security.d.ts.map +1 -1
  383. package/dist/utils/path-security.js +164 -35
  384. package/dist/utils/path-security.js.map +1 -1
  385. package/dist/utils/sorting.d.ts +33 -0
  386. package/dist/utils/sorting.d.ts.map +1 -0
  387. package/dist/utils/sorting.js +57 -0
  388. package/dist/utils/sorting.js.map +1 -0
  389. package/dist/utils/text-filters.d.ts +13 -0
  390. package/dist/utils/text-filters.d.ts.map +1 -0
  391. package/dist/utils/text-filters.js +18 -0
  392. package/dist/utils/text-filters.js.map +1 -0
  393. package/dist/utils/time.d.ts +11 -0
  394. package/dist/utils/time.d.ts.map +1 -0
  395. package/dist/utils/time.js +13 -0
  396. package/dist/utils/time.js.map +1 -0
  397. package/dist/utils/validation.d.ts +25 -0
  398. package/dist/utils/validation.d.ts.map +1 -0
  399. package/dist/utils/validation.js +56 -0
  400. package/dist/utils/validation.js.map +1 -0
  401. package/package.json +45 -19
  402. package/dist/schemas/discriminator.d.ts +0 -20
  403. package/dist/schemas/discriminator.d.ts.map +0 -1
  404. package/dist/schemas/discriminator.js +0 -25
  405. package/dist/schemas/discriminator.js.map +0 -1
  406. package/dist/schemas/unified.d.ts +0 -674
  407. package/dist/schemas/unified.d.ts.map +0 -1
  408. package/dist/schemas/unified.js +0 -453
  409. package/dist/schemas/unified.js.map +0 -1
  410. package/dist/tools/unified.d.ts +0 -7
  411. package/dist/tools/unified.d.ts.map +0 -1
  412. package/dist/tools/unified.js +0 -827
  413. package/dist/tools/unified.js.map +0 -1
@@ -0,0 +1,286 @@
1
+ import { DEFAULT_COMMAND_TIMEOUT, DEFAULT_MAX_FILE_SIZE } from "../../constants.js";
2
+ import { scoutSimpleUnionSchema } from "../../schemas/scout/simple.js";
3
+ import { escapeShellArg } from "../../utils/path-security.js";
4
+ import { createExhaustiveError, formatResponse, getHostConfigOrThrow, initializeHandler, validateInput, } from "./base-handler.js";
5
+ /**
6
+ * Valid sort options for 'ps' command.
7
+ * SECURITY NOTE: These values are passed directly to `ps --sort -${sort}`.
8
+ * The Zod schema (scoutPsSchema) validates against z.enum(['cpu', 'mem', 'pid', 'time']),
9
+ * but we maintain this const array as defense-in-depth in case the enum is extended
10
+ * with values that could be interpreted differently by the shell or ps command.
11
+ * Any new sort options MUST be alphanumeric and safe for shell arguments.
12
+ */
13
+ const VALID_PS_SORTS = ["cpu", "mem", "pid", "time"];
14
+ /**
15
+ * Parse target string in format 'hostname:/path'.
16
+ *
17
+ * @param target - Target string to parse
18
+ * @returns Object with host and path components
19
+ * @throws {Error} When target format is invalid
20
+ */
21
+ function parseTarget(target) {
22
+ const colonIndex = target.indexOf(":");
23
+ if (colonIndex === -1) {
24
+ throw new Error(`Invalid target format: ${target}. Expected hostname:/path`);
25
+ }
26
+ return {
27
+ host: target.slice(0, colonIndex),
28
+ path: target.slice(colonIndex + 1),
29
+ };
30
+ }
31
+ /**
32
+ * Handle all Scout simple actions for SSH file and process operations.
33
+ *
34
+ * Supports 9 actions: nodes, peek, exec, find, delta, emit, beam, ps, df.
35
+ * These actions operate directly without subactions.
36
+ *
37
+ * @param input - Validated Scout input with simple action
38
+ * @param container - Service container with SSH and file services
39
+ * @returns Formatted response string (markdown or JSON)
40
+ * @throws {Error} When host not found, target invalid, or operation fails
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * const result = await handleScoutSimpleAction(
45
+ * { action: 'peek', target: 'host1:/etc/hosts' },
46
+ * container
47
+ * );
48
+ * ```
49
+ */
50
+ export async function handleScoutSimpleAction(input, container) {
51
+ // Validate at handler boundary
52
+ const validated = validateInput(input, scoutSimpleUnionSchema, "scout-simple");
53
+ const { hosts, format } = await initializeHandler(validated, container, (c) => c.getSSHService());
54
+ const sshService = container.getSSHService();
55
+ const fileService = container.getFileService();
56
+ // Use shared utility for host lookup
57
+ const findHost = (name) => getHostConfigOrThrow(hosts, name);
58
+ switch (validated.action) {
59
+ case "nodes": {
60
+ // List all configured SSH hosts
61
+ const hostList = hosts.map((h) => ({
62
+ name: h.name,
63
+ host: h.host,
64
+ protocol: h.protocol,
65
+ port: h.port,
66
+ }));
67
+ return formatResponse(hostList, format, (data) => {
68
+ const lines = ["## Configured Hosts", ""];
69
+ for (const h of data) {
70
+ lines.push(`- **${h.name}**: ${h.host} (${h.protocol}:${h.port})`);
71
+ }
72
+ return lines.join("\n");
73
+ });
74
+ }
75
+ case "peek": {
76
+ const { host: hostName, path } = parseTarget(validated.target);
77
+ const hostConfig = findHost(hostName);
78
+ if (validated.tree) {
79
+ // Show directory tree
80
+ const treeOutput = await fileService.treeDirectory(hostConfig, path, validated.depth ?? 3);
81
+ return formatResponse({ host: hostName, path, tree: treeOutput }, format, (data) => `## Tree - ${data.host}:${data.path}\n\n\`\`\`\n${data.tree}\n\`\`\``);
82
+ }
83
+ // Try reading as file first
84
+ try {
85
+ const result = await fileService.readFile(hostConfig, path, DEFAULT_MAX_FILE_SIZE);
86
+ const fileData = {
87
+ host: hostName,
88
+ path,
89
+ content: result.content,
90
+ size: result.size,
91
+ truncated: result.truncated,
92
+ };
93
+ return formatResponse(fileData, format, (data) => {
94
+ const truncNote = data.truncated ? `\n\n*Truncated (showing ${data.size} bytes)*` : "";
95
+ return `## ${data.host}:${data.path}\n\n\`\`\`\n${data.content}\n\`\`\`${truncNote}`;
96
+ });
97
+ }
98
+ catch (err) {
99
+ // If file read fails, try listing as directory
100
+ if (err instanceof Error && err.message.toLowerCase().includes("directory")) {
101
+ const listing = await fileService.listDirectory(hostConfig, path, false);
102
+ return formatResponse({ host: hostName, path, listing }, format, (data) => `## Directory - ${data.host}:${data.path}\n\n\`\`\`\n${data.listing}\n\`\`\``);
103
+ }
104
+ throw err;
105
+ }
106
+ }
107
+ case "exec": {
108
+ const { host: hostName, path } = parseTarget(validated.target);
109
+ const hostConfig = findHost(hostName);
110
+ const result = await fileService.executeCommand(hostConfig, path, validated.command, validated.timeout);
111
+ const execData = {
112
+ host: hostName,
113
+ path,
114
+ command: validated.command,
115
+ stdout: result.stdout,
116
+ exitCode: result.exitCode,
117
+ };
118
+ return formatResponse(execData, format, (data) => {
119
+ const exitNote = data.exitCode !== 0 ? `\n\n*Exit code: ${data.exitCode}*` : "";
120
+ return `## Command Output - ${data.host}:${data.path}\n\n\`\`\`\n${data.stdout}\n\`\`\`${exitNote}`;
121
+ });
122
+ }
123
+ case "find": {
124
+ const { host: hostName, path } = parseTarget(validated.target);
125
+ const hostConfig = findHost(hostName);
126
+ const results = await fileService.findFiles(hostConfig, path, validated.pattern, {
127
+ maxDepth: validated.depth,
128
+ limit: validated.limit,
129
+ });
130
+ const files = results.trim().split("\n").filter(Boolean);
131
+ const findData = { host: hostName, path, pattern: validated.pattern, files };
132
+ return formatResponse(findData, format, (data) => `## Find Results - ${data.host}:${data.path}\n\nPattern: \`${data.pattern}\`\n\n\`\`\`\n${results}\n\`\`\``);
133
+ }
134
+ case "delta": {
135
+ // Source is always a remote file
136
+ const { host: sourceHostName, path: sourcePath } = parseTarget(validated.source);
137
+ const sourceHost = findHost(sourceHostName);
138
+ if (validated.content !== undefined) {
139
+ // Compare file against provided content
140
+ const fileResult = await fileService.readFile(sourceHost, sourcePath, DEFAULT_MAX_FILE_SIZE);
141
+ if (fileResult.content === validated.content) {
142
+ return formatResponse({ identical: true, source: validated.source }, format, () => "Files are identical");
143
+ }
144
+ return formatResponse({
145
+ identical: false,
146
+ source: validated.source,
147
+ sourceContent: fileResult.content,
148
+ providedContent: validated.content,
149
+ }, format, (data) => `## File Comparison\n\nFiles differ between ${data.source} and provided content`);
150
+ }
151
+ if (validated.target) {
152
+ // Compare two remote files
153
+ const { host: targetHostName, path: targetPath } = parseTarget(validated.target);
154
+ const targetHost = findHost(targetHostName);
155
+ const diff = await fileService.diffFiles(sourceHost, sourcePath, targetHost, targetPath, 3);
156
+ const diffData = {
157
+ source: validated.source,
158
+ target: validated.target,
159
+ diff,
160
+ };
161
+ return formatResponse(diffData, format, (data) => {
162
+ if (!data.diff || data.diff.trim() === "") {
163
+ return "Files are identical";
164
+ }
165
+ return `## Diff\n\n\`\`\`diff\n${data.diff}\n\`\`\``;
166
+ });
167
+ }
168
+ throw new Error("delta requires either target or content parameter");
169
+ }
170
+ case "emit": {
171
+ if (!validated.command) {
172
+ throw new Error("emit requires a command parameter");
173
+ }
174
+ const command = validated.command;
175
+ const timeout = validated.timeout ?? DEFAULT_COMMAND_TIMEOUT;
176
+ // Execute command on all targets in parallel
177
+ const results = await Promise.all(validated.targets.map(async (target) => {
178
+ const { host: hostName, path } = parseTarget(target);
179
+ const hostConfig = findHost(hostName);
180
+ try {
181
+ const result = await fileService.executeCommand(hostConfig, path, command, timeout);
182
+ return {
183
+ host: hostName,
184
+ path,
185
+ stdout: result.stdout,
186
+ exitCode: result.exitCode,
187
+ error: undefined,
188
+ };
189
+ }
190
+ catch (err) {
191
+ return {
192
+ host: hostName,
193
+ path,
194
+ stdout: "",
195
+ exitCode: -1,
196
+ error: err instanceof Error ? err.message : "Unknown error",
197
+ };
198
+ }
199
+ }));
200
+ return formatResponse(results, format, (data) => {
201
+ const lines = [
202
+ "## Multi-Host Command Results",
203
+ "",
204
+ `Command: \`${validated.command}\``,
205
+ "",
206
+ ];
207
+ for (const r of data) {
208
+ lines.push(`### ${r.host}:${r.path}`);
209
+ if (r.error) {
210
+ lines.push(`\n**Error:** ${r.error}\n`);
211
+ }
212
+ else {
213
+ lines.push(`\n\`\`\`\n${r.stdout}\n\`\`\`\n`);
214
+ if (r.exitCode !== 0) {
215
+ lines.push(`*Exit code: ${r.exitCode}*\n`);
216
+ }
217
+ }
218
+ }
219
+ return lines.join("\n");
220
+ });
221
+ }
222
+ case "beam": {
223
+ const { host: sourceHostName, path: sourcePath } = parseTarget(validated.source);
224
+ const { host: destHostName, path: destPath } = parseTarget(validated.destination);
225
+ const sourceHost = findHost(sourceHostName);
226
+ const destHost = findHost(destHostName);
227
+ const result = await fileService.transferFile(sourceHost, sourcePath, destHost, destPath);
228
+ const beamData = {
229
+ source: validated.source,
230
+ destination: validated.destination,
231
+ bytesTransferred: result.bytesTransferred,
232
+ warning: result.warning,
233
+ };
234
+ return formatResponse(beamData, format, (data) => {
235
+ const warningNote = data.warning ? `\n\n**Warning:** ${data.warning}` : "";
236
+ return `## File Transfer Complete\n\n- **From:** ${data.source}\n- **To:** ${data.destination}\n- **Bytes:** ${data.bytesTransferred}${warningNote}`;
237
+ });
238
+ }
239
+ case "ps": {
240
+ const hostConfig = findHost(validated.host);
241
+ // Build ps command with options
242
+ // SECURITY: Defense-in-depth validation - sort is already validated by Zod enum in scoutPsSchema,
243
+ // but we verify here to guard against schema changes that might introduce unsafe values.
244
+ const sortValue = validated.sort || "cpu";
245
+ if (!VALID_PS_SORTS.includes(sortValue)) {
246
+ throw new Error(`Invalid sort option: ${sortValue}. Must be one of: ${VALID_PS_SORTS.join(", ")}`);
247
+ }
248
+ const args = ["aux", "--sort", `-${sortValue}`];
249
+ let output = await sshService.executeSSHCommand(hostConfig, "ps", args);
250
+ // Apply filters
251
+ const grepFilter = validated.grep;
252
+ const userFilter = validated.user;
253
+ const lines = output.split("\n");
254
+ const header = lines[0] || "";
255
+ let filtered = lines.slice(1);
256
+ if (userFilter) {
257
+ filtered = filtered.filter((line) => line.startsWith(userFilter));
258
+ }
259
+ if (grepFilter) {
260
+ filtered = filtered.filter((line) => line.includes(grepFilter));
261
+ }
262
+ if (validated.limit) {
263
+ filtered = filtered.slice(0, validated.limit);
264
+ }
265
+ output = [header, ...filtered].join("\n");
266
+ return formatResponse({ host: validated.host, processes: output }, format, (data) => `## Processes - ${data.host}\n\n\`\`\`\n${data.processes}\n\`\`\``);
267
+ }
268
+ case "df": {
269
+ const hostConfig = findHost(validated.host);
270
+ const args = [];
271
+ if (validated.human_readable !== false) {
272
+ args.push("-h");
273
+ }
274
+ if (validated.path) {
275
+ // SECURITY: Path is already validated by safePathSchema in scoutDfSchema,
276
+ // but we escape it here as defense-in-depth against any schema bypass.
277
+ args.push(escapeShellArg(validated.path));
278
+ }
279
+ const output = await sshService.executeSSHCommand(hostConfig, "df", args);
280
+ return formatResponse({ host: validated.host, diskUsage: output }, format, (data) => `## Disk Usage - ${data.host}\n\n\`\`\`\n${data.diskUsage}\n\`\`\``);
281
+ }
282
+ default:
283
+ throw createExhaustiveError(validated, "scout action");
284
+ }
285
+ }
286
+ //# sourceMappingURL=scout-simple.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scout-simple.js","sourceRoot":"","sources":["../../../src/tools/handlers/scout-simple.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { ScoutInput } from "../../schemas/scout/index.js";
2
+ import type { ServiceContainer } from "../../services/container.js";
3
+ /**
4
+ * Handle all Scout ZFS subactions for ZFS filesystem operations.
5
+ *
6
+ * Supports 3 subactions: pools, datasets, snapshots.
7
+ * Requires specific host for ZFS operations.
8
+ *
9
+ * @param input - Validated Scout input with zfs action
10
+ * @param container - Service container with SSH service
11
+ * @returns Formatted response string (markdown or JSON)
12
+ * @throws {Error} When host not found or ZFS operation fails
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const result = await handleZfsAction(
17
+ * { action: 'zfs', subaction: 'pools', host: 'host1' },
18
+ * container
19
+ * );
20
+ * ```
21
+ */
22
+ export declare function handleZfsAction(input: ScoutInput, container: ServiceContainer): Promise<string>;
23
+ //# sourceMappingURL=scout-zfs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scout-zfs.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/scout-zfs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAUpE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,UAAU,EACjB,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,MAAM,CAAC,CA0FjB"}
@@ -0,0 +1,82 @@
1
+ import { scoutZfsSchema } from "../../schemas/scout/zfs.js";
2
+ import { assertValidAction, createExhaustiveError, formatResponse, getHostConfigOrThrow, initializeHandler, validateInput, } from "./base-handler.js";
3
+ /**
4
+ * Handle all Scout ZFS subactions for ZFS filesystem operations.
5
+ *
6
+ * Supports 3 subactions: pools, datasets, snapshots.
7
+ * Requires specific host for ZFS operations.
8
+ *
9
+ * @param input - Validated Scout input with zfs action
10
+ * @param container - Service container with SSH service
11
+ * @returns Formatted response string (markdown or JSON)
12
+ * @throws {Error} When host not found or ZFS operation fails
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const result = await handleZfsAction(
17
+ * { action: 'zfs', subaction: 'pools', host: 'host1' },
18
+ * container
19
+ * );
20
+ * ```
21
+ */
22
+ export async function handleZfsAction(input, container) {
23
+ assertValidAction(input, "zfs", "zfs");
24
+ // Validate pool/dataset inputs at the handler boundary before SSH execution.
25
+ const validated = validateInput(input, scoutZfsSchema, "scout-zfs");
26
+ const { hosts, format } = await initializeHandler(validated, container, (c) => c.getSSHService());
27
+ const sshService = container.getSSHService();
28
+ // Find the target host
29
+ const hostConfig = getHostConfigOrThrow(hosts, validated.host);
30
+ switch (validated.subaction) {
31
+ case "pools": {
32
+ const { pool } = validated;
33
+ // Build zpool list command
34
+ const args = ["list"];
35
+ if (pool) {
36
+ args.push(pool);
37
+ }
38
+ const output = await sshService.executeSSHCommand(hostConfig, "zpool", args);
39
+ return formatResponse({ host: validated.host, subaction: "pools", output: output.trim() }, format, (data) => `## ZFS Pools - ${data.host}\n\n\`\`\`\n${data.output}\n\`\`\``);
40
+ }
41
+ case "datasets": {
42
+ const { pool, type, recursive } = validated;
43
+ // Build zfs list command
44
+ const args = ["list"];
45
+ if (type) {
46
+ args.push("-t", type);
47
+ }
48
+ if (recursive || pool) {
49
+ args.push("-r");
50
+ }
51
+ if (pool) {
52
+ args.push(pool);
53
+ }
54
+ const output = await sshService.executeSSHCommand(hostConfig, "zfs", args);
55
+ return formatResponse({ host: validated.host, subaction: "datasets", output: output.trim() }, format, (data) => `## ZFS Datasets - ${data.host}\n\n\`\`\`\n${data.output}\n\`\`\``);
56
+ }
57
+ case "snapshots": {
58
+ const { pool, dataset, limit } = validated;
59
+ // Build zfs list command for snapshots
60
+ const args = ["list", "-t", "snapshot"];
61
+ // If dataset is specified, list recursively under that dataset
62
+ if (dataset) {
63
+ args.push("-r", dataset);
64
+ }
65
+ else if (pool) {
66
+ args.push("-r", pool);
67
+ }
68
+ let output = await sshService.executeSSHCommand(hostConfig, "zfs", args);
69
+ // Apply limit if specified
70
+ if (limit !== undefined) {
71
+ const lines = output.split("\n");
72
+ const header = lines[0] || "";
73
+ const snapshotLines = lines.slice(1, limit + 1);
74
+ output = [header, ...snapshotLines].join("\n");
75
+ }
76
+ return formatResponse({ host: validated.host, subaction: "snapshots", output: output.trim() }, format, (data) => `## ZFS Snapshots - ${data.host}\n\n\`\`\`\n${data.output}\n\`\`\``);
77
+ }
78
+ default:
79
+ throw createExhaustiveError(validated, "zfs subaction");
80
+ }
81
+ }
82
+ //# sourceMappingURL=scout-zfs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scout-zfs.js","sourceRoot":"","sources":["../../../src/tools/handlers/scout-zfs.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,37 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import type { ServiceContainer } from "../services/container.js";
3
3
  /**
4
- * Register Flux and Scout tools with the MCP server
4
+ * Register all tools with the MCP server using the ToolRegistry pattern
5
+ *
6
+ * Uses the registry pattern to enable plugin-style tool additions without
7
+ * modifying this file. To add a new tool:
8
+ *
9
+ * 1. Create a ToolDefinition (see src/tools/registry.ts)
10
+ * 2. Import your tool definition here
11
+ * 3. Call registry.register(YourTool)
12
+ *
13
+ * @param server - MCP server instance
14
+ * @param container - Service container for dependency injection
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * // Add custom tool
19
+ * import { MyCustomTool } from "./definitions/my-custom-tool.js";
20
+ *
21
+ * export function registerTools(server: McpServer, container?: ServiceContainer) {
22
+ * if (!container) {
23
+ * throw new Error("ServiceContainer is required for tool registration");
24
+ * }
25
+ *
26
+ * const registry = new ToolRegistry(container);
27
+ * registry.register(FluxTool);
28
+ * registry.register(ScoutTool);
29
+ * registry.register(MyCustomTool); // Add your tool here
30
+ * registry.registerAll(server);
31
+ * }
32
+ * ```
5
33
  */
6
34
  export declare function registerTools(server: McpServer, container?: ServiceContainer): void;
35
+ export { FluxTool, ScoutTool } from "./definitions/index.js";
36
+ export { type ToolDefinition, ToolRegistry } from "./registry.js";
7
37
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAMjE;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,gBAAgB,GAAG,IAAI,CA4CnF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAIjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAcnF;AAED,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAAE,KAAK,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
@@ -1,43 +1,49 @@
1
- import { handleFluxTool } from './flux.js';
2
- import { handleScoutTool } from './scout.js';
3
- import { FluxSchema } from '../schemas/flux/index.js';
4
- import { ScoutSchema } from '../schemas/scout/index.js';
1
+ import { FluxTool, ScoutTool } from "./definitions/index.js";
2
+ import { ToolRegistry } from "./registry.js";
5
3
  /**
6
- * Register Flux and Scout tools with the MCP server
4
+ * Register all tools with the MCP server using the ToolRegistry pattern
5
+ *
6
+ * Uses the registry pattern to enable plugin-style tool additions without
7
+ * modifying this file. To add a new tool:
8
+ *
9
+ * 1. Create a ToolDefinition (see src/tools/registry.ts)
10
+ * 2. Import your tool definition here
11
+ * 3. Call registry.register(YourTool)
12
+ *
13
+ * @param server - MCP server instance
14
+ * @param container - Service container for dependency injection
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * // Add custom tool
19
+ * import { MyCustomTool } from "./definitions/my-custom-tool.js";
20
+ *
21
+ * export function registerTools(server: McpServer, container?: ServiceContainer) {
22
+ * if (!container) {
23
+ * throw new Error("ServiceContainer is required for tool registration");
24
+ * }
25
+ *
26
+ * const registry = new ToolRegistry(container);
27
+ * registry.register(FluxTool);
28
+ * registry.register(ScoutTool);
29
+ * registry.register(MyCustomTool); // Add your tool here
30
+ * registry.registerAll(server);
31
+ * }
32
+ * ```
7
33
  */
8
34
  export function registerTools(server, container) {
9
35
  if (!container) {
10
36
  throw new Error("ServiceContainer is required for tool registration");
11
37
  }
12
- // Register Flux tool using MCP SDK 1.25.1 API
13
- server.registerTool('flux', {
14
- title: 'Flux Tool',
15
- description: 'Docker infrastructure management - container, compose, docker, and host operations',
16
- inputSchema: FluxSchema,
17
- annotations: {
18
- readOnlyHint: false,
19
- destructiveHint: false,
20
- idempotentHint: false,
21
- openWorldHint: true
22
- }
23
- }, async (params) => {
24
- const result = await handleFluxTool(params, container);
25
- return { content: [{ type: 'text', text: result }] };
26
- });
27
- // Register Scout tool using MCP SDK 1.25.1 API
28
- server.registerTool('scout', {
29
- title: 'Scout Tool',
30
- description: 'SSH remote operations - file, process, and system inspection',
31
- inputSchema: ScoutSchema,
32
- annotations: {
33
- readOnlyHint: true,
34
- destructiveHint: false,
35
- idempotentHint: true,
36
- openWorldHint: true
37
- }
38
- }, async (params) => {
39
- const result = await handleScoutTool(params, container);
40
- return { content: [{ type: 'text', text: result }] };
41
- });
38
+ // Create registry with service container
39
+ const registry = new ToolRegistry(container);
40
+ // Register built-in tools
41
+ registry.register(FluxTool);
42
+ registry.register(ScoutTool);
43
+ // Register all tools with MCP server
44
+ registry.registerAll(server);
42
45
  }
46
+ export { FluxTool, ScoutTool } from "./definitions/index.js";
47
+ // Export registry and definitions for external use
48
+ export { ToolRegistry } from "./registry.js";
43
49
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,SAA4B;IAC3E,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,8CAA8C;IAC9C,MAAM,CAAC,YAAY,CACjB,MAAM,EACN;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,oFAAoF;QACjG,WAAW,EAAE,UAAU;QACvB,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,MAAe,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACvD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC,CACF,CAAC;IAEF,+CAA+C;IAC/C,MAAM,CAAC,YAAY,CACjB,OAAO,EACP;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,8DAA8D;QAC3E,WAAW,EAAE,WAAW;QACxB,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,MAAe,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACxD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,SAA4B;IAC3E,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,yCAAyC;IACzC,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;IAE7C,0BAA0B;IAC1B,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAE7B,qCAAqC;IACrC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAC7D,mDAAmD;AACnD,OAAO,EAAuB,YAAY,EAAE,MAAM,eAAe,CAAC"}