kubectl-mcp-server 1.22.0__tar.gz → 1.23.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/PKG-INFO +1 -1
  2. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_server.egg-info/PKG-INFO +1 -1
  3. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/__init__.py +1 -1
  4. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/k8s_config.py +27 -4
  5. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/providers.py +30 -1
  6. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/setup.py +1 -1
  7. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/LICENSE +0 -0
  8. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/README.md +0 -0
  9. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_server.egg-info/SOURCES.txt +0 -0
  10. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_server.egg-info/dependency_links.txt +0 -0
  11. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_server.egg-info/entry_points.txt +0 -0
  12. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_server.egg-info/requires.txt +0 -0
  13. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_server.egg-info/top_level.txt +0 -0
  14. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/__main__.py +0 -0
  15. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/auth/__init__.py +0 -0
  16. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/auth/config.py +0 -0
  17. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/auth/scopes.py +0 -0
  18. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/auth/verifier.py +0 -0
  19. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/cli/__init__.py +0 -0
  20. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/cli/__main__.py +0 -0
  21. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/cli/cli.py +0 -0
  22. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/cli/errors.py +0 -0
  23. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/cli/output.py +0 -0
  24. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/config/__init__.py +0 -0
  25. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/config/loader.py +0 -0
  26. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/config/schema.py +0 -0
  27. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/crd_detector.py +0 -0
  28. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/diagnostics.py +0 -0
  29. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/mcp_server.py +0 -0
  30. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/observability/__init__.py +0 -0
  31. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/observability/metrics.py +0 -0
  32. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/observability/stats.py +0 -0
  33. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/observability/tracing.py +0 -0
  34. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/prompts/__init__.py +0 -0
  35. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/prompts/builtin.py +0 -0
  36. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/prompts/custom.py +0 -0
  37. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/prompts/prompts.py +0 -0
  38. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/resources/__init__.py +0 -0
  39. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/resources/resources.py +0 -0
  40. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/safety.py +0 -0
  41. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/__init__.py +0 -0
  42. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/backup.py +0 -0
  43. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/browser.py +0 -0
  44. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/capi.py +0 -0
  45. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/certs.py +0 -0
  46. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/cilium.py +0 -0
  47. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/cluster.py +0 -0
  48. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/core.py +0 -0
  49. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/cost.py +0 -0
  50. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/deployments.py +0 -0
  51. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/diagnostics.py +0 -0
  52. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/gitops.py +0 -0
  53. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/helm.py +0 -0
  54. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/keda.py +0 -0
  55. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/kiali.py +0 -0
  56. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/kind.py +0 -0
  57. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/kubevirt.py +0 -0
  58. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/networking.py +0 -0
  59. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/operations.py +0 -0
  60. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/pods.py +0 -0
  61. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/policy.py +0 -0
  62. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/rollouts.py +0 -0
  63. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/security.py +0 -0
  64. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/storage.py +0 -0
  65. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/ui.py +0 -0
  66. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/utils.py +0 -0
  67. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/tools/vind.py +0 -0
  68. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/utils/__init__.py +0 -0
  69. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/kubectl_mcp_tool/utils/helpers.py +0 -0
  70. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/setup.cfg +0 -0
  71. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/tests/__init__.py +0 -0
  72. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/tests/conftest.py +0 -0
  73. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/tests/test_auth.py +0 -0
  74. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/tests/test_browser.py +0 -0
  75. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/tests/test_cli.py +0 -0
  76. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/tests/test_config.py +0 -0
  77. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/tests/test_ecosystem.py +0 -0
  78. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/tests/test_kind.py +0 -0
  79. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/tests/test_mcp_integration.py +0 -0
  80. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/tests/test_observability.py +0 -0
  81. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/tests/test_prompts.py +0 -0
  82. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/tests/test_resources.py +0 -0
  83. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/tests/test_safety.py +0 -0
  84. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/tests/test_server.py +0 -0
  85. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/tests/test_tools.py +0 -0
  86. {kubectl_mcp_server-1.22.0 → kubectl_mcp_server-1.23.0}/tests/test_vind.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kubectl-mcp-server
3
- Version: 1.22.0
3
+ Version: 1.23.0
4
4
  Summary: A Model Context Protocol (MCP) server for Kubernetes with 270+ tools, 8 resources, and 8 prompts
5
5
  Home-page: https://github.com/rohitg00/kubectl-mcp-server
6
6
  Author: Rohit Ghumare
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kubectl-mcp-server
3
- Version: 1.22.0
3
+ Version: 1.23.0
4
4
  Summary: A Model Context Protocol (MCP) server for Kubernetes with 270+ tools, 8 resources, and 8 prompts
5
5
  Home-page: https://github.com/rohitg00/kubectl-mcp-server
6
6
  Author: Rohit Ghumare
@@ -7,7 +7,7 @@ with Kubernetes clusters through natural language commands.
7
7
  For more information, see: https://github.com/rohitg00/kubectl-mcp-server
