Kubernetes MCP Server
✨ Features | 🚀 Getting Started | 🎥 Demos | ⚙️ Configuration | 🛠️ Tools | 💬 Community | 🧑💻 Development
https://github.com/user-attachments/assets/be2b67b3-fc1c-4d11-ae46-93deba8ed98e
✨ Features
A powerful and flexible Kubernetes Model Context Protocol (MCP) server implementation with support for Kubernetes and OpenShift.
- ✅ Configuration:
- Automatically detect changes in the Kubernetes configuration and update the MCP server.
- View and manage the current Kubernetes
.kube/config or in-cluster configuration.
- ✅ Generic Kubernetes Resources: Perform operations on any Kubernetes or OpenShift resource.
- Any CRUD operation (Create or Update, Get, List, Delete).
- ✅ Pods: Perform Pod-specific operations.
- List pods in all namespaces or in a specific namespace.
- Get a pod by name from the specified namespace.
- Delete a pod by name from the specified namespace.
- Show logs for a pod by name from the specified namespace.
- Top gets resource usage metrics for all pods or a specific pod in the specified namespace.
- Exec into a pod and run a command.
- Run a container image in a pod and optionally expose it.
- ✅ Namespaces: List Kubernetes Namespaces.
- ✅ Events: View Kubernetes events in all namespaces or in a specific namespace.
- ✅ Projects: List OpenShift Projects.
- ☸️ Helm:
- Install a Helm chart in the current or provided namespace.
- List Helm releases in all namespaces or in a specific namespace.
- Uninstall a Helm release in the current or provided namespace.
- 🔧 Tekton: Tekton-specific operations that complement generic Kubernetes resource management.
- Pipeline: Start a Tekton Pipeline by creating a PipelineRun.
- PipelineRun: Restart, cancel, troubleshoot, and retrieve PipelineRun logs.
- Task: Start a Tekton Task by creating a TaskRun.
Unlike other Kubernetes MCP server implementations, this IS NOT just a wrapper around kubectl or helm command-line tools.
It is a Go-based native implementation that interacts directly with the Kubernetes API server.
There is NO NEED for external dependencies or tools to be installed on the system.
If you're using the native binaries you don't need to have Node or Python installed on your system.
- ✅ Lightweight: The server is distributed as a single native binary for Linux, macOS, and Windows.
- ✅ High-Performance / Low-Latency: Directly interacts with the Kubernetes API server without the overhead of calling and waiting for external commands.
- ✅ Multi-Cluster: Can interact with multiple Kubernetes clusters simultaneously (as defined in your kubeconfig files).
- ✅ Cross-Platform: Available as a native binary for Linux, macOS, and Windows, as well as an npm package, a Python package, and container/Docker image.
- ✅ Configurable: Supports command-line arguments, TOML configuration files, and environment variables.
- ✅ Well tested: The server has an extensive test suite to ensure its reliability and correctness across different Kubernetes environments.
- 📚 Documentation: Comprehensive user documentation including setup guides, configuration reference, and observability.
🎥 Demos
Diagnosing and automatically fixing an OpenShift Deployment
Demo showcasing how Kubernetes MCP server is leveraged by Claude Desktop to automatically diagnose and fix a deployment in OpenShift without any user assistance.
https://github.com/user-attachments/assets/a576176d-a142-4c19-b9aa-a83dc4b8d941
Vibe Coding a simple game and deploying it to OpenShift
In this demo, I walk you through the process of Vibe Coding a simple game using VS Code and how to leverage Podman MCP server and Kubernetes MCP server to deploy it to OpenShift.
⚙️ Configuration
The Kubernetes MCP server can be configured using command line (CLI) arguments.
You can run the CLI executable either by using npx, uvx, or by downloading the latest release binary.
# Run the Kubernetes MCP server using npx (in case you have npm and node installed)
npx kubernetes-mcp-server@latest --help
# Run the Kubernetes MCP server using uvx (in case you have uv and python installed)
uvx kubernetes-mcp-server@latest --help
# Run the Kubernetes MCP server using the latest release binary
./kubernetes-mcp-server --help
Configuration Options
| Option | Description |
|---|
--port | Starts the MCP server in Streamable HTTP mode (path /mcp) and listens on the specified port. |
--log-level | Sets the logging level (values from 0-9). Similar to kubectl logging levels. |
--config | (Optional) Path to the main TOML configuration file. See Configuration Reference for details. |
--config-dir | (Optional) Path to drop-in configuration directory. Files are loaded in lexical (alphabetical) order. Defaults to conf.d relative to the main config file if --config is specified. See Configuration Reference for details. |
--kubeconfig |
Note: Most CLI options have equivalent TOML configuration fields. The --disable-multi-cluster flag is equivalent to setting cluster_provider_strategy = "disabled" in TOML. See the Configuration Reference for all TOML options.
TOML Configuration Files
For complex or persistent configurations, use TOML configuration files instead of CLI arguments:
kubernetes-mcp-server --config /etc/kubernetes-mcp-server/config.toml
Example configuration:
log_level = 2
read_only = true
toolsets = ["core", "config", "helm", "kubevirt"]
# Deny access to sensitive resources
[[denied_resources]]
group = ""
version = "v1"
kind = "Secret"
[telemetry]
endpoint = "http://localhost:4317"
For comprehensive TOML configuration documentation, including:
- All configuration options and their defaults
- Drop-in configuration files for modular settings
- Dynamic configuration reload via SIGHUP
- Denied resources for restricting access to sensitive resource types
- Server instructions for MCP Tool Search
- Custom MCP prompts
- OAuth/OIDC authentication for HTTP mode (Keycloak, Microsoft Entra ID)
See the Configuration Reference.
📊 MCP Logging
The server supports the MCP logging capability, allowing clients to receive debugging information via structured log messages.
Kubernetes API errors are automatically categorized and logged to clients with appropriate severity levels.
Sensitive data (tokens, keys, passwords, cloud credentials) is automatically redacted before being sent to clients.
See the MCP Logging Guide.
🛠️ Tools and Functionalities
The Kubernetes MCP server supports enabling or disabling specific groups of tools and functionalities (tools, resources, prompts, and so on) via the --toolsets command-line flag or toolsets configuration option.
This allows you to control which Kubernetes functionalities are available to your AI tools.
Enabling only the toolsets you need can help reduce the context size and improve the LLM's tool selection accuracy.
Validated Kubernetes Ecosystem Projects
The following CNCF and Kubernetes ecosystem projects are covered by
automated evaluation scenarios in evals/tasks. Most scenarios
work with just the core toolset. The dedicated toolsets below are optional
and only needed for the project-specific scenarios noted.
Available Toolsets
The following sets of tools are available (toolsets marked with ✓ in the Default column are enabled by default):
| Toolset | Description | Default |
|---|
| config | View and manage the current local Kubernetes configuration (kubeconfig) | ✓ |
| core | Most common tools for Kubernetes management (Pods, Generic Resources, Events, etc.) | ✓ |
| helm | Tools for managing Helm charts and releases | |
| kcp | Manage kcp workspaces and multi-tenancy features | |
| kiali | Most common tools for managing Kiali, check the Kiali documentation for more details. | |
| kubevirt | KubeVirt virtual machine management tools, check the KubeVirt documentation for more details. | |
| netobserv | Network observability tools backed by the NetObserv console plugin API (flows, metrics, export). Check the NetObserv documentation for more details. | |
Tools
In case multi-cluster support is enabled (default) and you have access to multiple clusters, all applicable tools will include an additional context argument to specify the Kubernetes context (cluster) to use for that operation.
-
configuration_contexts_list - List all available context names and associated server urls from the kubeconfig file
-
targets_list - List all available targets
-
configuration_view - Get the current Kubernetes configuration content as a kubeconfig YAML
minified (boolean) - Return a minified version of the configuration. If set to true, keeps only the current-context and the relevant pieces of the configuration for that context. If set to false, all contexts, clusters, auth-infos, and users are returned in the configuration. (Optional, default true)
-
events_list - List Kubernetes events (warnings, errors, state changes) for debugging and troubleshooting in the current cluster from all namespaces
fieldSelector (string) - Optional Kubernetes field selector to filter events by field values (e.g. 'type=Warning', 'involvedObject.name=my-pod'). Supported fields: involvedObject.kind, involvedObject.name, involvedObject.namespace, involvedObject.uid, involvedObject.apiVersion, involvedObject.resourceVersion, involvedObject.fieldPath, reason, reportingComponent, source, type. See https://kubernetes.io/docs/concepts/overview/working-with-objects/field-selectors/
namespace (string) - Optional Namespace to retrieve the events from. If not provided, will list events from all namespaces
-
namespaces_list - List all the Kubernetes namespaces in the current cluster
-
projects_list - List all the OpenShift projects in the current cluster
-
nodes_log - Get logs from a Kubernetes node (kubelet, kube-proxy, or other system logs). This accesses node logs through the Kubernetes API proxy to the kubelet
name (string) - Name of the node to get logs from
-
helm_install - Install (deploy) a Helm chart to create a release in the current or provided namespace
chart (string) (required) - Chart reference to install (for example: stable/grafana, oci://ghcr.io/nginxinc/charts/nginx-ingress)
name (string) - Name of the Helm release (Optional, random name if not provided)
namespace (string) - Namespace to install the Helm chart in (Optional, current namespace if not provided)
values (object) - Values to pass to the Helm chart (Optional)
-
helm_list - List all the Helm releases in the current or provided namespace (or in all namespaces if specified)
all_namespaces (boolean) - If true, lists all Helm releases in all namespaces ignoring the namespace argument (Optional)
namespace (string) - Namespace to list Helm releases from (Optional, all namespaces if not provided)
-
helm_uninstall - Uninstall a Helm release in the current or provided namespace
name (string) (required) - Name of the Helm release to uninstall
namespace (string) - Namespace to uninstall the Helm release from (Optional, current namespace if not provided)
-
kiali_get_mesh_traffic_graph - Returns service-to-service traffic topology, dependencies, and network metrics (throughput, response time, mTLS) for the specified namespaces. Use this to diagnose routing issues, latency, or find upstream/downstream dependencies.
graphType (string) - Granularity of the graph. 'app' aggregates by app name, 'versionedApp' separates by versions, 'workload' maps specific pods/deployments. Default: versionedApp.
meshCluster (string) - Optional Istio mesh cluster name from kiali_list_mesh_clusters (e.g. west). When omitted, Kiali defaults to its home cluster.
namespaces (string) (required) - Comma-separated list of namespaces to map
-
kiali_get_mesh_status - Retrieves the high-level health, topology, and environment details of the Istio service mesh. Returns multi-cluster control plane status (istiod), data plane namespace health (including ambient mesh status), observability stack health (Prometheus, Grafana...), and component connectivity. Use this tool as the first step to diagnose mesh-wide issues, verify Istio/Kiali versions, or check overall health before drilling into specific workloads.
-
kiali_manage_istio_config_read - Read Istio, Gateway API, and Inference API config. 'list' groups by namespace→'group/version/kind'→{valid:[...],invalid:[...]} where valid/invalid arrays contain resource names; omit group/kind to retrieve ALL config types in a single call. Supports Istio (networking.istio.io, security.istio.io), Gateway API (gateway.networking.k8s.io), and Inference API (inference.networking.k8s.io) when installed. 'get' returns full YAML. For writes use manage_istio_config.
action (string) (required) - Action to perform (read-only)
group (string) - API group of the Istio object. Required ONLY for 'get' action. For 'list', OMIT group and kind to retrieve ALL config types in a single call. Use 'gateway.networking.k8s.io' for Gateway API resources. Use 'inference.networking.k8s.io' for Inference API resources.
-
vm_clone - Clone a VirtualMachine on KubeVirt by creating a VirtualMachineClone resource. This creates a copy of the source VM with a new name using the KubeVirt Clone API
name (string) (required) - The name of the source virtual machine to clone
namespace (string) (required) - The namespace of the source virtual machine
targetName (string) (required) - The name for the new cloned virtual machine
-
vm_create - Create a VirtualMachine on KubeVirt with the specified configuration, automatically resolving instance types, preferences, and container disk images. VM will be created in Halted state by default; use autostart parameter to start it immediately.
autostart (boolean) - Optional flag to automatically start the VM after creation (sets runStrategy to Always instead of Halted). Defaults to false.
instancetype (string) - Optional instance type name for the VM (e.g., 'u1.small', 'u1.medium', 'u1.large')
name (string) (required) - The name of the virtual machine
namespace (string) (required) - The namespace for the virtual machine
networks (array) - Optional secondary network interfaces to attach to the VM. Each item specifies a Multus NetworkAttachmentDefinition to attach. Accepts either simple strings (NetworkAttachmentDefinition names) or objects with 'name' (interface name in VM) and 'networkName' (NetworkAttachmentDefinition name) properties. Each network creates a bridge interface on the VM.
- netobserv_list_flows - Lists NetObserv network flow records from Loki. Use when investigating traffic between workloads, IPs, ports, or protocols in a namespace or time window.
endTime (integer) - End of time range as Unix epoch seconds. Defaults to now.
filters (string) - NetObserv filter expression passed to the console plugin (plain text; the client URL-encodes it).
Syntax:
- key=value — exact match; key=a,b — OR multiple values for the same key
- key~pattern — regex / contains match; key!~pattern — NOT regex
- key!=value — not equal; key>number — numeric greater-or-equal (e.g. Bytes>1000)
- AND within a group: & (e.g. SrcK8S_Namespace=default&Proto=6)
- OR between groups: | (e.g. SrcK8S_Name=pod-a|SrcK8S_Name=pod-b)
Prefer the dedicated "namespace" parameter for namespace scope when possible.
Use Kubernetes list tools (namespaces, pods, deployments, etc.) to discover filter values.
Common Kubernetes fields (Src/Dst prefixes mirror each other):
- SrcK8S_Namespace, DstK8S_Namespace, SrcK8S_Name, DstK8S_Name
- SrcK8S_Type, DstK8S_Type (e.g. Pod, Service, Node)
- SrcK8S_OwnerName, DstK8S_OwnerName, SrcK8S_OwnerType, DstK8S_OwnerType (for Deployment, StatefulSet, etc.)
- SrcK8S_HostName, DstK8S_HostName, SrcK8S_Zone, DstK8S_Zone, K8S_ClusterName, UDN
Network & flow:
- SrcAddr, DstAddr (IPs), SrcPort, DstPort, Proto (IANA number, e.g. 6=TCP, 17=UDP)
- FlowDirection (0=Ingress, 1=Egress, 2=Inner), Bytes, Packets, Dscp, Flags
Packet drops (often with recordType flowLog and packetLoss dropped/hasDrops):
- PktDropPackets, PktDropBytes, PktDropLatestState, PktDropLatestDropCause
DNS:
- DnsName, DnsId, DnsLatencyMs, DnsErrno, DnsFlagsResponseCode
Examples:
-
SrcK8S_Namespace=openshift-netobserv&SrcK8S_Name~my-app
-
Proto=6&DstPort=443
-
SrcK8S_Name=pod-a|SrcK8S_Name=pod-b
limit (integer) - Maximum number of flow records to return. Default 100.
namespace (string) - Restrict results to flows where source or destination namespace matches (dev-scoped Loki tenant).
packetLoss (string) - Packet loss filter.
recordType (string) - Flow record type filter.
startTime (integer) - Start of time range as Unix epoch seconds. Overrides timeRange when set.
timeRange (integer) - Lookback window in seconds when startTime is omitted. Default 300.
-
netobserv_get_flow_metrics - Returns aggregated NetObserv flow metrics as topology or time-series data. Use for throughput, TLS/DNS/drop breakdowns, and namespace or workload traffic analysis; see aggregateBy and groups for grouping options.
aggregateBy (string) (required) - Primary dimension for netobserv_get_flow_metrics (console plugin /api/flow/metrics).
Two forms (use exact spelling):
- Topology scopes — aggregate endpoints for graph/topology views:
- app — application workloads (pods/services), excluding infrastructure traffic
- namespace — Kubernetes namespace (default)
- owner — controller owner (Deployment, StatefulSet, …)
- resource — pod, service, or node (finest workload granularity)
- host — node name
- zone — availability zone
- cluster — cluster name (multi-cluster)
- network — user-defined / secondary network name
- Flow record fields — group by a single flow attribute (PascalCase field name).
Use for breakdown charts (TLS, DNS, drops, protocol). Field names match filters / flow logs.
TLS (requires TLS tracking on the FlowCollector):
- TLSVersion, TLSCipherSuite, TLSGroup, TLSTypes
DNS:
- DnsName, DnsFlagsResponseCode, DnsErrno
Packet drops:
- PktDropLatestState, PktDropLatestDropCause
Network / K8s (single-sided breakdown; pair with filters for src/dst):
- Proto, SrcPort, DstPort, FlowDirection, Dscp
- SrcK8S_Namespace, DstK8S_Namespace, SrcK8S_Name, DstK8S_Name
- SrcK8S_Type, DstK8S_Type, SrcK8S_OwnerName, DstK8S_OwnerName
- SrcK8S_HostName, DstK8S_HostName, SrcK8S_Zone, DstK8S_Zone
- K8S_ClusterName, SrcK8S_NetworkName, DstK8S_NetworkName
Pair aggregateBy with type and function:
- Throughput: type=Bytes or Packets, function=rate
- Flow count: type=Flows, function=count or rate
- DNS volume: type=DnsFlows, function=count
- DNS latency: type=DnsLatencyMs, function=avg, p90, or max
- RTT: type=TimeFlowRttNs, function=avg, min, or p90
- Drops: type=PktDropPackets or PktDropBytes, function=rate
Examples:
- aggregateBy=namespace, type=Bytes, function=rate
- aggregateBy=TLSVersion, type=Bytes, function=rate, filters=TLSTypes!~""
- aggregateBy=TLSGroup, type=Flows, function=count
- aggregateBy=DnsFlagsResponseCode, type=DnsFlows, function=count
- aggregateBy=PktDropLatestState, type=PktDropPackets, function=rate, packetLoss=dropped
- aggregateBy=resource, type=Bytes, function=rate, namespace=netobserv
dataSource (string) - Metrics backend: auto (prefer Prometheus, fallback to Loki), prom, or loki.
endTime (integer) - End of time range as Unix epoch seconds. Defaults to now.
filters (string) - NetObserv filter expression passed to the console plugin (plain text; the client URL-encodes it).
Syntax:
- key=value — exact match; key=a,b — OR multiple values for the same key
- key~pattern — regex / contains match; key!~pattern — NOT regex
- key!=value — not equal; key>number — numeric greater-or-equal (e.g. Bytes>1000)
- AND within a group: & (e.g. SrcK8S_Namespace=default&Proto=6)
- OR between groups: | (e.g. SrcK8S_Name=pod-a|SrcK8S_Name=pod-b)
Prefer the dedicated "namespace" parameter for namespace scope when possible.
Use Kubernetes list tools (namespaces, pods, deployments, etc.) to discover filter values.
Common Kubernetes fields (Src/Dst prefixes mirror each other):
- SrcK8S_Namespace, DstK8S_Namespace, SrcK8S_Name, DstK8S_Name
- SrcK8S_Type, DstK8S_Type (e.g. Pod, Service, Node)
- SrcK8S_OwnerName, DstK8S_OwnerName, SrcK8S_OwnerType, DstK8S_OwnerType (for Deployment, StatefulSet, etc.)
- SrcK8S_HostName, DstK8S_HostName, SrcK8S_Zone, DstK8S_Zone, K8S_ClusterName, UDN
Network & flow:
- SrcAddr, DstAddr (IPs), SrcPort, DstPort, Proto (IANA number, e.g. 6=TCP, 17=UDP)
- FlowDirection (0=Ingress, 1=Egress, 2=Inner), Bytes, Packets, Dscp, Flags
Packet drops (often with recordType flowLog and packetLoss dropped/hasDrops):
- PktDropPackets, PktDropBytes, PktDropLatestState, PktDropLatestDropCause
DNS:
- DnsName, DnsId, DnsLatencyMs, DnsErrno, DnsFlagsResponseCode
Examples:
- SrcK8S_Namespace=openshift-netobserv&SrcK8S_Name~my-app
- Proto=6&DstPort=443
- SrcK8S_Name=pod-a|SrcK8S_Name=pod-b
function (string) - Aggregation function.
groups (string) - Optional comma-separated parent scopes when aggregateBy is a topology scope.
Adds extra label dimensions (e.g. break namespace results down by cluster or zone).
Ignored or less useful when aggregateBy is already a raw flow field (e.g. TLSVersion); use filters instead.
Single scopes:
- clusters, networks, zones, hosts, namespaces, owners
Combined scopes (use +, no spaces):
- clusters+zones, clusters+hosts, clusters+namespaces, clusters+owners
- zones+hosts, zones+namespaces, zones+owners
- hosts+namespaces, hosts+owners
- namespaces+owners
- networks+zones, networks+hosts, networks+namespaces, networks+owners
Examples:
-
aggregateBy=namespace, groups=clusters
-
aggregateBy=resource, groups=namespaces
-
aggregateBy=owner, groups=zones,hosts
limit (integer) - Maximum number of flow records to return. Default 100.
namespace (string) - Restrict results to flows where source or destination namespace matches (dev-scoped Loki tenant).
packetLoss (string) - Packet loss filter.
rateInterval (string) - Prometheus rate interval (e.g. 1m, 5m).
recordType (string) - Flow record type filter.
startTime (integer) - Start of time range as Unix epoch seconds. Overrides timeRange when set.
step (string) - Query resolution step (e.g. 30s, 1m).
timeRange (integer) - Lookback window in seconds when startTime is omitted. Default 300.
type (string) - Metric type to aggregate.
-
netobserv_export_flows - Exports NetObserv flow records as CSV with the same filters as list_flows. Use when the user needs downloadable flow data for audits or offline analysis.
Syntax:
- key=value — exact match; key=a,b — OR multiple values for the same key
- key~pattern — regex / contains match; key!~pattern — NOT regex
- key!=value — not equal; key>number — numeric greater-or-equal (e.g. Bytes>1000)
- AND within a group: & (e.g. SrcK8S_Namespace=default&Proto=6)
- OR between groups: | (e.g. SrcK8S_Name=pod-a|SrcK8S_Name=pod-b)
Prefer the dedicated "namespace" parameter for namespace scope when possible.
Use Kubernetes list tools (namespaces, pods, deployments, etc.) to discover filter values.
Common Kubernetes fields (Src/Dst prefixes mirror each other):
- SrcK8S_Namespace, DstK8S_Namespace, SrcK8S_Name, DstK8S_Name
- SrcK8S_Type, DstK8S_Type (e.g. Pod, Service, Node)
- SrcK8S_OwnerName, DstK8S_OwnerName, SrcK8S_OwnerType, DstK8S_OwnerType (for Deployment, StatefulSet, etc.)
- SrcK8S_HostName, DstK8S_HostName, SrcK8S_Zone, DstK8S_Zone, K8S_ClusterName, UDN
Network & flow:
- SrcAddr, DstAddr (IPs), SrcPort, DstPort, Proto (IANA number, e.g. 6=TCP, 17=UDP)
- FlowDirection (0=Ingress, 1=Egress, 2=Inner), Bytes, Packets, Dscp, Flags
Packet drops (often with recordType flowLog and packetLoss dropped/hasDrops):
- PktDropPackets, PktDropBytes, PktDropLatestState, PktDropLatestDropCause
DNS:
- DnsName, DnsId, DnsLatencyMs, DnsErrno, DnsFlagsResponseCode
Examples:
- SrcK8S_Namespace=openshift-netobserv&SrcK8S_Name~my-app
- Proto=6&DstPort=443
- SrcK8S_Name=pod-a|SrcK8S_Name=pod-b
format (string) - Export format. Only csv is supported.
limit (integer) - Maximum number of flow records to return. Default 100.
namespace (string) - Restrict results to flows where source or destination namespace matches (dev-scoped Loki tenant).
packetLoss (string) - Packet loss filter.
recordType (string) - Flow record type filter.
startTime (integer) - Start of time range as Unix epoch seconds. Overrides timeRange when set.
timeRange (integer) - Lookback window in seconds when startTime is omitted. Default 300.
-
tekton_pipeline_start - Start a Tekton Pipeline by creating a PipelineRun that references it
name (string) (required) - Name of the Pipeline to start
namespace (string) - Namespace of the Pipeline
params (object) - Parameter values to pass to the Pipeline. Keys are parameter names; values can be a string, an array of strings, or an object (map of string to string) depending on the parameter type defined in the Pipeline spec
-
tekton_pipelinerun_lifecycle - Manage a Tekton PipelineRun lifecycle by restarting it with the same spec or cancelling it by setting spec.status to Cancelled.
action (string) (required) - Lifecycle action to perform: 'restart' creates a new PipelineRun with the same spec; 'cancel' sets spec.status to Cancelled.
name (string) (required) - Name of the PipelineRun to manage
namespace (string) - Namespace of the PipelineRun
-
tekton_pipelinerun_logs - Get logs for all TaskRuns owned by a Tekton PipelineRun. Use this to inspect PipelineRun execution output without locating pods manually.
name (string) (required) - Name of the PipelineRun to get logs from
namespace () - Namespace of the PipelineRun
Prompts
- cluster-health-check - Perform comprehensive health assessment of Kubernetes/OpenShift cluster
namespace (string) - Optional namespace to limit health check scope (default: all namespaces)
check_events (string) - Include recent warning/error events (true/false, default: true)
-
mesh-list-applications - List applications in the mesh namespaces
namespace (string) - Optional namespace to filter applications (default: all namespaces)
-
list-istio-config - List Istio configuration resources in the mesh namespaces
namespace (string) - Optional namespace to filter Istio configuration (default: all namespaces)
-
mesh-list-namespaces - List all namespaces with their sidecar injection status and Istio labels
-
mesh-list-services - List services in the mesh namespaces
namespace (string) - Optional namespace to filter services (default: all namespaces)
-
mesh-list-workloads - List workloads in the mesh namespaces
namespace (string) - Optional namespace to filter workloads (default: all namespaces)
-
mesh-health-check - Perform a comprehensive health assessment of the Istio service mesh including control plane and data plane status
namespace (string) - Optional namespace to focus the health check on (default: all namespaces)
-
mesh-topology - Show the mesh topology including control plane components and cluster connectivity
-
traffic-topology - Analyze the service mesh traffic topology showing service dependencies, traffic flow, and communication patterns
-
vm-troubleshoot - Generate a step-by-step troubleshooting guide for diagnosing KubeVirt VirtualMachine issues
namespace (string) (required) - The namespace of the VirtualMachine to troubleshoot
name (string) (required) - The name of the VirtualMachine to troubleshoot
-
windows-golden-image - Guides creation of a Windows golden image via the KubeVirt windows-efi-installer Tekton pipeline
winImageDownloadURL (string) (required) - Microsoft Windows ISO download URL (must be https://)
namespace (string) - Target namespace for the PipelineRun
windowsVersion (string) - Windows version: 10, 11, 2k22 (default), or 2k25
pipelineVersion (string) - Pipeline version (default: latest). Use specific version like 0.25.0 if needed
-
hco-status - Generate a status report for the HyperConverged Cluster Operator (HCO) managing KubeVirt and related components
- pipeline-troubleshoot - Gather PipelineRun status, its Pipeline definition, TaskRuns, failed or errored step logs, warning events, Pipeline-as-Code Repository, and TektonConfig context for Tekton troubleshooting
namespace (string) (required) - Namespace of the PipelineRun to troubleshoot
name (string) (required) - Name of the PipelineRun to troubleshoot
Resources
Resource Templates
Helm Chart
A Helm Chart is available to simplify the deployment of the Kubernetes MCP server.
helm install kubernetes-mcp-server oci://ghcr.io/containers/charts/kubernetes-mcp-server
For configuration options including OAuth, telemetry, and resource limits, see the chart README and values.yaml.
💬 Community
Join the conversation and connect with other users and contributors:
- Slack - Ask questions, share feedback, and discuss the Kubernetes MCP server in the
#kubernetes-mcp-server channel on the CNCF Slack workspace. If you're not already a member, you can request an invitation.
🧑💻 Development
Running with mcp-inspector
Compile the project and run the Kubernetes MCP server with mcp-inspector to inspect the MCP server.
# Compile the project
make build
# Run the Kubernetes MCP server with mcp-inspector
npx @modelcontextprotocol/inspector@latest $(pwd)/kubernetes-mcp-server
mcp-name: io.github.containers/kubernetes-mcp-server