# io.github.apatilgtn/k8scortex-mcp (oci · ghcr.io/apatilgtn/k8scortex-mcp)

Kubernetes MCP server: 75 tools for GKE, AKS, EKS, RBAC, audit logging, GitOps, multi-cluster.

- Trust score: 42/100 (low)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- npm · `k8scortex-mcp`: 81/100, [markdown](https://verifymcp.io/servers/apatilgtn-k8scortex-mcp/k8scortex-mcp.md), [page](https://verifymcp.io/servers/apatilgtn-k8scortex-mcp/k8scortex-mcp)
- oci · `ghcr.io/apatilgtn/k8scortex-mcp`: 42/100 (this document), [markdown](https://verifymcp.io/servers/apatilgtn-k8scortex-mcp/ghcr-io-apatilgtn-k8scortex-mcp.md), [page](https://verifymcp.io/servers/apatilgtn-k8scortex-mcp/ghcr-io-apatilgtn-k8scortex-mcp)

## Channel facts

- Registry: `oci`
- Package: `ghcr.io/apatilgtn/k8scortex-mcp`
- Version: `1.1.3`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 0/100
  - No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.
  - Known CVEs could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.
  - Install-script risk not yet assessed.
  - Dependency health could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 9 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 69/100
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 5719 tokens (~76/item across 75 items; 75 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 30/100
  - Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 0 of 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "restart_pod" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default.
  - An AI judge read all 75 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the io.github.apatilgtn/k8scortex-mcp server?

io.github.apatilgtn/k8scortex-mcp runs locally as a container image, launched with docker run --rm -i -e K8SCORTEX_STDIO_ROLES ghcr.io/apatilgtn/k8scortex-mcp:1.1.3. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add apatilgtn-k8scortex-mcp -- docker run --rm -i -e K8SCORTEX_STDIO_ROLES ghcr.io/apatilgtn/k8scortex-mcp:1.1.3
```

This image reads K8SCORTEX_STDIO_ROLES. Set it in your client's env block for this server; docker run -e passes it through to the container.

### Cursor

```json
{
  "mcpServers": {
    "apatilgtn-k8scortex-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "K8SCORTEX_STDIO_ROLES",
        "ghcr.io/apatilgtn/k8scortex-mcp:1.1.3"
      ]
    }
  }
}
```

This image reads K8SCORTEX_STDIO_ROLES. Set it in your client's env block for this server; docker run -e passes it through to the container.

### VS Code

```json
{
  "servers": {
    "apatilgtn-k8scortex-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "K8SCORTEX_STDIO_ROLES",
        "ghcr.io/apatilgtn/k8scortex-mcp:1.1.3"
      ]
    }
  }
}
```

This image reads K8SCORTEX_STDIO_ROLES. Set it in your client's env block for this server; docker run -e passes it through to the container.

### Codex

```bash
codex mcp add apatilgtn-k8scortex-mcp -- docker run --rm -i -e K8SCORTEX_STDIO_ROLES ghcr.io/apatilgtn/k8scortex-mcp:1.1.3
```

This image reads K8SCORTEX_STDIO_ROLES. Set it in your client's env block for this server; docker run -e passes it through to the container.

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "apatilgtn-k8scortex-mcp": {
      "type": "local",
      "command": [
        "docker",
        "run",
        "--rm",
        "-i",
        "-e",
        "K8SCORTEX_STDIO_ROLES",
        "ghcr.io/apatilgtn/k8scortex-mcp:1.1.3"
      ],
      "enabled": true
    }
  }
}
```

This image reads K8SCORTEX_STDIO_ROLES. Set it in your client's env block for this server; docker run -e passes it through to the container.

### Hermes

```yaml
mcp_servers:
  apatilgtn-k8scortex-mcp:
    command: "docker"
    args: ["run", "--rm", "-i", "-e", "K8SCORTEX_STDIO_ROLES", "ghcr.io/apatilgtn/k8scortex-mcp:1.1.3"]
```

