kubeview-mcp 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 (454) hide show
  1. package/.prettierrc.json +11 -0
  2. package/CHANGELOG.md +55 -0
  3. package/LICENSE +21 -0
  4. package/README.md +251 -0
  5. package/RELEASE.md +154 -0
  6. package/TODO.md +0 -0
  7. package/bin/kubeview-mcp.js +274 -0
  8. package/bin/setup.js +368 -0
  9. package/dist/src/cli/cli.d.ts +3 -0
  10. package/dist/src/cli/cli.d.ts.map +1 -0
  11. package/dist/src/cli/cli.js +23 -0
  12. package/dist/src/cli/cli.js.map +1 -0
  13. package/dist/src/index.d.ts +8 -0
  14. package/dist/src/index.d.ts.map +1 -0
  15. package/dist/src/index.js +45 -0
  16. package/dist/src/index.js.map +1 -0
  17. package/dist/src/kubernetes/BaseResourceOperations.d.ts +155 -0
  18. package/dist/src/kubernetes/BaseResourceOperations.d.ts.map +1 -0
  19. package/dist/src/kubernetes/BaseResourceOperations.js +136 -0
  20. package/dist/src/kubernetes/BaseResourceOperations.js.map +1 -0
  21. package/dist/src/kubernetes/CircuitBreaker.d.ts +182 -0
  22. package/dist/src/kubernetes/CircuitBreaker.d.ts.map +1 -0
  23. package/dist/src/kubernetes/CircuitBreaker.js +369 -0
  24. package/dist/src/kubernetes/CircuitBreaker.js.map +1 -0
  25. package/dist/src/kubernetes/ConnectionManager.d.ts +60 -0
  26. package/dist/src/kubernetes/ConnectionManager.d.ts.map +1 -0
  27. package/dist/src/kubernetes/ConnectionManager.js +77 -0
  28. package/dist/src/kubernetes/ConnectionManager.js.map +1 -0
  29. package/dist/src/kubernetes/ConnectionPool.d.ts +183 -0
  30. package/dist/src/kubernetes/ConnectionPool.d.ts.map +1 -0
  31. package/dist/src/kubernetes/ConnectionPool.js +437 -0
  32. package/dist/src/kubernetes/ConnectionPool.js.map +1 -0
  33. package/dist/src/kubernetes/ErrorHandler.d.ts +172 -0
  34. package/dist/src/kubernetes/ErrorHandler.d.ts.map +1 -0
  35. package/dist/src/kubernetes/ErrorHandler.js +328 -0
  36. package/dist/src/kubernetes/ErrorHandler.js.map +1 -0
  37. package/dist/src/kubernetes/ErrorHandling.d.ts +148 -0
  38. package/dist/src/kubernetes/ErrorHandling.d.ts.map +1 -0
  39. package/dist/src/kubernetes/ErrorHandling.js +304 -0
  40. package/dist/src/kubernetes/ErrorHandling.js.map +1 -0
  41. package/dist/src/kubernetes/KubernetesClient.d.ts +162 -0
  42. package/dist/src/kubernetes/KubernetesClient.d.ts.map +1 -0
  43. package/dist/src/kubernetes/KubernetesClient.js +382 -0
  44. package/dist/src/kubernetes/KubernetesClient.js.map +1 -0
  45. package/dist/src/kubernetes/ResourceOperations.d.ts +69 -0
  46. package/dist/src/kubernetes/ResourceOperations.d.ts.map +1 -0
  47. package/dist/src/kubernetes/ResourceOperations.js +99 -0
  48. package/dist/src/kubernetes/ResourceOperations.js.map +1 -0
  49. package/dist/src/kubernetes/RetryStrategy.d.ts +137 -0
  50. package/dist/src/kubernetes/RetryStrategy.d.ts.map +1 -0
  51. package/dist/src/kubernetes/RetryStrategy.js +277 -0
  52. package/dist/src/kubernetes/RetryStrategy.js.map +1 -0
  53. package/dist/src/kubernetes/RetryableOperation.d.ts +118 -0
  54. package/dist/src/kubernetes/RetryableOperation.d.ts.map +1 -0
  55. package/dist/src/kubernetes/RetryableOperation.js +233 -0
  56. package/dist/src/kubernetes/RetryableOperation.js.map +1 -0
  57. package/dist/src/kubernetes/index.d.ts +18 -0
  58. package/dist/src/kubernetes/index.d.ts.map +1 -0
  59. package/dist/src/kubernetes/index.js +28 -0
  60. package/dist/src/kubernetes/index.js.map +1 -0
  61. package/dist/src/kubernetes/resources/ConfigMapOperations.d.ts +60 -0
  62. package/dist/src/kubernetes/resources/ConfigMapOperations.d.ts.map +1 -0
  63. package/dist/src/kubernetes/resources/ConfigMapOperations.js +306 -0
  64. package/dist/src/kubernetes/resources/ConfigMapOperations.js.map +1 -0
  65. package/dist/src/kubernetes/resources/CustomResourceOperations.d.ts +55 -0
  66. package/dist/src/kubernetes/resources/CustomResourceOperations.d.ts.map +1 -0
  67. package/dist/src/kubernetes/resources/CustomResourceOperations.js +363 -0
  68. package/dist/src/kubernetes/resources/CustomResourceOperations.js.map +1 -0
  69. package/dist/src/kubernetes/resources/DeploymentOperations.d.ts +66 -0
  70. package/dist/src/kubernetes/resources/DeploymentOperations.d.ts.map +1 -0
  71. package/dist/src/kubernetes/resources/DeploymentOperations.js +234 -0
  72. package/dist/src/kubernetes/resources/DeploymentOperations.js.map +1 -0
  73. package/dist/src/kubernetes/resources/IngressOperations.d.ts +60 -0
  74. package/dist/src/kubernetes/resources/IngressOperations.d.ts.map +1 -0
  75. package/dist/src/kubernetes/resources/IngressOperations.js +224 -0
  76. package/dist/src/kubernetes/resources/IngressOperations.js.map +1 -0
  77. package/dist/src/kubernetes/resources/MetricOperations.d.ts +218 -0
  78. package/dist/src/kubernetes/resources/MetricOperations.d.ts.map +1 -0
  79. package/dist/src/kubernetes/resources/MetricOperations.js +893 -0
  80. package/dist/src/kubernetes/resources/MetricOperations.js.map +1 -0
  81. package/dist/src/kubernetes/resources/NamespaceOperations.d.ts +38 -0
  82. package/dist/src/kubernetes/resources/NamespaceOperations.d.ts.map +1 -0
  83. package/dist/src/kubernetes/resources/NamespaceOperations.js +101 -0
  84. package/dist/src/kubernetes/resources/NamespaceOperations.js.map +1 -0
  85. package/dist/src/kubernetes/resources/PersistentVolumeClaimOperations.d.ts +109 -0
  86. package/dist/src/kubernetes/resources/PersistentVolumeClaimOperations.d.ts.map +1 -0
  87. package/dist/src/kubernetes/resources/PersistentVolumeClaimOperations.js +383 -0
  88. package/dist/src/kubernetes/resources/PersistentVolumeClaimOperations.js.map +1 -0
  89. package/dist/src/kubernetes/resources/PersistentVolumeOperations.d.ts +97 -0
  90. package/dist/src/kubernetes/resources/PersistentVolumeOperations.d.ts.map +1 -0
  91. package/dist/src/kubernetes/resources/PersistentVolumeOperations.js +321 -0
  92. package/dist/src/kubernetes/resources/PersistentVolumeOperations.js.map +1 -0
  93. package/dist/src/kubernetes/resources/PodOperations.d.ts +99 -0
  94. package/dist/src/kubernetes/resources/PodOperations.d.ts.map +1 -0
  95. package/dist/src/kubernetes/resources/PodOperations.js +333 -0
  96. package/dist/src/kubernetes/resources/PodOperations.js.map +1 -0
  97. package/dist/src/kubernetes/resources/SecretOperations.d.ts +71 -0
  98. package/dist/src/kubernetes/resources/SecretOperations.d.ts.map +1 -0
  99. package/dist/src/kubernetes/resources/SecretOperations.js +254 -0
  100. package/dist/src/kubernetes/resources/SecretOperations.js.map +1 -0
  101. package/dist/src/kubernetes/resources/ServiceOperations.d.ts +64 -0
  102. package/dist/src/kubernetes/resources/ServiceOperations.d.ts.map +1 -0
  103. package/dist/src/kubernetes/resources/ServiceOperations.js +232 -0
  104. package/dist/src/kubernetes/resources/ServiceOperations.js.map +1 -0
  105. package/dist/src/kubernetes/utils/ResourceUtils.d.ts +238 -0
  106. package/dist/src/kubernetes/utils/ResourceUtils.d.ts.map +1 -0
  107. package/dist/src/kubernetes/utils/ResourceUtils.js +439 -0
  108. package/dist/src/kubernetes/utils/ResourceUtils.js.map +1 -0
  109. package/dist/src/plugins/ArgoCDToolsPlugin.d.ts +45 -0
  110. package/dist/src/plugins/ArgoCDToolsPlugin.d.ts.map +1 -0
  111. package/dist/src/plugins/ArgoCDToolsPlugin.js +155 -0
  112. package/dist/src/plugins/ArgoCDToolsPlugin.js.map +1 -0
  113. package/dist/src/plugins/ArgoToolsPlugin.d.ts +45 -0
  114. package/dist/src/plugins/ArgoToolsPlugin.d.ts.map +1 -0
  115. package/dist/src/plugins/ArgoToolsPlugin.js +149 -0
  116. package/dist/src/plugins/ArgoToolsPlugin.js.map +1 -0
  117. package/dist/src/plugins/HelmToolsPlugin.d.ts +41 -0
  118. package/dist/src/plugins/HelmToolsPlugin.d.ts.map +1 -0
  119. package/dist/src/plugins/HelmToolsPlugin.js +146 -0
  120. package/dist/src/plugins/HelmToolsPlugin.js.map +1 -0
  121. package/dist/src/plugins/KubernetesToolsPlugin.d.ts +44 -0
  122. package/dist/src/plugins/KubernetesToolsPlugin.d.ts.map +1 -0
  123. package/dist/src/plugins/KubernetesToolsPlugin.js +159 -0
  124. package/dist/src/plugins/KubernetesToolsPlugin.js.map +1 -0
  125. package/dist/src/plugins/SamplePlugin.d.ts +12 -0
  126. package/dist/src/plugins/SamplePlugin.d.ts.map +1 -0
  127. package/dist/src/plugins/SamplePlugin.js +51 -0
  128. package/dist/src/plugins/SamplePlugin.js.map +1 -0
  129. package/dist/src/plugins/index.d.ts +5 -0
  130. package/dist/src/plugins/index.d.ts.map +1 -0
  131. package/dist/src/plugins/index.js +5 -0
  132. package/dist/src/plugins/index.js.map +1 -0
  133. package/dist/src/server/MCPServer.d.ts +93 -0
  134. package/dist/src/server/MCPServer.d.ts.map +1 -0
  135. package/dist/src/server/MCPServer.js +398 -0
  136. package/dist/src/server/MCPServer.js.map +1 -0
  137. package/dist/src/tools/argo/ArgoCronListTool.d.ts +10 -0
  138. package/dist/src/tools/argo/ArgoCronListTool.d.ts.map +1 -0
  139. package/dist/src/tools/argo/ArgoCronListTool.js +70 -0
  140. package/dist/src/tools/argo/ArgoCronListTool.js.map +1 -0
  141. package/dist/src/tools/argo/ArgoGetTool.d.ts +10 -0
  142. package/dist/src/tools/argo/ArgoGetTool.d.ts.map +1 -0
  143. package/dist/src/tools/argo/ArgoGetTool.js +80 -0
  144. package/dist/src/tools/argo/ArgoGetTool.js.map +1 -0
  145. package/dist/src/tools/argo/ArgoListTool.d.ts +10 -0
  146. package/dist/src/tools/argo/ArgoListTool.d.ts.map +1 -0
  147. package/dist/src/tools/argo/ArgoListTool.js +133 -0
  148. package/dist/src/tools/argo/ArgoListTool.js.map +1 -0
  149. package/dist/src/tools/argo/ArgoLogsTool.d.ts +10 -0
  150. package/dist/src/tools/argo/ArgoLogsTool.d.ts.map +1 -0
  151. package/dist/src/tools/argo/ArgoLogsTool.js +117 -0
  152. package/dist/src/tools/argo/ArgoLogsTool.js.map +1 -0
  153. package/dist/src/tools/argo/BaseTool.d.ts +60 -0
  154. package/dist/src/tools/argo/BaseTool.d.ts.map +1 -0
  155. package/dist/src/tools/argo/BaseTool.js +51 -0
  156. package/dist/src/tools/argo/BaseTool.js.map +1 -0
  157. package/dist/src/tools/argo/index.d.ts +7 -0
  158. package/dist/src/tools/argo/index.d.ts.map +1 -0
  159. package/dist/src/tools/argo/index.js +6 -0
  160. package/dist/src/tools/argo/index.js.map +1 -0
  161. package/dist/src/tools/argocd/ArgoCDAppGetTool.d.ts +10 -0
  162. package/dist/src/tools/argocd/ArgoCDAppGetTool.d.ts.map +1 -0
  163. package/dist/src/tools/argocd/ArgoCDAppGetTool.js +97 -0
  164. package/dist/src/tools/argocd/ArgoCDAppGetTool.js.map +1 -0
  165. package/dist/src/tools/argocd/ArgoCDAppHistoryTool.d.ts +10 -0
  166. package/dist/src/tools/argocd/ArgoCDAppHistoryTool.d.ts.map +1 -0
  167. package/dist/src/tools/argocd/ArgoCDAppHistoryTool.js +80 -0
  168. package/dist/src/tools/argocd/ArgoCDAppHistoryTool.js.map +1 -0
  169. package/dist/src/tools/argocd/ArgoCDAppListTool.d.ts +10 -0
  170. package/dist/src/tools/argocd/ArgoCDAppListTool.d.ts.map +1 -0
  171. package/dist/src/tools/argocd/ArgoCDAppListTool.js +128 -0
  172. package/dist/src/tools/argocd/ArgoCDAppListTool.js.map +1 -0
  173. package/dist/src/tools/argocd/ArgoCDAppLogsTool.d.ts +10 -0
  174. package/dist/src/tools/argocd/ArgoCDAppLogsTool.d.ts.map +1 -0
  175. package/dist/src/tools/argocd/ArgoCDAppLogsTool.js +143 -0
  176. package/dist/src/tools/argocd/ArgoCDAppLogsTool.js.map +1 -0
  177. package/dist/src/tools/argocd/ArgoCDAppResourcesTool.d.ts +10 -0
  178. package/dist/src/tools/argocd/ArgoCDAppResourcesTool.d.ts.map +1 -0
  179. package/dist/src/tools/argocd/ArgoCDAppResourcesTool.js +123 -0
  180. package/dist/src/tools/argocd/ArgoCDAppResourcesTool.js.map +1 -0
  181. package/dist/src/tools/argocd/BaseTool.d.ts +71 -0
  182. package/dist/src/tools/argocd/BaseTool.d.ts.map +1 -0
  183. package/dist/src/tools/argocd/BaseTool.js +62 -0
  184. package/dist/src/tools/argocd/BaseTool.js.map +1 -0
  185. package/dist/src/tools/argocd/index.d.ts +8 -0
  186. package/dist/src/tools/argocd/index.d.ts.map +1 -0
  187. package/dist/src/tools/argocd/index.js +7 -0
  188. package/dist/src/tools/argocd/index.js.map +1 -0
  189. package/dist/src/tools/helm/BaseTool.d.ts +51 -0
  190. package/dist/src/tools/helm/BaseTool.d.ts.map +1 -0
  191. package/dist/src/tools/helm/BaseTool.js +42 -0
  192. package/dist/src/tools/helm/BaseTool.js.map +1 -0
  193. package/dist/src/tools/helm/HelmGetHooksTool.d.ts +10 -0
  194. package/dist/src/tools/helm/HelmGetHooksTool.d.ts.map +1 -0
  195. package/dist/src/tools/helm/HelmGetHooksTool.js +38 -0
  196. package/dist/src/tools/helm/HelmGetHooksTool.js.map +1 -0
  197. package/dist/src/tools/helm/HelmGetManifestTool.d.ts +10 -0
  198. package/dist/src/tools/helm/HelmGetManifestTool.d.ts.map +1 -0
  199. package/dist/src/tools/helm/HelmGetManifestTool.js +38 -0
  200. package/dist/src/tools/helm/HelmGetManifestTool.js.map +1 -0
  201. package/dist/src/tools/helm/HelmGetNotesTool.d.ts +10 -0
  202. package/dist/src/tools/helm/HelmGetNotesTool.d.ts.map +1 -0
  203. package/dist/src/tools/helm/HelmGetNotesTool.js +38 -0
  204. package/dist/src/tools/helm/HelmGetNotesTool.js.map +1 -0
  205. package/dist/src/tools/helm/HelmGetResourcesTool.d.ts +13 -0
  206. package/dist/src/tools/helm/HelmGetResourcesTool.d.ts.map +1 -0
  207. package/dist/src/tools/helm/HelmGetResourcesTool.js +124 -0
  208. package/dist/src/tools/helm/HelmGetResourcesTool.js.map +1 -0
  209. package/dist/src/tools/helm/HelmGetValuesTool.d.ts +10 -0
  210. package/dist/src/tools/helm/HelmGetValuesTool.d.ts.map +1 -0
  211. package/dist/src/tools/helm/HelmGetValuesTool.js +54 -0
  212. package/dist/src/tools/helm/HelmGetValuesTool.js.map +1 -0
  213. package/dist/src/tools/helm/HelmHistoryTool.d.ts +10 -0
  214. package/dist/src/tools/helm/HelmHistoryTool.d.ts.map +1 -0
  215. package/dist/src/tools/helm/HelmHistoryTool.js +49 -0
  216. package/dist/src/tools/helm/HelmHistoryTool.js.map +1 -0
  217. package/dist/src/tools/helm/HelmListTool.d.ts +10 -0
  218. package/dist/src/tools/helm/HelmListTool.d.ts.map +1 -0
  219. package/dist/src/tools/helm/HelmListTool.js +107 -0
  220. package/dist/src/tools/helm/HelmListTool.js.map +1 -0
  221. package/dist/src/tools/helm/HelmListWithResourcesTool.d.ts +14 -0
  222. package/dist/src/tools/helm/HelmListWithResourcesTool.d.ts.map +1 -0
  223. package/dist/src/tools/helm/HelmListWithResourcesTool.js +175 -0
  224. package/dist/src/tools/helm/HelmListWithResourcesTool.js.map +1 -0
  225. package/dist/src/tools/helm/HelmStatusTool.d.ts +10 -0
  226. package/dist/src/tools/helm/HelmStatusTool.d.ts.map +1 -0
  227. package/dist/src/tools/helm/HelmStatusTool.js +54 -0
  228. package/dist/src/tools/helm/HelmStatusTool.js.map +1 -0
  229. package/dist/src/tools/helm/index.d.ts +12 -0
  230. package/dist/src/tools/helm/index.d.ts.map +1 -0
  231. package/dist/src/tools/helm/index.js +11 -0
  232. package/dist/src/tools/helm/index.js.map +1 -0
  233. package/dist/src/tools/kubernetes/BaseTool.d.ts +48 -0
  234. package/dist/src/tools/kubernetes/BaseTool.d.ts.map +1 -0
  235. package/dist/src/tools/kubernetes/BaseTool.js +55 -0
  236. package/dist/src/tools/kubernetes/BaseTool.js.map +1 -0
  237. package/dist/src/tools/kubernetes/GetConfigMapTool.d.ts +11 -0
  238. package/dist/src/tools/kubernetes/GetConfigMapTool.d.ts.map +1 -0
  239. package/dist/src/tools/kubernetes/GetConfigMapTool.js +28 -0
  240. package/dist/src/tools/kubernetes/GetConfigMapTool.js.map +1 -0
  241. package/dist/src/tools/kubernetes/GetContainerLogsTool.d.ts +15 -0
  242. package/dist/src/tools/kubernetes/GetContainerLogsTool.d.ts.map +1 -0
  243. package/dist/src/tools/kubernetes/GetContainerLogsTool.js +119 -0
  244. package/dist/src/tools/kubernetes/GetContainerLogsTool.js.map +1 -0
  245. package/dist/src/tools/kubernetes/GetDeploymentsTool.d.ts +11 -0
  246. package/dist/src/tools/kubernetes/GetDeploymentsTool.d.ts.map +1 -0
  247. package/dist/src/tools/kubernetes/GetDeploymentsTool.js +30 -0
  248. package/dist/src/tools/kubernetes/GetDeploymentsTool.js.map +1 -0
  249. package/dist/src/tools/kubernetes/GetEventsTool.d.ts +11 -0
  250. package/dist/src/tools/kubernetes/GetEventsTool.d.ts.map +1 -0
  251. package/dist/src/tools/kubernetes/GetEventsTool.js +123 -0
  252. package/dist/src/tools/kubernetes/GetEventsTool.js.map +1 -0
  253. package/dist/src/tools/kubernetes/GetIngressTool.d.ts +11 -0
  254. package/dist/src/tools/kubernetes/GetIngressTool.d.ts.map +1 -0
  255. package/dist/src/tools/kubernetes/GetIngressTool.js +35 -0
  256. package/dist/src/tools/kubernetes/GetIngressTool.js.map +1 -0
  257. package/dist/src/tools/kubernetes/GetMetricsTool.d.ts +11 -0
  258. package/dist/src/tools/kubernetes/GetMetricsTool.d.ts.map +1 -0
  259. package/dist/src/tools/kubernetes/GetMetricsTool.js +40 -0
  260. package/dist/src/tools/kubernetes/GetMetricsTool.js.map +1 -0
  261. package/dist/src/tools/kubernetes/GetNamespacesTool.d.ts +11 -0
  262. package/dist/src/tools/kubernetes/GetNamespacesTool.d.ts.map +1 -0
  263. package/dist/src/tools/kubernetes/GetNamespacesTool.js +33 -0
  264. package/dist/src/tools/kubernetes/GetNamespacesTool.js.map +1 -0
  265. package/dist/src/tools/kubernetes/GetPersistentVolumeClaimsTool.d.ts +11 -0
  266. package/dist/src/tools/kubernetes/GetPersistentVolumeClaimsTool.d.ts.map +1 -0
  267. package/dist/src/tools/kubernetes/GetPersistentVolumeClaimsTool.js +92 -0
  268. package/dist/src/tools/kubernetes/GetPersistentVolumeClaimsTool.js.map +1 -0
  269. package/dist/src/tools/kubernetes/GetPersistentVolumesTool.d.ts +11 -0
  270. package/dist/src/tools/kubernetes/GetPersistentVolumesTool.d.ts.map +1 -0
  271. package/dist/src/tools/kubernetes/GetPersistentVolumesTool.js +88 -0
  272. package/dist/src/tools/kubernetes/GetPersistentVolumesTool.js.map +1 -0
  273. package/dist/src/tools/kubernetes/GetPodMetricsTool.d.ts +11 -0
  274. package/dist/src/tools/kubernetes/GetPodMetricsTool.d.ts.map +1 -0
  275. package/dist/src/tools/kubernetes/GetPodMetricsTool.js +100 -0
  276. package/dist/src/tools/kubernetes/GetPodMetricsTool.js.map +1 -0
  277. package/dist/src/tools/kubernetes/GetPodsTool.d.ts +11 -0
  278. package/dist/src/tools/kubernetes/GetPodsTool.d.ts.map +1 -0
  279. package/dist/src/tools/kubernetes/GetPodsTool.js +35 -0
  280. package/dist/src/tools/kubernetes/GetPodsTool.js.map +1 -0
  281. package/dist/src/tools/kubernetes/GetResourceTool.d.ts +12 -0
  282. package/dist/src/tools/kubernetes/GetResourceTool.d.ts.map +1 -0
  283. package/dist/src/tools/kubernetes/GetResourceTool.js +79 -0
  284. package/dist/src/tools/kubernetes/GetResourceTool.js.map +1 -0
  285. package/dist/src/tools/kubernetes/GetSecretsTool.d.ts +11 -0
  286. package/dist/src/tools/kubernetes/GetSecretsTool.d.ts.map +1 -0
  287. package/dist/src/tools/kubernetes/GetSecretsTool.js +49 -0
  288. package/dist/src/tools/kubernetes/GetSecretsTool.js.map +1 -0
  289. package/dist/src/tools/kubernetes/GetServicesTool.d.ts +11 -0
  290. package/dist/src/tools/kubernetes/GetServicesTool.d.ts.map +1 -0
  291. package/dist/src/tools/kubernetes/GetServicesTool.js +35 -0
  292. package/dist/src/tools/kubernetes/GetServicesTool.js.map +1 -0
  293. package/dist/src/tools/kubernetes/index.d.ts +17 -0
  294. package/dist/src/tools/kubernetes/index.d.ts.map +1 -0
  295. package/dist/src/tools/kubernetes/index.js +16 -0
  296. package/dist/src/tools/kubernetes/index.js.map +1 -0
  297. package/dist/src/utils/CliUtils.d.ts +24 -0
  298. package/dist/src/utils/CliUtils.d.ts.map +1 -0
  299. package/dist/src/utils/CliUtils.js +159 -0
  300. package/dist/src/utils/CliUtils.js.map +1 -0
  301. package/dist/tests/__mocks__/@kubernetes/client-node.d.ts +34 -0
  302. package/dist/tests/__mocks__/@kubernetes/client-node.d.ts.map +1 -0
  303. package/dist/tests/__mocks__/@kubernetes/client-node.js +20 -0
  304. package/dist/tests/__mocks__/@kubernetes/client-node.js.map +1 -0
  305. package/dist/tests/argo/ArgoGetTool.test.d.ts +2 -0
  306. package/dist/tests/argo/ArgoGetTool.test.d.ts.map +1 -0
  307. package/dist/tests/argo/ArgoGetTool.test.js +141 -0
  308. package/dist/tests/argo/ArgoGetTool.test.js.map +1 -0
  309. package/dist/tests/helm/BaseTool.test.d.ts +2 -0
  310. package/dist/tests/helm/BaseTool.test.d.ts.map +1 -0
  311. package/dist/tests/helm/BaseTool.test.js +241 -0
  312. package/dist/tests/helm/BaseTool.test.js.map +1 -0
  313. package/dist/tests/index.test.d.ts +2 -0
  314. package/dist/tests/index.test.d.ts.map +1 -0
  315. package/dist/tests/index.test.js +7 -0
  316. package/dist/tests/index.test.js.map +1 -0
  317. package/dist/tests/kubernetes/ConfigMapOperations.test.d.ts +2 -0
  318. package/dist/tests/kubernetes/ConfigMapOperations.test.d.ts.map +1 -0
  319. package/dist/tests/kubernetes/ConfigMapOperations.test.js +460 -0
  320. package/dist/tests/kubernetes/ConfigMapOperations.test.js.map +1 -0
  321. package/dist/tests/kubernetes/ConnectionManager.test.d.ts +2 -0
  322. package/dist/tests/kubernetes/ConnectionManager.test.d.ts.map +1 -0
  323. package/dist/tests/kubernetes/ConnectionManager.test.js +97 -0
  324. package/dist/tests/kubernetes/ConnectionManager.test.js.map +1 -0
  325. package/dist/tests/kubernetes/ConnectionPool.test.d.ts +2 -0
  326. package/dist/tests/kubernetes/ConnectionPool.test.d.ts.map +1 -0
  327. package/dist/tests/kubernetes/ConnectionPool.test.js +328 -0
  328. package/dist/tests/kubernetes/ConnectionPool.test.js.map +1 -0
  329. package/dist/tests/kubernetes/DeploymentOperations.test.d.ts +2 -0
  330. package/dist/tests/kubernetes/DeploymentOperations.test.d.ts.map +1 -0
  331. package/dist/tests/kubernetes/DeploymentOperations.test.js +196 -0
  332. package/dist/tests/kubernetes/DeploymentOperations.test.js.map +1 -0
  333. package/dist/tests/kubernetes/ErrorHandling.test.d.ts +2 -0
  334. package/dist/tests/kubernetes/ErrorHandling.test.d.ts.map +1 -0
  335. package/dist/tests/kubernetes/ErrorHandling.test.js +329 -0
  336. package/dist/tests/kubernetes/ErrorHandling.test.js.map +1 -0
  337. package/dist/tests/kubernetes/GetPodMetricsTool.test.d.ts +2 -0
  338. package/dist/tests/kubernetes/GetPodMetricsTool.test.d.ts.map +1 -0
  339. package/dist/tests/kubernetes/GetPodMetricsTool.test.js +150 -0
  340. package/dist/tests/kubernetes/GetPodMetricsTool.test.js.map +1 -0
  341. package/dist/tests/kubernetes/KubernetesClient.test.d.ts +2 -0
  342. package/dist/tests/kubernetes/KubernetesClient.test.d.ts.map +1 -0
  343. package/dist/tests/kubernetes/KubernetesClient.test.js +371 -0
  344. package/dist/tests/kubernetes/KubernetesClient.test.js.map +1 -0
  345. package/dist/tests/kubernetes/MetricOperations.parsing.test.d.ts +2 -0
  346. package/dist/tests/kubernetes/MetricOperations.parsing.test.d.ts.map +1 -0
  347. package/dist/tests/kubernetes/MetricOperations.parsing.test.js +49 -0
  348. package/dist/tests/kubernetes/MetricOperations.parsing.test.js.map +1 -0
  349. package/dist/tests/kubernetes/NamespaceOperations.test.d.ts +2 -0
  350. package/dist/tests/kubernetes/NamespaceOperations.test.d.ts.map +1 -0
  351. package/dist/tests/kubernetes/NamespaceOperations.test.js +115 -0
  352. package/dist/tests/kubernetes/NamespaceOperations.test.js.map +1 -0
  353. package/dist/tests/kubernetes/PodOperations.test.d.ts +2 -0
  354. package/dist/tests/kubernetes/PodOperations.test.d.ts.map +1 -0
  355. package/dist/tests/kubernetes/PodOperations.test.js +209 -0
  356. package/dist/tests/kubernetes/PodOperations.test.js.map +1 -0
  357. package/dist/tests/kubernetes/RetryStrategy.test.d.ts +2 -0
  358. package/dist/tests/kubernetes/RetryStrategy.test.d.ts.map +1 -0
  359. package/dist/tests/kubernetes/RetryStrategy.test.js +419 -0
  360. package/dist/tests/kubernetes/RetryStrategy.test.js.map +1 -0
  361. package/dist/tests/kubernetes/ServiceOperations.test.d.ts +2 -0
  362. package/dist/tests/kubernetes/ServiceOperations.test.d.ts.map +1 -0
  363. package/dist/tests/kubernetes/ServiceOperations.test.js +159 -0
  364. package/dist/tests/kubernetes/ServiceOperations.test.js.map +1 -0
  365. package/dist/tests/plugins/KubernetesToolsPlugin.test.d.ts +2 -0
  366. package/dist/tests/plugins/KubernetesToolsPlugin.test.d.ts.map +1 -0
  367. package/dist/tests/plugins/KubernetesToolsPlugin.test.js +153 -0
  368. package/dist/tests/plugins/KubernetesToolsPlugin.test.js.map +1 -0
  369. package/dist/tests/server/MCPServer.integration.test.d.ts +2 -0
  370. package/dist/tests/server/MCPServer.integration.test.d.ts.map +1 -0
  371. package/dist/tests/server/MCPServer.integration.test.js +244 -0
  372. package/dist/tests/server/MCPServer.integration.test.js.map +1 -0
  373. package/dist/tests/server/MCPServer.test.d.ts +2 -0
  374. package/dist/tests/server/MCPServer.test.d.ts.map +1 -0
  375. package/dist/tests/server/MCPServer.test.js +257 -0
  376. package/dist/tests/server/MCPServer.test.js.map +1 -0
  377. package/package.json +85 -0
  378. package/src/cli/cli.ts +25 -0
  379. package/src/cli/run-command.js +391 -0
  380. package/src/index.ts +46 -0
  381. package/src/kubernetes/BaseResourceOperations.ts +286 -0
  382. package/src/kubernetes/CircuitBreaker.ts +485 -0
  383. package/src/kubernetes/ConnectionManager.ts +114 -0
  384. package/src/kubernetes/ConnectionPool.ts +551 -0
  385. package/src/kubernetes/ErrorHandler.ts +436 -0
  386. package/src/kubernetes/ErrorHandling.ts +401 -0
  387. package/src/kubernetes/KubernetesClient.ts +500 -0
  388. package/src/kubernetes/README.md +349 -0
  389. package/src/kubernetes/ResourceOperations.ts +116 -0
  390. package/src/kubernetes/RetryStrategy.ts +365 -0
  391. package/src/kubernetes/RetryableOperation.ts +313 -0
  392. package/src/kubernetes/docs/ResourceOperations.md +606 -0
  393. package/src/kubernetes/index.ts +116 -0
  394. package/src/kubernetes/resources/ConfigMapOperations.ts +367 -0
  395. package/src/kubernetes/resources/CustomResourceOperations.ts +392 -0
  396. package/src/kubernetes/resources/DeploymentOperations.ts +294 -0
  397. package/src/kubernetes/resources/IngressOperations.ts +277 -0
  398. package/src/kubernetes/resources/MetricOperations.ts +1159 -0
  399. package/src/kubernetes/resources/NamespaceOperations.ts +129 -0
  400. package/src/kubernetes/resources/PersistentVolumeClaimOperations.ts +516 -0
  401. package/src/kubernetes/resources/PersistentVolumeOperations.ts +438 -0
  402. package/src/kubernetes/resources/PodOperations.ts +417 -0
  403. package/src/kubernetes/resources/SecretOperations.ts +304 -0
  404. package/src/kubernetes/resources/ServiceOperations.ts +283 -0
  405. package/src/kubernetes/utils/ResourceUtils.ts +553 -0
  406. package/src/plugins/ArgoCDToolsPlugin.ts +189 -0
  407. package/src/plugins/ArgoToolsPlugin.ts +180 -0
  408. package/src/plugins/HelmToolsPlugin.ts +180 -0
  409. package/src/plugins/KubernetesToolsPlugin.ts +198 -0
  410. package/src/plugins/SamplePlugin.ts +60 -0
  411. package/src/plugins/index.ts +4 -0
  412. package/src/server/MCPServer.ts +500 -0
  413. package/src/tools/argo/ArgoCronListTool.ts +78 -0
  414. package/src/tools/argo/ArgoGetTool.ts +91 -0
  415. package/src/tools/argo/ArgoListTool.ts +143 -0
  416. package/src/tools/argo/ArgoLogsTool.ts +131 -0
  417. package/src/tools/argo/BaseTool.ts +69 -0
  418. package/src/tools/argo/index.ts +6 -0
  419. package/src/tools/argocd/ArgoCDAppGetTool.ts +109 -0
  420. package/src/tools/argocd/ArgoCDAppHistoryTool.ts +91 -0
  421. package/src/tools/argocd/ArgoCDAppListTool.ts +144 -0
  422. package/src/tools/argocd/ArgoCDAppLogsTool.ts +162 -0
  423. package/src/tools/argocd/ArgoCDAppResourcesTool.ts +139 -0
  424. package/src/tools/argocd/BaseTool.ts +83 -0
  425. package/src/tools/argocd/index.ts +7 -0
  426. package/src/tools/helm/BaseTool.ts +60 -0
  427. package/src/tools/helm/HelmGetHooksTool.ts +44 -0
  428. package/src/tools/helm/HelmGetManifestTool.ts +44 -0
  429. package/src/tools/helm/HelmGetNotesTool.ts +44 -0
  430. package/src/tools/helm/HelmGetResourcesTool.ts +140 -0
  431. package/src/tools/helm/HelmGetValuesTool.ts +62 -0
  432. package/src/tools/helm/HelmHistoryTool.ts +56 -0
  433. package/src/tools/helm/HelmListTool.ts +107 -0
  434. package/src/tools/helm/HelmListWithResourcesTool.ts +194 -0
  435. package/src/tools/helm/HelmStatusTool.ts +62 -0
  436. package/src/tools/helm/index.ts +11 -0
  437. package/src/tools/kubernetes/BaseTool.ts +76 -0
  438. package/src/tools/kubernetes/GetConfigMapTool.ts +33 -0
  439. package/src/tools/kubernetes/GetContainerLogsTool.ts +140 -0
  440. package/src/tools/kubernetes/GetDeploymentsTool.ts +33 -0
  441. package/src/tools/kubernetes/GetEventsTool.ts +133 -0
  442. package/src/tools/kubernetes/GetIngressTool.ts +39 -0
  443. package/src/tools/kubernetes/GetMetricsTool.ts +53 -0
  444. package/src/tools/kubernetes/GetNamespacesTool.ts +36 -0
  445. package/src/tools/kubernetes/GetPersistentVolumeClaimsTool.ts +113 -0
  446. package/src/tools/kubernetes/GetPersistentVolumesTool.ts +107 -0
  447. package/src/tools/kubernetes/GetPodMetricsTool.ts +113 -0
  448. package/src/tools/kubernetes/GetPodsTool.ts +39 -0
  449. package/src/tools/kubernetes/GetResourceTool.ts +90 -0
  450. package/src/tools/kubernetes/GetSecretsTool.ts +55 -0
  451. package/src/tools/kubernetes/GetServicesTool.ts +39 -0
  452. package/src/tools/kubernetes/index.ts +16 -0
  453. package/src/utils/CliUtils.ts +207 -0
  454. package/tsconfig.json +36 -0
