Skip to main content
Glama

mcp-kubernetes

CI License: MIT npm

A Model Context Protocol server for Kubernetes. It lets an MCP-capable client (Claude Desktop, Claude Code, etc.) inspect and operate Kubernetes clusters across multiple contexts — with behaviour controlled entirely by flags.

The design goal is safe by default: it starts read-only, can be scoped to an allowlist of namespaces and contexts, protects system namespaces from mutation, and gates the dangerous operations (delete, apply, exec) behind explicit opt-ins.

Features

  • Multi-cluster — every tool accepts an optional context; scope which contexts are usable with an allowlist.

  • Access modes — read-only → read-write → admin, layered so a mode never exposes tools above its level.

  • Security flags — namespace allowlist, protected namespaces, context allowlist, plus independent opt-ins for delete / apply / exec, dry-run, and JSON audit logging (see below).

  • Standard auth — uses your kube-config (or in-cluster service account). No credentials are stored by the server.

Related MCP server: k8s-mcp-go

Security model

Concern

Flag

Default

Effect

What can the server do at all?

K8S_MODE

read-only

read-only exposes only reads; read-write adds mutations; admin adds destructive tools. Tools above the mode are never registered.

Which namespaces are in scope?

K8S_NAMESPACE_ALLOWLIST

(all)

When set, any operation on a namespace outside the list is refused.

Which namespaces are read-only forever?

K8S_PROTECTED_NAMESPACES

kube-system,kube-public,kube-node-lease

Can be read but never mutated or deleted, regardless of mode.

Which clusters are reachable?

K8S_CONTEXT_ALLOWLIST

(all)

When set, only these kube-config contexts may be targeted.

Can it delete?

K8S_ALLOW_DELETE

false

delete_resource needs this and admin mode.

Can it apply manifests?

K8S_ALLOW_APPLY

false

apply_manifest needs this and read-write mode.

Can it exec into pods?

K8S_ALLOW_EXEC

false

exec_in_pod needs this and admin mode; the tool isn't even registered otherwise.

Preview without touching the cluster

K8S_DRY_RUN

false

Write/admin tools validate + log intent, then return without calling the API.

Audit trail

K8S_AUDIT_LOG

true

Emits a JSON line to stderr per guarded operation (ALLOW / DENY / DRY_RUN).

Interactive confirmation

(automatic)

—

Destructive & high-impact actions prompt the human to approve via MCP elicitation before running; clients without elicitation fall back to the *_ALLOW_* gate.

The layers are independent — e.g. admin mode with all three opt-ins false can restart and scale deployments but can neither delete resources nor exec into pods.

Tools

Read (read-only+): list_contexts, list_namespaces, list_pods, get_pod, get_pod_logs, list_deployments, list_services, list_nodes, list_events, get_resource

Write (read-write+): scale_deployment, restart_deployment, set_deployment_image, create_namespace, apply_manifest (needs K8S_ALLOW_APPLY)

Admin (admin): delete_resource (needs K8S_ALLOW_DELETE), exec_in_pod (needs K8S_ALLOW_EXEC)

Optional AI risk guard. Set K8S_GUARD_MODE=monitor|enforce to have delete_resource, exec_in_pod and apply_manifest consult a local laya-guard daemon (pipx install laya-guard && laya-guard) that classifies the operation allow/confirm/block before it runs. Runs after the delete/exec/apply gates; only tightens, never grants; fails closed.

Quickstart — add to your agent

Published on npm as @dockndevai/mcp-kubernetes. No clone or build needed — your MCP client runs it on demand with npx. Start in read-only mode; see .env.example for every variable and docs/CLIENTS.md for the full per-client guide.

Claude Code (CLI)

claude mcp add kubernetes -e KUBECONFIG_PATH="/Users/you/.kube/config" -e K8S_MODE="read-only" -- npx -y @dockndevai/mcp-kubernetes

Claude Desktop · Cursor · Windsurf — same block in claude_desktop_config.json, .cursor/mcp.json, or ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "kubernetes": {
      "command": "npx",
      "args": [
        "-y",
        "@dockndevai/mcp-kubernetes"
      ],
      "env": {
        "KUBECONFIG_PATH": "/Users/you/.kube/config",
        "K8S_MODE": "read-only"
      }
    }
  }
}

OpenAI Codex CLI — in ~/.codex/config.toml:

