kubelint-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| --dir | No | Only files inside this directory can be read (default: the current directory). | . |
| --disable | No | Comma-separated rule ids to turn off, e.g. K8S1004,K8S1018. Repeatable. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Statically lint and explain Kubernetes manifests. Nothing is applied and no cluster or kubectl is needed. Pass a YAML file or a directory (relative to the server's --dir, or absolute inside it); multi-document files and helm template output work. Typical flow: k8s_overview to see what is there, lint_manifests for rule IDs + file:line + concrete fixes, check_references for cross-object problems (selectors, ingress backends, missing ConfigMaps), rbac_review for permissions, explain_resource for one object in plain English, suggest_fixes for a diff of the safe fixes, values_review for a Helm values.yaml. Secret values are never shown. Silence a finding with # kubelint-ignore: K8S1004 on the line above.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| k8s_overviewA | Summarize Kubernetes manifests: every object by kind and namespace, workloads with replicas,
images and ports, Services (type, ports, which workloads they select), Ingress routes, and
host-network workloads. |
| lint_manifestsA | Lint Kubernetes manifests with rules K8S1001-K8S1040: missing resource requests/memory limit,
:latest or untagged images (and tag-only pins as info), privileged / allowPrivilegeEscalation /
root user / readOnlyRootFilesystem / capabilities, hostNetwork/hostPID/hostPath/docker.sock,
missing probes, replicas 1, no PodDisruptionBudget or NetworkPolicy, default namespace, secrets as
plain env values (name and length only, never the value), service account token, seccomp,
imagePullPolicy, LoadBalancer/NodePort exposure, CronJob settings, and removed/deprecated apiVersions
with the replacement and the release that dropped them. Each finding has a rule ID, severity,
file:line and a concrete fix. Cross-object checks are in check_references, RBAC in rbac_review.
Suppress with |
| check_referencesB | Cross-resource checks (K8S2001-K8S2017) among the provided files: Deployment selector that does not match its template labels (invalid), Service selector matching no pod, targetPort that no container declares, Ingress backend Service or port that does not exist, ConfigMap/Secret/PVC/ ServiceAccount referenced but not defined (info when it may live elsewhere), a key missing from a ConfigMap/Secret, HPA or PodDisruptionBudget pointing at nothing, StatefulSet serviceName, volumeMounts without a volume, RoleBinding to an undefined Role, and duplicate objects. Pass a directory to check a whole app. Only the files you pass are considered. |
| rbac_reviewA | Review RBAC (K8S3001-K8S3011): wildcard verbs or resources, ClusterRoleBinding/RoleBinding to cluster-admin, read access to Secrets, escalate/bind/impersonate verbs, pods/exec, nodes/proxy, and bindings to the default ServiceAccount, system:anonymous, system:unauthenticated or system:authenticated. Also lists every Role/ClusterRole and which subjects each binding grants it to. |
| explain_resourceA | Explain one object in plain English: what it does, its effective security posture (user, privilege,
filesystem, capabilities, host access, token, seccomp), what it depends on (ConfigMaps, Secrets, PVCs,
service account, with whether each is defined in these files), what reaches it (Services, Ingress, HPA,
PodDisruptionBudget, NetworkPolicy) and its lint findings. |
| suggest_fixesA | Show a unified diff (as text, never written) of the safe mechanical fixes for ONE manifest file: privileged / hostNetwork / hostPID / hostIPC set to false, allowPrivilegeEscalation: false added or flipped, and apiVersion renames where only the version string changes (batch/v1beta1 CronJob -> batch/v1, policy/v1beta1 PodDisruptionBudget -> policy/v1, rbac v1beta1 -> v1, and similar). The patched text is re-parsed and re-linted in memory to confirm. Everything else is listed as needing a human decision. |
| values_reviewA | Review a Helm values.yaml (K8S4001-K8S4007): :latest or untagged image defaults, resources left empty,
credentials committed in values (key name and length only, value redacted), empty securityContext,
Services exposed as LoadBalancer/NodePort by default, replicaCount 1, and insecure defaults like
privileged or runAsUser 0. Reviews the inputs of a chart; use render_helm or |
| render_helmA | OPT-IN. Runs the local |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 8 tools
Each tool targets a clearly distinct layer of the workflow: inventory (k8s_overview), per-object rules (lint_manifests), cross-object rules (check_references), RBAC (rbac_review), single-object explanation (explain_resource), remediation (suggest_fixes), chart inputs (values_review) and chart rendering (render_helm). The descriptions actively disambiguate the risky pairs ('Cross-object checks are in check_references', 'use render_helm ... with lint_manifests' for rendered output vs values_review for inputs).
All names are snake_case and readable, but the pattern mixes verb_noun (lint_manifests, check_references, explain_resource, suggest_fixes, render_helm) with noun_noun/qualifier forms (k8s_overview, rbac_review, values_review). The deviation is minor and each name still predicts its action.
Eight tools is well within the sweet spot and every tool covers a non-redundant stage of the static-analysis workflow, from inspection through linting to fix suggestions. Nothing feels padded or missing purely for count's sake.
The surface covers CRUD-equivalent lifecycle for the domain: overview, per-object and cross-object linting, RBAC, explanation, mechanical fixes, and Helm values/render paths, including an opt-in exec guard. Minor gaps remain — no kustomize/overlay rendering and no aggregate multi-file report output — but agents can work around them with directory inputs.