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.
- package/.prettierrc.json +11 -0
- package/CHANGELOG.md +55 -0
- package/LICENSE +21 -0
- package/README.md +251 -0
- package/RELEASE.md +154 -0
- package/TODO.md +0 -0
- package/bin/kubeview-mcp.js +274 -0
- package/bin/setup.js +368 -0
- package/dist/src/cli/cli.d.ts +3 -0
- package/dist/src/cli/cli.d.ts.map +1 -0
- package/dist/src/cli/cli.js +23 -0
- package/dist/src/cli/cli.js.map +1 -0
- package/dist/src/index.d.ts +8 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +45 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/kubernetes/BaseResourceOperations.d.ts +155 -0
- package/dist/src/kubernetes/BaseResourceOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/BaseResourceOperations.js +136 -0
- package/dist/src/kubernetes/BaseResourceOperations.js.map +1 -0
- package/dist/src/kubernetes/CircuitBreaker.d.ts +182 -0
- package/dist/src/kubernetes/CircuitBreaker.d.ts.map +1 -0
- package/dist/src/kubernetes/CircuitBreaker.js +369 -0
- package/dist/src/kubernetes/CircuitBreaker.js.map +1 -0
- package/dist/src/kubernetes/ConnectionManager.d.ts +60 -0
- package/dist/src/kubernetes/ConnectionManager.d.ts.map +1 -0
- package/dist/src/kubernetes/ConnectionManager.js +77 -0
- package/dist/src/kubernetes/ConnectionManager.js.map +1 -0
- package/dist/src/kubernetes/ConnectionPool.d.ts +183 -0
- package/dist/src/kubernetes/ConnectionPool.d.ts.map +1 -0
- package/dist/src/kubernetes/ConnectionPool.js +437 -0
- package/dist/src/kubernetes/ConnectionPool.js.map +1 -0
- package/dist/src/kubernetes/ErrorHandler.d.ts +172 -0
- package/dist/src/kubernetes/ErrorHandler.d.ts.map +1 -0
- package/dist/src/kubernetes/ErrorHandler.js +328 -0
- package/dist/src/kubernetes/ErrorHandler.js.map +1 -0
- package/dist/src/kubernetes/ErrorHandling.d.ts +148 -0
- package/dist/src/kubernetes/ErrorHandling.d.ts.map +1 -0
- package/dist/src/kubernetes/ErrorHandling.js +304 -0
- package/dist/src/kubernetes/ErrorHandling.js.map +1 -0
- package/dist/src/kubernetes/KubernetesClient.d.ts +162 -0
- package/dist/src/kubernetes/KubernetesClient.d.ts.map +1 -0
- package/dist/src/kubernetes/KubernetesClient.js +382 -0
- package/dist/src/kubernetes/KubernetesClient.js.map +1 -0
- package/dist/src/kubernetes/ResourceOperations.d.ts +69 -0
- package/dist/src/kubernetes/ResourceOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/ResourceOperations.js +99 -0
- package/dist/src/kubernetes/ResourceOperations.js.map +1 -0
- package/dist/src/kubernetes/RetryStrategy.d.ts +137 -0
- package/dist/src/kubernetes/RetryStrategy.d.ts.map +1 -0
- package/dist/src/kubernetes/RetryStrategy.js +277 -0
- package/dist/src/kubernetes/RetryStrategy.js.map +1 -0
- package/dist/src/kubernetes/RetryableOperation.d.ts +118 -0
- package/dist/src/kubernetes/RetryableOperation.d.ts.map +1 -0
- package/dist/src/kubernetes/RetryableOperation.js +233 -0
- package/dist/src/kubernetes/RetryableOperation.js.map +1 -0
- package/dist/src/kubernetes/index.d.ts +18 -0
- package/dist/src/kubernetes/index.d.ts.map +1 -0
- package/dist/src/kubernetes/index.js +28 -0
- package/dist/src/kubernetes/index.js.map +1 -0
- package/dist/src/kubernetes/resources/ConfigMapOperations.d.ts +60 -0
- package/dist/src/kubernetes/resources/ConfigMapOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/resources/ConfigMapOperations.js +306 -0
- package/dist/src/kubernetes/resources/ConfigMapOperations.js.map +1 -0
- package/dist/src/kubernetes/resources/CustomResourceOperations.d.ts +55 -0
- package/dist/src/kubernetes/resources/CustomResourceOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/resources/CustomResourceOperations.js +363 -0
- package/dist/src/kubernetes/resources/CustomResourceOperations.js.map +1 -0
- package/dist/src/kubernetes/resources/DeploymentOperations.d.ts +66 -0
- package/dist/src/kubernetes/resources/DeploymentOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/resources/DeploymentOperations.js +234 -0
- package/dist/src/kubernetes/resources/DeploymentOperations.js.map +1 -0
- package/dist/src/kubernetes/resources/IngressOperations.d.ts +60 -0
- package/dist/src/kubernetes/resources/IngressOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/resources/IngressOperations.js +224 -0
- package/dist/src/kubernetes/resources/IngressOperations.js.map +1 -0
- package/dist/src/kubernetes/resources/MetricOperations.d.ts +218 -0
- package/dist/src/kubernetes/resources/MetricOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/resources/MetricOperations.js +893 -0
- package/dist/src/kubernetes/resources/MetricOperations.js.map +1 -0
- package/dist/src/kubernetes/resources/NamespaceOperations.d.ts +38 -0
- package/dist/src/kubernetes/resources/NamespaceOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/resources/NamespaceOperations.js +101 -0
- package/dist/src/kubernetes/resources/NamespaceOperations.js.map +1 -0
- package/dist/src/kubernetes/resources/PersistentVolumeClaimOperations.d.ts +109 -0
- package/dist/src/kubernetes/resources/PersistentVolumeClaimOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/resources/PersistentVolumeClaimOperations.js +383 -0
- package/dist/src/kubernetes/resources/PersistentVolumeClaimOperations.js.map +1 -0
- package/dist/src/kubernetes/resources/PersistentVolumeOperations.d.ts +97 -0
- package/dist/src/kubernetes/resources/PersistentVolumeOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/resources/PersistentVolumeOperations.js +321 -0
- package/dist/src/kubernetes/resources/PersistentVolumeOperations.js.map +1 -0
- package/dist/src/kubernetes/resources/PodOperations.d.ts +99 -0
- package/dist/src/kubernetes/resources/PodOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/resources/PodOperations.js +333 -0
- package/dist/src/kubernetes/resources/PodOperations.js.map +1 -0
- package/dist/src/kubernetes/resources/SecretOperations.d.ts +71 -0
- package/dist/src/kubernetes/resources/SecretOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/resources/SecretOperations.js +254 -0
- package/dist/src/kubernetes/resources/SecretOperations.js.map +1 -0
- package/dist/src/kubernetes/resources/ServiceOperations.d.ts +64 -0
- package/dist/src/kubernetes/resources/ServiceOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/resources/ServiceOperations.js +232 -0
- package/dist/src/kubernetes/resources/ServiceOperations.js.map +1 -0
- package/dist/src/kubernetes/utils/ResourceUtils.d.ts +238 -0
- package/dist/src/kubernetes/utils/ResourceUtils.d.ts.map +1 -0
- package/dist/src/kubernetes/utils/ResourceUtils.js +439 -0
- package/dist/src/kubernetes/utils/ResourceUtils.js.map +1 -0
- package/dist/src/plugins/ArgoCDToolsPlugin.d.ts +45 -0
- package/dist/src/plugins/ArgoCDToolsPlugin.d.ts.map +1 -0
- package/dist/src/plugins/ArgoCDToolsPlugin.js +155 -0
- package/dist/src/plugins/ArgoCDToolsPlugin.js.map +1 -0
- package/dist/src/plugins/ArgoToolsPlugin.d.ts +45 -0
- package/dist/src/plugins/ArgoToolsPlugin.d.ts.map +1 -0
- package/dist/src/plugins/ArgoToolsPlugin.js +149 -0
- package/dist/src/plugins/ArgoToolsPlugin.js.map +1 -0
- package/dist/src/plugins/HelmToolsPlugin.d.ts +41 -0
- package/dist/src/plugins/HelmToolsPlugin.d.ts.map +1 -0
- package/dist/src/plugins/HelmToolsPlugin.js +146 -0
- package/dist/src/plugins/HelmToolsPlugin.js.map +1 -0
- package/dist/src/plugins/KubernetesToolsPlugin.d.ts +44 -0
- package/dist/src/plugins/KubernetesToolsPlugin.d.ts.map +1 -0
- package/dist/src/plugins/KubernetesToolsPlugin.js +159 -0
- package/dist/src/plugins/KubernetesToolsPlugin.js.map +1 -0
- package/dist/src/plugins/SamplePlugin.d.ts +12 -0
- package/dist/src/plugins/SamplePlugin.d.ts.map +1 -0
- package/dist/src/plugins/SamplePlugin.js +51 -0
- package/dist/src/plugins/SamplePlugin.js.map +1 -0
- package/dist/src/plugins/index.d.ts +5 -0
- package/dist/src/plugins/index.d.ts.map +1 -0
- package/dist/src/plugins/index.js +5 -0
- package/dist/src/plugins/index.js.map +1 -0
- package/dist/src/server/MCPServer.d.ts +93 -0
- package/dist/src/server/MCPServer.d.ts.map +1 -0
- package/dist/src/server/MCPServer.js +398 -0
- package/dist/src/server/MCPServer.js.map +1 -0
- package/dist/src/tools/argo/ArgoCronListTool.d.ts +10 -0
- package/dist/src/tools/argo/ArgoCronListTool.d.ts.map +1 -0
- package/dist/src/tools/argo/ArgoCronListTool.js +70 -0
- package/dist/src/tools/argo/ArgoCronListTool.js.map +1 -0
- package/dist/src/tools/argo/ArgoGetTool.d.ts +10 -0
- package/dist/src/tools/argo/ArgoGetTool.d.ts.map +1 -0
- package/dist/src/tools/argo/ArgoGetTool.js +80 -0
- package/dist/src/tools/argo/ArgoGetTool.js.map +1 -0
- package/dist/src/tools/argo/ArgoListTool.d.ts +10 -0
- package/dist/src/tools/argo/ArgoListTool.d.ts.map +1 -0
- package/dist/src/tools/argo/ArgoListTool.js +133 -0
- package/dist/src/tools/argo/ArgoListTool.js.map +1 -0
- package/dist/src/tools/argo/ArgoLogsTool.d.ts +10 -0
- package/dist/src/tools/argo/ArgoLogsTool.d.ts.map +1 -0
- package/dist/src/tools/argo/ArgoLogsTool.js +117 -0
- package/dist/src/tools/argo/ArgoLogsTool.js.map +1 -0
- package/dist/src/tools/argo/BaseTool.d.ts +60 -0
- package/dist/src/tools/argo/BaseTool.d.ts.map +1 -0
- package/dist/src/tools/argo/BaseTool.js +51 -0
- package/dist/src/tools/argo/BaseTool.js.map +1 -0
- package/dist/src/tools/argo/index.d.ts +7 -0
- package/dist/src/tools/argo/index.d.ts.map +1 -0
- package/dist/src/tools/argo/index.js +6 -0
- package/dist/src/tools/argo/index.js.map +1 -0
- package/dist/src/tools/argocd/ArgoCDAppGetTool.d.ts +10 -0
- package/dist/src/tools/argocd/ArgoCDAppGetTool.d.ts.map +1 -0
- package/dist/src/tools/argocd/ArgoCDAppGetTool.js +97 -0
- package/dist/src/tools/argocd/ArgoCDAppGetTool.js.map +1 -0
- package/dist/src/tools/argocd/ArgoCDAppHistoryTool.d.ts +10 -0
- package/dist/src/tools/argocd/ArgoCDAppHistoryTool.d.ts.map +1 -0
- package/dist/src/tools/argocd/ArgoCDAppHistoryTool.js +80 -0
- package/dist/src/tools/argocd/ArgoCDAppHistoryTool.js.map +1 -0
- package/dist/src/tools/argocd/ArgoCDAppListTool.d.ts +10 -0
- package/dist/src/tools/argocd/ArgoCDAppListTool.d.ts.map +1 -0
- package/dist/src/tools/argocd/ArgoCDAppListTool.js +128 -0
- package/dist/src/tools/argocd/ArgoCDAppListTool.js.map +1 -0
- package/dist/src/tools/argocd/ArgoCDAppLogsTool.d.ts +10 -0
- package/dist/src/tools/argocd/ArgoCDAppLogsTool.d.ts.map +1 -0
- package/dist/src/tools/argocd/ArgoCDAppLogsTool.js +143 -0
- package/dist/src/tools/argocd/ArgoCDAppLogsTool.js.map +1 -0
- package/dist/src/tools/argocd/ArgoCDAppResourcesTool.d.ts +10 -0
- package/dist/src/tools/argocd/ArgoCDAppResourcesTool.d.ts.map +1 -0
- package/dist/src/tools/argocd/ArgoCDAppResourcesTool.js +123 -0
- package/dist/src/tools/argocd/ArgoCDAppResourcesTool.js.map +1 -0
- package/dist/src/tools/argocd/BaseTool.d.ts +71 -0
- package/dist/src/tools/argocd/BaseTool.d.ts.map +1 -0
- package/dist/src/tools/argocd/BaseTool.js +62 -0
- package/dist/src/tools/argocd/BaseTool.js.map +1 -0
- package/dist/src/tools/argocd/index.d.ts +8 -0
- package/dist/src/tools/argocd/index.d.ts.map +1 -0
- package/dist/src/tools/argocd/index.js +7 -0
- package/dist/src/tools/argocd/index.js.map +1 -0
- package/dist/src/tools/helm/BaseTool.d.ts +51 -0
- package/dist/src/tools/helm/BaseTool.d.ts.map +1 -0
- package/dist/src/tools/helm/BaseTool.js +42 -0
- package/dist/src/tools/helm/BaseTool.js.map +1 -0
- package/dist/src/tools/helm/HelmGetHooksTool.d.ts +10 -0
- package/dist/src/tools/helm/HelmGetHooksTool.d.ts.map +1 -0
- package/dist/src/tools/helm/HelmGetHooksTool.js +38 -0
- package/dist/src/tools/helm/HelmGetHooksTool.js.map +1 -0
- package/dist/src/tools/helm/HelmGetManifestTool.d.ts +10 -0
- package/dist/src/tools/helm/HelmGetManifestTool.d.ts.map +1 -0
- package/dist/src/tools/helm/HelmGetManifestTool.js +38 -0
- package/dist/src/tools/helm/HelmGetManifestTool.js.map +1 -0
- package/dist/src/tools/helm/HelmGetNotesTool.d.ts +10 -0
- package/dist/src/tools/helm/HelmGetNotesTool.d.ts.map +1 -0
- package/dist/src/tools/helm/HelmGetNotesTool.js +38 -0
- package/dist/src/tools/helm/HelmGetNotesTool.js.map +1 -0
- package/dist/src/tools/helm/HelmGetResourcesTool.d.ts +13 -0
- package/dist/src/tools/helm/HelmGetResourcesTool.d.ts.map +1 -0
- package/dist/src/tools/helm/HelmGetResourcesTool.js +124 -0
- package/dist/src/tools/helm/HelmGetResourcesTool.js.map +1 -0
- package/dist/src/tools/helm/HelmGetValuesTool.d.ts +10 -0
- package/dist/src/tools/helm/HelmGetValuesTool.d.ts.map +1 -0
- package/dist/src/tools/helm/HelmGetValuesTool.js +54 -0
- package/dist/src/tools/helm/HelmGetValuesTool.js.map +1 -0
- package/dist/src/tools/helm/HelmHistoryTool.d.ts +10 -0
- package/dist/src/tools/helm/HelmHistoryTool.d.ts.map +1 -0
- package/dist/src/tools/helm/HelmHistoryTool.js +49 -0
- package/dist/src/tools/helm/HelmHistoryTool.js.map +1 -0
- package/dist/src/tools/helm/HelmListTool.d.ts +10 -0
- package/dist/src/tools/helm/HelmListTool.d.ts.map +1 -0
- package/dist/src/tools/helm/HelmListTool.js +107 -0
- package/dist/src/tools/helm/HelmListTool.js.map +1 -0
- package/dist/src/tools/helm/HelmListWithResourcesTool.d.ts +14 -0
- package/dist/src/tools/helm/HelmListWithResourcesTool.d.ts.map +1 -0
- package/dist/src/tools/helm/HelmListWithResourcesTool.js +175 -0
- package/dist/src/tools/helm/HelmListWithResourcesTool.js.map +1 -0
- package/dist/src/tools/helm/HelmStatusTool.d.ts +10 -0
- package/dist/src/tools/helm/HelmStatusTool.d.ts.map +1 -0
- package/dist/src/tools/helm/HelmStatusTool.js +54 -0
- package/dist/src/tools/helm/HelmStatusTool.js.map +1 -0
- package/dist/src/tools/helm/index.d.ts +12 -0
- package/dist/src/tools/helm/index.d.ts.map +1 -0
- package/dist/src/tools/helm/index.js +11 -0
- package/dist/src/tools/helm/index.js.map +1 -0
- package/dist/src/tools/kubernetes/BaseTool.d.ts +48 -0
- package/dist/src/tools/kubernetes/BaseTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/BaseTool.js +55 -0
- package/dist/src/tools/kubernetes/BaseTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetConfigMapTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetConfigMapTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetConfigMapTool.js +28 -0
- package/dist/src/tools/kubernetes/GetConfigMapTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetContainerLogsTool.d.ts +15 -0
- package/dist/src/tools/kubernetes/GetContainerLogsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetContainerLogsTool.js +119 -0
- package/dist/src/tools/kubernetes/GetContainerLogsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetDeploymentsTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetDeploymentsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetDeploymentsTool.js +30 -0
- package/dist/src/tools/kubernetes/GetDeploymentsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetEventsTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetEventsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetEventsTool.js +123 -0
- package/dist/src/tools/kubernetes/GetEventsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetIngressTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetIngressTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetIngressTool.js +35 -0
- package/dist/src/tools/kubernetes/GetIngressTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetMetricsTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetMetricsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetMetricsTool.js +40 -0
- package/dist/src/tools/kubernetes/GetMetricsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetNamespacesTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetNamespacesTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetNamespacesTool.js +33 -0
- package/dist/src/tools/kubernetes/GetNamespacesTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetPersistentVolumeClaimsTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetPersistentVolumeClaimsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetPersistentVolumeClaimsTool.js +92 -0
- package/dist/src/tools/kubernetes/GetPersistentVolumeClaimsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetPersistentVolumesTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetPersistentVolumesTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetPersistentVolumesTool.js +88 -0
- package/dist/src/tools/kubernetes/GetPersistentVolumesTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetPodMetricsTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetPodMetricsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetPodMetricsTool.js +100 -0
- package/dist/src/tools/kubernetes/GetPodMetricsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetPodsTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetPodsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetPodsTool.js +35 -0
- package/dist/src/tools/kubernetes/GetPodsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetResourceTool.d.ts +12 -0
- package/dist/src/tools/kubernetes/GetResourceTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetResourceTool.js +79 -0
- package/dist/src/tools/kubernetes/GetResourceTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetSecretsTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetSecretsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetSecretsTool.js +49 -0
- package/dist/src/tools/kubernetes/GetSecretsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetServicesTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetServicesTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetServicesTool.js +35 -0
- package/dist/src/tools/kubernetes/GetServicesTool.js.map +1 -0
- package/dist/src/tools/kubernetes/index.d.ts +17 -0
- package/dist/src/tools/kubernetes/index.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/index.js +16 -0
- package/dist/src/tools/kubernetes/index.js.map +1 -0
- package/dist/src/utils/CliUtils.d.ts +24 -0
- package/dist/src/utils/CliUtils.d.ts.map +1 -0
- package/dist/src/utils/CliUtils.js +159 -0
- package/dist/src/utils/CliUtils.js.map +1 -0
- package/dist/tests/__mocks__/@kubernetes/client-node.d.ts +34 -0
- package/dist/tests/__mocks__/@kubernetes/client-node.d.ts.map +1 -0
- package/dist/tests/__mocks__/@kubernetes/client-node.js +20 -0
- package/dist/tests/__mocks__/@kubernetes/client-node.js.map +1 -0
- package/dist/tests/argo/ArgoGetTool.test.d.ts +2 -0
- package/dist/tests/argo/ArgoGetTool.test.d.ts.map +1 -0
- package/dist/tests/argo/ArgoGetTool.test.js +141 -0
- package/dist/tests/argo/ArgoGetTool.test.js.map +1 -0
- package/dist/tests/helm/BaseTool.test.d.ts +2 -0
- package/dist/tests/helm/BaseTool.test.d.ts.map +1 -0
- package/dist/tests/helm/BaseTool.test.js +241 -0
- package/dist/tests/helm/BaseTool.test.js.map +1 -0
- package/dist/tests/index.test.d.ts +2 -0
- package/dist/tests/index.test.d.ts.map +1 -0
- package/dist/tests/index.test.js +7 -0
- package/dist/tests/index.test.js.map +1 -0
- package/dist/tests/kubernetes/ConfigMapOperations.test.d.ts +2 -0
- package/dist/tests/kubernetes/ConfigMapOperations.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/ConfigMapOperations.test.js +460 -0
- package/dist/tests/kubernetes/ConfigMapOperations.test.js.map +1 -0
- package/dist/tests/kubernetes/ConnectionManager.test.d.ts +2 -0
- package/dist/tests/kubernetes/ConnectionManager.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/ConnectionManager.test.js +97 -0
- package/dist/tests/kubernetes/ConnectionManager.test.js.map +1 -0
- package/dist/tests/kubernetes/ConnectionPool.test.d.ts +2 -0
- package/dist/tests/kubernetes/ConnectionPool.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/ConnectionPool.test.js +328 -0
- package/dist/tests/kubernetes/ConnectionPool.test.js.map +1 -0
- package/dist/tests/kubernetes/DeploymentOperations.test.d.ts +2 -0
- package/dist/tests/kubernetes/DeploymentOperations.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/DeploymentOperations.test.js +196 -0
- package/dist/tests/kubernetes/DeploymentOperations.test.js.map +1 -0
- package/dist/tests/kubernetes/ErrorHandling.test.d.ts +2 -0
- package/dist/tests/kubernetes/ErrorHandling.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/ErrorHandling.test.js +329 -0
- package/dist/tests/kubernetes/ErrorHandling.test.js.map +1 -0
- package/dist/tests/kubernetes/GetPodMetricsTool.test.d.ts +2 -0
- package/dist/tests/kubernetes/GetPodMetricsTool.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/GetPodMetricsTool.test.js +150 -0
- package/dist/tests/kubernetes/GetPodMetricsTool.test.js.map +1 -0
- package/dist/tests/kubernetes/KubernetesClient.test.d.ts +2 -0
- package/dist/tests/kubernetes/KubernetesClient.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/KubernetesClient.test.js +371 -0
- package/dist/tests/kubernetes/KubernetesClient.test.js.map +1 -0
- package/dist/tests/kubernetes/MetricOperations.parsing.test.d.ts +2 -0
- package/dist/tests/kubernetes/MetricOperations.parsing.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/MetricOperations.parsing.test.js +49 -0
- package/dist/tests/kubernetes/MetricOperations.parsing.test.js.map +1 -0
- package/dist/tests/kubernetes/NamespaceOperations.test.d.ts +2 -0
- package/dist/tests/kubernetes/NamespaceOperations.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/NamespaceOperations.test.js +115 -0
- package/dist/tests/kubernetes/NamespaceOperations.test.js.map +1 -0
- package/dist/tests/kubernetes/PodOperations.test.d.ts +2 -0
- package/dist/tests/kubernetes/PodOperations.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/PodOperations.test.js +209 -0
- package/dist/tests/kubernetes/PodOperations.test.js.map +1 -0
- package/dist/tests/kubernetes/RetryStrategy.test.d.ts +2 -0
- package/dist/tests/kubernetes/RetryStrategy.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/RetryStrategy.test.js +419 -0
- package/dist/tests/kubernetes/RetryStrategy.test.js.map +1 -0
- package/dist/tests/kubernetes/ServiceOperations.test.d.ts +2 -0
- package/dist/tests/kubernetes/ServiceOperations.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/ServiceOperations.test.js +159 -0
- package/dist/tests/kubernetes/ServiceOperations.test.js.map +1 -0
- package/dist/tests/plugins/KubernetesToolsPlugin.test.d.ts +2 -0
- package/dist/tests/plugins/KubernetesToolsPlugin.test.d.ts.map +1 -0
- package/dist/tests/plugins/KubernetesToolsPlugin.test.js +153 -0
- package/dist/tests/plugins/KubernetesToolsPlugin.test.js.map +1 -0
- package/dist/tests/server/MCPServer.integration.test.d.ts +2 -0
- package/dist/tests/server/MCPServer.integration.test.d.ts.map +1 -0
- package/dist/tests/server/MCPServer.integration.test.js +244 -0
- package/dist/tests/server/MCPServer.integration.test.js.map +1 -0
- package/dist/tests/server/MCPServer.test.d.ts +2 -0
- package/dist/tests/server/MCPServer.test.d.ts.map +1 -0
- package/dist/tests/server/MCPServer.test.js +257 -0
- package/dist/tests/server/MCPServer.test.js.map +1 -0
- package/package.json +85 -0
- package/src/cli/cli.ts +25 -0
- package/src/cli/run-command.js +391 -0
- package/src/index.ts +46 -0
- package/src/kubernetes/BaseResourceOperations.ts +286 -0
- package/src/kubernetes/CircuitBreaker.ts +485 -0
- package/src/kubernetes/ConnectionManager.ts +114 -0
- package/src/kubernetes/ConnectionPool.ts +551 -0
- package/src/kubernetes/ErrorHandler.ts +436 -0
- package/src/kubernetes/ErrorHandling.ts +401 -0
- package/src/kubernetes/KubernetesClient.ts +500 -0
- package/src/kubernetes/README.md +349 -0
- package/src/kubernetes/ResourceOperations.ts +116 -0
- package/src/kubernetes/RetryStrategy.ts +365 -0
- package/src/kubernetes/RetryableOperation.ts +313 -0
- package/src/kubernetes/docs/ResourceOperations.md +606 -0
- package/src/kubernetes/index.ts +116 -0
- package/src/kubernetes/resources/ConfigMapOperations.ts +367 -0
- package/src/kubernetes/resources/CustomResourceOperations.ts +392 -0
- package/src/kubernetes/resources/DeploymentOperations.ts +294 -0
- package/src/kubernetes/resources/IngressOperations.ts +277 -0
- package/src/kubernetes/resources/MetricOperations.ts +1159 -0
- package/src/kubernetes/resources/NamespaceOperations.ts +129 -0
- package/src/kubernetes/resources/PersistentVolumeClaimOperations.ts +516 -0
- package/src/kubernetes/resources/PersistentVolumeOperations.ts +438 -0
- package/src/kubernetes/resources/PodOperations.ts +417 -0
- package/src/kubernetes/resources/SecretOperations.ts +304 -0
- package/src/kubernetes/resources/ServiceOperations.ts +283 -0
- package/src/kubernetes/utils/ResourceUtils.ts +553 -0
- package/src/plugins/ArgoCDToolsPlugin.ts +189 -0
- package/src/plugins/ArgoToolsPlugin.ts +180 -0
- package/src/plugins/HelmToolsPlugin.ts +180 -0
- package/src/plugins/KubernetesToolsPlugin.ts +198 -0
- package/src/plugins/SamplePlugin.ts +60 -0
- package/src/plugins/index.ts +4 -0
- package/src/server/MCPServer.ts +500 -0
- package/src/tools/argo/ArgoCronListTool.ts +78 -0
- package/src/tools/argo/ArgoGetTool.ts +91 -0
- package/src/tools/argo/ArgoListTool.ts +143 -0
- package/src/tools/argo/ArgoLogsTool.ts +131 -0
- package/src/tools/argo/BaseTool.ts +69 -0
- package/src/tools/argo/index.ts +6 -0
- package/src/tools/argocd/ArgoCDAppGetTool.ts +109 -0
- package/src/tools/argocd/ArgoCDAppHistoryTool.ts +91 -0
- package/src/tools/argocd/ArgoCDAppListTool.ts +144 -0
- package/src/tools/argocd/ArgoCDAppLogsTool.ts +162 -0
- package/src/tools/argocd/ArgoCDAppResourcesTool.ts +139 -0
- package/src/tools/argocd/BaseTool.ts +83 -0
- package/src/tools/argocd/index.ts +7 -0
- package/src/tools/helm/BaseTool.ts +60 -0
- package/src/tools/helm/HelmGetHooksTool.ts +44 -0
- package/src/tools/helm/HelmGetManifestTool.ts +44 -0
- package/src/tools/helm/HelmGetNotesTool.ts +44 -0
- package/src/tools/helm/HelmGetResourcesTool.ts +140 -0
- package/src/tools/helm/HelmGetValuesTool.ts +62 -0
- package/src/tools/helm/HelmHistoryTool.ts +56 -0
- package/src/tools/helm/HelmListTool.ts +107 -0
- package/src/tools/helm/HelmListWithResourcesTool.ts +194 -0
- package/src/tools/helm/HelmStatusTool.ts +62 -0
- package/src/tools/helm/index.ts +11 -0
- package/src/tools/kubernetes/BaseTool.ts +76 -0
- package/src/tools/kubernetes/GetConfigMapTool.ts +33 -0
- package/src/tools/kubernetes/GetContainerLogsTool.ts +140 -0
- package/src/tools/kubernetes/GetDeploymentsTool.ts +33 -0
- package/src/tools/kubernetes/GetEventsTool.ts +133 -0
- package/src/tools/kubernetes/GetIngressTool.ts +39 -0
- package/src/tools/kubernetes/GetMetricsTool.ts +53 -0
- package/src/tools/kubernetes/GetNamespacesTool.ts +36 -0
- package/src/tools/kubernetes/GetPersistentVolumeClaimsTool.ts +113 -0
- package/src/tools/kubernetes/GetPersistentVolumesTool.ts +107 -0
- package/src/tools/kubernetes/GetPodMetricsTool.ts +113 -0
- package/src/tools/kubernetes/GetPodsTool.ts +39 -0
- package/src/tools/kubernetes/GetResourceTool.ts +90 -0
- package/src/tools/kubernetes/GetSecretsTool.ts +55 -0
- package/src/tools/kubernetes/GetServicesTool.ts +39 -0
- package/src/tools/kubernetes/index.ts +16 -0
- package/src/utils/CliUtils.ts +207 -0
- package/tsconfig.json +36 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import {
|
|
3
|
+
BaseTool,
|
|
4
|
+
CommonSchemas,
|
|
5
|
+
formatResourceMetadata,
|
|
6
|
+
formatResourceStatus,
|
|
7
|
+
} from './BaseTool.js';
|
|
8
|
+
import { KubernetesClient } from '../../kubernetes/KubernetesClient.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* List and analyze Persistent Volumes in a Kubernetes cluster
|
|
12
|
+
*/
|
|
13
|
+
export class GetPersistentVolumesTool implements BaseTool {
|
|
14
|
+
tool: Tool = {
|
|
15
|
+
name: 'get_persistent_volumes',
|
|
16
|
+
description:
|
|
17
|
+
'List all Persistent Volume resources in the current Kubernetes cluster and optionally analyze their status (similar to `kubectl get pv`)',
|
|
18
|
+
inputSchema: {
|
|
19
|
+
type: 'object',
|
|
20
|
+
properties: {
|
|
21
|
+
labelSelector: CommonSchemas.labelSelector,
|
|
22
|
+
fieldSelector: CommonSchemas.fieldSelector,
|
|
23
|
+
storageClass: {
|
|
24
|
+
type: 'string',
|
|
25
|
+
description: 'Filter by storage class name',
|
|
26
|
+
optional: true,
|
|
27
|
+
},
|
|
28
|
+
reclaimPolicy: {
|
|
29
|
+
type: 'string',
|
|
30
|
+
description: 'Filter by reclaim policy (Retain, Delete, Recycle)',
|
|
31
|
+
optional: true,
|
|
32
|
+
},
|
|
33
|
+
accessMode: {
|
|
34
|
+
type: 'string',
|
|
35
|
+
description: 'Filter by access mode (ReadWriteOnce, ReadOnlyMany, ReadWriteMany)',
|
|
36
|
+
optional: true,
|
|
37
|
+
},
|
|
38
|
+
analyze: {
|
|
39
|
+
type: 'boolean',
|
|
40
|
+
description: 'Include detailed analysis with issue detection and statistics',
|
|
41
|
+
optional: true,
|
|
42
|
+
default: true,
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
async execute(params: any, client: KubernetesClient): Promise<any> {
|
|
49
|
+
try {
|
|
50
|
+
const {
|
|
51
|
+
labelSelector,
|
|
52
|
+
fieldSelector,
|
|
53
|
+
storageClass,
|
|
54
|
+
reclaimPolicy,
|
|
55
|
+
accessMode,
|
|
56
|
+
analyze = true,
|
|
57
|
+
} = params || {};
|
|
58
|
+
const pvOperations = client.resources.persistentVolumes;
|
|
59
|
+
|
|
60
|
+
let analysis;
|
|
61
|
+
if (analyze) {
|
|
62
|
+
analysis = await pvOperations.analyzePVs({
|
|
63
|
+
labelSelector,
|
|
64
|
+
fieldSelector,
|
|
65
|
+
storageClass,
|
|
66
|
+
reclaimPolicy,
|
|
67
|
+
accessMode,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const res = await pvOperations.list({
|
|
72
|
+
labelSelector,
|
|
73
|
+
fieldSelector,
|
|
74
|
+
storageClass,
|
|
75
|
+
reclaimPolicy,
|
|
76
|
+
accessMode,
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
const persistentVolumes = res.items.map((pv: any) => ({
|
|
80
|
+
metadata: formatResourceMetadata(pv),
|
|
81
|
+
spec: {
|
|
82
|
+
capacity: pv.spec?.capacity,
|
|
83
|
+
storageClassName: pv.spec?.storageClassName,
|
|
84
|
+
accessModes: pv.spec?.accessModes,
|
|
85
|
+
persistentVolumeReclaimPolicy: pv.spec?.persistentVolumeReclaimPolicy,
|
|
86
|
+
volumeMode: pv.spec?.volumeMode,
|
|
87
|
+
claimRef: pv.spec?.claimRef,
|
|
88
|
+
},
|
|
89
|
+
status: {
|
|
90
|
+
...formatResourceStatus(pv),
|
|
91
|
+
phase: pv.status?.phase,
|
|
92
|
+
message: pv.status?.message,
|
|
93
|
+
reason: pv.status?.reason,
|
|
94
|
+
},
|
|
95
|
+
}));
|
|
96
|
+
|
|
97
|
+
return {
|
|
98
|
+
total: persistentVolumes.length,
|
|
99
|
+
analysis,
|
|
100
|
+
persistentVolumes,
|
|
101
|
+
};
|
|
102
|
+
} catch (error: any) {
|
|
103
|
+
const errorMessage = error.response?.body?.message || error.message || 'Unknown error';
|
|
104
|
+
throw new Error(`Failed to list persistent volumes: ${errorMessage}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import { BaseTool, CommonSchemas } from './BaseTool.js';
|
|
3
|
+
import { KubernetesClient } from '../../kubernetes/KubernetesClient.js';
|
|
4
|
+
import { MetricOperations } from '../../kubernetes/resources/MetricOperations.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Get pod metrics from Kubernetes metrics API
|
|
8
|
+
*/
|
|
9
|
+
export class GetPodMetricsTool implements BaseTool {
|
|
10
|
+
tool: Tool = {
|
|
11
|
+
name: 'get_pod_metrics',
|
|
12
|
+
description:
|
|
13
|
+
'Fetch CPU and memory metrics for pods in the current Kubernetes cluster (similar to `kubectl top pods`)',
|
|
14
|
+
inputSchema: {
|
|
15
|
+
type: 'object',
|
|
16
|
+
properties: {
|
|
17
|
+
namespace: {
|
|
18
|
+
...CommonSchemas.namespace,
|
|
19
|
+
description:
|
|
20
|
+
'Kubernetes namespace to fetch pod metrics from. If not specified, fetches metrics from all namespaces.',
|
|
21
|
+
},
|
|
22
|
+
podName: {
|
|
23
|
+
type: 'string',
|
|
24
|
+
description:
|
|
25
|
+
'Optional specific pod name to fetch metrics for. If provided, namespace is required.',
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
async execute(params: any, client: KubernetesClient): Promise<any> {
|
|
32
|
+
try {
|
|
33
|
+
const { namespace, podName } = params || {};
|
|
34
|
+
const metricOperations = new MetricOperations(client);
|
|
35
|
+
|
|
36
|
+
// If a specific pod name is requested, fetch metrics for that pod only
|
|
37
|
+
if (podName) {
|
|
38
|
+
if (!namespace) {
|
|
39
|
+
throw new Error('Namespace is required when fetching metrics for a specific pod');
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const podMetrics = await metricOperations.getPodMetricsByName(podName, namespace);
|
|
43
|
+
|
|
44
|
+
if (!podMetrics) {
|
|
45
|
+
return {
|
|
46
|
+
message: `No metrics found for pod '${podName}' in namespace '${namespace}'`,
|
|
47
|
+
pod: null,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return {
|
|
52
|
+
pod: {
|
|
53
|
+
name: podMetrics.metadata.name,
|
|
54
|
+
namespace: podMetrics.metadata.namespace,
|
|
55
|
+
timestamp: podMetrics.timestamp,
|
|
56
|
+
window: podMetrics.window,
|
|
57
|
+
containers: podMetrics.containers.map((container) => ({
|
|
58
|
+
name: container.name,
|
|
59
|
+
cpu: container.usage.cpu,
|
|
60
|
+
memory: container.usage.memory,
|
|
61
|
+
})),
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Otherwise, fetch metrics for all pods in the specified namespace (or all namespaces)
|
|
67
|
+
const podMetricsList = await metricOperations.getPodMetrics(namespace);
|
|
68
|
+
|
|
69
|
+
if (!podMetricsList || !podMetricsList.items || podMetricsList.items.length === 0) {
|
|
70
|
+
return {
|
|
71
|
+
total: 0,
|
|
72
|
+
namespace: namespace || 'all',
|
|
73
|
+
message: 'No pod metrics found',
|
|
74
|
+
pods: [],
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const pods = podMetricsList.items.map((podMetrics) => ({
|
|
79
|
+
name: podMetrics.metadata.name,
|
|
80
|
+
namespace: podMetrics.metadata.namespace,
|
|
81
|
+
timestamp: podMetrics.timestamp,
|
|
82
|
+
window: podMetrics.window,
|
|
83
|
+
containers: podMetrics.containers.map((container) => ({
|
|
84
|
+
name: container.name,
|
|
85
|
+
cpu: container.usage.cpu,
|
|
86
|
+
memory: container.usage.memory,
|
|
87
|
+
})),
|
|
88
|
+
// Calculate total pod usage by summing container usage
|
|
89
|
+
totalUsage: {
|
|
90
|
+
cpu: podMetrics.containers.reduce((total, container) => {
|
|
91
|
+
// Parse CPU values and sum them (handling different units like 'm', 'n')
|
|
92
|
+
const cpuValue = metricOperations.parseCpuValueToNanocores(container.usage.cpu);
|
|
93
|
+
return total + cpuValue;
|
|
94
|
+
}, 0),
|
|
95
|
+
memory: podMetrics.containers.reduce((total, container) => {
|
|
96
|
+
// Parse memory values and sum them (handling different units like 'Ki', 'Mi', 'Gi')
|
|
97
|
+
const memoryValue = metricOperations.parseMemoryValueToBytes(container.usage.memory);
|
|
98
|
+
return total + memoryValue;
|
|
99
|
+
}, 0),
|
|
100
|
+
},
|
|
101
|
+
}));
|
|
102
|
+
|
|
103
|
+
return {
|
|
104
|
+
total: pods.length,
|
|
105
|
+
namespace: namespace || 'all',
|
|
106
|
+
pods,
|
|
107
|
+
};
|
|
108
|
+
} catch (error: any) {
|
|
109
|
+
const errorMessage = error.response?.body?.message || error.message || 'Unknown error';
|
|
110
|
+
throw new Error(`Failed to get pod metrics: ${errorMessage}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import { BaseTool, CommonSchemas } from './BaseTool.js';
|
|
3
|
+
import { KubernetesClient } from '../../kubernetes/KubernetesClient.js';
|
|
4
|
+
import { PodOperations } from '../../kubernetes/resources/PodOperations.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* List pods in a Kubernetes cluster
|
|
8
|
+
*/
|
|
9
|
+
export class GetPodsTool implements BaseTool {
|
|
10
|
+
tool: Tool = {
|
|
11
|
+
name: 'get_pods',
|
|
12
|
+
description:
|
|
13
|
+
'List Pod resources in the current Kubernetes cluster (similar to `kubectl get pods`)',
|
|
14
|
+
inputSchema: {
|
|
15
|
+
type: 'object',
|
|
16
|
+
properties: {
|
|
17
|
+
namespace: CommonSchemas.namespace,
|
|
18
|
+
labelSelector: CommonSchemas.labelSelector,
|
|
19
|
+
fieldSelector: CommonSchemas.fieldSelector,
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
async execute(params: any, client: KubernetesClient): Promise<any> {
|
|
25
|
+
try {
|
|
26
|
+
const { namespace, labelSelector, fieldSelector } = params || {};
|
|
27
|
+
const podOperations = new PodOperations(client);
|
|
28
|
+
|
|
29
|
+
return await podOperations.listFormatted({
|
|
30
|
+
namespace,
|
|
31
|
+
labelSelector,
|
|
32
|
+
fieldSelector,
|
|
33
|
+
});
|
|
34
|
+
} catch (error: any) {
|
|
35
|
+
const errorMessage = error.response?.body?.message || error.message || 'Unknown error';
|
|
36
|
+
throw new Error(`Failed to list pods: ${errorMessage}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import { BaseTool, CommonSchemas } from './BaseTool.js';
|
|
3
|
+
import { KubernetesClient } from '../../kubernetes/KubernetesClient.js';
|
|
4
|
+
import { ConfigMapOperations } from '../../kubernetes/resources/ConfigMapOperations.js';
|
|
5
|
+
import { PodOperations } from '../../kubernetes/resources/PodOperations.js';
|
|
6
|
+
import { ServiceOperations } from '../../kubernetes/resources/ServiceOperations.js';
|
|
7
|
+
import { DeploymentOperations } from '../../kubernetes/resources/DeploymentOperations.js';
|
|
8
|
+
import { SecretOperations } from '../../kubernetes/resources/SecretOperations.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Get details of a specific Kubernetes resource
|
|
12
|
+
*/
|
|
13
|
+
export class GetResourceTool implements BaseTool {
|
|
14
|
+
tool: Tool = {
|
|
15
|
+
name: 'get_resource',
|
|
16
|
+
description: 'Get detailed information about a specific Kubernetes resource',
|
|
17
|
+
inputSchema: {
|
|
18
|
+
type: 'object',
|
|
19
|
+
properties: {
|
|
20
|
+
resourceType: {
|
|
21
|
+
type: 'string',
|
|
22
|
+
description: 'Type of resource (pod, service, deployment, configmap, secret)',
|
|
23
|
+
enum: ['pod', 'service', 'deployment', 'configmap', 'secret'],
|
|
24
|
+
},
|
|
25
|
+
name: CommonSchemas.name,
|
|
26
|
+
namespace: {
|
|
27
|
+
...CommonSchemas.namespace,
|
|
28
|
+
description: 'Kubernetes namespace (defaults to "default")',
|
|
29
|
+
},
|
|
30
|
+
skipSanitize: {
|
|
31
|
+
type: 'boolean',
|
|
32
|
+
description:
|
|
33
|
+
'Skip sanitizing sensitive data in ConfigMap values (only applies to configmap type)',
|
|
34
|
+
optional: true,
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
required: ['resourceType', 'name'],
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
async execute(params: any, client: KubernetesClient): Promise<any> {
|
|
42
|
+
try {
|
|
43
|
+
const { resourceType, name, namespace = 'default', skipSanitize } = params;
|
|
44
|
+
|
|
45
|
+
switch (resourceType) {
|
|
46
|
+
case 'pod':
|
|
47
|
+
return await new PodOperations(client).getFormatted(name, { namespace });
|
|
48
|
+
case 'service':
|
|
49
|
+
return await new ServiceOperations(client).getFormatted(name, { namespace });
|
|
50
|
+
case 'deployment':
|
|
51
|
+
return await new DeploymentOperations(client).getFormatted(name, { namespace });
|
|
52
|
+
case 'configmap':
|
|
53
|
+
return await this.getConfigMapDetails(client, name, namespace, skipSanitize);
|
|
54
|
+
case 'secret':
|
|
55
|
+
return await new SecretOperations(client).getFormatted(name, { namespace });
|
|
56
|
+
default:
|
|
57
|
+
throw new Error(`Unsupported resource type: ${resourceType}`);
|
|
58
|
+
}
|
|
59
|
+
} catch (error: any) {
|
|
60
|
+
const errorMessage = error.response?.body?.message || error.message || 'Unknown error';
|
|
61
|
+
throw new Error(`Failed to get resource details: ${errorMessage}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
private async getConfigMapDetails(
|
|
66
|
+
client: KubernetesClient,
|
|
67
|
+
name: string,
|
|
68
|
+
namespace: string,
|
|
69
|
+
skipSanitize?: boolean,
|
|
70
|
+
): Promise<any> {
|
|
71
|
+
const configMapOperations = new ConfigMapOperations(client);
|
|
72
|
+
const configMap = await configMapOperations.get(name, { namespace, skipSanitize });
|
|
73
|
+
|
|
74
|
+
return {
|
|
75
|
+
resourceType: 'configmap',
|
|
76
|
+
metadata: {
|
|
77
|
+
name: configMap.metadata?.name,
|
|
78
|
+
namespace: configMap.metadata?.namespace,
|
|
79
|
+
uid: configMap.metadata?.uid,
|
|
80
|
+
resourceVersion: configMap.metadata?.resourceVersion,
|
|
81
|
+
generation: configMap.metadata?.generation,
|
|
82
|
+
creationTimestamp: configMap.metadata?.creationTimestamp,
|
|
83
|
+
labels: configMap.metadata?.labels || {},
|
|
84
|
+
annotations: configMap.metadata?.annotations || {},
|
|
85
|
+
},
|
|
86
|
+
data: configMap.data || {},
|
|
87
|
+
binaryData: configMap.binaryData ? Object.keys(configMap.binaryData) : [],
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import { BaseTool, CommonSchemas } from './BaseTool.js';
|
|
3
|
+
import { KubernetesClient } from '../../kubernetes/KubernetesClient.js';
|
|
4
|
+
import { SecretOperations } from '../../kubernetes/resources/SecretOperations.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* List Secret in a Kubernetes cluster with optional data sanitization
|
|
8
|
+
*/
|
|
9
|
+
export class GetSecretsTool implements BaseTool {
|
|
10
|
+
tool: Tool = {
|
|
11
|
+
name: 'get_secrets',
|
|
12
|
+
description:
|
|
13
|
+
'List all Secret resources in the current Kubernetes cluster (similar to `kubectl get secrets`)',
|
|
14
|
+
inputSchema: {
|
|
15
|
+
type: 'object',
|
|
16
|
+
properties: {
|
|
17
|
+
namespace: CommonSchemas.namespace,
|
|
18
|
+
labelSelector: CommonSchemas.labelSelector,
|
|
19
|
+
fieldSelector: CommonSchemas.fieldSelector,
|
|
20
|
+
skipSanitize: {
|
|
21
|
+
type: 'boolean',
|
|
22
|
+
description:
|
|
23
|
+
'Skip sanitizing sensitive data in Secret values (default: false, meaning sanitization is enabled by default)',
|
|
24
|
+
optional: true,
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
async execute(params: any, client: KubernetesClient): Promise<any> {
|
|
31
|
+
try {
|
|
32
|
+
const { namespace, labelSelector, fieldSelector, skipSanitize } = params || {};
|
|
33
|
+
|
|
34
|
+
const secretOperations = new SecretOperations(client);
|
|
35
|
+
|
|
36
|
+
let res;
|
|
37
|
+
if (namespace) {
|
|
38
|
+
res = await secretOperations.list({
|
|
39
|
+
namespace,
|
|
40
|
+
labelSelector,
|
|
41
|
+
fieldSelector,
|
|
42
|
+
skipSanitize,
|
|
43
|
+
});
|
|
44
|
+
} else {
|
|
45
|
+
res = await secretOperations.list({ labelSelector, fieldSelector, skipSanitize });
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return res;
|
|
49
|
+
} catch (error: any) {
|
|
50
|
+
return {
|
|
51
|
+
error: `Failed to get secrets: ${error.message}`,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import { BaseTool, CommonSchemas } from './BaseTool.js';
|
|
3
|
+
import { KubernetesClient } from '../../kubernetes/KubernetesClient.js';
|
|
4
|
+
import { ServiceOperations } from '../../kubernetes/resources/ServiceOperations.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* List services in a Kubernetes cluster
|
|
8
|
+
*/
|
|
9
|
+
export class GetServicesTool implements BaseTool {
|
|
10
|
+
tool: Tool = {
|
|
11
|
+
name: 'get_services',
|
|
12
|
+
description:
|
|
13
|
+
'List Service resources in the current Kubernetes cluster (similar to `kubectl get svc`)',
|
|
14
|
+
inputSchema: {
|
|
15
|
+
type: 'object',
|
|
16
|
+
properties: {
|
|
17
|
+
namespace: CommonSchemas.namespace,
|
|
18
|
+
labelSelector: CommonSchemas.labelSelector,
|
|
19
|
+
fieldSelector: CommonSchemas.fieldSelector,
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
async execute(params: any, client: KubernetesClient): Promise<any> {
|
|
25
|
+
try {
|
|
26
|
+
const { namespace, labelSelector, fieldSelector } = params || {};
|
|
27
|
+
const serviceOperations = new ServiceOperations(client);
|
|
28
|
+
|
|
29
|
+
return await serviceOperations.listFormatted({
|
|
30
|
+
namespace,
|
|
31
|
+
labelSelector,
|
|
32
|
+
fieldSelector,
|
|
33
|
+
});
|
|
34
|
+
} catch (error: any) {
|
|
35
|
+
const errorMessage = error.response?.body?.message || error.message || 'Unknown error';
|
|
36
|
+
throw new Error(`Failed to list services: ${errorMessage}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type { BaseTool } from './BaseTool.js';
|
|
2
|
+
export { CommonSchemas } from './BaseTool.js';
|
|
3
|
+
export { GetPodsTool } from './GetPodsTool.js';
|
|
4
|
+
export { GetPodMetricsTool } from './GetPodMetricsTool.js';
|
|
5
|
+
export { GetServicesTool } from './GetServicesTool.js';
|
|
6
|
+
export { GetIngressTool } from './GetIngressTool.js';
|
|
7
|
+
export { GetDeploymentsTool } from './GetDeploymentsTool.js';
|
|
8
|
+
export { GetResourceTool } from './GetResourceTool.js';
|
|
9
|
+
export { GetContainerLogsTool } from './GetContainerLogsTool.js';
|
|
10
|
+
export { GetEventsTool } from './GetEventsTool.js';
|
|
11
|
+
export { GetNamespacesTool } from './GetNamespacesTool.js';
|
|
12
|
+
export { GetMetricsTool } from './GetMetricsTool.js';
|
|
13
|
+
export { GetConfigMapsTool as GetConfigMapTool } from './GetConfigMapTool.js';
|
|
14
|
+
export { GetSecretsTool } from './GetSecretsTool.js';
|
|
15
|
+
export { GetPersistentVolumesTool } from './GetPersistentVolumesTool.js';
|
|
16
|
+
export { GetPersistentVolumeClaimsTool } from './GetPersistentVolumeClaimsTool.js';
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { spawn, ChildProcessWithoutNullStreams } from 'child_process';
|
|
2
|
+
import { existsSync } from 'fs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Common CLI utilities for various tools (helm, argo, etc.)
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Gets common installation paths for a CLI tool based on the platform
|
|
10
|
+
* @param toolName The name of the CLI tool
|
|
11
|
+
* @returns Array of possible installation paths
|
|
12
|
+
*/
|
|
13
|
+
function getCommonCliPaths(toolName: string): string[] {
|
|
14
|
+
const paths = [
|
|
15
|
+
`/usr/local/bin/${toolName}`,
|
|
16
|
+
`/usr/bin/${toolName}`,
|
|
17
|
+
`/opt/homebrew/bin/${toolName}`,
|
|
18
|
+
`/snap/bin/${toolName}`,
|
|
19
|
+
];
|
|
20
|
+
|
|
21
|
+
if (process.platform === 'win32') {
|
|
22
|
+
paths.push(
|
|
23
|
+
`C:\\Program Files\\${toolName}\\${toolName}.exe`,
|
|
24
|
+
`C:\\ProgramData\\chocolatey\\bin\\${toolName}.exe`,
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return paths.filter(Boolean);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Finds a CLI executable path
|
|
33
|
+
* @param toolName The name of the CLI tool (e.g., 'helm', 'argo')
|
|
34
|
+
* @param versionArgs Arguments to check version (e.g., ['version', '--short'])
|
|
35
|
+
* @returns Promise with the executable path or null if not found
|
|
36
|
+
*/
|
|
37
|
+
export async function findCliExecutable(
|
|
38
|
+
toolName: string,
|
|
39
|
+
versionArgs: string[] = ['version'],
|
|
40
|
+
): Promise<string | null> {
|
|
41
|
+
// First try to use the tool directly (relies on PATH)
|
|
42
|
+
try {
|
|
43
|
+
await new Promise<void>((resolve, reject) => {
|
|
44
|
+
const testProcess = spawn(toolName, versionArgs, {
|
|
45
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
46
|
+
env: process.env,
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
testProcess.on('close', (code) => {
|
|
50
|
+
if (code === 0) {
|
|
51
|
+
resolve();
|
|
52
|
+
} else {
|
|
53
|
+
reject(new Error(`${toolName} not found in PATH`));
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
testProcess.on('error', reject);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
return toolName; // Found in PATH
|
|
61
|
+
} catch {
|
|
62
|
+
// Continue to fallback options
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Fallback: Check common installation paths
|
|
66
|
+
const commonPaths = getCommonCliPaths(toolName);
|
|
67
|
+
for (const cliPath of commonPaths) {
|
|
68
|
+
if (existsSync(cliPath)) {
|
|
69
|
+
return cliPath;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Executes a CLI command for any tool
|
|
78
|
+
* @param toolName The name of the CLI tool
|
|
79
|
+
* @param args Array of command arguments
|
|
80
|
+
* @param executablePath Optional executable path (for fallback scenarios)
|
|
81
|
+
* @param timeoutEnvVar Environment variable name for timeout (e.g., 'HELM_TIMEOUT', 'ARGO_TIMEOUT')
|
|
82
|
+
* @returns Promise with the command output
|
|
83
|
+
*/
|
|
84
|
+
export async function executeCliCommand(
|
|
85
|
+
toolName: string,
|
|
86
|
+
args: string[],
|
|
87
|
+
executablePath = toolName,
|
|
88
|
+
timeoutEnvVar = `${toolName.toUpperCase()}_TIMEOUT`,
|
|
89
|
+
): Promise<any> {
|
|
90
|
+
const timeout = parseInt(process.env[timeoutEnvVar] || '30000', 10);
|
|
91
|
+
const useShell = false; // Security-first approach: never use shell
|
|
92
|
+
|
|
93
|
+
if (process.env.LOG_LEVEL === 'debug') {
|
|
94
|
+
console.debug(`Executing: ${toolName} ${args.join(' ')}`);
|
|
95
|
+
console.debug(`Using shell: ${useShell}`);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return new Promise((resolve, reject) => {
|
|
99
|
+
const spawnOptions: {
|
|
100
|
+
stdio: ['pipe', 'pipe', 'pipe'];
|
|
101
|
+
env: typeof process.env;
|
|
102
|
+
} = {
|
|
103
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
104
|
+
env: { ...process.env },
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
const childProcess: ChildProcessWithoutNullStreams = spawn(executablePath, args, spawnOptions);
|
|
108
|
+
|
|
109
|
+
let stdout = '';
|
|
110
|
+
let stderr = '';
|
|
111
|
+
let timeoutHandle: NodeJS.Timeout | null = null;
|
|
112
|
+
|
|
113
|
+
// Set up timeout
|
|
114
|
+
if (timeout > 0) {
|
|
115
|
+
timeoutHandle = setTimeout(() => {
|
|
116
|
+
childProcess.kill('SIGTERM');
|
|
117
|
+
reject(
|
|
118
|
+
new Error(
|
|
119
|
+
`${toolName} command timed out after ${timeout}ms: ${toolName} ${args.join(' ')}`,
|
|
120
|
+
),
|
|
121
|
+
);
|
|
122
|
+
}, timeout);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const cleanup = () => {
|
|
126
|
+
if (timeoutHandle) {
|
|
127
|
+
clearTimeout(timeoutHandle);
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
childProcess.stdout?.on('data', (data: Buffer) => {
|
|
132
|
+
stdout += data.toString();
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
childProcess.stderr?.on('data', (data: Buffer) => {
|
|
136
|
+
stderr += data.toString();
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
childProcess.on('close', (code: number | null) => {
|
|
140
|
+
cleanup();
|
|
141
|
+
|
|
142
|
+
if (code !== 0) {
|
|
143
|
+
reject(new Error(`${toolName} command failed (exit code ${code}): ${stderr || stdout}`));
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
try {
|
|
148
|
+
// Try to parse as JSON first
|
|
149
|
+
if (stdout.trim().startsWith('{') || stdout.trim().startsWith('[')) {
|
|
150
|
+
resolve(JSON.parse(stdout));
|
|
151
|
+
} else {
|
|
152
|
+
// Return raw output for non-JSON responses
|
|
153
|
+
resolve({ output: stdout.trim() });
|
|
154
|
+
}
|
|
155
|
+
} catch {
|
|
156
|
+
// If JSON parsing fails, return raw output
|
|
157
|
+
resolve({ output: stdout.trim() });
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
childProcess.on('error', (err: Error) => {
|
|
162
|
+
cleanup();
|
|
163
|
+
reject(
|
|
164
|
+
new Error(
|
|
165
|
+
`Failed to execute ${toolName} command "${toolName} ${args.join(' ')}": ${err.message}`,
|
|
166
|
+
),
|
|
167
|
+
);
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Validates that a CLI tool is available with fallback detection
|
|
174
|
+
* @param toolName The name of the CLI tool
|
|
175
|
+
* @param versionArgs Arguments to check version (e.g., ['version', '--short'])
|
|
176
|
+
* @param timeoutEnvVar Environment variable name for timeout
|
|
177
|
+
*/
|
|
178
|
+
export async function validateCli(
|
|
179
|
+
toolName: string,
|
|
180
|
+
versionArgs: string[] = ['version'],
|
|
181
|
+
timeoutEnvVar = `${toolName.toUpperCase()}_TIMEOUT`,
|
|
182
|
+
): Promise<void> {
|
|
183
|
+
try {
|
|
184
|
+
// First try standard PATH lookup
|
|
185
|
+
await executeCliCommand(toolName, versionArgs, toolName, timeoutEnvVar);
|
|
186
|
+
} catch {
|
|
187
|
+
// If PATH lookup fails, try fallback detection
|
|
188
|
+
try {
|
|
189
|
+
const cliExecutable = await findCliExecutable(toolName, versionArgs);
|
|
190
|
+
if (!cliExecutable) {
|
|
191
|
+
throw new Error(
|
|
192
|
+
`${toolName} CLI not found. Please install ${toolName} CLI to use ${toolName} tools.`,
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Test the found executable
|
|
197
|
+
await executeCliCommand(toolName, versionArgs, cliExecutable, timeoutEnvVar);
|
|
198
|
+
} catch (fallbackError) {
|
|
199
|
+
if (fallbackError instanceof Error && fallbackError.message.includes('timed out')) {
|
|
200
|
+
throw fallbackError; // Re-throw timeout errors as-is
|
|
201
|
+
}
|
|
202
|
+
throw new Error(
|
|
203
|
+
`${toolName} CLI not found. Please install ${toolName} CLI to use ${toolName} tools.`,
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|