@@ -0,0 +1,500 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import {
4
+ CallToolRequestSchema,
5
+ ListResourcesRequestSchema,
6
+ ListResourceTemplatesRequestSchema,
7
+ ListToolsRequestSchema,
8
+ ReadResourceRequestSchema,
9
+ ListPromptsRequestSchema,
10
+ GetPromptRequestSchema,
11
+ Tool,
12
+ Resource,
13
+ ResourceTemplate,
14
+ } from '@modelcontextprotocol/sdk/types.js';
15
+ import winston from 'winston';
16
+
17
+ /**
18
+ * Plugin interface for extending MCP server functionality
19
+ */
20
+ export interface MCPPlugin {
21
+ name: string;
22
+ version: string;
23
+ initialize(server: MCPServer): Promise<void>;
24
+ shutdown?(): Promise<void>;
25
+ }
26
+
27
+ /**
28
+ * Tool registry entry
29
+ */
30
+ interface ToolEntry {
31
+ tool: Tool;
32
+ handler: (params: any) => Promise<any>;
33
+ }
34
+
35
+ /**
36
+ * Core MCP Server implementation for Kubernetes operations
37
+ */
38
+ export interface MCPServerOptions {
39
+ skipTransportErrorHandling?: boolean;
40
+ skipGracefulShutdown?: boolean;
41
+ }
42
+
43
+ export class MCPServer {
44
+ private server: Server;
45
+ private transport: StdioServerTransport;
46
+ private logger: winston.Logger;
47
+ private tools: Map<string, ToolEntry> = new Map();
48
+ private resources: Map<string, Resource> = new Map();
49
+ private resourceTemplates: Map<string, ResourceTemplate> = new Map();
50
+ private plugins: Map<string, MCPPlugin> = new Map();
51
+ private isShuttingDown = false;
52
+ private options: MCPServerOptions;
53
+ private eventListeners: Array<{
54
+ target: any;
55
+ event: string;
56
+ handler: (...args: any[]) => void;
57
+ }> = [];
58
+
59
+ constructor(options: MCPServerOptions = {}) {
60
+ this.options = options;
61
+ // Initialize Winston logger
62
+ this.logger = winston.createLogger({
63
+ level: process.env.LOG_LEVEL || 'info',
64
+ format: winston.format.combine(winston.format.timestamp(), winston.format.json()),
65
+ transports: [
66
+ new winston.transports.Console({
67
+ stderrLevels: ['error', 'warn', 'info', 'verbose', 'debug', 'silly'],
68
+ format: winston.format.combine(winston.format.colorize(), winston.format.simple()),
69
+ }),
70
+ new winston.transports.File({
71
+ filename: 'kubeview-mcp.log',
72
+ format: winston.format.json(),
73
+ }),
74
+ ],
75
+ });
76
+
77
+ // Initialize MCP server
78
+ this.server = new Server(
79
+ {
80
+ name: 'kubeview-mcp',
81
+ version: '0.1.0',
82
+ },
83
+ {
84
+ capabilities: {
85
+ tools: {},
86
+ resources: {},
87
+ prompts: {},
88
+ },
89
+ },
90
+ );
91
+
92
+ // Initialize stdio transport
93
+ this.transport = new StdioServerTransport();
94
+
95
+ // Add custom error handler to the transport (skip in tests)
96
+ if (!options.skipTransportErrorHandling) {
97
+ this.setupTransportErrorHandling();
98
+ }
99
+
100
+ // Set up handlers
101
+ this.setupHandlers();
102
+
103
+ // Set up graceful shutdown (skip in tests to avoid process listeners)
104
+ if (!this.options.skipGracefulShutdown) {
105
+ this.setupGracefulShutdown();
106
+ }
107
+
108
+ this.logger.info('MCPServer initialized');
109
+ }
110
+
111
+ /**
112
+ * Add an event listener and track it for cleanup
113
+ */
114
+ private addTrackedListener(target: any, event: string, handler: (...args: any[]) => void): void {
115
+ target.on(event, handler);
116
+ this.eventListeners.push({ target, event, handler });
117
+ }
118
+
119
+ /**
120
+ * Remove all tracked event listeners
121
+ */
122
+ private removeAllListeners(): void {
123
+ for (const { target, event, handler } of this.eventListeners) {
124
+ try {
125
+ target.removeListener(event, handler);
126
+ } catch {
127
+ // Ignore errors during cleanup
128
+ }
129
+ }
130
+ this.eventListeners = [];
131
+ }
132
+
133
+ /**
134
+ * Set up custom error handling for the transport
135
+ */
136
+ private setupTransportErrorHandling(): void {
137
+ // Handle connection errors in the transport
138
+ // StdioServerTransport uses the process stdin/stdout directly
139
+ this.addTrackedListener(process.stdin, 'error', (error) => {
140
+ this.logger.error('Transport stdin error:', error);
141
+ // Don't throw - log and continue
142
+ });
143
+
144
+ this.addTrackedListener(process.stdout, 'error', (error) => {
145
+ this.logger.error('Transport stdout error:', error);
146
+ // Don't throw - log and continue
147
+ });
148
+
149
+ // Add additional error event listeners to catch more issues
150
+ if (process.stdin.on && typeof process.stdin.on === 'function') {
151
+ this.addTrackedListener(process.stdin, 'close', () => {
152
+ this.logger.warn('Transport stdin closed unexpectedly');
153
+ this.gracefulRestart();
154
+ });
155
+ }
156
+
157
+ if (process.stdout.on && typeof process.stdout.on === 'function') {
158
+ this.addTrackedListener(process.stdout, 'close', () => {
159
+ this.logger.warn('Transport stdout closed unexpectedly');
160
+ this.gracefulRestart();
161
+ });
162
+ }
163
+ }
164
+
165
+ /**
166
+ * Attempt to gracefully restart the server connection
167
+ */
168
+ private async gracefulRestart(): Promise<void> {
169
+ if (this.isShuttingDown) return;
170
+
171
+ this.logger.info('Attempting to gracefully restart server connection...');
172
+
173
+ try {
174
+ // Close existing connection
175
+ await this.server.close();
176
+
177
+ // Small delay to allow resources to be released
178
+ await new Promise((resolve) => setTimeout(resolve, 500));
179
+
180
+ // Create a new transport instance since the old one might be in an invalid state
181
+ this.transport = new StdioServerTransport();
182
+
183
+ // Reconnect
184
+ await this.server.connect(this.transport);
185
+ this.logger.info('Server connection restarted successfully');
186
+ } catch (error) {
187
+ this.logger.error('Failed to restart server connection', error);
188
+
189
+ // If we get an error about the transport already being started,
190
+ // try to create a completely new server instance
191
+ if (
192
+ error instanceof Error &&
193
+ error.message.includes('StdioServerTransport already started')
194
+ ) {
195
+ this.logger.info('Attempting to create new server instance...');
196
+ try {
197
+ // Re-initialize the server
198
+ this.server = new Server(
199
+ {
200
+ name: 'kubeview-mcp',
201
+ version: '0.1.0',
202
+ },
203
+ {
204
+ capabilities: {
205
+ tools: {},
206
+ resources: {},
207
+ prompts: {},
208
+ },
209
+ },
210
+ );
211
+
212
+ // Recreate the transport
213
+ this.transport = new StdioServerTransport();
214
+
215
+ // Re-register all handlers
216
+ this.setupHandlers();
217
+
218
+ // Reconnect
219
+ await this.server.connect(this.transport);
220
+ this.logger.info('Server reconnected with new instance successfully');
221
+ } catch (nestedError) {
222
+ this.logger.error('Failed to create new server instance', nestedError);
223
+ }
224
+ }
225
+ }
226
+ }
227
+
228
+ /**
229
+ * Set up request handlers for MCP protocol
230
+ */
231
+ private setupHandlers(): void {
232
+ // Handle tool listing
233
+ this.server.setRequestHandler(ListToolsRequestSchema, async () => {
234
+ const tools = Array.from(this.tools.values()).map((entry) => entry.tool);
235
+ this.logger.debug(`Listing ${tools.length} tools`);
236
+ return { tools };
237
+ });
238
+
239
+ // Handle tool execution
240
+ this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
241
+ const toolEntry = this.tools.get(request.params.name);
242
+
243
+ if (!toolEntry) {
244
+ const error = `Tool not found: ${request.params.name}`;
245
+ this.logger.error(error);
246
+ throw new Error(error);
247
+ }
248
+
249
+ this.logger.info(`Executing tool: ${request.params.name}`, {
250
+ arguments: request.params.arguments,
251
+ });
252
+
253
+ try {
254
+ const result = await toolEntry.handler(request.params.arguments);
255
+ return {
256
+ content: [
257
+ {
258
+ type: 'text',
259
+ text: JSON.stringify(result, null, 2),
260
+ },
261
+ ],
262
+ };
263
+ } catch (error) {
264
+ this.logger.error(`Tool execution failed: ${request.params.name}`, error);
265
+ throw error;
266
+ }
267
+ });
268
+
269
+ // Handle resource listing
270
+ this.server.setRequestHandler(ListResourcesRequestSchema, async () => {
271
+ const resources = Array.from(this.resources.values());
272
+ this.logger.debug(`Listing ${resources.length} resources`);
273
+ return { resources };
274
+ });
275
+
276
+ // Handle resource reading
277
+ this.server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
278
+ const resource = this.resources.get(request.params.uri);
279
+
280
+ if (!resource) {
281
+ const error = `Resource not found: ${request.params.uri}`;
282
+ this.logger.error(error);
283
+ throw new Error(error);
284
+ }
285
+
286
+ this.logger.info(`Reading resource: ${request.params.uri}`);
287
+
288
+ // This is a placeholder - actual resource reading logic would go here
289
+ return {
290
+ contents: [
291
+ {
292
+ type: 'text',
293
+ text: `Resource content for ${request.params.uri}`,
294
+ uri: request.params.uri,
295
+ },
296
+ ],
297
+ };
298
+ });
299
+
300
+ // Handle resource template listing
301
+ this.server.setRequestHandler(ListResourceTemplatesRequestSchema, async () => {
302
+ const templates = Array.from(this.resourceTemplates.values());
303
+ this.logger.debug(`Listing ${templates.length} resource templates`);
304
+ return { resourceTemplates: templates };
305
+ });
306
+
307
+ // Handle prompt listing
308
+ this.server.setRequestHandler(ListPromptsRequestSchema, async () => {
309
+ this.logger.debug('Listing prompts (none available)');
310
+ return { prompts: [] };
311
+ });
312
+
313
+ // Handle prompt getting
314
+ this.server.setRequestHandler(GetPromptRequestSchema, async (request) => {
315
+ const error = `Prompt not found: ${request.params.name}`;
316
+ this.logger.error(error);
317
+ throw new Error(error);
318
+ });
319
+ }
320
+
321
+ /**
322
+ * Register a tool with the MCP server
323
+ */
324
+ public registerTool(tool: Tool, handler: (params: any) => Promise<any>): void {
325
+ if (this.tools.has(tool.name)) {
326
+ this.logger.warn(`Tool already registered: ${tool.name}, overwriting`);
327
+ }
328
+
329
+ this.tools.set(tool.name, { tool, handler });
330
+ this.logger.info(`Registered tool: ${tool.name}`);
331
+ }
332
+
333
+ /**
334
+ * Register a resource with the MCP server
335
+ */
336
+ public registerResource(resource: Resource): void {
337
+ if (this.resources.has(resource.uri)) {
338
+ this.logger.warn(`Resource already registered: ${resource.uri}, overwriting`);
339
+ }
340
+
341
+ this.resources.set(resource.uri, resource);
342
+ this.logger.info(`Registered resource: ${resource.uri}`);
343
+ }
344
+
345
+ /**
346
+ * Load and initialize a plugin
347
+ */
348
+ public async loadPlugin(plugin: MCPPlugin): Promise<void> {
349
+ if (this.plugins.has(plugin.name)) {
350
+ throw new Error(`Plugin already loaded: ${plugin.name}`);
351
+ }
352
+
353
+ this.logger.info(`Loading plugin: ${plugin.name} v${plugin.version}`);
354
+
355
+ try {
356
+ await plugin.initialize(this);
357
+ this.plugins.set(plugin.name, plugin);
358
+ this.logger.info(`Plugin loaded successfully: ${plugin.name}`);
359
+ } catch (error) {
360
+ this.logger.error(`Failed to load plugin: ${plugin.name}`, error);
361
+ throw error;
362
+ }
363
+ }
364
+
365
+ /**
366
+ * Start the MCP server
367
+ */
368
+ public async start(): Promise<void> {
369
+ this.logger.info('Starting MCP server...');
370
+
371
+ try {
372
+ if (this.options.skipTransportErrorHandling) {
373
+ // Simple connection for tests
374
+ await this.server.connect(this.transport);
375
+ } else {
376
+ // Wrap the connection with our custom error handling for production
377
+ await this.connectWithErrorHandling();
378
+ }
379
+ this.logger.info('MCP server started successfully');
380
+ } catch (error) {
381
+ this.logger.error('Failed to start MCP server', error);
382
+ throw error;
383
+ }
384
+ }
385
+
386
+ /**
387
+ * Connect to the transport with improved error handling
388
+ */
389
+ private async connectWithErrorHandling(): Promise<void> {
390
+ // Add global handler for parse errors that might not be caught by the SDK
391
+ const originalStdinData = process.stdin.listeners('data') as Array<(chunk: Buffer) => void>;
392
+
393
+ // Add our handler before the SDK's handlers
394
+ process.stdin.removeAllListeners('data');
395
+
396
+ process.stdin.on('data', (chunk: Buffer) => {
397
+ try {
398
+ // Try to parse as JSON to catch syntax errors early
399
+ const str = chunk.toString().trim();
400
+ if (str.length > 0) {
401
+ try {
402
+ JSON.parse(str);
403
+ } catch (err) {
404
+ this.logger.warn(
405
+ `Received invalid JSON: ${str.substring(0, 100)}${str.length > 100 ? '...' : ''}`,
406
+ );
407
+ this.logger.error('JSON parse error:', err);
408
+ // Continue processing - the SDK will handle the error
409
+ }
410
+ }
411
+ } catch (err) {
412
+ this.logger.error('Error in pre-processing stdin data:', err);
413
+ }
414
+ });
415
+
416
+ // Re-add original listeners
417
+ for (const listener of originalStdinData) {
418
+ process.stdin.on('data', listener);
419
+ }
420
+
421
+ // Connect to the transport
422
+ await this.server.connect(this.transport);
423
+ }
424
+
425
+ /**
426
+ * Stop the MCP server
427
+ */
428
+ public async stop(): Promise<void> {
429
+ if (this.isShuttingDown) {
430
+ return;
431
+ }
432
+
433
+ this.isShuttingDown = true;
434
+ this.logger.info('Stopping MCP server...');
435
+
436
+ // Remove all tracked event listeners
437
+ this.removeAllListeners();
438
+
439
+ // Shutdown plugins
440
+ for (const [name, plugin] of this.plugins) {
441
+ if (plugin.shutdown) {
442
+ try {
443
+ await plugin.shutdown();
444
+ this.logger.info(`Plugin shutdown complete: ${name}`);
445
+ } catch (error) {
446
+ this.logger.error(`Plugin shutdown failed: ${name}`, error);
447
+ }
448
+ }
449
+ }
450
+
451
+ // Close server connection
452
+ await this.server.close();
453
+ this.logger.info('MCP server stopped');
454
+ }
455
+
456
+ /**
457
+ * Set up graceful shutdown handling
458
+ */
459
+ private setupGracefulShutdown(): void {
460
+ const shutdown = async (signal: string) => {
461
+ this.logger.info(`Received ${signal}, initiating graceful shutdown...`);
462
+ await this.stop();
463
+ process.exit(0);
464
+ };
465
+
466
+ this.addTrackedListener(process, 'SIGINT', () => shutdown('SIGINT'));
467
+ this.addTrackedListener(process, 'SIGTERM', () => shutdown('SIGTERM'));
468
+
469
+ this.addTrackedListener(process, 'uncaughtException', (error) => {
470
+ this.logger.error('Uncaught exception:', error);
471
+ shutdown('uncaughtException');
472
+ });
473
+
474
+ this.addTrackedListener(process, 'unhandledRejection', (reason) => {
475
+ this.logger.error('Unhandled rejection:', reason);
476
+ shutdown('unhandledRejection');
477
+ });
478
+ }
479
+
480
+ /**
481
+ * Get the logger instance
482
+ */
483
+ public getLogger(): winston.Logger {
484
+ return this.logger;
485
+ }
486
+
487
+ /**
488
+ * Get the underlying MCP server instance
489
+ */
490
+ public getServer(): Server {
491
+ return this.server;
492
+ }
493
+
494
+ /**
495
+ * Clean up resources and event listeners (useful for tests)
496
+ */
497
+ public cleanup(): void {
498
+ this.removeAllListeners();
499
+ }
500
+ }
@@ -0,0 +1,78 @@
1
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ import { ArgoBaseTool, ArgoCommonSchemas, executeArgoCommand } from './BaseTool.js';
3
+
4
+ /**
5
+ * List Argo cron workflows
6
+ */
7
+ export class ArgoCronListTool implements ArgoBaseTool {
8
+ tool: Tool = {
9
+ name: 'argo_cron_list',
10
+ description: 'List Argo cron workflows in the cluster (similar to `argo cron list`)',
11
+ inputSchema: {
12
+ type: 'object',
13
+ properties: {
14
+ namespace: ArgoCommonSchemas.namespace,
15
+ allNamespaces: ArgoCommonSchemas.allNamespaces,
16
+ outputFormat: {
17
+ type: 'string',
18
+ description: 'Output format for cron workflows. Supports: wide, name',
19
+ enum: ['wide', 'name'],
20
+ optional: true,
21
+ default: 'wide',
22
+ },
23
+ selector: ArgoCommonSchemas.selector,
24
+ maxCronWorkflows: {
25
+ type: 'number',
26
+ description: 'Maximum number of cron workflows to return',
27
+ optional: true,
28
+ },
29
+ showScheduled: {
30
+ type: 'boolean',
31
+ description: 'Show scheduled workflows as well',
32
+ optional: true,
33
+ },
34
+ },
35
+ required: [],
36
+ },
37
+ };
38
+
39
+ async execute(params: any): Promise<any> {
40
+ const args = ['cron', 'list'];
41
+
42
+ // Add namespace specification
43
+ if (params.allNamespaces) {
44
+ args.push('--all-namespaces');
45
+ } else if (params.namespace) {
46
+ args.push('-n', params.namespace);
47
+ }
48
+
49
+ // Add output format
50
+ if (params.outputFormat) {
51
+ args.push('-o', params.outputFormat);
52
+ }
53
+
54
+ // Add selector
55
+ if (params.selector) {
56
+ args.push('-l', params.selector);
57
+ }
58
+
59
+ // Add max cron workflows limit
60
+ if (params.maxCronWorkflows) {
61
+ args.push('--limit', params.maxCronWorkflows.toString());
62
+ }
63
+
64
+ // Add show scheduled option
65
+ if (params.showScheduled) {
66
+ args.push('--show-scheduled');
67
+ }
68
+
69
+ try {
70
+ const result = await executeArgoCommand(args);
71
+ return result;
72
+ } catch (error) {
73
+ throw new Error(
74
+ `Failed to list Argo cron workflows: ${error instanceof Error ? error.message : String(error)}`,
75
+ );
76
+ }
77
+ }
78
+ }
@@ -0,0 +1,91 @@
1
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ import { ArgoBaseTool, ArgoCommonSchemas, executeArgoCommand } from './BaseTool.js';
3
+
4
+ /**
5
+ * Get details of an Argo workflow
6
+ */
7
+ export class ArgoGetTool implements ArgoBaseTool {
8
+ tool: Tool = {
9
+ name: 'argo_get',
10
+ description: 'Get details of an Argo workflow (similar to `argo get <workflow-name>`)',
11
+ inputSchema: {
12
+ type: 'object',
13
+ properties: {
14
+ workflowName: ArgoCommonSchemas.workflowName,
15
+ namespace: ArgoCommonSchemas.namespace,
16
+ outputFormat: {
17
+ type: 'string',
18
+ description: 'Output format for workflow details. Supports: json, yaml, wide',
19
+ enum: ['json', 'yaml', 'wide'],
20
+ optional: true,
21
+ default: 'json',
22
+ },
23
+ showParameters: {
24
+ type: 'boolean',
25
+ description: 'Show workflow parameters',
26
+ optional: true,
27
+ },
28
+ showArtifacts: {
29
+ type: 'boolean',
30
+ description: 'Show workflow artifacts',
31
+ optional: true,
32
+ },
33
+ showEvents: {
34
+ type: 'boolean',
35
+ description: 'Show workflow events',
36
+ optional: true,
37
+ },
38
+ nodeFieldSelector: {
39
+ type: 'string',
40
+ description: 'Field selector to filter nodes',
41
+ optional: true,
42
+ },
43
+ },
44
+ required: ['workflowName'],
45
+ },
46
+ };
47
+
48
+ async execute(params: any): Promise<any> {
49
+ const args = ['get', params.workflowName];
50
+
51
+ // Add namespace specification
52
+ if (params.namespace) {
53
+ args.push('-n', params.namespace);
54
+ }
55
+
56
+ // Add output format
57
+ if (params.outputFormat) {
58
+ args.push('-o', params.outputFormat);
59
+ } else {
60
+ args.push('-o', 'json');
61
+ }
62
+
63
+ // Add optional flags
64
+ if (params.showParameters) {
65
+ args.push('--show-parameters');
66
+ }
67
+
68
+ if (params.showArtifacts) {
69
+ args.push('--show-artifacts');
70
+ }
71
+
72
+ if (params.showEvents) {
73
+ args.push('--show-events');
74
+ }
75
+
76
+ if (params.nodeFieldSelector) {
77
+ args.push('--node-field-selector', params.nodeFieldSelector);
78
+ }
79
+
80
+ try {
81
+ const result = await executeArgoCommand(args);
82
+ return result;
83
+ } catch (error) {
84
+ throw new Error(
85
+ `Failed to get Argo workflow ${params.workflowName}: ${
86
+ error instanceof Error ? error.message : String(error)
87
+ }`,
88
+ );
89
+ }
90
+ }
91
+ }