This image reads K8SCORTEX_STDIO_ROLES. Set it in your client's env block for this server; docker run -e passes it through to the container.

### Netclaw

```json
{
  "McpServers": {
    "apatilgtn-k8scortex-mcp": {
      "Transport": "stdio",
      "Command": "docker",
      "Arguments": [
        "run",
        "--rm",
        "-i",
        "-e",
        "K8SCORTEX_STDIO_ROLES",
        "ghcr.io/apatilgtn/k8scortex-mcp:1.1.3"
      ]
    }
  }
}
```

This image reads K8SCORTEX_STDIO_ROLES. Set it in your client's env block for this server; docker run -e passes it through to the container.

### Other

```json
{
  "mcpServers": {
    "apatilgtn-k8scortex-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "K8SCORTEX_STDIO_ROLES",
        "ghcr.io/apatilgtn/k8scortex-mcp:1.1.3"
      ]
    }
  }
}
```

This image reads K8SCORTEX_STDIO_ROLES. Set it in your client's env block for this server; docker run -e passes it through to the container.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 42, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-02 (score 41, +1)

No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-31 (score 40, +1)

No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-29 (score 39, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-27 (score 38)

First indexed and scored.

## MCP tools (75)

### `list_pods` (~41 tokens)

Lists pods in a specific namespace.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string, required): The Kubernetes namespace

### `get_pod_logs` (~91 tokens)

Retrieves logs for a specific pod.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `containerName` (string): Optional: specific container name for multi-container pods
- `namespace` (string, required): The Kubernetes namespace
- `podName` (string, required): The name of the pod
- `tailLines` (number): Number of lines to tail from the end of the logs

### `describe_pod` (~64 tokens)

Shows detailed pod status including container states, conditions, resource settings, and recent events.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string, required): The Kubernetes namespace
- `podName` (string, required): The name of the pod

### `describe_deployment` (~53 tokens)

Shows details of a deployment.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `deploymentName` (string, required): The name of the deployment
- `namespace` (string, required): The Kubernetes namespace

### `list_nodes` (~27 tokens)

Lists cluster nodes.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')

### `list_statefulsets` (~43 tokens)

Lists StatefulSets in a specific namespace.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string, required): The Kubernetes namespace

### `describe_statefulset` (~58 tokens)

Shows details of a StatefulSet.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string, required): The Kubernetes namespace
- `statefulSetName` (string, required): The name of the StatefulSet

### `list_daemonsets` (~44 tokens)

Lists DaemonSets in a specific namespace.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string, required): The Kubernetes namespace

### `describe_daemonset` (~59 tokens)

Shows details of a DaemonSet.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `daemonSetName` (string, required): The name of the DaemonSet
- `namespace` (string, required): The Kubernetes namespace

### `scale_deployment` (~83 tokens)

Scales replicas for a deployment.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `deploymentName` (string, required): The name of the deployment
- `dryRun` (boolean): If true, simulates the action without making changes
- `namespace` (string, required): The Kubernetes namespace
- `replicas` (number, required): The new replica count

### `rollout_status` (~59 tokens)

Checks deployment rollout status (complete, in-progress, or stalled).

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `deploymentName` (string, required): The name of the deployment
- `namespace` (string, required): The Kubernetes namespace

### `rollout_undo` (~76 tokens)

Rolls a deployment back to the previous ReplicaSet template.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `deploymentName` (string, required): The name of the deployment
- `dryRun` (boolean): If true, simulates the action without making changes
- `namespace` (string, required): The Kubernetes namespace

### `restart_pod` (~85 tokens)

Deletes a pod to force a restart. Usually managed by a deployment/replicaset.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `dryRun` (boolean): If true, simulates the action without making changes
- `namespace` (string, required): The Kubernetes namespace
- `podName` (string, required): The name of the pod to restart

### `get_configmap` (~56 tokens)

Reads data from a ConfigMap.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `configMapName` (string, required): The name of the ConfigMap
- `namespace` (string, required): The Kubernetes namespace

