MCP Server Kubernetes
<p align="center"> <img src="https://raw.githubusercontent.com/Flux159/mcp-server-kubernetes/refs/heads/main/icon.png" width="200"> </p>MCP Server that can connect to a Kubernetes cluster and manage it. Supports loading kubeconfig from multiple sources in priority order.
https://github.com/user-attachments/assets/f25f8f4e-4d04-479b-9ae0-5dac452dd2ed
<a href="https://glama.ai/mcp/servers/w71ieamqrt"><img width="380" height="200" src="https://glama.ai/mcp/servers/w71ieamqrt/badge" /></a>
Installation & Usage
Prerequisites
Before using this MCP server with any tool, make sure you have:
- kubectl installed and in your PATH
- A valid kubeconfig file with contexts configured
- Access to a Kubernetes cluster configured for kubectl (e.g. minikube, Rancher Desktop, GKE, etc.)
- Helm v3 installed and in your PATH (no Tiller required). Optional if you don't plan to use Helm.
You can verify your connection by running kubectl get pods in a terminal to ensure you can connect to your cluster without credential issues.
By default, the server loads kubeconfig from ~/.kube/config. For additional authentication options (environment variables, custom paths, etc.), see ADVANCED_README.md.
Claude Code
Add the MCP server to Claude Code using the built-in command:
claude mcp add kubernetes -- npx mcp-server-kubernetesThis will automatically configure the server in your Claude Code MCP settings.
Claude Desktop
Add the following configuration to your Claude Desktop config file:
{
"mcpServers": {
"kubernetes": {
"command": "npx",
"args": ["mcp-server-kubernetes"]
}
}
}Claude Desktop Connector via mcpb
MCP Server Kubernetes is also available as a mcpb (formerly dxt) extension. In Claude Desktop, go to Settings (Cmd+, on Mac) -> Extensions -> Browse Extensions and scroll to find mcp-server-kubernetes in the modal. Install it & it will install & utilize kubectl via command line & your kubeconfig.
To manually install, you can also get the .mcpb by going to the latest Release and downloading it.
VS Code
For VS Code integration, you can use the MCP server with extensions that support the Model Context Protocol:
- Install a compatible MCP extension (such as Claude Dev or similar MCP clients)
- Configure the extension to use this server:
{
"mcpServers": {
"kubernetes": {
"command": "npx",
"args": ["mcp-server-kubernetes"],
"description": "Kubernetes cluster management and operations"
}
}
}Cursor
Cursor supports MCP servers through its AI integration. Add the server to your Cursor MCP configuration:
{
"mcpServers": {
"kubernetes": {
"command": "npx",
"args": ["mcp-server-kubernetes"]
}
}
}The server will automatically connect to your current kubectl context. You can verify the connection by asking the AI assistant to list your pods or create a test deployment.
Usage with mcp-chat
mcp-chat is a CLI chat client for MCP servers. You can use it to interact with the Kubernetes server.
npx mcp-chat --server "npx mcp-server-kubernetes"Alternatively, pass it your existing Claude Desktop configuration file from above (Linux should pass the correct path to config):
Mac:
npx mcp-chat --config "~/Library/Application Support/Claude/claude_desktop_config.json"Windows:
npx mcp-chat --config "%APPDATA%\Claude\claude_desktop_config.json"Gemini CLI
Gemini CLI allows you to install mcp servers as extensions. From a shell, install the extension by pointing to this repo:
gemini extensions install https://github.com/Flux159/mcp-server-kubernetesFeatures
- Connect to a Kubernetes cluster
- Unified kubectl API for managing resources
- Get or list resources with
kubectl_get - Describe resources with
kubectl_describe - List resources with
kubectl_get - Create resources with
kubectl_create - Apply YAML manifests with
kubectl_apply - Delete resources with
kubectl_delete - Get logs with
kubectl_logs - Manage kubectl contexts with
kubectl_context - Explain Kubernetes resources with
explain_resource - List API resources with
list_api_resources - Scale resources with
kubectl_scale - Update field(s) of a resource with
kubectl_patch - Manage deployment rollouts with
kubectl_rollout - Execute any kubectl command with
kubectl_generic - Verify connection with
ping
- Get or list resources with
- Advanced operations
- Scale deployments with
kubectl_scale(replaces legacyscale_deployment) - Port forward to pods and services with
port_forward - Run Helm operations
- Install, upgrade, and uninstall charts
- Support for custom values, repositories, and versions
- Template-based installation (
helm_template_apply) to bypass authentication issues - Template-based uninstallation (
helm_template_uninstall) to bypass authentication issues
- Pod cleanup operations
- Clean up problematic pods (
cleanup_pods) in states: Evicted, ContainerStatusUnknown, Completed, Error, ImagePullBackOff, CrashLoopBackOff
- Clean up problematic pods (
- Node management operations
- Cordoning, draining, and uncordoning nodes (
node_management) for maintenance and scaling operations
- Cordoning, draining, and uncordoning nodes (
- Scale deployments with
- Troubleshooting Prompt (
k8s-diagnose)- Guides through a systematic Kubernetes troubleshooting flow for pods based on a keyword and optional namespace.
- Non-destructive mode for read and create/update-only access to clusters
- Secrets masking for security (masks sensitive data in
kubectl get secretscommands, does not affect logs) - OpenTelemetry Observability (opt-in)
- Distributed tracing for all tool calls
- Export to Jaeger, Tempo, Grafana, or any OTLP backend
- Configurable sampling strategies
- Rich span attributes (tool name, duration, K8s context, errors)
- See docs/OBSERVABILITY.md for details
Observability
The MCP Kubernetes server includes optional OpenTelemetry integration for comprehensive observability. This feature is disabled by default and can be enabled via environment variables or Helm configuration.
Quick Start
Enable observability with environment variables:
export ENABLE_TELEMETRY=true
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
npx mcp-server-kubernetesWhat Gets Traced
- All tool calls: kubectl_get, kubectl_apply, kubectl_logs, etc.
- Execution duration: How long each operation takes
- Success/failure status: Automatic error tracking
- Kubernetes context: Namespace, context, resource type
- Rich metadata: Host, process, and custom attributes
Backends Supported
Works with any OTLP-compatible backend:
- Jaeger (open source)
- Grafana Tempo (open source)
- Grafana Cloud (commercial)
- Datadog, New Relic, Honeycomb, Lightstep, AWS X-Ray
Configuration
See docs/OBSERVABILITY.md for comprehensive documentation including:
- Configuration options
- Deployment examples (Kubernetes, Helm, Claude Code)
- Sampling strategies
- Production best practices
- Troubleshooting guide
Example with Jaeger
# Start Jaeger
docker run -d --name jaeger \
-e COLLECTOR_OTLP_ENABLED=true \
-p 16686:16686 \
-p 4317:4317 \
jaegertracing/all-in-one:latest
# Enable telemetry
export ENABLE_TELEMETRY=true
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
export OTEL_TRACES_SAMPLER=always_on
# Run server
npx mcp-server-kubernetes
# View traces: http://localhost:16686Prompts
The MCP Kubernetes server includes specialized prompts to assist with common diagnostic operations.
/k8s-diagnose Prompt
This prompt provides a systematic troubleshooting flow for Kubernetes pods. It accepts a keyword to identify relevant pods and an optional namespace to narrow the search.
The prompt's output will guide you through an autonomous troubleshooting flow, providing instructions for identifying issues, collecting evidence, and suggesting remediation steps.
Local Development
Make sure that you have bun installed. Clone the repo & install dependencies:
git clone https://github.com/Flux159/mcp-server-kubernetes.git
cd mcp-server-kubernetes
bun installDevelopment Workflow
- Start the server in development mode (watches for file changes):
bun run dev- Run unit tests:
bun run test- Build the project:
bun run build- Local Testing with Inspector
npx @modelcontextprotocol/inspector node dist/index.js
# Follow further instructions on terminal for Inspector link- Local testing with Claude Desktop
{
"mcpServers": {
"mcp-server-kubernetes": {
"command": "node",
"args": ["/path/to/your/mcp-server-kubernetes/dist/index.js"]
}
}
}- Local testing with mcp-chat
bun run chatContributing
See the CONTRIBUTING.md file for details.
Advanced
Non-Destructive Mode
You can run the server in a non-destructive mode that disables all destructive operations (delete pods, delete deployments, delete namespaces, etc.):
ALLOW_ONLY_NON_DESTRUCTIVE_TOOLS=true npx mcp-server-kubernetesFor Claude Desktop configuration with non-destructive mode:
{
"mcpServers": {
"kubernetes-readonly": {
"command": "npx",
"args": ["mcp-server-kubernetes"],
"env": {
"ALLOW_ONLY_NON_DESTRUCTIVE_TOOLS": "true"
}
}
}
}Commands Available in Non-Destructive Mode
All read-only and resource creation/update operations remain available:
- Resource Information:
kubectl_get,kubectl_describe,kubectl_logs,explain_resource,list_api_resources - Resou
…