kubeview-mcp 1.0.0 → 1.2.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/CHANGELOG.md +29 -1
- package/README.md +149 -149
- package/TODO.md +2 -0
- package/bin/kubeview-mcp.js +1 -1
- package/bin/setup.js +37 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +12 -16
- package/dist/src/index.js.map +1 -1
- package/dist/src/kubernetes/KubernetesClient.d.ts +16 -0
- package/dist/src/kubernetes/KubernetesClient.d.ts.map +1 -1
- package/dist/src/kubernetes/KubernetesClient.js +163 -21
- package/dist/src/kubernetes/KubernetesClient.js.map +1 -1
- package/dist/src/kubernetes/RetryStrategy.d.ts.map +1 -1
- package/dist/src/kubernetes/RetryStrategy.js +5 -0
- package/dist/src/kubernetes/RetryStrategy.js.map +1 -1
- package/dist/src/kubernetes/resources/ConfigMapOperations.d.ts.map +1 -1
- package/dist/src/kubernetes/resources/ConfigMapOperations.js +5 -4
- package/dist/src/kubernetes/resources/ConfigMapOperations.js.map +1 -1
- package/dist/src/kubernetes/resources/MetricOperations.d.ts +33 -0
- package/dist/src/kubernetes/resources/MetricOperations.d.ts.map +1 -1
- package/dist/src/kubernetes/resources/MetricOperations.js +526 -42
- package/dist/src/kubernetes/resources/MetricOperations.js.map +1 -1
- package/dist/src/kubernetes/resources/SecretOperations.d.ts.map +1 -1
- package/dist/src/kubernetes/resources/SecretOperations.js +13 -6
- package/dist/src/kubernetes/resources/SecretOperations.js.map +1 -1
- package/dist/src/plugins/ArgoCDToolsPlugin.d.ts +8 -34
- package/dist/src/plugins/ArgoCDToolsPlugin.d.ts.map +1 -1
- package/dist/src/plugins/ArgoCDToolsPlugin.js +25 -107
- package/dist/src/plugins/ArgoCDToolsPlugin.js.map +1 -1
- package/dist/src/plugins/ArgoToolsPlugin.d.ts +8 -34
- package/dist/src/plugins/ArgoToolsPlugin.d.ts.map +1 -1
- package/dist/src/plugins/ArgoToolsPlugin.js +24 -101
- package/dist/src/plugins/ArgoToolsPlugin.js.map +1 -1
- package/dist/src/plugins/BaseToolsPlugin.d.ts +37 -0
- package/dist/src/plugins/BaseToolsPlugin.d.ts.map +1 -0
- package/dist/src/plugins/BaseToolsPlugin.js +114 -0
- package/dist/src/plugins/BaseToolsPlugin.js.map +1 -0
- package/dist/src/plugins/HelmToolsPlugin.d.ts +8 -30
- package/dist/src/plugins/HelmToolsPlugin.d.ts.map +1 -1
- package/dist/src/plugins/HelmToolsPlugin.js +24 -98
- package/dist/src/plugins/HelmToolsPlugin.js.map +1 -1
- package/dist/src/plugins/KubernetesToolsPlugin.d.ts +18 -8
- package/dist/src/plugins/KubernetesToolsPlugin.d.ts.map +1 -1
- package/dist/src/plugins/KubernetesToolsPlugin.js +85 -51
- package/dist/src/plugins/KubernetesToolsPlugin.js.map +1 -1
- package/dist/src/server/MCPServer.d.ts +6 -0
- package/dist/src/server/MCPServer.d.ts.map +1 -1
- package/dist/src/server/MCPServer.js +39 -13
- package/dist/src/server/MCPServer.js.map +1 -1
- package/dist/src/tools/argo/ArgoListTool.d.ts.map +1 -1
- package/dist/src/tools/argo/ArgoListTool.js +1 -1
- package/dist/src/tools/argo/ArgoListTool.js.map +1 -1
- package/dist/src/tools/argo/index.d.ts +0 -1
- package/dist/src/tools/argo/index.d.ts.map +1 -1
- package/dist/src/tools/argo/index.js +0 -1
- package/dist/src/tools/argo/index.js.map +1 -1
- package/dist/src/tools/argocd/ArgoCDAppTool.d.ts +10 -0
- package/dist/src/tools/argocd/ArgoCDAppTool.d.ts.map +1 -0
- package/dist/src/tools/argocd/ArgoCDAppTool.js +179 -0
- package/dist/src/tools/argocd/ArgoCDAppTool.js.map +1 -0
- package/dist/src/tools/argocd/index.d.ts +1 -5
- package/dist/src/tools/argocd/index.d.ts.map +1 -1
- package/dist/src/tools/argocd/index.js +1 -5
- package/dist/src/tools/argocd/index.js.map +1 -1
- package/dist/src/tools/helm/HelmGetTool.d.ts +11 -0
- package/dist/src/tools/helm/HelmGetTool.d.ts.map +1 -0
- package/dist/src/tools/helm/HelmGetTool.js +145 -0
- package/dist/src/tools/helm/HelmGetTool.js.map +1 -0
- package/dist/src/tools/helm/HelmGetValuesTool.d.ts.map +1 -1
- package/dist/src/tools/helm/HelmGetValuesTool.js +8 -0
- package/dist/src/tools/helm/HelmGetValuesTool.js.map +1 -1
- package/dist/src/tools/helm/HelmListTool.js +1 -1
- package/dist/src/tools/helm/HelmListTool.js.map +1 -1
- package/dist/src/tools/helm/HelmReleaseTool.d.ts +10 -0
- package/dist/src/tools/helm/HelmReleaseTool.d.ts.map +1 -0
- package/dist/src/tools/helm/HelmReleaseTool.js +44 -0
- package/dist/src/tools/helm/HelmReleaseTool.js.map +1 -0
- package/dist/src/tools/helm/index.d.ts +1 -8
- package/dist/src/tools/helm/index.d.ts.map +1 -1
- package/dist/src/tools/helm/index.js +1 -8
- package/dist/src/tools/helm/index.js.map +1 -1
- package/dist/src/tools/kubernetes/ExecTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/ExecTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/ExecTool.js +275 -0
- package/dist/src/tools/kubernetes/ExecTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetContainerLogsTool.js +2 -2
- package/dist/src/tools/kubernetes/GetContainerLogsTool.js.map +1 -1
- package/dist/src/tools/kubernetes/GetCronJobsTool.d.ts +8 -0
- package/dist/src/tools/kubernetes/GetCronJobsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetCronJobsTool.js +45 -0
- package/dist/src/tools/kubernetes/GetCronJobsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetDaemonSetsTool.d.ts +8 -0
- package/dist/src/tools/kubernetes/GetDaemonSetsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetDaemonSetsTool.js +53 -0
- package/dist/src/tools/kubernetes/GetDaemonSetsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetEndpointSlicesTool.d.ts +8 -0
- package/dist/src/tools/kubernetes/GetEndpointSlicesTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetEndpointSlicesTool.js +57 -0
- package/dist/src/tools/kubernetes/GetEndpointSlicesTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetEndpointsTool.d.ts +8 -0
- package/dist/src/tools/kubernetes/GetEndpointsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetEndpointsTool.js +53 -0
- package/dist/src/tools/kubernetes/GetEndpointsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetHPATool.d.ts +8 -0
- package/dist/src/tools/kubernetes/GetHPATool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetHPATool.js +45 -0
- package/dist/src/tools/kubernetes/GetHPATool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetJobsTool.d.ts +8 -0
- package/dist/src/tools/kubernetes/GetJobsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetJobsTool.js +52 -0
- package/dist/src/tools/kubernetes/GetJobsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetLimitRangesTool.d.ts +8 -0
- package/dist/src/tools/kubernetes/GetLimitRangesTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetLimitRangesTool.js +38 -0
- package/dist/src/tools/kubernetes/GetLimitRangesTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetMetricsTool.d.ts.map +1 -1
- package/dist/src/tools/kubernetes/GetMetricsTool.js +4 -1
- package/dist/src/tools/kubernetes/GetMetricsTool.js.map +1 -1
- package/dist/src/tools/kubernetes/GetNodesTool.d.ts +8 -0
- package/dist/src/tools/kubernetes/GetNodesTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetNodesTool.js +53 -0
- package/dist/src/tools/kubernetes/GetNodesTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetPDBTool.d.ts +8 -0
- package/dist/src/tools/kubernetes/GetPDBTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetPDBTool.js +46 -0
- package/dist/src/tools/kubernetes/GetPDBTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetReplicaSetsTool.d.ts +8 -0
- package/dist/src/tools/kubernetes/GetReplicaSetsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetReplicaSetsTool.js +49 -0
- package/dist/src/tools/kubernetes/GetReplicaSetsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetResourceQuotaTool.d.ts +8 -0
- package/dist/src/tools/kubernetes/GetResourceQuotaTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetResourceQuotaTool.js +53 -0
- package/dist/src/tools/kubernetes/GetResourceQuotaTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetResourceTool.d.ts +18 -1
- package/dist/src/tools/kubernetes/GetResourceTool.d.ts.map +1 -1
- package/dist/src/tools/kubernetes/GetResourceTool.js +1000 -26
- package/dist/src/tools/kubernetes/GetResourceTool.js.map +1 -1
- package/dist/src/tools/kubernetes/GetStatefulSetsTool.d.ts +8 -0
- package/dist/src/tools/kubernetes/GetStatefulSetsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetStatefulSetsTool.js +53 -0
- package/dist/src/tools/kubernetes/GetStatefulSetsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/KubeListTool.d.ts +54 -0
- package/dist/src/tools/kubernetes/KubeListTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/KubeListTool.js +1370 -0
- package/dist/src/tools/kubernetes/KubeListTool.js.map +1 -0
- package/dist/src/tools/kubernetes/KubeLogTool.d.ts +18 -0
- package/dist/src/tools/kubernetes/KubeLogTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/KubeLogTool.js +804 -0
- package/dist/src/tools/kubernetes/KubeLogTool.js.map +1 -0
- package/dist/src/tools/kubernetes/KubeMetricsTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/KubeMetricsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/KubeMetricsTool.js +174 -0
- package/dist/src/tools/kubernetes/KubeMetricsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/KubeNetTool.d.ts +27 -0
- package/dist/src/tools/kubernetes/KubeNetTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/KubeNetTool.js +420 -0
- package/dist/src/tools/kubernetes/KubeNetTool.js.map +1 -0
- package/dist/src/tools/kubernetes/PortForwardTool.d.ts +14 -0
- package/dist/src/tools/kubernetes/PortForwardTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/PortForwardTool.js +278 -0
- package/dist/src/tools/kubernetes/PortForwardTool.js.map +1 -0
- package/dist/src/tools/kubernetes/index.d.ts +6 -12
- package/dist/src/tools/kubernetes/index.d.ts.map +1 -1
- package/dist/src/tools/kubernetes/index.js +6 -12
- package/dist/src/tools/kubernetes/index.js.map +1 -1
- package/dist/src/utils/CliUtils.d.ts.map +1 -1
- package/dist/src/utils/CliUtils.js +8 -3
- package/dist/src/utils/CliUtils.js.map +1 -1
- package/dist/src/utils/SensitiveData.d.ts +31 -0
- package/dist/src/utils/SensitiveData.d.ts.map +1 -0
- package/dist/src/utils/SensitiveData.js +136 -0
- package/dist/src/utils/SensitiveData.js.map +1 -0
- package/dist/tests/__mocks__/@kubernetes/client-node.d.ts +18 -0
- package/dist/tests/__mocks__/@kubernetes/client-node.d.ts.map +1 -1
- package/dist/tests/__mocks__/@kubernetes/client-node.js +18 -0
- package/dist/tests/__mocks__/@kubernetes/client-node.js.map +1 -1
- package/dist/tests/helm/BaseTool.test.js +4 -4
- package/dist/tests/helm/BaseTool.test.js.map +1 -1
- package/dist/tests/kubernetes/GetPodMetricsTool.test.js +57 -60
- package/dist/tests/kubernetes/GetPodMetricsTool.test.js.map +1 -1
- package/dist/tests/kubernetes/RetryStrategy.test.js +6 -0
- package/dist/tests/kubernetes/RetryStrategy.test.js.map +1 -1
- package/dist/tests/plugins/KubernetesToolsPlugin.test.js +29 -37
- package/dist/tests/plugins/KubernetesToolsPlugin.test.js.map +1 -1
- package/package.json +2 -2
- package/src/cli/run-command.js +2 -2
- package/src/index.ts +12 -11
- package/src/kubernetes/KubernetesClient.ts +180 -27
- package/src/kubernetes/RetryStrategy.ts +7 -0
- package/src/kubernetes/resources/ConfigMapOperations.ts +5 -4
- package/src/kubernetes/resources/MetricOperations.ts +631 -56
- package/src/kubernetes/resources/SecretOperations.ts +16 -6
- package/src/plugins/ArgoCDToolsPlugin.ts +36 -132
- package/src/plugins/ArgoToolsPlugin.ts +34 -116
- package/src/plugins/BaseToolsPlugin.ts +149 -0
- package/src/plugins/HelmToolsPlugin.ts +35 -118
- package/src/plugins/KubernetesToolsPlugin.ts +101 -70
- package/src/server/MCPServer.ts +48 -12
- package/src/tools/argo/ArgoListTool.ts +2 -1
- package/src/tools/argo/index.ts +0 -1
- package/src/tools/argocd/ArgoCDAppTool.ts +171 -0
- package/src/tools/argocd/index.ts +1 -5
- package/src/tools/helm/HelmGetTool.ts +140 -0
- package/src/tools/helm/HelmGetValuesTool.ts +8 -0
- package/src/tools/helm/HelmListTool.ts +1 -1
- package/src/tools/helm/index.ts +1 -8
- package/src/tools/kubernetes/ExecTool.ts +308 -0
- package/src/tools/kubernetes/GetContainerLogsTool.ts +2 -2
- package/src/tools/kubernetes/GetCronJobsTool.ts +47 -0
- package/src/tools/kubernetes/GetDaemonSetsTool.ts +55 -0
- package/src/tools/kubernetes/GetEndpointSlicesTool.ts +57 -0
- package/src/tools/kubernetes/GetEndpointsTool.ts +53 -0
- package/src/tools/kubernetes/GetHPATool.ts +48 -0
- package/src/tools/kubernetes/GetJobsTool.ts +54 -0
- package/src/tools/kubernetes/GetLimitRangesTool.ts +40 -0
- package/src/tools/kubernetes/GetMetricsTool.ts +9 -1
- package/src/tools/kubernetes/GetNodesTool.ts +55 -0
- package/src/tools/kubernetes/GetPDBTool.ts +48 -0
- package/src/tools/kubernetes/GetReplicaSetsTool.ts +51 -0
- package/src/tools/kubernetes/GetResourceQuotaTool.ts +55 -0
- package/src/tools/kubernetes/GetResourceTool.ts +1233 -27
- package/src/tools/kubernetes/GetStatefulSetsTool.ts +55 -0
- package/src/tools/kubernetes/KubeListTool.ts +1684 -0
- package/src/tools/kubernetes/KubeLogTool.ts +935 -0
- package/src/tools/kubernetes/KubeMetricsTool.ts +220 -0
- package/src/tools/kubernetes/KubeNetTool.ts +481 -0
- package/src/tools/kubernetes/PortForwardTool.ts +307 -0
- package/src/tools/kubernetes/index.ts +6 -12
- package/src/utils/CliUtils.ts +14 -3
- package/src/utils/SensitiveData.ts +148 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,34 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.1.0] - 2025-08-09
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **CLI Support Detection**: Added optional CLI support detection and improve plugin loading.
|
|
12
|
+
- **Multi-pod Log Streaming**: Added `KubeLogTool` for multi-pod log streaming with event merging.
|
|
13
|
+
- **Storage Diagnostics**: Enhanced `KubernetesClient` and `KubeListTool` with storage diagnostics.
|
|
14
|
+
- **RBAC Support**: Enhanced `KubernetesClient` and tools with RBAC support.
|
|
15
|
+
- **Network Diagnostics**: Added `KubeNetTool` for network diagnostics.
|
|
16
|
+
- **Sensitive Data Masking**: Implement sensitive data masking across outputs.
|
|
17
|
+
- **Exec Tool**: Added `ExecTool` for executing commands in Kubernetes pods.
|
|
18
|
+
- **Port Forward Tool**: Added `PortForwardTool` to Kubernetes tools.
|
|
19
|
+
- **Prometheus Target Discovery**: Enhanced Prometheus target discovery and metrics handling.
|
|
20
|
+
- **onNewConversation Hook**: Implemented `onNewConversation` hook for Kubernetes tools.
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
- **URL and Timeout Parsing**: Updated `kubeview-mcp` URL and refactor timeout parsing.
|
|
24
|
+
- **Resource Tool Renaming**: Renamed `GetResourceTool` and `KubeListTool` for clarity.
|
|
25
|
+
- **Resource Tool Enhancement**: Enhanced `GetResourceTool` for broader resource support and improved diagnostics.
|
|
26
|
+
- **Helm Tool Streamlining**: Streamlined Helm tools and update CLI commands.
|
|
27
|
+
- **BaseToolsPlugin**: Refactored to introduce `BaseToolsPlugin` to reduce duplication across tool plugins.
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
- **Metric Retrieval**: Enhanced metric retrieval with improved proxy handling and fallback mechanisms.
|
|
31
|
+
- **API Call Signatures**: Corrected `CustomObjectsApi` call signatures and return `response.body` from raw metrics requests; improve kubelet summary fallback logging.
|
|
32
|
+
- **ESLint Rules**: Satisfied ESLint rules in `PortForwardTool` (no-empty/no-unused-vars).
|
|
33
|
+
- **Global Timeout Handling**: Implemented global timeout handling for tool commands.
|
|
34
|
+
- **Delay Handling**: Optimized delay handling in `RetryStrategy` for test environments.
|
|
35
|
+
|
|
8
36
|
## [1.0.0] - 2024-12-19
|
|
9
37
|
|
|
10
38
|
### Added
|
|
@@ -52,4 +80,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
52
80
|
- Integration guides for Cursor IDE
|
|
53
81
|
- API documentation for developers
|
|
54
82
|
|
|
55
|
-
[1.0.0]: https://github.com/mikhae1/kubeview-mcp/releases/tag/v1.0.0
|
|
83
|
+
[1.0.0]: https://github.com/mikhae1/kubeview-mcp/releases/tag/v1.0.0
|
package/README.md
CHANGED
|
@@ -4,47 +4,19 @@
|
|
|
4
4
|
[](https://nodejs.org/)
|
|
5
5
|
[](https://www.typescriptlang.org/)
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## Table of Contents
|
|
12
|
-
|
|
13
|
-
- [KubeView MCP – Kubernetes Model Context Protocol Server](#kubeview-mcp--kubernetes-model-context-protocol-server)
|
|
14
|
-
- [Table of Contents](#table-of-contents)
|
|
15
|
-
- [✨ Features](#-features)
|
|
16
|
-
- [🚀 Quick Start](#-quick-start)
|
|
17
|
-
- [Prerequisites](#prerequisites)
|
|
18
|
-
- [Installation](#installation)
|
|
19
|
-
- [Build & Run](#build--run)
|
|
20
|
-
- [📟 CLI Reference](#-cli-reference)
|
|
21
|
-
- [Resource Management](#resource-management)
|
|
22
|
-
- [Storage & Persistence](#storage--persistence)
|
|
23
|
-
- [Monitoring & Observability](#monitoring--observability)
|
|
24
|
-
- [Generic Resource Tool](#generic-resource-tool)
|
|
25
|
-
- [🪄 Helm Integration](#-helm-integration)
|
|
26
|
-
- [Core Operations](#core-operations)
|
|
27
|
-
- [Configuration & Values](#configuration--values)
|
|
28
|
-
- [Helm ↔ Kubernetes Bridge](#helm--kubernetes-bridge)
|
|
29
|
-
- [Example – list all Helm releases](#example--list-all-helm-releases)
|
|
30
|
-
- [Argo Integration](#argo-integration)
|
|
31
|
-
- [ArgoCD Integration](#argocd-integration)
|
|
32
|
-
- [💡 Usage Examples](#-usage-examples)
|
|
33
|
-
- [🤝 Contributing](#-contributing)
|
|
34
|
-
- [📄 License](#-license)
|
|
35
|
-
- [🙏 Acknowledgments](#-acknowledgments)
|
|
7
|
+
KubeView MCP is a read-only Model Context Protocol (MCP) server that exposes AI-friendly tools for safe Kubernetes, Helm, Argo Workflows, and Argo CD introspection. It pairs with Cursor IDE, Claude Code/Desktop, and other MCP clients to let you inspect, diagnose, and debug clusters via natural language and without any change operations.
|
|
36
8
|
|
|
37
9
|
---
|
|
38
10
|
|
|
39
11
|
## ✨ Features
|
|
40
12
|
|
|
41
|
-
- **Kubernetes
|
|
42
|
-
- **
|
|
43
|
-
- **
|
|
44
|
-
- **
|
|
45
|
-
- **
|
|
46
|
-
- **
|
|
47
|
-
- **
|
|
13
|
+
- **Kubernetes tools (read-only)**: list, get/describe, metrics, single-pod logs, multi-pod streaming logs with event merge, exec (read-only), port-forward, and in-cluster network diagnostics
|
|
14
|
+
- **Cluster overview**: one-shot, LLM-optimized diagnostics across nodes, workloads, storage, events, and security posture
|
|
15
|
+
- **Helm integration**: list releases; fetch values, manifest, notes, hooks, history, status, and parsed resources
|
|
16
|
+
- **Argo Workflows**: list/get workflows and fetch workflow logs
|
|
17
|
+
- **Argo CD**: list/get app details, resources, history, logs, and status via a single multi-operation tool
|
|
18
|
+
- **Sensitive data masking**: global redaction for secrets/tokens in ConfigMaps, Secrets, and Helm values
|
|
19
|
+
- **Zero write access**: designed to be safe in production from day one
|
|
48
20
|
|
|
49
21
|
---
|
|
50
22
|
|
|
@@ -53,17 +25,17 @@
|
|
|
53
25
|
### Zero-install via npx
|
|
54
26
|
|
|
55
27
|
```bash
|
|
56
|
-
npx https://github.com/mikhae1/kubeview-mcp
|
|
28
|
+
npx -y https://github.com/mikhae1/kubeview-mcp
|
|
57
29
|
```
|
|
58
30
|
|
|
59
|
-
|
|
31
|
+
Add to your MCP client config (for Cursor, `~/.cursor/mcp.json`):
|
|
60
32
|
|
|
61
33
|
```json
|
|
62
34
|
{
|
|
63
35
|
"mcpServers": {
|
|
64
36
|
"kubeview-mcp": {
|
|
65
37
|
"command": "npx",
|
|
66
|
-
"args": ["https://github.com/mikhae1/kubeview-mcp"],
|
|
38
|
+
"args": ["-y", "https://github.com/mikhae1/kubeview-mcp"],
|
|
67
39
|
"env": {
|
|
68
40
|
"KUBECONFIG": "$HOME/.kube/config"
|
|
69
41
|
}
|
|
@@ -74,154 +46,182 @@ _For Cursor IDE or any other MCP-compatible client, add the following entry to y
|
|
|
74
46
|
|
|
75
47
|
### Prerequisites
|
|
76
48
|
|
|
77
|
-
-
|
|
78
|
-
-
|
|
79
|
-
-
|
|
80
|
-
- **Cursor IDE** (or another MCP-compatible client) for interactive use
|
|
49
|
+
- Node.js ≥ 18
|
|
50
|
+
- Access to a Kubernetes cluster (kubeconfig)
|
|
51
|
+
- Optional CLIs on PATH when using those plugins: `helm`, `argo`, `argocd`
|
|
81
52
|
|
|
82
|
-
###
|
|
53
|
+
### Local install
|
|
83
54
|
|
|
84
55
|
```bash
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
# Install dependencies
|
|
90
|
-
$ npm install
|
|
56
|
+
git clone https://github.com/mikhae1/kubeview-mcp.git
|
|
57
|
+
cd kubeview-mcp
|
|
58
|
+
npm install
|
|
91
59
|
|
|
92
|
-
# Generate local
|
|
93
|
-
|
|
60
|
+
# Generate local MCP config entries for Cursor and/or Claude Desktop
|
|
61
|
+
npm run setup
|
|
94
62
|
```
|
|
95
63
|
|
|
96
|
-
###
|
|
64
|
+
### Run
|
|
97
65
|
|
|
98
66
|
```bash
|
|
99
|
-
#
|
|
100
|
-
|
|
67
|
+
# Build and start
|
|
68
|
+
npm run build
|
|
69
|
+
npm start
|
|
101
70
|
|
|
102
|
-
#
|
|
103
|
-
|
|
71
|
+
# Or use the bundled binary wrapper
|
|
72
|
+
kubeview-mcp serve
|
|
104
73
|
```
|
|
105
74
|
|
|
106
|
-
The server will automatically locate your *kubeconfig* and use the current k8s context for all operations.
|
|
107
|
-
|
|
108
75
|
---
|
|
109
76
|
|
|
110
|
-
## 📟 CLI
|
|
77
|
+
## 📟 Tool Index (CLI)
|
|
111
78
|
|
|
112
|
-
|
|
79
|
+
Invoke tools with the helper:
|
|
113
80
|
|
|
114
81
|
```bash
|
|
115
|
-
npm run command -- <tool_name> [
|
|
82
|
+
npm run command -- <tool_name> [--param=value ...]
|
|
116
83
|
```
|
|
117
84
|
|
|
118
|
-
###
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
85
|
+
### Kubernetes
|
|
86
|
+
|
|
87
|
+
- **kube_list**: List resources or, when no `resourceType` is provided, return a cluster diagnostics overview
|
|
88
|
+
- Params: `resourceType`, `namespace`, `labelSelector`, `fieldSelector`
|
|
89
|
+
- Supported `resourceType` for listing: `pod`, `service`, `deployment`, `node`, `namespace`, `persistentvolume`, `persistentvolumeclaim`, `secret`, `configmap`, `role`, `clusterrole`, `rolebinding`, `clusterrolebinding`
|
|
90
|
+
- **kube_get**: Describe a single resource or list a type using plural, kind, shortname, or fully-qualified `group/version/resource`
|
|
91
|
+
- Params: `resourceType` (required), `name`, `namespace`, `includeEvents`, `includeDiagnostics`, `eventsLimit`, `restartThreshold`, `skipSanitize` (for ConfigMaps)
|
|
92
|
+
- **kube_metrics**: Node and pod CPU/memory metrics, optional Prometheus enrichment and diagnostics
|
|
93
|
+
- Params: `scope` (`all|nodes|pods`), `namespace`, `podName`, `includeSummary`, `diagnostics`, `prometheusQueries[]`, `fetchPodSpecs`, thresholds (`topN`, `cpuSaturationThreshold`, `memorySaturationThreshold`, `podRestartThreshold`, `podLimitPressureThreshold`)
|
|
94
|
+
- **kube_logs**: Pod/container logs (like `kubectl logs`)
|
|
95
|
+
- Params: `podName` (required), `namespace`, `container`, `tailLines`, `since`, `previous`, `timestamps`
|
|
96
|
+
- **kube_log**: Multi-pod & multi-container log tail with dynamic discovery and merged Events
|
|
97
|
+
- Selectors: `namespace`, `labelSelector`, `ownerKind` (`Deployment|DaemonSet|Job`), `ownerName`
|
|
98
|
+
- Filters: `podRegex`, `containerRegex`, `messageRegex`, `excludeRegex`, `jsonPaths` (e.g., `[{"path":"level","equals":"error"}]`)
|
|
99
|
+
- Time/tail: `tailLines`, `since` (e.g., `15m`), `sinceTime` (RFC3339), `timestamps`, `previous`
|
|
100
|
+
- Session bounds: `durationSeconds` (default 30), `maxLines`
|
|
101
|
+
- Events: `includeEvents` (default true), `eventType` (`Normal|Warning|All`)
|
|
102
|
+
- Output: `structure` (`object|text`). In object mode each line has `type: 'log'|'event'`. In text mode events are prefixed with `[event]`.
|
|
103
|
+
- **kube_exec**: Execute a command in a container via Kubernetes API only; returns stdout/stderr
|
|
104
|
+
- Params: `podName` (required), `namespace`, `container`, `args[]` | `argv` | `command`, `stdin`, `tty`, `timeoutSeconds`, `shell`
|
|
105
|
+
- **kube_port**: Temporary port-forward to a pod or service (auto-terminates)
|
|
106
|
+
- Params: `namespace`, `podName` | `serviceName`, `remotePort` (required), `localPort`, `address`, `timeoutSeconds`, `readinessTimeoutSeconds`
|
|
107
|
+
- **kube_net**: In-pod network diagnostics (DNS resolution, internet egress, pod/service connectivity)
|
|
108
|
+
- Params: `sourcePod` (required), `namespace`, `container`, `targetPod`, `targetPodNamespace`, `targetService`, `targetServiceNamespace`, `targetPort`, `externalHost`, `externalPort`, `dnsNames[]`, toggles: `runDnsTest`, `runInternetTest`, `runPodConnectivityTest`, `runServiceConnectivityTest`, `timeoutSeconds`
|
|
109
|
+
|
|
110
|
+
### Helm
|
|
111
|
+
|
|
112
|
+
- **helm_list**: List Helm releases
|
|
113
|
+
- Params: `namespace`, `allNamespaces`, `outputFormat`, `selector`, `maxReleases`, `deployed`, `failed`, `pending`, `superseded`, `uninstalled`, `uninstalling`
|
|
114
|
+
- **helm_get**: Get release data
|
|
115
|
+
- Params: `what` (`values|manifest|notes|hooks|resources|status|history`), `releaseName` (required), `namespace`, `revision`, `outputFormat`, `allValues`, `resourceType`, `showResources`
|
|
116
|
+
|
|
117
|
+
### Argo Workflows
|
|
118
|
+
|
|
119
|
+
- **argo_list**: List workflows with rich filters
|
|
120
|
+
- Params: `namespace`, `allNamespaces`, `outputFormat`, `selector`, status flags (`running|succeeded|failed|pending|completed|status`), `since`, `chunked`, `maxWorkflows`
|
|
121
|
+
- **argo_get**: Get workflow details
|
|
122
|
+
- Params: `workflowName` (required), `namespace`, `outputFormat`, `showParameters`, `showArtifacts`, `showEvents`, `nodeFieldSelector`
|
|
123
|
+
- **argo_logs**: Get workflow logs
|
|
124
|
+
- Params: `workflowName` (required), `namespace`, `container`, `follow`, `previous`, `since`, `sinceTime`, `tail`, `timestamps`, `grep`, `noColor`
|
|
125
|
+
|
|
126
|
+
### Argo CD
|
|
127
|
+
|
|
128
|
+
- **argocd_app**: Multi-operation tool for Argo CD apps
|
|
129
|
+
- Params: `operation` (`list|get|resources|logs|history|status`) plus operation-specific flags (`appName`, `outputFormat`, `selector`, `project`, `cluster`, `namespace`, `repo`, `health`, `sync`, `server`, `grpcWeb`, `plaintext`, `insecure`, `refresh`, `hardRefresh`, `group`, `kind`, `name`, `container`, `follow`, `previous`, `since`, `sinceTime`, `tail`, `timestamps`)
|
|
129
130
|
|
|
130
|
-
|
|
131
|
+
---
|
|
131
132
|
|
|
132
|
-
|
|
133
|
-
| ------------------------------ | ------------------------------------------------------------ |
|
|
134
|
-
| `get_persistent_volumes` | Analyse PVs and detect reclaim / capacity issues |
|
|
135
|
-
| `get_persistent_volume_claims` | Inspect PVC binding, access modes & storage-class details |
|
|
133
|
+
## ⚙️ Configuration
|
|
136
134
|
|
|
137
|
-
|
|
135
|
+
Provide env vars via your MCP client config or shell.
|
|
138
136
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
137
|
+
- **KUBECONFIG**: Path to kubeconfig (default: `$HOME/.kube/config`)
|
|
138
|
+
- **MCP_LOG_LEVEL**: `error|warn|info|debug`
|
|
139
|
+
- **MCP_LOG_ENABLE**: `true|1` to enable server file logging (default: disabled)
|
|
140
|
+
- **MCP_LOG_FILE**: Path to server log file (default when enabled: `kubeview-mcp.log`)
|
|
141
|
+
- **MCP_TIMEOUT**: Global per-tool timeout in ms (applies to all tools)
|
|
142
|
+
- CLI timeouts: **MCP_HELM_TIMEOUT**, **MCP_ARGO_TIMEOUT**, **MCP_ARGOCD_TIMEOUT** (ms)
|
|
143
|
+
- CLI executable overrides: **MCP_HELM_PATH**, **MCP_ARGO_PATH**, **MCP_ARGOCD_PATH**
|
|
144
|
+
- Plugin toggles: **MCP_DISABLE_KUBERNETES_PLUGIN**, **MCP_DISABLE_HELM_PLUGIN**, **MCP_DISABLE_ARGO_PLUGIN**, **MCP_DISABLE_ARGOCD_PLUGIN** (`true|1` to disable)
|
|
145
|
+
- Kubernetes options: **MCP_KUBE_CONTEXT**, **MCP_K8S_SKIP_TLS_VERIFY** (`true|1`)
|
|
145
146
|
|
|
146
|
-
|
|
147
|
+
Example (Cursor `mcp.json`):
|
|
147
148
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
149
|
+
```json
|
|
150
|
+
{
|
|
151
|
+
"mcpServers": {
|
|
152
|
+
"kubeview-mcp": {
|
|
153
|
+
"command": "npx",
|
|
154
|
+
"args": ["-y", "https://github.com/mikhae1/kubeview-mcp"],
|
|
155
|
+
"env": {
|
|
156
|
+
"KUBECONFIG": "$HOME/.kube/config",
|
|
157
|
+
"MCP_LOG_LEVEL": "info",
|
|
158
|
+
"MCP_HELM_TIMEOUT": "45000",
|
|
159
|
+
"MCP_DISABLE_ARGO_PLUGIN": "1"
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
```
|
|
151
165
|
|
|
152
166
|
---
|
|
153
167
|
|
|
154
|
-
##
|
|
155
|
-
|
|
156
|
-
KubeView MCP ships with a dedicated **HelmToolsPlugin** bringing first-class Helm introspection.
|
|
157
|
-
|
|
158
|
-
### Core Operations
|
|
168
|
+
## 🔒 Sensitive Data Masking
|
|
159
169
|
|
|
160
|
-
|
|
161
|
-
| ------------ | ---------------------------------------------------------- |
|
|
162
|
-
| `helm_list` | List releases across all namespaces with status & revision |
|
|
163
|
-
| `helm_status`| Full release status (history, manifest, values) |
|
|
164
|
-
| `helm_history`| Complete upgrade / rollback history |
|
|
170
|
+
Global masking prevents accidental disclosure of secrets (enabled when any of the flags below are set):
|
|
165
171
|
|
|
166
|
-
|
|
172
|
+
- Enable: `MCP_HIDE_SENSITIVE` or `MCP_HIDE_SENSITIVE_DATA` or `MCP_MASK_SENSITIVE_DATA` → `true|1|yes|on`
|
|
173
|
+
- Mask text override: `MCP_SENSITIVE_MASK` (default: `*** FILTERED ***`)
|
|
167
174
|
|
|
168
|
-
|
|
169
|
-
| ------------------ | --------------------------------------------- |
|
|
170
|
-
| `helm_get_values` | Rendered values.yaml for a release |
|
|
171
|
-
| `helm_get_manifest`| Complete aggregated Kubernetes manifest |
|
|
172
|
-
| `helm_get_notes` | Chart installation notes & post-deploy hints |
|
|
173
|
-
| `helm_get_hooks` | Pre / post hooks configured by the chart |
|
|
175
|
+
Effects:
|
|
174
176
|
|
|
175
|
-
|
|
177
|
+
- ConfigMaps: values redacted by key/value heuristics; forcing `skipSanitize=true` on `kube_get` will still be overridden by global masking
|
|
178
|
+
- Secrets: list/describe returns only key names; values are masked
|
|
179
|
+
- Helm: `helm_get` with `what=values` applies masking on returned text
|
|
176
180
|
|
|
177
|
-
|
|
178
|
-
| -------------------------- | ------------------------------------------------------------------- |
|
|
179
|
-
| `helm_get_resources` | Discover / categorise all resources created by a release |
|
|
180
|
-
| `helm_list_with_resources` | Enhanced `helm_list` that bundles the above analysis for each release |
|
|
181
|
+
---
|
|
181
182
|
|
|
182
|
-
|
|
183
|
+
## 💡 Examples
|
|
183
184
|
|
|
184
185
|
```bash
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
---
|
|
189
|
-
## Argo Integration
|
|
186
|
+
# Cluster diagnostics overview (no resourceType)
|
|
187
|
+
npm run command -- kube_list
|
|
190
188
|
|
|
191
|
-
|
|
189
|
+
# Pods in a namespace
|
|
190
|
+
npm run command -- kube_list --resourceType=pod --namespace=default
|
|
192
191
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
| `argo_get` | Get details about a workflow
|
|
196
|
-
| `argo_list` | List all Argo Workflows |
|
|
197
|
-
| `argo_logs` | Get logs from an Argo Workflow |
|
|
198
|
-
| `argo_cron_list` | List all Argo Cron Workflows |
|
|
192
|
+
# Describe a deployment with events and diagnostics
|
|
193
|
+
npm run command -- kube_get --resourceType=deployment --name=web --namespace=prod
|
|
199
194
|
|
|
200
|
-
|
|
195
|
+
# Metrics summary with diagnostics
|
|
196
|
+
npm run command -- kube_metrics --includeSummary=true --diagnostics=true
|
|
201
197
|
|
|
202
|
-
|
|
198
|
+
# Logs from a pod (last 200 lines)
|
|
199
|
+
npm run command -- kube_logs --podName=nginx-123 --namespace=default --tailLines=200
|
|
203
200
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
| `argocd_app_list` | List all ArgoCD applications |
|
|
207
|
-
| `argocd_app_get` | Get a specific ArgoCD application |
|
|
208
|
-
| `argocd_app_history` | Get the history of an ArgoCD application |
|
|
209
|
-
| `argocd_app_logs` | Get the logs of an ArgoCD application |
|
|
210
|
-
| `argocd_app_resources` | Get the resources of an ArgoCD application |
|
|
201
|
+
# Stream logs across pods by owner with events (10 minutes back)
|
|
202
|
+
npm run command -- kube_log --namespace=prod --ownerKind=Deployment --ownerName=api --since=10m --includeEvents=true --durationSeconds=20
|
|
211
203
|
|
|
212
|
-
|
|
204
|
+
# Filter by labels and container name, text output
|
|
205
|
+
npm run command -- kube_log --namespace=default --labelSelector='app=db,tier=api' --containerRegex='^(main|sidecar)$' --structure=text --durationSeconds=15
|
|
213
206
|
|
|
214
|
-
|
|
207
|
+
# Only errors from JSON logs
|
|
208
|
+
npm run command -- kube_log --namespace=prod --labelSelector='app=my-api' --jsonPaths='[{"path":"level","equals":"error"}]' --messageRegex='timeout|exception' --since=30m --durationSeconds=20
|
|
215
209
|
|
|
216
|
-
|
|
210
|
+
# Only events (text mode)
|
|
211
|
+
npm run command -- kube_log --namespace=default --includeEvents=true --structure=text --messageRegex='^\\[event\\]' --durationSeconds=10
|
|
217
212
|
|
|
218
|
-
|
|
213
|
+
# Port-forward service 80 -> local 8080 for 90s
|
|
214
|
+
npm run command -- kube_port --serviceName=my-svc --namespace=default --remotePort=80 --localPort=8080 --timeoutSeconds=90
|
|
219
215
|
|
|
220
|
-
|
|
216
|
+
# Network diagnostics from a pod
|
|
217
|
+
npm run command -- kube_net --sourcePod=api-0 --namespace=prod --targetService=db --runServiceConnectivityTest=true
|
|
221
218
|
|
|
222
|
-
|
|
219
|
+
# Helm release values (masked)
|
|
220
|
+
npm run command -- helm_get --what=values --releaseName=my-release --namespace=default --allValues=true
|
|
223
221
|
|
|
224
|
-
|
|
222
|
+
# Argo CD app resources
|
|
223
|
+
npm run command -- argocd_app --operation=resources --appName=my-app --outputFormat=json
|
|
224
|
+
```
|
|
225
225
|
|
|
226
226
|
---
|
|
227
227
|
|
|
@@ -229,23 +229,23 @@ This will trigger the `get_pods` and `get_pod_metrics` tools, combining their ou
|
|
|
229
229
|
|
|
230
230
|
1. Fork the repo
|
|
231
231
|
2. Create a feature branch: `git checkout -b feat/my-awesome-feature`
|
|
232
|
-
3. Commit
|
|
233
|
-
4. Push
|
|
234
|
-
5. Open a Pull Request
|
|
232
|
+
3. Commit: `git commit -m "feat: add my awesome feature"`
|
|
233
|
+
4. Push: `git push origin feat/my-awesome-feature`
|
|
234
|
+
5. Open a Pull Request
|
|
235
235
|
|
|
236
|
-
|
|
236
|
+
Tip: run `npm run lint` and `npm run test` locally before submitting.
|
|
237
237
|
|
|
238
238
|
---
|
|
239
239
|
|
|
240
240
|
## 📄 License
|
|
241
241
|
|
|
242
|
-
|
|
242
|
+
MIT – see `LICENSE`.
|
|
243
243
|
|
|
244
244
|
---
|
|
245
245
|
|
|
246
246
|
## 🙏 Acknowledgments
|
|
247
247
|
|
|
248
|
-
-
|
|
249
|
-
-
|
|
250
|
-
-
|
|
251
|
-
-
|
|
248
|
+
- Model Context Protocol SDK
|
|
249
|
+
- Kubernetes JavaScript Client
|
|
250
|
+
- Winston
|
|
251
|
+
- TypeScript
|
package/TODO.md
CHANGED
package/bin/kubeview-mcp.js
CHANGED
|
@@ -97,7 +97,7 @@ class KubeMCPCLI {
|
|
|
97
97
|
console.log(' kubeview-mcp test # Run tests');
|
|
98
98
|
console.log(' kubeview-mcp lint # Run linter');
|
|
99
99
|
console.log('');
|
|
100
|
-
console.log('For more information, visit: https://github.com/
|
|
100
|
+
console.log('For more information, visit: https://github.com/mikhae1/kubeview-mcp');
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
// Display version information
|
package/bin/setup.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import { fileURLToPath } from 'url';
|
|
6
|
+
import { spawnSync } from 'child_process';
|
|
6
7
|
import os from 'os';
|
|
7
8
|
|
|
8
9
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -28,6 +29,25 @@ class SetupManager {
|
|
|
28
29
|
console.log(`${color}${message}${colors.reset}`);
|
|
29
30
|
}
|
|
30
31
|
|
|
32
|
+
// Detect whether a CLI command is available by attempting a lightweight version call
|
|
33
|
+
isCliAvailable(cmd, args = ['version']) {
|
|
34
|
+
try {
|
|
35
|
+
const result = spawnSync(cmd, args, { stdio: 'ignore' });
|
|
36
|
+
return result.status === 0;
|
|
37
|
+
} catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Detect support for optional plugins
|
|
43
|
+
detectOptionalCliSupport() {
|
|
44
|
+
const helmAvailable = this.isCliAvailable('helm', ['version', '--short']);
|
|
45
|
+
const argoAvailable = this.isCliAvailable('argo', ['version']);
|
|
46
|
+
const argocdAvailable = this.isCliAvailable('argocd', ['version', '--client']);
|
|
47
|
+
|
|
48
|
+
return { helmAvailable, argoAvailable, argocdAvailable };
|
|
49
|
+
}
|
|
50
|
+
|
|
31
51
|
error(message, error = null) {
|
|
32
52
|
console.error(`${colors.red}${message}${colors.reset}`, error || '');
|
|
33
53
|
}
|
|
@@ -146,11 +166,16 @@ class SetupManager {
|
|
|
146
166
|
|
|
147
167
|
// Create MCP server configuration
|
|
148
168
|
createMcpServerConfig() {
|
|
169
|
+
const { helmAvailable, argoAvailable, argocdAvailable } = this.detectOptionalCliSupport();
|
|
149
170
|
return {
|
|
150
171
|
command: 'npx',
|
|
151
172
|
args: ['-y', 'https://github.com/mikhae1/kubeview-mcp'],
|
|
152
173
|
env: {
|
|
153
|
-
KUBECONFIG: process.env.KUBECONFIG || this.defaultKubeconfig
|
|
174
|
+
KUBECONFIG: process.env.KUBECONFIG || this.defaultKubeconfig,
|
|
175
|
+
// Disable optional plugins if their CLIs are not present to prevent startup failures in hosts like Claude
|
|
176
|
+
...(helmAvailable ? {} : { MCP_DISABLE_HELM_PLUGIN: '1' }),
|
|
177
|
+
...(argoAvailable ? {} : { MCP_DISABLE_ARGO_PLUGIN: '1' }),
|
|
178
|
+
...(argocdAvailable ? {} : { MCP_DISABLE_ARGOCD_PLUGIN: '1' }),
|
|
154
179
|
}
|
|
155
180
|
};
|
|
156
181
|
}
|
|
@@ -202,10 +227,19 @@ class SetupManager {
|
|
|
202
227
|
console.log(` Entry point: ${serverConfig.args[0]}`);
|
|
203
228
|
console.log(` Kubeconfig: ${serverConfig.env.KUBECONFIG}`);
|
|
204
229
|
|
|
205
|
-
if (serverConfig.env.
|
|
206
|
-
console.log(` Log level: ${serverConfig.env.
|
|
230
|
+
if (serverConfig.env.MCP_LOG_LEVEL) {
|
|
231
|
+
console.log(` Log level: ${serverConfig.env.MCP_LOG_LEVEL}`);
|
|
207
232
|
}
|
|
208
233
|
|
|
234
|
+
// Show optional plugin status
|
|
235
|
+
const helmDisabled = serverConfig.env.MCP_DISABLE_HELM_PLUGIN === '1' || serverConfig.env.MCP_DISABLE_HELM_PLUGIN === 'true';
|
|
236
|
+
const argoDisabled = serverConfig.env.MCP_DISABLE_ARGO_PLUGIN === '1' || serverConfig.env.MCP_DISABLE_ARGO_PLUGIN === 'true';
|
|
237
|
+
const argocdDisabled = serverConfig.env.MCP_DISABLE_ARGOCD_PLUGIN === '1' || serverConfig.env.MCP_DISABLE_ARGOCD_PLUGIN === 'true';
|
|
238
|
+
console.log(' Optional plugins:');
|
|
239
|
+
console.log(` Helm: ${helmDisabled ? 'disabled (helm CLI not found)' : 'enabled'}`);
|
|
240
|
+
console.log(` Argo: ${argoDisabled ? 'disabled (argo CLI not found)' : 'enabled'}`);
|
|
241
|
+
console.log(` ArgoCD: ${argocdDisabled ? 'disabled (argocd CLI not found)' : 'enabled'}`);
|
|
242
|
+
|
|
209
243
|
this.validateKubeconfig(serverConfig.env.KUBECONFIG);
|
|
210
244
|
|
|
211
245
|
const appName = ideName.split(' ')[0]; // Extract first word for app name
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAQH,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAQH,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAgC1C"}
|
package/dist/src/index.js
CHANGED
|
@@ -17,15 +17,18 @@ export async function main() {
|
|
|
17
17
|
// Load the Kubernetes tools plugin
|
|
18
18
|
const kubernetesPlugin = new KubernetesToolsPlugin();
|
|
19
19
|
await server.loadPlugin(kubernetesPlugin);
|
|
20
|
-
// Load
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
20
|
+
// Load optional plugins (do not fail server startup if they are unavailable)
|
|
21
|
+
const optionalPlugins = [new HelmToolsPlugin(), new ArgoToolsPlugin(), new ArgoCDToolsPlugin()];
|
|
22
|
+
for (const plugin of optionalPlugins) {
|
|
23
|
+
try {
|
|
24
|
+
await server.loadPlugin(plugin);
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
28
|
+
// Log to stderr so hosts like Claude surface it, but continue startup
|
|
29
|
+
console.error(`Optional plugin '${plugin.name}' failed to load: ${message}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
29
32
|
// Start the server
|
|
30
33
|
await server.start();
|
|
31
34
|
console.error('MCP Server is running. Waiting for connections...');
|
|
@@ -35,11 +38,4 @@ export async function main() {
|
|
|
35
38
|
process.exit(1);
|
|
36
39
|
}
|
|
37
40
|
}
|
|
38
|
-
// If this file is being run directly (not imported), start the server
|
|
39
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
40
|
-
main().catch((error) => {
|
|
41
|
-
console.error('Failed to start server:', error);
|
|
42
|
-
process.exit(1);
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
41
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,OAAO,CAAC,KAAK,CAAC,0BAA0B,OAAO,gBAAgB,CAAC,CAAC;IAEjE,IAAI,CAAC;QACH,kCAAkC;QAClC,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAE/B,mCAAmC;QACnC,MAAM,gBAAgB,GAAG,IAAI,qBAAqB,EAAE,CAAC;QACrD,MAAM,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAE1C,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,OAAO,CAAC,KAAK,CAAC,0BAA0B,OAAO,gBAAgB,CAAC,CAAC;IAEjE,IAAI,CAAC;QACH,kCAAkC;QAClC,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAE/B,mCAAmC;QACnC,MAAM,gBAAgB,GAAG,IAAI,qBAAqB,EAAE,CAAC;QACrD,MAAM,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAE1C,6EAA6E;QAC7E,MAAM,eAAe,GAAG,CAAC,IAAI,eAAe,EAAE,EAAE,IAAI,eAAe,EAAE,EAAE,IAAI,iBAAiB,EAAE,CAAC,CAAC;QAEhG,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjE,sEAAsE;gBACtE,OAAO,CAAC,KAAK,CAAC,oBAAoB,MAAM,CAAC,IAAI,qBAAqB,OAAO,EAAE,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QAErB,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -53,6 +53,12 @@ export declare class KubernetesClient {
|
|
|
53
53
|
private appsV1Api;
|
|
54
54
|
private batchV1Api;
|
|
55
55
|
private networkingV1Api;
|
|
56
|
+
private storageV1Api;
|
|
57
|
+
private autoscalingV2Api;
|
|
58
|
+
private policyV1Api;
|
|
59
|
+
private discoveryV1Api;
|
|
60
|
+
private rbacAuthorizationV1Api;
|
|
61
|
+
private authorizationV1Api;
|
|
56
62
|
private authMethod;
|
|
57
63
|
private logger?;
|
|
58
64
|
private _resources;
|
|
@@ -94,6 +100,10 @@ export declare class KubernetesClient {
|
|
|
94
100
|
* Get the current context name
|
|
95
101
|
*/
|
|
96
102
|
getCurrentContext(): string;
|
|
103
|
+
/**
|
|
104
|
+
* Get the current namespace from the active context, falling back to 'default' if undefined
|
|
105
|
+
*/
|
|
106
|
+
getCurrentNamespace(): string | undefined;
|
|
97
107
|
/**
|
|
98
108
|
* Get all available contexts
|
|
99
109
|
*/
|
|
@@ -131,7 +141,13 @@ export declare class KubernetesClient {
|
|
|
131
141
|
get apps(): k8s.AppsV1Api;
|
|
132
142
|
get batch(): k8s.BatchV1Api;
|
|
133
143
|
get networking(): k8s.NetworkingV1Api;
|
|
144
|
+
get storage(): k8s.StorageV1Api;
|
|
134
145
|
get kubeConfig(): k8s.KubeConfig;
|
|
146
|
+
get autoscaling(): k8s.AutoscalingV2Api;
|
|
147
|
+
get policy(): k8s.PolicyV1Api;
|
|
148
|
+
get discovery(): k8s.DiscoveryV1Api;
|
|
149
|
+
get rbac(): k8s.RbacAuthorizationV1Api;
|
|
150
|
+
get authorization(): k8s.AuthorizationV1Api;
|
|
135
151
|
/**
|
|
136
152
|
* Get resource operations for working with Kubernetes resources
|
|
137
153
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KubernetesClient.d.ts","sourceRoot":"","sources":["../../../src/kubernetes/KubernetesClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAIjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"KubernetesClient.d.ts","sourceRoot":"","sources":["../../../src/kubernetes/KubernetesClient.ts"],"names":[],"mappings":"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"}
|