### `describe_namespace_quota` (~42 tokens)

Reads resource quotas for a namespace.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string, required): The Kubernetes namespace

### `list_events` (~41 tokens)

Lists recent cluster events for a namespace.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string, required): The Kubernetes namespace

### `list_persistent_volume_claims` (~51 tokens)

Lists PersistentVolumeClaims in a specific namespace with binding and capacity details.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string, required): The Kubernetes namespace

### `get_effective_permissions` (~70 tokens)

Evaluates effective Kubernetes API permissions for a ServiceAccount using SubjectAccessReview checks.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string, required): The Kubernetes namespace of the ServiceAccount
- `serviceAccountName` (string, required): The ServiceAccount name to inspect

### `get_hpa_status` (~59 tokens)

Retrieves Horizontal Pod Autoscaler metrics and status.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `hpaName` (string, required): The name of the HPA
- `namespace` (string, required): The Kubernetes namespace

### `list_warning_events` (~43 tokens)

Filters cluster events for warnings in a namespace.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string, required): The Kubernetes namespace

### `get_node_pressure` (~48 tokens)

Analyzes node resource pressure for a specific node.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `nodeName` (string, required): The name of the node

### `list_clusters` (~109 tokens)

Lists all registered Kubernetes clusters known to K8sCortex (kubeconfig contexts, cluster registry file, or Azure Key Vault), with provider, cloud, region and labels.

Input parameters:

- `cloud` (string): Only clusters on this cloud (e.g. eks, gke, aks, openshift, local)
- `labelSelector` (string): Only clusters whose registry labels match, e.g. 'env=prod,team=payments'
- `region` (string): Only clusters in this region

### `get_cluster_info` (~54 tokens)

Returns Kubernetes version, platform (EKS/GKE/AKS/OpenShift), node count and node details for a given cluster.

Input parameters:

- `cluster` (string, required): The registered cluster name (e.g. prod-aks-au)

### `list_jobs` (~40 tokens)

Lists Jobs in a specific namespace.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string, required): The Kubernetes namespace

### `create_job` (~128 tokens)

Creates a new Job. Use either basic configuration or provide a raw YAML manifest.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `command` (array): Command to run (if using basic config)
- `dryRun` (boolean): If true, simulates the action without making changes
- `image` (string): Container image to run (if using basic config)
- `jobName` (string): The name of the job to create
- `namespace` (string, required): The Kubernetes namespace
- `yamlManifest` (string): Full YAML manifest for advanced job creation

### `list_cronjobs` (~43 tokens)

Lists CronJobs in a specific namespace.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string, required): The Kubernetes namespace

### `suspend_cronjob` (~77 tokens)

Suspends an active CronJob.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `cronJobName` (string, required): The name of the CronJob to suspend
- `dryRun` (boolean): If true, simulates the action without making changes
- `namespace` (string, required): The Kubernetes namespace

### `resume_cronjob` (~77 tokens)

Resumes a suspended CronJob.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `cronJobName` (string, required): The name of the CronJob to resume
- `dryRun` (boolean): If true, simulates the action without making changes
- `namespace` (string, required): The Kubernetes namespace

### `create_configmap` (~120 tokens)

Creates a new ConfigMap. Use either basic key-value data or provide a raw YAML manifest.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `configMapName` (string): The name of the ConfigMap to create
- `data` (object): Key-value string pairs for the ConfigMap data
- `dryRun` (boolean): If true, simulates the action without making changes
- `namespace` (string, required): The Kubernetes namespace
- `yamlManifest` (string): Full YAML manifest for advanced ConfigMap creation

### `update_configmap` (~97 tokens)

Updates an existing ConfigMap by patching its data.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `configMapName` (string, required): The name of the ConfigMap to update
- `data` (object, required): Key-value string pairs to merge into the ConfigMap
- `dryRun` (boolean): If true, simulates the action without making changes
- `namespace` (string, required): The Kubernetes namespace

### `create_secret` (~129 tokens)

