k8s-mcp-server
An MCP server that lets AI assistants safely inspect and operate on Kubernetes clusters through natural conversation.
README
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.
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
<!-- TODO: add demo GIF before v0.1.0 launch -->
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-7d4f9crashing? 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:
- Official MCP Python SDK — the protocol layer
- kubernetes-py client — the API client
- pydantic v2 — input validation and tool schema generation
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。