- Explore MCP Servers
- kubernetes
Kubernetes
What is Kubernetes
MCP Server Kubernetes is a server designed to connect and manage Kubernetes clusters. It supports multiple kubeconfig sources and interacts with the Kubernetes API, allowing users to perform various operations using a unified interface.
Use cases
It can be used to manage Kubernetes resources, scale deployments, port-forward services, and execute Helm operations. Ideal for users who need to interact with Kubernetes clusters using CLI or chat clients.
How to use
To use the server, install it via npm and run it using commands defined in the configuration file. It automatically connects to the current kubectl context, provided that kubectl is installed and correctly configured to access a Kubernetes cluster.
Key features
Key features include unified kubectl API operations (e.g., get, list, create resources), advanced operations with Helm, a non-destructive mode for safe access, and support for multiple authentication methods for connecting to clusters.
Where to use
You can use it in development environments, CI/CD pipelines, and in conjunction with CLI clients like mcp-chat or GUI tools for Kubernetes management, making it suitable for both local and cloud-based Kubernetes infrastructures.
Overview
What is Kubernetes
MCP Server Kubernetes is a server designed to connect and manage Kubernetes clusters. It supports multiple kubeconfig sources and interacts with the Kubernetes API, allowing users to perform various operations using a unified interface.
Use cases
It can be used to manage Kubernetes resources, scale deployments, port-forward services, and execute Helm operations. Ideal for users who need to interact with Kubernetes clusters using CLI or chat clients.
How to use
To use the server, install it via npm and run it using commands defined in the configuration file. It automatically connects to the current kubectl context, provided that kubectl is installed and correctly configured to access a Kubernetes cluster.
Key features
Key features include unified kubectl API operations (e.g., get, list, create resources), advanced operations with Helm, a non-destructive mode for safe access, and support for multiple authentication methods for connecting to clusters.
Where to use
You can use it in development environments, CI/CD pipelines, and in conjunction with CLI clients like mcp-chat or GUI tools for Kubernetes management, making it suitable for both local and cloud-based Kubernetes infrastructures.
Content
MCP Server Kubernetes
MCP Server that can connect to a Kubernetes cluster and manage it. Supports loading kubeconfig from multiple sources in priority order.
https://github.com/user-attachments/assets/f25f8f4e-4d04-479b-9ae0-5dac452dd2ed
Usage with Claude Desktop
{
"mcpServers": {
"kubernetes": {
"command": "npx",
"args": [
"mcp-server-kubernetes"
]
}
}
}
By default, the server loads kubeconfig from ~/.kube/config
. For additional authentication options (environment variables, custom paths, etc.), see ADVANCED_README.md.
The server will automatically connect to your current kubectl context. 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 asking Claude to list your pods or create a test deployment.
If you have errors open up a standard terminal and run kubectl get pods
to see if you can connect to your cluster without credentials issues.
Usage with mcp-chat
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"
Features
- [x] Connect to a Kubernetes cluster
- [x] Unified kubectl API for managing resources
- Get or list resources with
kubectl_get
- Describe resources with
kubectl_describe
- List resources with
kubectl_list
- 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
- Get or list resources with
- [x] 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
- Scale deployments with
- [x] Non-destructive mode for read and create/update-only access to clusters
Local Development
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
Development Workflow
- 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 chat
Contributing
See the CONTRIBUTING.md file for details.
Advanced
Non-Destructive Mode
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-kubernetes
For Claude Desktop configuration with non-destructive mode:
{
"mcpServers": {
"kubernetes-readonly": {
"command": "npx",
"args": [
"mcp-server-kubernetes"
],
"env": {
"ALLOW_ONLY_NON_DESTRUCTIVE_TOOLS": "true"
}
}
}
}
Commands Available in Non-Destructive Mode
All read-only and resource creation/update operations remain available:
- Resource Information:
kubectl_get
,kubectl_describe
,kubectl_list
,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
- Connectivity:
port_forward
,stop_port_forward
- Context Management:
kubectl_context
Commands Disabled in Non-Destructive Mode
The following destructive operations are disabled:
kubectl_delete
: Deleting any Kubernetes resourcesuninstall_helm_chart
: Uninstalling Helm chartscleanup
: Cleanup of managed resourceskubectl_generic
: General kubectl command access (may include destructive operations)
For additional advanced features, see the ADVANCED_README.md.
Architecture
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.
Request Flow
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.
Publishing new release
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.
Not planned
Adding clusters to kubectx.