Creates a new Opaque Secret. Use either basic stringData or provide a raw YAML manifest. stringData values will be base64-encoded automatically.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `dryRun` (boolean): If true, simulates the action without making changes
- `namespace` (string, required): The Kubernetes namespace
- `secretName` (string): The name of the Secret to create
- `stringData` (object): Plain text key-value pairs. Will be encoded automatically.
- `yamlManifest` (string): Full YAML manifest for advanced Secret creation

### `update_secret` (~119 tokens)

Updates an existing Secret: each key in stringData is added or replaced, and keys you do not pass are kept unchanged. Values are never returned.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `dryRun` (boolean): If true, simulates the action without making changes
- `namespace` (string, required): The Kubernetes namespace
- `secretName` (string, required): The name of the Secret to update
- `stringData` (object, required): Plain text key-value pairs to merge into the Secret. Will be encoded automatically.

### `create_deployment` (~145 tokens)

Creates a new Deployment. Use either basic configuration or provide a raw YAML manifest.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `deploymentName` (string): The name of the deployment to create
- `dryRun` (boolean): If true, simulates the action without making changes
- `image` (string): Container image to run (if using basic config)
- `namespace` (string, required): The Kubernetes namespace
- `port` (number): Container port to expose (if using basic config)
- `replicas` (number): Number of replicas (if using basic config)
- `yamlManifest` (string): Full YAML manifest for advanced deployment creation

### `delete_deployment` (~72 tokens)

Deletes an existing Deployment.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `deploymentName` (string, required): The name of the deployment to delete
- `dryRun` (boolean): If true, simulates the action without making changes
- `namespace` (string, required): The Kubernetes namespace

### `create_namespace` (~62 tokens)

Creates a new Kubernetes Namespace.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `dryRun` (boolean): If true, simulates the action without making changes
- `namespaceName` (string, required): The name of the namespace to create

### `delete_namespace` (~62 tokens)

Deletes an existing Kubernetes Namespace.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `dryRun` (boolean): If true, simulates the action without making changes
- `namespaceName` (string, required): The name of the namespace to delete

### `create_horizontal_pod_autoscaler` (~165 tokens)

Creates an HPA for a Deployment. Use either basic configuration or provide a raw YAML manifest.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `dryRun` (boolean): If true, simulates the action without making changes
- `hpaName` (string): The name of the HPA to create
- `maxReplicas` (number): Maximum number of replicas
- `minReplicas` (number): Minimum number of replicas
- `namespace` (string, required): The Kubernetes namespace
- `targetCPUUtilizationPercentage` (number): Target CPU utilization percentage
- `targetDeployment` (string): The name of the target Deployment to scale
- `yamlManifest` (string): Full YAML manifest for advanced HPA creation

### `create_service` (~162 tokens)

Creates a new Service. Use either basic configuration or provide a raw YAML manifest.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `dryRun` (boolean): If true, simulates the action without making changes
- `namespace` (string, required): The Kubernetes namespace
- `port` (number): Port the service exposes
- `selector` (object): Label selector for the pods (e.g. { app: 'my-app' })
- `serviceName` (string): The name of the Service to create
- `targetPort` (number): Target port on the pod
- `type` (string): Service type (ClusterIP, NodePort, LoadBalancer)
- `yamlManifest` (string): Full YAML manifest for advanced Service creation

### `list_ingresses` (~42 tokens)

Lists Ingress resources in a namespace.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string, required): The Kubernetes namespace

### `get_service_endpoints` (~52 tokens)

Shows endpoint addresses backing a Service.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string, required): The Kubernetes namespace
- `serviceName` (string, required): Service name

### `update_ingress` (~112 tokens)

Updates an existing Ingress. Merges new rules or annotations into the existing Ingress.

Input parameters:

- `annotations` (object): Annotations to merge
- `cluster` (string): Target cluster name (default: 'default')
- `dryRun` (boolean): If true, simulates the action without making changes
- `ingressName` (string, required): The name of the Ingress to update
- `namespace` (string, required): The Kubernetes namespace
- `rules` (array): Rules to append or replace (advanced usage)