8
8
  """
9
9
 
10
- __version__ = "1.22.0"
10
+ __version__ = "1.23.0"
11
11
 
12
12
  from .mcp_server import MCPServer
13
13
  from .diagnostics import run_diagnostics, check_kubectl_installation, check_cluster_connection
@@ -203,6 +203,7 @@ try:
203
203
  KubernetesProvider,
204
204
  ProviderConfig,
205
205
  ProviderType,
206
+ ProviderError,
206
207
  UnknownContextError,
207
208
  get_provider,
208
209
  get_context_names,
@@ -262,9 +263,21 @@ def load_kubernetes_config(context: str = ""):
262
263
 
263
264
 
264
265
  def _patched_load_kube_config(*args, **kwargs):
265
- """Patched version of load_kube_config that tries in-cluster first."""
266
+ """Patched version of load_kube_config that tries in-cluster first.
267
+
268
+ When called with explicit arguments (config_file, context, client_configuration),
269
+ always pass through to the original function. Only try in-cluster as a
270
+ fallback for bare calls during initial module loading.
271
+ """
266
272
  global _config_loaded, _original_load_kube_config
267
273
 
274
+ has_explicit_args = bool(args) or bool(kwargs)
275
+
276
+ if has_explicit_args and _original_load_kube_config:
277
+ _original_load_kube_config(*args, **kwargs)
278
+ _config_loaded = True
279
+ return
280
+
268
281
  if _config_loaded:
269
282
  return
270
283
 
@@ -326,7 +339,7 @@ def _load_config_for_context(context: str = "") -> Any:
326
339
  try:
327
340
  provider = get_provider()
328
341
  return provider.get_api_client(context)
329
- except UnknownContextError:
342
+ except (UnknownContextError, ProviderError):
330
343
  raise
331
344
  except Exception as e:
332
345
  logger.warning(f"Provider failed, falling back to basic config: {e}")
@@ -338,11 +351,20 @@ def _load_config_for_context(context: str = "") -> Any:
338
351
  config.load_incluster_config()
339
352
  return client.ApiClient()
340
353
  except ConfigException:
341
- pass
354
+ logger.debug("In-cluster config not available in fallback path")
342
355
 
343
356
  kubeconfig_path = os.environ.get('KUBECONFIG', '~/.kube/config')
344
357
  kubeconfig_path = os.path.expanduser(kubeconfig_path)
345
358
 
359
+ if not os.path.exists(kubeconfig_path):
360
+ raise RuntimeError(
361
+ f"No Kubernetes configuration found. "
362
+ f"In-cluster config not available and kubeconfig not found at '{kubeconfig_path}'. "
363
+ f"If running in a Kubernetes pod, ensure the ServiceAccount token is mounted "
364
+ f"and KUBERNETES_SERVICE_HOST/KUBERNETES_SERVICE_PORT env vars are set. "
365
+ f"Set MCP_K8S_PROVIDER=in-cluster for in-cluster deployments."
366
+ )
367
+
346
368
  api_config = client.Configuration()
347
369
 
348
370
  if context:
@@ -543,7 +565,8 @@ _BASE_EXPORTS = [
543
565
  if _HAS_PROVIDER:
544
566
  __all__ = _BASE_EXPORTS + [
545
567
  "KubernetesProvider", "ProviderConfig", "ProviderType",
546
- "UnknownContextError", "get_provider", "validate_context",
568
+ "ProviderError", "UnknownContextError",
569
+ "get_provider", "validate_context",
547
570
  ]
548
571
  else:
549
572
  __all__ = _BASE_EXPORTS
@@ -150,8 +150,37 @@ class KubernetesProvider:
150
150
  raise ProviderError(f"Failed to load context '{self.config.context}': {e}")
151
151
 
152
152
  def _initialize_kubeconfig(self):
153
- """Initialize for multi-cluster kubeconfig provider."""
153
+ """Initialize for multi-cluster kubeconfig provider.
154
+
155
+ Falls back to in-cluster config if kubeconfig file is not found.
156
+ """
154
157
  from kubernetes import config
158
+ from kubernetes.config.config_exception import ConfigException
159
+
160
+ kubeconfig_exists = os.path.exists(self.config.kubeconfig_path)
161
+
162
+ if not kubeconfig_exists:
163
+ try:
164
+ config.load_incluster_config()
165
+ self._in_cluster = True
166
+ self._active_context = "in-cluster"
167
+ self._contexts_cache = []
168
+ logger.info(
169
+ f"Kubeconfig not found at {self.config.kubeconfig_path}, "
170
+ f"using in-cluster config"
171
+ )
172
+ return
173
+ except ConfigException:
174
+ raise ProviderError(
175
+ f"No Kubernetes configuration found. "
176
+ f"Kubeconfig not found at '{self.config.kubeconfig_path}' and "
177
+ f"in-cluster config is not available. "
178
+ f"Ensure a valid kubeconfig exists, or if running inside a "
179
+ f"Kubernetes pod, verify the ServiceAccount token is mounted "
180
+ f"and KUBERNETES_SERVICE_HOST/KUBERNETES_SERVICE_PORT env vars "
181
+ f"are set. For in-cluster deployments, set "
182
+ f"MCP_K8S_PROVIDER=in-cluster."
183
+ )
155
184
 
156
185
  try:
157
186
  contexts, active = config.list_kube_config_contexts(
@@ -5,7 +5,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
5
5
 
6
6
  setup(
7
7
  name="kubectl-mcp-server",
8
- version="1.22.0",
8
+ version="1.23.0",
9
9
  author="Rohit Ghumare",
10
10
  author_email="ghumare64@gmail.com",
11
11
  description="A Model Context Protocol (MCP) server for Kubernetes with 270+ tools, 8 resources, and 8 prompts",