A production-grade MCP server that wraps the Kubernetes API with 75+ tools spanning workloads, deployments, observability, RBAC, and GitOps operations across GKE, AKS, and EKS. It includes multi-cluster routing with a single cluster parameter, Entra ID OIDC authentication with five-tier role hierarchy, structured audit logging for every tool call, and Azure Key Vault integration for credential management. Supports both SSE/HTTP for programmatic clients and stdio for Claude Desktop. Ships with generic read tools for arbitrary resource kinds alongside curated, role-gated write operations that default to dry-run mode. Built for platform teams who need governed AI access to Kubernetes with proper authentication, authorization, and audit trails rather than unrestricted cluster access.
Public tool metadata for what this MCP can expose to an agent.
list_podsLists pods in a specific namespace.2 paramsLists pods in a specific namespace.
clusterstringnamespacestringget_pod_logsRetrieves logs for a specific pod.5 paramsRetrieves logs for a specific pod.
clusterstringpodNamestringnamespacestringtailLinesnumbercontainerNamestringdescribe_podShows detailed pod status including container states, conditions, resource settings, and recent events.3 paramsShows detailed pod status including container states, conditions, resource settings, and recent events.
clusterstringpodNamestringnamespacestringdescribe_deploymentShows details of a deployment.3 paramsShows details of a deployment.
clusterstringnamespacestringdeploymentNamestringlist_nodesLists cluster nodes.1 paramsLists cluster nodes.
clusterstringlist_statefulsetsLists StatefulSets in a specific namespace.2 paramsLists StatefulSets in a specific namespace.
clusterstringnamespacestringdescribe_statefulsetShows details of a StatefulSet.3 paramsShows details of a StatefulSet.
clusterstringnamespacestringstatefulSetNamestringlist_daemonsetsLists DaemonSets in a specific namespace.2 paramsLists DaemonSets in a specific namespace.
clusterstringnamespacestringdescribe_daemonsetShows details of a DaemonSet.3 paramsShows details of a DaemonSet.
clusterstringnamespacestringdaemonSetNamestringscale_deploymentScales replicas for a deployment.5 paramsScales replicas for a deployment.
dryRunbooleanclusterstringreplicasnumbernamespacestringdeploymentNamestringrollout_statusChecks deployment rollout status (complete, in-progress, or stalled).3 paramsChecks deployment rollout status (complete, in-progress, or stalled).
clusterstringnamespacestringdeploymentNamestringrollout_undoRolls a deployment back to the previous ReplicaSet template.4 paramsRolls a deployment back to the previous ReplicaSet template.
dryRunbooleanclusterstringnamespacestringdeploymentNamestringrestart_podDeletes a pod to force a restart. Usually managed by a deployment/replicaset.4 paramsDeletes a pod to force a restart. Usually managed by a deployment/replicaset.
dryRunbooleanclusterstringpodNamestringnamespacestringget_configmapReads data from a ConfigMap.3 paramsReads data from a ConfigMap.
clusterstringnamespacestringconfigMapNamestringdescribe_namespace_quotaReads resource quotas for a namespace.2 paramsReads resource quotas for a namespace.
clusterstringnamespacestringlist_eventsLists recent cluster events for a namespace.2 paramsLists recent cluster events for a namespace.
clusterstringnamespacestringlist_persistent_volume_claimsLists PersistentVolumeClaims in a specific namespace with binding and capacity details.2 paramsLists PersistentVolumeClaims in a specific namespace with binding and capacity details.
clusterstringnamespacestringget_effective_permissionsEvaluates effective Kubernetes API permissions for a ServiceAccount using SubjectAccessReview checks.3 paramsEvaluates effective Kubernetes API permissions for a ServiceAccount using SubjectAccessReview checks.
clusterstringnamespacestringserviceAccountNamestringget_hpa_statusRetrieves Horizontal Pod Autoscaler metrics and status.3 paramsRetrieves Horizontal Pod Autoscaler metrics and status.
clusterstringhpaNamestringnamespacestringlist_warning_eventsFilters cluster events for warnings in a namespace.2 paramsFilters cluster events for warnings in a namespace.
clusterstringnamespacestringget_node_pressureAnalyzes node resource pressure for a specific node.2 paramsAnalyzes node resource pressure for a specific node.
clusterstringnodeNamestringlist_clustersLists all registered Kubernetes clusters managed by KubeNexus.Lists all registered Kubernetes clusters managed by KubeNexus.
No parameter schema in public metadata yet.
get_cluster_infoReturns API server URL, Kubernetes version, node count, and cloud metadata for a given cluster.1 paramsReturns API server URL, Kubernetes version, node count, and cloud metadata for a given cluster.
clusterstringlist_jobsLists Jobs in a specific namespace.2 paramsLists Jobs in a specific namespace.
clusterstringnamespacestringcreate_jobCreates a new Job. Use either basic configuration or provide a raw YAML manifest.7 paramsCreates a new Job. Use either basic configuration or provide a raw YAML manifest.
imagestringdryRunbooleanclusterstringcommandarrayjobNamestringnamespacestringyamlManifeststringlist_cronjobsLists CronJobs in a specific namespace.2 paramsLists CronJobs in a specific namespace.
clusterstringnamespacestringsuspend_cronjobSuspends an active CronJob.4 paramsSuspends an active CronJob.
dryRunbooleanclusterstringnamespacestringcronJobNamestringresume_cronjobResumes a suspended CronJob.4 paramsResumes a suspended CronJob.
dryRunbooleanclusterstringnamespacestringcronJobNamestringcreate_configmapCreates a new ConfigMap. Use either basic key-value data or provide a raw YAML manifest.6 paramsCreates a new ConfigMap. Use either basic key-value data or provide a raw YAML manifest.
dataobjectdryRunbooleanclusterstringnamespacestringyamlManifeststringconfigMapNamestringupdate_configmapUpdates an existing ConfigMap by patching its data.5 paramsUpdates an existing ConfigMap by patching its data.
dataobjectdryRunbooleanclusterstringnamespacestringconfigMapNamestringcreate_secretCreates a new Opaque Secret. Use either basic stringData or provide a raw YAML manifest. stringData values will be base64-encoded automatically.6 paramsCreates a new Opaque Secret. Use either basic stringData or provide a raw YAML manifest. stringData values will be base64-encoded automatically.
dryRunbooleanclusterstringnamespacestringsecretNamestringstringDataobjectyamlManifeststringupdate_secretUpdates an existing Secret by patching its stringData. KNOWN LIMITATION: The Kubernetes API never returns stringData on read (it is write-only); the API server stores values as base64 in the data field. This means the client-side merge only contains the keys passed in args.str...5 paramsUpdates an existing Secret by patching its stringData. KNOWN LIMITATION: The Kubernetes API never returns stringData on read (it is write-only); the API server stores values as base64 in the data field. This means the client-side merge only contains the keys passed in args.str...
dryRunbooleanclusterstringnamespacestringsecretNamestringstringDataobjectcreate_deploymentCreates a new Deployment. Use either basic configuration or provide a raw YAML manifest.8 paramsCreates a new Deployment. Use either basic configuration or provide a raw YAML manifest.
portnumberimagestringdryRunbooleanclusterstringreplicasnumbernamespacestringyamlManifeststringdeploymentNamestringdelete_deploymentDeletes an existing Deployment.4 paramsDeletes an existing Deployment.
dryRunbooleanclusterstringnamespacestringdeploymentNamestringcreate_namespaceCreates a new Kubernetes Namespace.3 paramsCreates a new Kubernetes Namespace.
dryRunbooleanclusterstringnamespaceNamestringdelete_namespaceDeletes an existing Kubernetes Namespace.3 paramsDeletes an existing Kubernetes Namespace.
dryRunbooleanclusterstringnamespaceNamestringcreate_horizontal_pod_autoscalerCreates an HPA for a Deployment. Use either basic configuration or provide a raw YAML manifest.9 paramsCreates an HPA for a Deployment. Use either basic configuration or provide a raw YAML manifest.
dryRunbooleanclusterstringhpaNamestringnamespacestringmaxReplicasnumberminReplicasnumberyamlManifeststringtargetDeploymentstringtargetCPUUtilizationPercentagenumbercreate_serviceCreates a new Service. Use either basic configuration or provide a raw YAML manifest.9 paramsCreates a new Service. Use either basic configuration or provide a raw YAML manifest.
portnumbertypestringdryRunbooleanclusterstringselectorobjectnamespacestringtargetPortnumberserviceNamestringyamlManifeststringlist_ingressesLists Ingress resources in a namespace.2 paramsLists Ingress resources in a namespace.
clusterstringnamespacestringget_service_endpointsShows endpoint addresses backing a Service.3 paramsShows endpoint addresses backing a Service.
clusterstringnamespacestringserviceNamestringupdate_ingressUpdates an existing Ingress. Merges new rules or annotations into the existing Ingress.6 paramsUpdates an existing Ingress. Merges new rules or annotations into the existing Ingress.
rulesarraydryRunbooleanclusterstringnamespacestringannotationsobjectingressNamestringcreate_network_policyCreates a new NetworkPolicy. Use either basic configuration or provide a raw YAML manifest.7 paramsCreates a new NetworkPolicy. Use either basic configuration or provide a raw YAML manifest.
dryRunbooleanclusterstringnamespacestringpolicyNamestringpodSelectorobjectpolicyTypesarrayyamlManifeststringset_resource_limitsSets CPU and Memory requests and limits for a specific container in a Deployment.9 paramsSets CPU and Memory requests and limits for a specific container in a Deployment.
dryRunbooleanclusterstringcpuLimitstringnamespacestringcpuRequeststringmemoryLimitstringcontainerNamestringmemoryRequeststringdeploymentNamestringget_resource_recommendationsSuggests optimal resource requests/limits based on current metrics heuristically.3 paramsSuggests optimal resource requests/limits based on current metrics heuristically.
clusterstringnamespacestringdeploymentNamestringget_cluster_resource_utilisationReturns CPU and Memory usage vs capacity across all nodes.1 paramsReturns CPU and Memory usage vs capacity across all nodes.
clusterstringcordon_nodeMarks a node as unschedulable.3 paramsMarks a node as unschedulable.
dryRunbooleanclusterstringnodeNamestringuncordon_nodeMarks a node as schedulable.3 paramsMarks a node as schedulable.
dryRunbooleanclusterstringnodeNamestringdrain_nodeCordons the node and evicts/deletes non-daemonset pods.4 paramsCordons the node and evicts/deletes non-daemonset pods.
forcebooleandryRunbooleanclusterstringnodeNamestringtaint_nodeAdds a taint to a node.6 paramsAdds a taint to a node.
keystringvaluestringdryRunbooleaneffectstringclusterstringnodeNamestringremove_taintRemoves a specific taint from a node by key.4 paramsRemoves a specific taint from a node by key.
keystringdryRunbooleanclusterstringnodeNamestringget_gitops_app_statusGets the health and sync status of an ArgoCD Application or Flux Kustomization.4 paramsGets the health and sync status of an ArgoCD Application or Flux Kustomization.
enginestringappNamestringclusterstringnamespacestringget_gitops_diffGets out-of-sync resources (ArgoCD) or managed resource inventory with revision drift (Flux Kustomization).4 paramsGets out-of-sync resources (ArgoCD) or managed resource inventory with revision drift (Flux Kustomization).
enginestringappNamestringclusterstringnamespacestringsync_gitops_appForces a sync/reconciliation of an ArgoCD Application, Flux Kustomization, or Flux HelmRelease.6 paramsForces a sync/reconciliation of an ArgoCD Application, Flux Kustomization, or Flux HelmRelease.
dryRunbooleanenginestringappNamestringclusterstringnamespacestringresourceTypestringcompare_clustersCompares the running version/state of an application across two clusters.5 paramsCompares the running version/state of an application across two clusters.
enginestringappNamestringclusterAstringclusterBstringnamespacestringlist_flux_kustomizationsLists all Flux Kustomizations in a namespace with their ready/suspended/revision status.2 paramsLists all Flux Kustomizations in a namespace with their ready/suspended/revision status.
clusterstringnamespacestringlist_flux_helm_releasesLists all Flux HelmReleases in a namespace with chart name, version, and ready/suspended status.2 paramsLists all Flux HelmReleases in a namespace with chart name, version, and ready/suspended status.
clusterstringnamespacestringget_flux_helm_releaseGets detailed status of a Flux HelmRelease including chart version, values, and condition history.3 paramsGets detailed status of a Flux HelmRelease including chart version, values, and condition history.
namestringclusterstringnamespacestringlist_flux_sourcesLists Flux source objects (GitRepository, HelmRepository, OCIRepository, Bucket) with their URL, ref, and ready status.3 paramsLists Flux source objects (GitRepository, HelmRepository, OCIRepository, Bucket) with their URL, ref, and ready status.
clusterstringnamespacestringsourceTypestringsuspend_flux_resourceSuspends reconciliation of a Flux Kustomization or HelmRelease to pause automated deployments.5 paramsSuspends reconciliation of a Flux Kustomization or HelmRelease to pause automated deployments.
namestringdryRunbooleanclusterstringnamespacestringresourceTypestringresume_flux_resourceResumes reconciliation of a suspended Flux Kustomization or HelmRelease.5 paramsResumes reconciliation of a suspended Flux Kustomization or HelmRelease.
namestringdryRunbooleanclusterstringnamespacestringresourceTypestringlist_flux_alertsLists Flux Notification Alert objects showing which events trigger which providers.2 paramsLists Flux Notification Alert objects showing which events trigger which providers.
clusterstringnamespacestringlist_k8s_resourcesGeneric read: list Kubernetes resources by group/version/resource.7 paramsGeneric read: list Kubernetes resources by group/version/resource.
clusterstringversionstringapiGroupstringresourcestringnamespacestringnamespacedbooleanlabelSelectorstringget_k8s_resourceGeneric read: get a single Kubernetes resource by group/version/resource/name.7 paramsGeneric read: get a single Kubernetes resource by group/version/resource/name.
namestringclusterstringversionstringapiGroupstringresourcestringnamespacestringnamespacedbooleanlist_node_poolsGroups nodes by managed-cloud node pool labels (AKS/EKS/GKE) and reports pool health.1 paramsGroups nodes by managed-cloud node pool labels (AKS/EKS/GKE) and reports pool health.
clusterstringget_node_pool_detailReturns detailed node, spot/preemptible, and optional metrics view for a specific node pool.2 paramsReturns detailed node, spot/preemptible, and optional metrics view for a specific node pool.
clusterstringpoolNamestringget_workload_identity_configReturns workload identity annotation configuration for a ServiceAccount (AKS/EKS/GKE conventions).3 paramsReturns workload identity annotation configuration for a ServiceAccount (AKS/EKS/GKE conventions).
clusterstringnamespacestringserviceAccountNamestringvalidate_workload_identityValidates identity chain from ServiceAccount annotation to pods using that ServiceAccount.3 paramsValidates identity chain from ServiceAccount annotation to pods using that ServiceAccount.
clusterstringnamespacestringserviceAccountNamestringlist_pod_disruption_budgetsLists PodDisruptionBudgets in a namespace with budget satisfaction status.2 paramsLists PodDisruptionBudgets in a namespace with budget satisfaction status.
clusterstringnamespacestringget_pdb_statusReturns detailed status and covered pods for a PodDisruptionBudget.3 paramsReturns detailed status and covered pods for a PodDisruptionBudget.
clusterstringpdbNamestringnamespacestringlist_vpasLists VerticalPodAutoscaler objects in a namespace and their update mode/recommendation state.2 paramsLists VerticalPodAutoscaler objects in a namespace and their update mode/recommendation state.
clusterstringnamespacestringget_vpa_recommendationReturns VPA recommendation lower/target/upper bounds for a workload when available.3 paramsReturns VPA recommendation lower/target/upper bounds for a workload when available.
clusterstringvpaNamestringnamespacestringlist_storage_classesLists StorageClasses and indicates default class.1 paramsLists StorageClasses and indicates default class.
clusterstringget_storage_classReturns details for a specific StorageClass.2 paramsReturns details for a specific StorageClass.
clusterstringstorageClassNamestringget_addon_healthChecks health of common kube-system addons (CoreDNS, metrics-server, kube-proxy, CNI).1 paramsChecks health of common kube-system addons (CoreDNS, metrics-server, kube-proxy, CNI).
clusterstringlist_limit_rangesLists LimitRange objects in a namespace and default resource constraints.2 paramsLists LimitRange objects in a namespace and default resource constraints.
clusterstringnamespacestringA production-grade Model Context Protocol (MCP) server that gives developers, AI agents, and automation pipelines a single, secure, natural-language interface to Kubernetes — across any cloud, any cluster, any team.
cluster parameternpx k8scortex-mcp
Or install globally:
npm install -g k8scortex-mcp
kubectl configured with a valid context# Clone
git clone https://github.com/apatilgtn/k8scortex-mcp.git
cd k8scortex-mcp
# Install
npm install
# Build
npm run build
# Run (local dev mode — auth bypassed)
DISABLE_AUTH=true PORT=3001 npm run dev
npx @modelcontextprotocol/inspector sse http://localhost:3001/mcp
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"k8scortex": {
"command": "node",
"args": ["<path-to>/k8scortex-mcp/dist/stdio.js"],
"env": {
"DISABLE_AUTH": "true",
"KUBECONFIG": "~/.kube/config"
}
}
}
}
Restart Claude Desktop. Ask: "List all pods in the default namespace".
K8sCortex intentionally keeps writes curated and governed, while allowing flexible read access for diagnostics.
| Domain | Tool | Description |
|---|---|---|
| Workload | list_pods | List pods with status and IP |
| Workload | get_pod_logs | Fetch container logs |
| Workload | describe_deployment | Full deployment spec |
| Workload | list_statefulsets | List StatefulSets with rollout status |
| Workload | describe_statefulset | Detailed StatefulSet spec/status |
| Workload | list_daemonsets | List DaemonSets with scheduling status |
| Workload | describe_daemonset | Detailed DaemonSet spec/status |
| Workload | list_nodes | Cluster nodes with Ready status |
| Deploy | scale_deployment | Scale replicas (dry-run default) |
| Deploy | restart_pod | Delete pod to trigger restart |
| Config | get_configmap | Read ConfigMap data |
| Config | describe_namespace_quota | Resource quota usage |
| Config | list_events | Recent namespace events |
| Config | list_persistent_volume_claims | PVC status, bound volume, storage class, capacity |
| Config | get_effective_permissions | ServiceAccount SubjectAccessReview matrix |
| Generic Read | list_k8s_resources | Generic list for arbitrary resource kinds |
| Generic Read | get_k8s_resource | Generic get for arbitrary resource kinds |
| Observe | get_hpa_status | HPA metrics and scaling |
| Observe | list_warning_events | Warning events for triage |
| Observe | get_node_pressure | Node memory/disk/PID pressure |
| Multi | list_clusters | All registered clusters |
| Multi | get_cluster_info | Node count, versions, architecture |
For the evolving full catalog, see docs/developer-guide.md.
The largest functional risk in Kubernetes MCP is dead-end visibility on non-curated resources (for example StatefulSets, DaemonSets, PVCs, or CRDs). KubeNexus addresses this by combining:
This keeps the governance posture strong while preserving practical troubleshooting coverage.
K8sCortex is designed as a governed platform interface, not an unrestricted Kubernetes super-client.
Claude / Prism Agent / CI-CD
│
▼
┌──────────────────────────────┐
│ K8sCortex MCP Server │
│ OIDC → RBAC → Tool → Audit │
│ │ │
│ Cluster Store (Key Vault) │
└──────────┬───────────────────┘
│
┌──────┼──────┐
▼ ▼ ▼
AKS EKS GKE
developer → platform-engineer)src/
├── index.ts # Express SSE server
├── stdio.ts # Stdio entry point (Claude Desktop)
├── auth.ts # OIDC middleware
├── roles.ts # RBAC role hierarchy
├── audit.ts # Audit logger
├── context.ts # AsyncLocalStorage user context
├── cluster-store.ts # Dynamic K8s client factory
├── kubernetes.ts # Client re-export
└── tools/
├── workload.ts # list_pods, get_pod_logs, describe_deployment, list_nodes
├── deployment.ts # scale_deployment, restart_pod
├── configuration.ts # get_configmap, describe_namespace_quota, list_events
├── observability.ts # get_hpa_status, list_warning_events, get_node_pressure
└── multicluster.ts # list_clusters, get_cluster_info
kubernetes/ # Production manifests
├── namespace.yaml
├── deployment.yaml
├── service.yaml
├── rbac.yaml
├── network-policy.yaml
├── hpa.yaml
├── secret-provider-class.yaml
└── alerts.yaml # Prometheus alerting rules
docs/
├── developer-guide.md # End-user documentation
├── operator-runbook.md # Platform team operations
├── slos.md # Service level objectives
└── adrs/ # Architecture decision records
├── ADR-001-tool-taxonomy.md
├── ADR-002-idp-integration.md
├── ADR-003-role-model.md
└── ADR-004-credential-management.md
K8sCortex_Cloud_Testing_Publishing_Plan.docxK8sCortex_Project_Plan.docxK8sCortex_Project_Plan_v3.docxK8sCortex_Project_Plan_v4.docxInternal — Platform Engineering
KUBECONFIGPath to your kubeconfig file. Defaults to ~/.kube/config if not set.
DISABLE_AUTHSet to 'true' to disable JWT authentication (recommended for local use).
silenceper/mcp-k8s
azure/containerization-assist
io.github.evozim/aws-builder
reza-gholizade/k8s-mcp-server
flux159/mcp-server-kubernetes