### `create_network_policy` (~133 tokens)

Creates a new NetworkPolicy. Use either basic configuration or provide a raw YAML manifest.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `dryRun` (boolean): If true, simulates the action without making changes
- `namespace` (string, required): The Kubernetes namespace
- `podSelector` (object): Label selector for the pods this policy applies to
- `policyName` (string): The name of the NetworkPolicy
- `policyTypes` (array): List of policy types (Ingress, Egress)
- `yamlManifest` (string): Full YAML manifest for advanced NetworkPolicy creation

### `set_resource_limits` (~168 tokens)

Sets CPU and Memory requests and limits for a specific container in a Deployment.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `containerName` (string, required): The name of the container
- `cpuLimit` (string): CPU limit (e.g. '500m' or '1')
- `cpuRequest` (string): CPU request (e.g. '100m' or '0.1')
- `deploymentName` (string, required): The name of the Deployment
- `dryRun` (boolean): If true, simulates the action
- `memoryLimit` (string): Memory limit (e.g. '512Mi')
- `memoryRequest` (string): Memory request (e.g. '256Mi')
- `namespace` (string, required): The Kubernetes namespace

### `get_resource_recommendations` (~63 tokens)

Suggests optimal resource requests/limits based on current metrics heuristically.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `deploymentName` (string, required): The name of the Deployment
- `namespace` (string, required): The Kubernetes namespace

### `get_cluster_resource_utilisation` (~37 tokens)

Returns CPU and Memory usage vs capacity across all nodes.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')

### `cordon_node` (~63 tokens)

Marks a node as unschedulable.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `dryRun` (boolean): If true, simulates the action
- `nodeName` (string, required): Name of the node to cordon

### `uncordon_node` (~64 tokens)

Marks a node as schedulable.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `dryRun` (boolean): If true, simulates the action
- `nodeName` (string, required): Name of the node to uncordon

### `drain_node` (~78 tokens)

Cordons the node and evicts/deletes non-daemonset pods.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `dryRun` (boolean): If true, simulates the action
- `force` (boolean): Force deletion of pods
- `nodeName` (string, required): Name of the node to drain

### `taint_node` (~99 tokens)

Adds a taint to a node.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `dryRun` (boolean): If true, simulates the action
- `effect` (string, required): Taint effect (NoSchedule, PreferNoSchedule, NoExecute)
- `key` (string, required): Taint key
- `nodeName` (string, required): Name of the node
- `value` (string, required): Taint value

### `remove_taint` (~74 tokens)

Removes a specific taint from a node by key.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `dryRun` (boolean): If true, simulates the action
- `key` (string, required): Taint key to remove
- `nodeName` (string, required): Name of the node

### `get_gitops_app_status` (~93 tokens)

Gets the health and sync status of an ArgoCD Application or Flux Kustomization.

Input parameters:

- `appName` (string, required): The name of the application/kustomization
- `cluster` (string): Target cluster name (default: 'default')
- `engine` (string, required): GitOps engine ('argocd' or 'flux')
- `namespace` (string, required): The namespace of the application/kustomization

### `get_gitops_diff` (~97 tokens)

Gets out-of-sync resources (ArgoCD) or managed resource inventory with revision drift (Flux Kustomization).

Input parameters:

- `appName` (string, required): The name of the application/kustomization
- `cluster` (string): Target cluster name (default: 'default')
- `engine` (string, required): GitOps engine ('argocd' or 'flux')
- `namespace` (string, required): The namespace of the application/kustomization

### `sync_gitops_app` (~140 tokens)

Forces a sync/reconciliation of an ArgoCD Application, Flux Kustomization, or Flux HelmRelease.

Input parameters:

- `appName` (string, required): The name of the application/kustomization/helmrelease
- `cluster` (string): Target cluster name (default: 'default')
- `dryRun` (boolean): If true, simulates the action
- `engine` (string, required): GitOps engine ('argocd' or 'flux')
- `namespace` (string, required): The namespace of the application/kustomization/helmrelease
- `resourceType` (string): Flux only: 'kustomization' (default) or 'helmrelease'

