Skip to main content
Glama
razvanmacovei

Multi Cluster Kubernetes MCP Server

README.md
# Multi Cluster Kubernetes MCP Server

[![smithery badge](https://smithery.ai/badge/@razvanmacovei/k8s-multicluster-mcp)](https://smithery.ai/server/@razvanmacovei/k8s-multicluster-mcp)
[![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
[![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-green.svg)](LICENSE)

An MCP (Model Context Protocol) server for managing multiple Kubernetes clusters simultaneously. Provides **60+ tools** covering cluster operations, resource management, monitoring, RBAC, storage, networking, and more -- all accessible through AI assistants like Claude Desktop.

## Quick Start

### Installing via Smithery

```bash
npx -y @smithery/cli install @razvanmacovei/k8s-multicluster-mcp --client claude
```

### Manual Installation

```bash
git clone https://github.com/razvanmacovei/k8s-multicluster-mcp.git
cd k8s-multicluster-mcp
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python3 app.py
```

### Docker

```bash
docker build -t k8s-mcp .
docker run -v ~/.kube:/root/.kube k8s-mcp
```

## Configuration

### Claude Desktop / MCP Client

Add to your MCP client configuration:

```json
{
  "mcpServers": {
    "kubernetes": {
      "command": "python3",
      "args": ["/path/to/k8s-multicluster-mcp/app.py"],
      "env": {
        "KUBECONFIG_DIR": "/path/to/your/kubeconfigs"
      }
    }
  }
}
```

### Environment Variables

| Variable | Default | Description |
|---|---|---|
| `KUBECONFIG_DIR` | `~/.kube` | Directory containing kubeconfig files. Each file can contain one or more contexts. |

Place your kubeconfig files in the configured directory. The server discovers all contexts across all files automatically.

### Prerequisites

- Python 3.11 or higher
- One or more kubeconfig files with valid cluster credentials
- `metrics-server` installed in clusters for `k8s_top_*` and `k8s_cluster_info` tools

## Multi-Cluster Management

This server is purpose-built for managing multiple Kubernetes clusters:

- **Automatic Discovery**: Scans all kubeconfig files in `KUBECONFIG_DIR` and aggregates contexts
- **Partial Name Matching**: Use `prod` instead of `arn:aws:eks:us-east-1:123456:cluster/prod-cluster`
- **Cross-Cluster Operations**: Compare resources, health, and configurations across clusters
- **Context Caching**: Efficient 30-second TTL cache avoids re-reading kubeconfig files on every call
- **Centralized Management**: Manage dev, staging, and production from a single interface

## Tools Reference (60+ tools)

### Cluster & Context Management (6 tools)

| Tool | Description |
|---|---|
| `k8s_get_contexts` | List all available contexts across all kubeconfig files |
| `k8s_get_namespaces` | List all namespaces in a cluster |
| `k8s_create_ns` | Create a new namespace with optional labels/annotations |
| `k8s_delete_ns` | Delete a namespace (protects system namespaces) |
| `k8s_get_nodes` | List all nodes with status, roles, capacity, and version |
| `k8s_cluster_info` | Comprehensive cluster health summary (nodes, pods, deployments, warnings) |

### Resource Discovery & Inspection (7 tools)

| Tool | Description |
|---|---|
| `k8s_get_resources` | List resources of any kind (pods, deployments, services, ingress, etc.) |
| `k8s_get_resource` | Get the complete definition of a single resource |
| `k8s_get_pod_logs` | Get pod logs with duration filtering and container selection |
| `k8s_get_events` | List cluster events in a namespace, sorted by most recent |
| `k8s_describe` | Detailed resource description similar to `kubectl describe` |
| `k8s_apis` | List all available API groups and resources in the cluster |
| `k8s_crds` | List all Custom Resource Definitions with versions and scope |

### Metrics & Monitoring (3 tools)

| Tool | Description |
|---|---|
| `k8s_top_nodes` | Display node CPU/memory usage alongside capacity |
| `k8s_top_pods` | Display pod/container CPU/memory usage |
| `k8s_diagnose_application` | Comprehensive app diagnostics with issue detection and recommendations |

### Rollout Management (6 tools)

| Tool | Description |
|---|---|
| `k8s_rollout_status` | Get rollout status for deployment/statefulset/daemonset |
| `k8s_rollout_history` | Get revision history |
| `k8s_rollout_undo` | Roll back to a previous revision |
| `k8s_rollout_restart` | Trigger a rolling restart |
| `k8s_rollout_pause` | Pause an in-progress rollout |
| `k8s_rollout_resume` | Resume a paused rollout |

### Scaling (3 tools)

| Tool | Description |
|---|---|
| `k8s_scale_resource` | Scale deployment/statefulset/replicaset to N replicas |
| `k8s_autoscale_resource` | Configure Horizontal Pod Autoscaler (HPA) |
| `k8s_update_resources` | Update CPU/memory requests and limits for a container |

### Resource CRUD (6 tools)

| Tool | Description |
|---|---|
| `k8s_create_resource` | Create a resource from YAML/JSON content |
| `k8s_apply_resource` | Apply configuration (create or update, like `kubectl apply`) |
| `k8s_delete_resource` | Delete any resource type with optional force/grace period |
| `k8s_patch_resource` | Update specific fields with strategic merge patch |
| `k8s_label_resource` | Add or update labels on a resource |
| `k8s_annotate_resource` | Add or update annotations on a resource |

### Workload Management (3 tools)

| Tool | Description |
|---|---|
| `k8s_expose_resource` | Expose a deployment/pod as a new Service |
| `k8s_run_pod` | Create and run a pod with a specified image |
| `k8s_set_resources_for_container` | Set resource limits/requests for containers |

### Node Management (5 tools)

| Tool | Description |
|---|---|
| `k8s_cordon_node` | Mark a node as unschedulable |
| `k8s_uncordon_node` | Mark a node as schedulable |
| `k8s_drain_node` | Drain a node by evicting pods (for maintenance) |
| `k8s_taint_node` | Add taints to a node |
| `k8s_untaint_node` | Remove taints from a node |

### Pod Operations (1 tool)

| Tool | Description |
|---|---|
| `k8s_pod_exec` | Execute a command in a container (supports quoted arguments) |

### Secrets & ConfigMaps (6 tools)

| Tool | Description |
|---|---|
| `k8s_list_secret` | List secrets with metadata (values hidden for security) |
| `k8s_get_secret_detail` | Get a secret; optionally decode values |
| `k8s_create_secret_resource` | Create a new secret (auto base64-encodes values) |
| `k8s_list_configmap` | List ConfigMaps with their key names |
| `k8s_get_configmap_detail` | Get a ConfigMap with full data contents |
| `k8s_create_configmap_resource` | Create a new ConfigMap |

### RBAC (5 tools)

| Tool | Description |
|---|---|
| `k8s_get_roles` | List RBAC Roles with permission rules |
| `k8s_get_clusterroles` | List RBAC ClusterRoles |
| `k8s_get_rolebindings` | List RoleBindings (who has what role) |
| `k8s_get_clusterrolebindings` | List ClusterRoleBindings |
| `k8s_get_service_accounts` | List ServiceAccounts |

### Storage (3 tools)

| Tool | Description |
|---|---|
| `k8s_get_pvcs` | List PersistentVolumeClaims with status, capacity, and storage class |
| `k8s_get_pvs` | List PersistentVolumes with capacity and bound claims |
| `k8s_get_storage_classes` | List StorageClasses with provisioner and default status |

### Networking (1 tool)

| Tool | Description |
|---|---|
| `k8s_get_network_policies` | List NetworkPolicies with pod selectors and rule counts |

### Job Management (2 tools)

| Tool | Description |
|---|---|
| `k8s_get_jobs` | List Jobs with completion status and timing |
| `k8s_get_cronjobs` | List CronJobs with schedule, suspend status, and last run |

## Usage Examples

### Cluster Health Check

```
Give me a health overview of my production cluster.
```

### Multi-Cluster Comparison

```
Compare the number of pods running in the 'backend' namespace between my 'prod' and 'staging' contexts.
```

### Diagnose Application Issues

```
My deployment 'my-app' in the 'production' namespace is having issues. Can you diagnose what's wrong?
```

### Scale Resources

```
Scale the 'backend' deployment in the 'default' namespace to 5 replicas.
```

### Resource Management

```
Delete the failed job 'data-migration-v1' in the 'batch' namespace.
```

```
Create a new namespace called 'staging' with the label environment=staging.
```

### Secret Management

```
List all secrets in the 'production' namespace and show me the keys in the 'api-credentials' secret.
```

### RBAC Inspection

```
Show me all role bindings in the 'default' namespace -- who has access to what?
```

### Storage Overview

```
List all PVCs in the cluster and show which ones are Pending.
```

### Node Maintenance

```
Cordon node 'worker-3', drain it ignoring DaemonSets, then uncordon when maintenance is complete.
```

### Rollback Deployment

```
Roll back the 'api-gateway' deployment in the 'services' namespace to the previous version.
```

### Execute in Pod

```
Run 'ls -la /app/config' inside the 'app' container of pod 'web-app-xyz' in the 'default' namespace.
```

### Create Resources

```
Create a new deployment with this YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.27
        ports:
        - containerPort: 80
```

## Architecture

```
k8s-multicluster-mcp/
├── app.py                          # MCP server entry point & tool registration
├── src/
│   ├── utils/
│   │   ├── k8s_client.py           # Multi-cluster client with context caching
│   │   └── pluralize.py            # Kubernetes resource kind pluralization
│   └── tools/
│       ├── contexts.py             # Context listing
│       ├── namespaces.py           # Namespace listing
│       ├── namespace_management.py # Namespace create/delete
│       ├── nodes.py                # Node listing
│       ├── pods.py                 # Resource listing & pod logs
│       ├── resources.py            # Single resource retrieval
│       ├── events.py               # Event listing
│       ├── describe.py             # kubectl describe equivalent
│       ├── api_discovery.py        # API & CRD discovery
│       ├── metrics.py              # Node/pod metrics (top)
│       ├── diagnosis.py            # Application diagnostics
│       ├── cluster_health.py       # Cluster health summary
│       ├── rollouts.py             # Rollout management
│       ├── scaling.py              # Scale & autoscale & resource updates
│       ├── resource_management.py  # Create, apply, patch, label, annotate
│       ├── delete_resource.py      # Resource deletion
│       ├── workload_management.py  # Expose, run pod, set resources
│       ├── node_management.py      # Cordon, drain, taint
│       ├── pod_operations.py       # Exec into pods
│       ├── secret_configmap.py     # Secret & ConfigMap management
│       ├── rbac.py                 # Roles, bindings, service accounts
│       ├── storage_network.py      # PVC, PV, StorageClass, NetworkPolicy
│       └── job_management.py       # Jobs & CronJobs
├── requirements.txt
├── pyproject.toml
├── Dockerfile
└── smithery.yaml
```

## What's New in v2.0.0

- **20+ new tools**: Resource deletion, namespace management, secrets & configmaps, RBAC inspection, storage & network visibility, job management, cluster health summary, pod creation
- **Bug fixes**: Fixed resource pluralization (e.g., `Ingress` -> `ingresses` not `ingresss`), fixed pod exec command splitting to handle quoted arguments, fixed timeout parameter handling
- **Performance**: Context discovery now uses a 30-second TTL cache with direct context-to-file mapping, eliminating redundant file scanning
- **Improved tool descriptions**: All 60+ tools have detailed descriptions for better AI assistant integration
- **Dependency cleanup**: Removed unused `fastapi` and `uvicorn` dependencies
- **Security**: Namespace deletion protects system namespaces; secret values hidden by default

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

TDQS

B3.1/5.0

Scored across 57 tools

Disambiguation3/5

Most tools are distinct, but several pairs like k8s_update_resources and k8s_set_resources_for_container have nearly identical purposes, which could cause confusion. Additionally, k8s_create_ns and k8s_create_resource overlap in creating namespaces.

Naming Consistency2/5

Tool names mix different patterns: some use 'get_' (k8s_get_contexts), others 'list_' (k8s_list_secret), and several are noun-only like k8s_cluster_info or verb-only like k8s_describe. The naming is inconsistent and not predictable.

Tool Count3/5

57 tools is high but justified by Kubernetes' complexity, covering many resource types and operations. However, some redundancy suggests the set could be streamlined, making it borderline too large.

Completeness5/5

The tool set covers nearly all common Kubernetes operations: CRUD for resources, rollout management, scaling, node operations, RBAC, storage, network policies, jobs, and diagnostics. Only niche features like operator management are missing.

Maintenance

ActivityInactive
ResponsivenessUnresponsive