Skip to main content

An MCP server exposing Kubernetes cluster operations to AI assistants.

Project description

k8s-mcp-server

An MCP server that lets AI assistants — Claude Desktop, Cursor, Claude Code — safely inspect and operate on Kubernetes clusters through natural conversation.

CI Python 3.13+ License: MIT MCP PyPI

What it does

k8s-mcp-server gives Claude (and any other MCP-compatible AI assistant) safe, read-only access to Kubernetes clusters by default — list pods, tail logs, inspect deployments, view metrics, and describe any resource through natural conversation. Optional write operations (scale, restart, delete) live behind an --enable-writes flag and default to dry-run, so the LLM can't accidentally change cluster state.

Built with 528 unit tests against mocked K8s APIs plus a kind-cluster integration smoke test on every CI run — 100% library coverage.

Demo

Demo coming: a 30-second loop of Claude Desktop diagnosing a crashing pod — the model calls list_pods, spots CrashLoopBackOff, fetches get_pod_logs with previous=True, reads the stack trace, and suggests the fix.

Features

Read operations (13 tools)

Tool What it does
list_namespaces List all namespaces with status and age.
list_pods List pods, filterable by namespace, labels, or field selectors.
get_pod Single pod's full state — container statuses, conditions, recent events.
get_pod_logs Pod logs with tail_lines, since_seconds, and previous (post-crash).
list_deployments List deployments with replica counts and primary container image.
get_deployment Full deployment state plus the last 5 ReplicaSets (rollout history).
list_services List services with ports and LoadBalancer external IPs.
list_nodes List nodes with health, roles, kubelet version, capacity.
get_node Full node detail with conditions, taints, and pods-on-node count.
list_events Cluster events filtered by kind/name/type/since, most recent first.
describe_resource Structured describe view across 7 kinds (Secret values redacted).
top_pods Pod CPU/memory usage (requires metrics-server).
top_nodes Node CPU/memory usage with percent against allocatable.

Write operations (3 tools — require --enable-writes)

Tool What it does
scale_deployment Set the replica count of a deployment via the /scale sub-resource.
restart_deployment Trigger a rollout restart (kubectl-compatible annotation).
delete_pod Delete a pod, optionally with force=True for immediate kill.

Every write tool defaults to dry_run=True. Full input/output specs in docs/TOOLS_SPEC.md.

Installation

Option A — try without installing (recommended for first run):

uvx --from kubernetes-mcp k8s-mcp-server --help

Option B — install for daily use:

pip install kubernetes-mcp

You'll need a working ~/.kube/config pointing at the cluster you want to inspect.

Quick Start (Claude Desktop)

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%/Claude/claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "kubernetes": {
      "command": "uvx",
      "args": ["k8s-mcp-server"]
    }
  }
}

Restart Claude Desktop. You should now be able to ask:

"List all pods in the staging namespace that aren't running."

"Why is pod api-7d4f9 crashing? Check its logs and recent events."

Examples

Ready-to-paste config snippets (read-only and writes-enabled variants) live in examples/ — see examples/README.md for setup notes.

Security Model

All write operations are off by default. The --enable-writes flag at server start is required to register them at all (Layer 1 + 2 of defense-in-depth). Once enabled, every write tool re-checks the flag at handler entry (Layer 3) and defaults to dry_run=True (Layer 4) — the LLM must explicitly pass dry_run=False to apply. The optional --namespaces dev,staging allowlist limits the blast radius for both reads and writes regardless of the flag. Every write attempt is audited at INFO level on the k8s_mcp_server.audit logger with the tool name, target, dry_run value, and tool-specific deltas (Layer 5).

Secret values are never returned — even via describe_resource(kind="secret"), only key names surface. The kubectl.kubernetes.io/last-applied-configuration annotation is stripped from Secret responses to prevent annotation-based leaks.

Read docs/SECURITY.md for the full threat model and the layered defense table.

Configuration

Flag Default Description
--enable-writes off Register write tools
--namespaces ns1,ns2 all Restrict to specific namespaces
--kubeconfig PATH ~/.kube/config Override kubeconfig path
--context NAME current Override kubeconfig context
--log-level LEVEL INFO DEBUG / INFO / WARNING / ERROR

Architecture

Tools are registered via a small dataclass-based registry; each tool is a single async function that returns a structured ToolResult(success, data, error, audit) envelope and never raises into the MCP layer. Read tools defer to a shared namespace allowlist resolver (resolve_read_namespaces) and per-kind formatters in tools/. Write tools follow a strict three-layer defense pattern (CLI flag → server-level registry filter → in-handler assert_writes_enabled) on top of dry-run-by-default and audit logging. The polymorphic describe_resource tool dispatches via a per-kind table covering pod / deployment / service / node / configmap / secret / ingress.

See CLAUDE.md §6.1 for the Write Tool Contract.

Development

git clone https://github.com/sarah-salah/k8s-mcp-server
cd k8s-mcp-server
uv sync
uv run pytest
uv run ruff check
uv run mypy src/

Project conventions and workflow in CLAUDE.md. Integration tests against a real kind cluster are documented in docs/INTEGRATION_TESTING.md.

Roadmap (v2)

See docs/PROJECT_PLAN.md. Highlights for v2:

  • HTTP / SSE transport
  • In-cluster deployment with Helm chart
  • ServiceAccount + RBAC
  • Persistent audit log

License & Acknowledgments

MIT — see LICENSE.

Built on top of:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kubernetes_mcp-0.1.1.tar.gz (148.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kubernetes_mcp-0.1.1-py3-none-any.whl (45.9 kB view details)

Uploaded Python 3

File details

Details for the file kubernetes_mcp-0.1.1.tar.gz.

File metadata

  • Download URL: kubernetes_mcp-0.1.1.tar.gz
  • Upload date:
  • Size: 148.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.12 {"installer":{"name":"uv","version":"0.11.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for kubernetes_mcp-0.1.1.tar.gz
Algorithm Hash digest
SHA256 1f8edf227ebd5cd87155f50e9257926fe6e3c664c4007fa3d28996b32226bff5
MD5 0e4988746833bf7bda4ed8fbf7c68baf
BLAKE2b-256 a30d6d967d9e087aec9c61a903d7e6d23cd90b7d51b849ab5681b0a9562c2463

See more details on using hashes here.

File details

Details for the file kubernetes_mcp-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: kubernetes_mcp-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 45.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.12 {"installer":{"name":"uv","version":"0.11.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for kubernetes_mcp-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2310c576a7004abaeb068e6e549300030ea911c997735b7f5a5440ece9c7cc7e
MD5 b1a2fe92f6d28fd347772ca600dab2e6
BLAKE2b-256 20bc2b29698e64f32225e0f565555678a3a991b0c0072bcc76eaf5a4e1ced1c5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page