### `compare_clusters` (~94 tokens)

Compares the running version/state of an application across two clusters.

Input parameters:

- `appName` (string, required): The name of the application/kustomization
- `clusterA` (string, required): First cluster to compare
- `clusterB` (string, required): Second cluster to compare
- `engine` (string, required): GitOps engine ('argocd' or 'flux')
- `namespace` (string, required): The namespace of the application/kustomization

### `list_flux_kustomizations` (~63 tokens)

Lists all Flux Kustomizations in a namespace with their ready/suspended/revision status.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string): Namespace to list Kustomizations in (omit for all namespaces)

### `list_flux_helm_releases` (~67 tokens)

Lists all Flux HelmReleases in a namespace with chart name, version, and ready/suspended status.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string): Namespace to list HelmReleases in (omit for all namespaces)

### `get_flux_helm_release` (~68 tokens)

Gets detailed status of a Flux HelmRelease including chart version, values, and condition history.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `name` (string, required): Name of the HelmRelease
- `namespace` (string, required): Namespace of the HelmRelease

### `list_flux_sources` (~101 tokens)

Lists Flux source objects (GitRepository, HelmRepository, OCIRepository, Bucket) with their URL, ref, and ready status.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string): Namespace to list sources in (omit for all namespaces)
- `sourceType` (string): Source kind: 'gitrepository' | 'helmrepository' | 'ocirepository' | 'bucket' (omit for all)

### `suspend_flux_resource` (~95 tokens)

Suspends reconciliation of a Flux Kustomization or HelmRelease to pause automated deployments.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `dryRun` (boolean): If true, simulates the action
- `name` (string, required): Name of the resource
- `namespace` (string, required): Namespace of the resource
- `resourceType` (string, required): 'kustomization' or 'helmrelease'

### `resume_flux_resource` (~92 tokens)

Resumes reconciliation of a suspended Flux Kustomization or HelmRelease.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `dryRun` (boolean): If true, simulates the action
- `name` (string, required): Name of the resource
- `namespace` (string, required): Namespace of the resource
- `resourceType` (string, required): 'kustomization' or 'helmrelease'

### `list_flux_alerts` (~54 tokens)

Lists Flux Notification Alert objects showing which events trigger which providers.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string): Namespace to list Alerts in (omit for all namespaces)

### `list_k8s_resources` (~159 tokens)

Generic read: list Kubernetes resources by group/version/resource.

Input parameters:

- `apiGroup` (string): API group (e.g. 'apps', 'rbac.authorization.k8s.io'). Use '' or 'core' for core/v1 resources.
- `cluster` (string): Target cluster name (default: 'default')
- `labelSelector` (string): Optional label selector
- `namespace` (string): Namespace for namespaced resources
- `namespaced` (boolean): Whether the target resource is namespaced
- `resource` (string, required): Plural resource name (e.g. 'statefulsets', 'daemonsets', 'persistentvolumeclaims', 'roles')
- `version` (string, required): API version (e.g. 'v1')

### `get_k8s_resource` (~140 tokens)

Generic read: get a single Kubernetes resource by group/version/resource/name.

Input parameters:

- `apiGroup` (string): API group (e.g. 'apps', 'rbac.authorization.k8s.io'). Use '' or 'core' for core/v1 resources.
- `cluster` (string): Target cluster name (default: 'default')
- `name` (string, required): Resource name
- `namespace` (string): Namespace for namespaced resources
- `namespaced` (boolean): Whether the target resource is namespaced
- `resource` (string, required): Plural resource name
- `version` (string, required): API version (e.g. 'v1')

### `list_node_pools` (~46 tokens)

Groups nodes by managed-cloud node pool labels (AKS/EKS/GKE) and reports pool health.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')

### `get_node_pool_detail` (~55 tokens)

Returns detailed node, spot/preemptible, and optional metrics view for a specific node pool.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `poolName` (string, required): Node pool name

