Cloud · MODEL CONTEXT PROTOCOL
mcp-server-kubernetes
MCP Server for kubernetes management commands
WHAT IT CONNECTS
What mcp-server-kubernetes gives an AI Agent
The source catalog does not include a structured feature list. Review the repository documentation before use.
SECURITY
An MCP listing is not a security review
An MCP server may receive model context, credentials, local files, or permission to call external systems. Review its code, requested environment variables, network behavior, package provenance, and maintenance status before connecting it to an agent.
README
Repository documentation
MCP Server that can connect to a Kubernetes cluster and manage it. Supports loading kubeconfig from multiple sources in priority order.
MCPKubernetesClaude.mov
Before using this MCP server with any tool, make sure you have:
- kubectl installed and in your PATH
- A valid kubeconfig file with contexts configured
- Access to a Kubernetes cluster configured for kubectl (e.g. minikube, Rancher Desktop, GKE, etc.)
- Helm v3 installed and in your PATH (no Tiller required). Optional if you don't plan to use Helm.
You can verify your connection by running kubectl get pods in a terminal to ensure you can connect to your cluster without credential issues.
By default, the server loads kubeconfig from ~/.kube/config. For additional authentication options (environment variables, custom paths, etc.), see ADVANCED_README.md.
Add the MCP server to Claude Code using the built-in command:
claude mcp add kubernetes -- npx mcp-server-kubernetesThis will automatically configure the server in your Claude Code MCP settings.
Add the MCP server to Codex CLI using the built-in command:
codex mcp add kubernetes -- npx mcp-server-kubernetesThis registers the server globally in ~/.codex/config.toml and makes its tools available in all Codex sessions.
Add the following configuration to your Claude Desktop config file:
{
"mcpServers": {
"kubernetes": {
"command": "npx",
"args": ["mcp-server-kubernetes"]
}
}
}MCP Server Kubernetes is also available as a mcpb (formerly dxt) extension. In Claude Desktop, go to Settings (Cmd+, on Mac) -> Extensions -> Browse Extensions and scroll to find mcp-server-kubernetes in the modal. Install it & it will install & utilize kubectl via command line & your kubeconfig.
To manually install, you can also get the .mcpb by going to the latest Release and downloading it.
VS Code has built-in MCP support. Use the one-click install button above, or add the server to .vscode/mcp.json in your workspace (or to your user mcp.json via MCP: Open User Configuration):
{
"servers": {
"kubernetes": {
"type": "stdio",
"command": "npx",
"args": ["mcp-server-kubernetes"]
}
}
}Cursor supports MCP servers through its AI integration. Add the server to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project):
{
"mcpServers": {
"kubernetes": {
"command": "npx",
"args": ["mcp-server-kubernetes"]
}
}
}The server will automatically connect to your current kubectl context. You can verify the connection by asking the AI assistant to list your pods or create a test deployment.
Muse Code reads MCP servers from the mcp_servers block of ~/.config/muse/settings.json. The file must include "schema_version": 1:
{
"schema_version": 1,
"mcp_servers": {
"kubernetes": {
"transport": "stdio",
"command": "npx",
"args": ["mcp-server-kubernetes"]
}
}
}To connect over Streamable HTTP instead, first start the server in HTTP mode (it serves /mcp on port 3000 by default; see Streamable HTTP Transport):
ENABLE_UNSAFE_STREAMABLE_HTTP_TRANSPORT=1 npx mcp-server-kubernetesThen point Muse Code at that endpoint with the streamable_http transport (headers is optional):
{
"schema_version": 1,
"mcp_servers": {
"kubernetes": {
"transport": "streamable_http",
"url": "http://localhost:3000/mcp",
"mode": "optional"
}
}
}"mode": "optional" lets Muse Code start with a warning if the HTTP server isn't running, instead of aborting.
Start a new Muse Code session after editing the file, then run /mcp to confirm the kubernetes server and its tools are connected.
mcp-chat is a CLI chat client for MCP servers. You can use it to interact with the Kubernetes server.
npx mcp-chat --server "npx mcp-server-kubernetes"Alternatively, pass it your existing Claude Desktop configuration file from above (Linux should pass the correct path to config):
Mac:
npx mcp-chat --config "~/Library/Application Support/Claude/claude_desktop_config.json"Windows:
npx mcp-chat --config "%APPDATA%\Claude\claude_desktop_config.json"- Connect to a Kubernetes cluster
- Unified kubectl API for managing resources
- Get or list resources with
kubectl_get - Describe resources with
kubectl_describe - List resources with
kubectl_get - Create resources with
kubectl_create - Apply YAML manifests with
kubectl_apply - Delete resources with
kubectl_delete - Get logs with
kubectl_logs - Manage kubectl contexts with
kubectl_context - Explain Kubernetes resources with
explain_resource - List API resources with
list_api_resources - Scale resources with
kubectl_scale - Update field(s) of a resource with
kubectl_patch - Manage deployment rollouts with
kubectl_rollout - Execute any kubectl command with
kubectl_generic - Verify connection with
ping
- Get or list resources with
- Advanced operations
- Scale deployments with
kubectl_scale(replaces legacyscale_deployment) - Port forward to pods and services with
port_forward - Run Helm operations
- Install, upgrade, and uninstall charts
- Support for custom values, repositories, and versions
- Template-based installation (
helm_template_apply) to bypass authentication issues - Template-based uninstallation (
helm_template_uninstall) to bypass authentication issues
- Pod cleanup operations
- Clean up problematic pods (
cleanup_pods) in states: Evicted, ContainerStatusUnknown, Completed, Error, ImagePullBackOff, CrashLoopBackOff
- Clean up problematic pods (
- Node management operations
- Cordoning, draining, and uncordoning nodes (
node_management) for maintenance and scaling operations
- Cordoning, draining, and uncordoning nodes (
- Scale deployments with
- Troubleshooting Prompt (
k8s-diagnose)- Guides through a systematic Kubernetes troubleshooting flow for pods based on a keyword and optional namespace.
- Non-destructive mode for read and create/update-only access to clusters
- Secrets masking for security (masks sensitive data in
kubectl get secretscommands, does not affect logs) - OpenTelemetry Observability (opt-in)
- Distributed tracing for all tool calls
- Export to Jaeger, Tempo, Grafana, or any OTLP backend
- Configurable sampling strategies
- Rich span attributes (tool name, duration, K8s context, errors)
- See docs/OBSERVABILITY.md for details
The MCP Kubernetes server includes optional OpenTelemetry integration for comprehensive observability. This feature is disabled by default and can be enabled via environment variables or Helm configuration.
Enable observability with environment variables:
export ENABLE_TELEMETRY=true
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
npx mcp-server-kubernetes- All tool calls: kubectl_get, kubectl_apply, kubectl_logs, etc.
- Execution duration: How long each operation takes
- Success/failure status: Automatic error tracking
- Kubernetes context: Namespace, context, resource type
- Rich metadata: Host, process, and custom attributes
Works with any OTLP-compatible backend:
- Jaeger (open source)
- Grafana Tempo (open source)
- Grafana Cloud (commercial)
- Datadog, New Relic, Honeycomb, Lightstep, AWS X-Ray
See docs/OBSERVABILITY.md for comprehensive documentation including:
- Configuration options
- Deployment examples (Kubernetes, Helm, Claude Code)
- Sampling strategies
- Production best practices
- Troubleshooting guide
# Start Jaeger
docker run -d --name jaeger \
-e COLLECTOR_OTLP_ENABLED=true \
-p 16686:16686 \
-p 4317:4317 \
jaegertracing/all-in-one:latest
# Enable telemetry
export ENABLE_TELEMETRY=true
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
export OTEL_TRACES_SAMPLER=always_on
# Run server
npx mcp-server-kubernetes
# View traces: http://localhost:16686The MCP Kubernetes server includes specialized prompts to assist with common diagnostic operations.
This prompt provides a systematic troubleshooting flow for Kubernetes pods. It accepts a keyword to identify relevant pods and an optional namespace to narrow the search.
The prompt's output will guide you through an autonomous troubleshooting flow, providing instructions for identifying issues, collecting evidence, and suggesting remediation steps.
Make sure that you have bun installed. Clone the repo & install dependencies:
git clone https://github.com/Flux159/mcp-server-kubernetes.git
cd mcp-server-kubernetes
bun install- Start the server in development mode (watches for file changes):
bun run dev- Run unit tests:
bun run test- Build the project:
bun run build- Local Testing with Inspector
npx @modelcontextprotocol/inspector node dist/index.js
# Follow further instructions on terminal for Inspector link- Local testing with Claude Desktop
{
"mcpServers": {
"mcp-server-kubernetes": {
"command": "node",
"args": ["/path/to/your/mcp-server-kubernetes/dist/index.js"]
}
}
}- Local testing with mcp-chat
bun run chatSee the CONTRIBUTING.md file for details.
You can run the server in a non-destructive mode that disables all destructive operations (delete pods, delete deployments, delete namespaces, etc.):
ALLOW_ONLY_NON_DESTRUCTIVE_TOOLS=true npx mcp-server-kubernetesFor Claude Desktop configuration with non-destructive mode:
{
"mcpServers": {
"kubernetes-readonly": {
"command": "npx",
"args": ["mcp-server-kubernetes"],
"env": {
"ALLOW_ONLY_NON_DESTRUCTIVE_TOOLS": "true"
}
}
}
}All read-only and resource creation/update operations remain available:
- Resource Information:
kubectl_get,kubectl_describe,kubectl_logs,explain_resource,list_api_resources - Resource Creation/Modification:
kubectl_apply,kubectl_create,kubectl_scale,kubectl_patch,kubectl_rollout - Helm Operations:
install_helm_chart,upgrade_helm_chart,helm_template_apply,helm_template_uninstall - Connectivity:
port_forward,stop_port_forward - Context Management:
kubectl_context
The following destructive operations are disabled:
kubectl_delete: Deleting any Kubernetes resourcesuninstall_helm_chart: Uninstalling Helm chartscleanup: Cleanup of managed resourcescleanup_pods: Cleaning up problematic podsnode_management: Node management operations (can drain nodes)kubectl_generic: General kubectl command access (may include destructive operations)exec_in_pod: Arbitrary command execution inside a pod (can read service-account tokens and change state)
For additional advanced features, see the ADVANCED_README.md and also the docs folder for specific information on helm_install, helm_template_apply, node management & pod cleanup.
See this DeepWiki link for a more indepth architecture overview created by Devin.
This section describes the high-level architecture of the MCP Kubernetes server.
The sequence diagram below illustrates how requests flow through the system:
sequenceDiagram
participant Client
participant Transport as Transport Layer
participant Server as MCP Server
participant Filter as Tool Filter
participant Handler as Request Handler
participant K8sManager as KubernetesManager
participant K8s as Kubernetes API
Note over Transport: StdioTransport or<br>SSE Transport
Client->>Transport: Send Request
Transport->>Server: Forward Request
alt Tools Request
Server->>Filter: Filter available tools
Note over Filter: Remove destructive tools<br>if in non-destructive mode
Filter->>Handler: Route to tools handler
alt kubectl operations
Handler->>K8sManager: Execute kubectl operation
K8sManager->>K8s: Make API call
else Helm operations
Handler->>K8sManager: Execute Helm operation
K8sManager->>K8s: Make API call
else Port Forward operations
Handler->>K8sManager: Set up port forwarding
K8sManager->>K8s: Make API call
end
K8s-->>K8sManager: Return result
K8sManager-->>Handler: Process response
Handler-->>Server: Return tool result
else Resource Request
Server->>Handler: Route to resource handler
Handler->>K8sManager: Get resource data
K8sManager->>K8s: Query API
K8s-->>K8sManager: Return data
K8sManager-->>Handler: Format response
Handler-->>Server: Return resource data
end
Server-->>Transport: Send Response
Transport-->>Client: Return Final Response
See this DeepWiki link for a more indepth architecture overview created by Devin.
Go to the releases page, click on "Draft New Release", click "Choose a tag" and create a new tag by typing out a new version number using "v{major}.{minor}.{patch}" semver format. Then, write a release title "Release v{major}.{minor}.{patch}" and description / changelog if necessary and click "Publish Release".
This will create a new tag which will trigger a new release build via the cd.yml workflow. Once successful, the new release will be published to npm. Note that there is no need to update the package.json version manually, as the workflow will automatically update the version number in the package.json file & push a commit to main.
Adding clusters to kubectx.
If you find this repo useful, please cite:
@software{Patel_MCP_Server_Kubernetes_2024,
author = {Patel, Paras and Sonwalkar, Suyog},
month = jul,
title = {{MCP Server Kubernetes}},
url = {https://github.com/Flux159/mcp-server-kubernetes},
version = {2.5.0},
year = {2024}
}
COMMUNITY