Unified MCP server for Kubernetes orchestration. Tools for kubectl, Helm, and Kustomize.
= poly-k8s-mcp
image:https://img.shields.io/badge/License-PMPL--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"] image:https://img.shields.io/badge/Philosophy-Palimpsest-indigo.svg[Palimpsest,link="https://github.com/hyperpolymath/palimpsest-license"]
:toc: :toc-placement!:
image:https://img.shields.io/badge/RSR-compliant-gold[RSR Compliant,link=https://github.com/hyperpolymath/rhodium-standard-repositories] image:https://img.shields.io/badge/MCP-server-blue[MCP Server,link=https://github.com/modelcontextprotocol]
Unified MCP server for Kubernetes orchestration. Provides Model Context Protocol tools for managing Kubernetes clusters through kubectl, Helm, and Kustomize.
toc::[]
== Overview
poly-k8s-mcp exposes Kubernetes management capabilities through the Model Context Protocol (MCP), enabling AI assistants and other MCP clients to interact with Kubernetes clusters programmatically.
== Adapters
=== kubectl (12 tools) Core Kubernetes CLI operations:
kubectl_get- Get resources (pods, deployments, services, etc.)kubectl_describe- Show detailed resource informationkubectl_logs- View container logskubectl_apply- Apply manifestskubectl_delete- Delete resourceskubectl_exec- Execute commands in containerskubectl_scale- Scale deployments/replicasetskubectl_rollout- Manage rollouts (status, history, undo, restart)kubectl_port_forward- Forward ports (returns command to run)kubectl_context- Manage kubectl contextskubectl_top- Show resource usage (CPU/memory)kubectl_create- Create resources
=== Helm (14 tools) Kubernetes package manager:
helm_install- Install chartshelm_upgrade- Upgrade releaseshelm_uninstall- Uninstall releaseshelm_list- List releaseshelm_status- Get release statushelm_history- View release historyhelm_rollback- Rollback to previous revisionhelm_repo_add- Add chart repositorieshelm_repo_list- List repositorieshelm_repo_update- Update repository cachehelm_search- Search for chartshelm_show- Show chart informationhelm_template- Render templates locallyhelm_get- Get release information
=== Kustomize (8 tools) Kubernetes configuration management:
kustomize_build- Build kustomization into manifestskustomize_apply- Build and apply to clusterkustomize_create- Create kustomization.yamlkustomize_edit_add- Add resources/patches/configmapskustomize_edit_set- Set namespace/nameprefix/imagekustomize_edit_remove- Remove itemskustomize_cfg- Run cfg commands (cat, count, grep, tree)kustomize_version- Show version
== Runtime Mode
[IMPORTANT]
Local-Agent Mode Only — This MCP server wraps CLI tools (kubectl, helm, kustomize) and requires --allow-run permission. It cannot run in Hosted-HTTP mode.
|=== |Mode |Supported |Notes
|Local-Agent (stdio) |✓ Yes |Primary mode. Runs locally, executes CLI commands.
|Hosted-HTTP |✗ No |Cannot wrap CLI tools from a hosted environment. |===
== Security Boundary
[WARNING]
This MCP server executes external CLI commands using Deno's --allow-run permission. The security boundary is your local kubectl/helm/kustomize configuration.
What this means:
- Commands run with your current kubeconfig and credentials
- The MCP client (e.g., Claude) can perform any kubectl/helm/kustomize action you can
- Cluster access is determined by your local
~/.kube/config - No additional authentication layer between MCP and the CLIs
Recommendations:
- Use a restricted kubeconfig for MCP access if possible
- Consider namespace-scoped RBAC roles
- Avoid running this MCP server with cluster-admin credentials
- Review tool calls before approving in your MCP client
== Requirements
- https://deno.land/[Deno] runtime (v2.0+)
- https://kubernetes.io/docs/reference/kubectl/[kubectl] CLI
- https://helm.sh/[Helm] CLI (optional, for Helm tools)
- https://kustomize.io/[Kustomize] CLI (optional, for Kustomize tools)
- Valid kubeconfig (
~/.kube/configorKUBECONFIGenv var)
== Installation
[source,bash]
git clone https://github.com/hyperpolymath/poly-k8s-mcp cd poly-k8s-mcp
== Usage
Run as MCP server (Local-Agent mode):
[source,bash]
deno run --allow-run --allow-read --allow-env --allow-write main.js
Or use the systemd service:
[source,bash]
systemctl --user enable poly-k8s-mcp systemctl --user start poly-k8s-mcp
== Smoke Test
Verify the server is working correctly:
[source,bash]
1. Check Deno can run the server
deno run --allow-run --allow-read --allow-env --allow-write main.js & SERVER_PID=$!
2. Verify kubectl is accessible
kubectl version --client
3. Test basic tool (requires cluster access)
The MCP client should be able to call kubectl_get
4. Cleanup
kill $SERVER_PID
Expected smoke test results:
|=== |Check |Expected Result
|Server starts |No errors, listens on stdio
|kubectl available
|kubectl version --client returns version
|kubectl_get works |Returns pod list (if cluster accessible)
|Helm available (optional)
|helm version returns version
|Kustomize available (optional)
|kustomize version returns version
|===
== License
MIT
== OPSM Link
[source]
OPSM Core | v poly-k8s-mcp (Kubernetes integration for OPSM)