### `get_workload_identity_config` (~66 tokens)

Returns workload identity annotation configuration for a ServiceAccount (AKS/EKS/GKE conventions).

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string, required): ServiceAccount namespace
- `serviceAccountName` (string, required): ServiceAccount name

### `validate_workload_identity` (~62 tokens)

Validates identity chain from ServiceAccount annotation to pods using that ServiceAccount.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string, required): ServiceAccount namespace
- `serviceAccountName` (string, required): ServiceAccount name

### `list_pod_disruption_budgets` (~51 tokens)

Lists PodDisruptionBudgets in a namespace with budget satisfaction status.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string, required): Namespace

### `get_pdb_status` (~57 tokens)

Returns detailed status and covered pods for a PodDisruptionBudget.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string, required): Namespace
- `pdbName` (string, required): PDB name

### `list_vpas` (~50 tokens)

Lists VerticalPodAutoscaler objects in a namespace and their update mode/recommendation state.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string, required): Namespace

### `get_vpa_recommendation` (~64 tokens)

Returns VPA recommendation lower/target/upper bounds for a workload when available.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string, required): Namespace
- `vpaName` (string, required): VPA object name

### `list_storage_classes` (~32 tokens)

Lists StorageClasses and indicates default class.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')

### `get_storage_class` (~44 tokens)

Returns details for a specific StorageClass.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `storageClassName` (string, required): StorageClass name

### `get_addon_health` (~46 tokens)

Checks health of common kube-system addons (CoreDNS, metrics-server, kube-proxy, CNI).

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')

### `list_limit_ranges` (~44 tokens)

Lists LimitRange objects in a namespace and default resource constraints.

Input parameters:

- `cluster` (string): Target cluster name (default: 'default')
- `namespace` (string, required): Namespace

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/apatilgtn-k8scortex-mcp/ghcr-io-apatilgtn-k8scortex-mcp#diagnostics

## Score history

- 2026-11-05: 42
- 2026-11-04: 42
- 2026-11-03: 41
- 2026-11-02: 41
- 2026-11-01: 40
- 2026-10-31: 40
- 2026-10-30: 39
- 2026-10-29: 39
- 2026-10-28: 38
- 2026-10-27: 38

## Common questions

### What is the io.github.apatilgtn/k8scortex-mcp server?

io.github.apatilgtn/k8scortex-mcp is listed in the public MCP registry as io.github.apatilgtn/k8scortex-mcp. Kubernetes MCP server: 75 tools for GKE, AKS, EKS, RBAC, audit logging, GitOps, multi-cluster. This page covers its container image (ghcr.io/apatilgtn/k8scortex-mcp).

### Is the io.github.apatilgtn/k8scortex-mcp server safe to use?

io.github.apatilgtn/k8scortex-mcp scores 42 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the io.github.apatilgtn/k8scortex-mcp server expose?

io.github.apatilgtn/k8scortex-mcp exposes 75 tools: list_pods, get_pod_logs, describe_pod, describe_deployment, list_nodes, and 70 more. Their descriptions and schemas cost roughly 5,719 tokens of context every time the server is loaded.

### Is the io.github.apatilgtn/k8scortex-mcp server still maintained?

io.github.apatilgtn/k8scortex-mcp is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the io.github.apatilgtn/k8scortex-mcp server under?

io.github.apatilgtn/k8scortex-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- GitHub Container Registry: https://ghcr.io/apatilgtn/k8scortex-mcp
- Repository: https://github.com/apatilgtn/k8scortex-mcp
- Changelog RSS feed: https://verifymcp.io/servers/apatilgtn-k8scortex-mcp/ghcr-io-apatilgtn-k8scortex-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/apatilgtn-k8scortex-mcp/ghcr-io-apatilgtn-k8scortex-mcp.json
- HTML version of this page: https://verifymcp.io/servers/apatilgtn-k8scortex-mcp/ghcr-io-apatilgtn-k8scortex-mcp