[mcp_servers.kubernetes]
command = "npx"
args = ["-y", "@dockndevai/mcp-kubernetes"]
env = { KUBECONFIG_PATH = "/Users/you/.kube/config", K8S_MODE = "read-only" }

VS Code (GitHub Copilot, Agent mode) — in .vscode/mcp.json:

{
  "servers": {
    "kubernetes": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@dockndevai/mcp-kubernetes"
      ],
      "env": {
        "KUBECONFIG_PATH": "/Users/you/.kube/config",
        "K8S_MODE": "read-only"
      }
    }
  }
}

Run from source (development)

Prefer the published package above. To run from a clone:

npm install
npm run build
node dist/index.js   # with the environment variables set

Develop

npm run dev        # watch mode
npm test           # unit tests for the security policy
npm run typecheck

Publishing

This server ships a server.json for the official MCP registry and an mcpName for npm ownership validation. See PUBLISHING.md for publishing to npm and listing on the MCP registry, Smithery, Glama, Cursor, and PulseMCP.

License

MIT

Available Tools

10 tools
get_podGet podB
Read-onlyIdempotent

Fetch the full representation of a single pod.

Inputs: name (required), namespace (required), context.

get_pod_logsGet pod logsA
Read-onlyIdempotent

Fetch recent logs from a pod container.

Inputs: name (required), namespace (required), context, previous, +2 more.

get_resourceGet any resourceA
Read-onlyIdempotent

Read an arbitrary Kubernetes object by apiVersion/kind/name (e.g. apiVersion=apps/v1, kind=Deployment).

Inputs: kind (required), name (required), apiVersion (required), context, +1 more.

list_contextsList kube-config contextsA
Read-onlyIdempotent

List the contexts (clusters) available in the loaded kube-config.

Inputs: no named parameters.

list_deploymentsList deploymentsA
Read-onlyIdempotent

List deployments in a namespace with replica status.

Inputs: namespace (required), context.

list_eventsList eventsA
Read-onlyIdempotent

List recent events in a namespace — useful for diagnosing failures.

Inputs: namespace (required), context.

list_namespacesList namespacesA
Read-onlyIdempotent

List namespaces in the cluster. Namespaces outside the allowlist are filtered out.

Inputs: context.

list_nodesList nodesA
Read-onlyIdempotent

List cluster nodes with readiness and kubelet version.

Inputs: context.

list_podsList podsA
Read-onlyIdempotent

List pods in a namespace with status, readiness, restarts, and node.

Inputs: namespace (required), context.

list_servicesList servicesA
Read-onlyIdempotent

List services in a namespace with type and cluster IP.

Inputs: namespace (required), context.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4/5.0

    Scored across 10 tools

    Disambiguation5/5

    Each tool targets a distinct resource or action: list contexts, namespaces, pods, deployments, services, nodes, events, and specific getters for pod details, logs, and arbitrary resources. No two tools have overlapping purposes; get_resource is clearly defined as a generic read that complements the specific ones.

    Naming Consistency5/5

    All tools follow a consistent verb_resource pattern: list_* for enumerations and get_* for single-object retrieval. Names use lowercase snake_case consistently, with clear pluralization for list operations and singular for get operations, including a mixed get_pod_logs that still fits the pattern.

    Tool Count5/5

    Ten tools is well-scoped for a Kubernetes read-only server, covering core resource types (pods, deployments, services, nodes, events) plus generic access. Each tool has a clear purpose and the count is neither overwhelming nor too thin.

    Completeness4/5

    The server provides comprehensive read coverage for common Kubernetes resources, including list/get operations, logs, events, and arbitrary object retrieval via get_resource. It lacks write operations (create/update/delete), but this appears intentional for a diagnostic-focused tool, leaving only minor gaps like lack of pod exec or resource watches.

    Maintenance

    ActivityActive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      An MCP server that enables interaction with multiple Kubernetes clusters simultaneously, providing comprehensive tools for cluster management, resource operations, and diagnostics across different environments.
      -
    • A
      license
      Not graded
      quality
      C
      maintenance
      Safe, read-only-by-default Kubernetes access for AI agents via MCP. Provides explicit readonly, readwrite, and dangerous permission modes, plus MCPB bundles for desktop clients.
      2
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      An MCP server for generating Kubernetes manifests (deployments, services, configmaps, secrets, ingresses, namespaces) and performing kubectl operations like apply, delete, get, describe, logs, and exec.
      MIT