kubernetes-mcp-server by containers: safety score

C 65 Provisional Not reviewed Not tested

kubernetes-mcp-server by containers is a community MCP server for Kubernetes with 47 read, 6 write and 16 destructive tools. It does not have a read-only mode and needs to run locally; its provisional OpsMCP grade is C (65%), last checked 16 Oct 2026.

Last checked 16 Oct 2026.

A Model Context Protocol (MCP) server for Kubernetes and OpenShift

Publisher's description

io.github.containers/kubernetes-mcp-server · version 0.0.67

Tool capability partly scored. Access partly scored. 2 of 4 factors scored.

Not hands-on tested. No test date, notes, or observed write behavior.

Can it change or delete things?

Yes. The extracted tools include at least one destructive tool, so it can change or delete things.

Classified from the tool name, or from the description when the name has no listed verb. Tool extraction read the highest-priority source files and may have missed others.

81 tools

Tool Class
check_events
Include recent warning/error events (true/false, default: true) from the name
Unknown
configuration_contexts_list
List all available context names and associated server urls from the kubeconfig file from the name (list)
Read
configuration_view
Get the current Kubernetes configuration content as a kubeconfig YAML from the description (get)
Read
events_list
List Kubernetes events (warnings, errors, state changes) for debugging and troubleshooting in the current cluster from all namespaces from the name (list)
Read
execute_instant_query
Execute a PromQL instant query to get current/point-in-time values. PREREQUISITE: You MUST call list_metrics first to verify the metric exists WHEN TO USE: - Current state questions: "What is the current error rate?" - Point-in-time snapshots: "How many pods are running?" - La... from the name (execute)
Destructive
execute_range_query
Execute a PromQL range query to get time-series data over a period. PREREQUISITE: You MUST call list_metrics first to verify the metric exists WHEN TO USE: - Trends over time: "What was CPU usage over the last hour?" - Rate calculations: "How many requests per second?" - Histo... from the name (execute)
Destructive
get_alerts
Get alerts from Alertmanager. WHEN TO USE: - START HERE when investigating issues: if the user asks about things breaking, errors, failures, outages, services being down, or anything going wrong in the cluster - When the user mentions a specific alert name - use this tool to g... from the name (get)
Read
get_label_names
Get all label names (dimensions) available for filtering a metric. WHEN TO USE (after calling list_metrics): - To discover how to filter metrics (by namespace, pod, service, etc.) - Before constructing label matchers in PromQL queries The 'metric' parameter should use a metric... from the name (get)
Read
get_label_values
Get all unique values for a specific label. WHEN TO USE (after calling list_metrics and get_label_names): - To find exact label values for filtering (namespace names, pod names, etc.) - To see what values exist before constructing queries The 'metric' parameter should use a me... from the name (get)
Read
get_series
Get time series matching selectors and preview cardinality. WHEN TO USE (optional, after calling list_metrics): - To verify label filters match expected series before querying - To check cardinality and avoid slow queries CARDINALITY GUIDANCE: - <100 series: Safe - 100-1000: U... from the name (get)
Read
get_silences
Get silences from Alertmanager. WHEN TO USE: - To see which alerts are currently silenced - To check active, pending, or expired silences - To investigate why certain alerts are not firing notifications FILTERING: - Use 'filter' to apply label matchers to find specific silence... from the name (get)
Read
helm_install
Install (deploy) a Helm chart to create a release in the current or provided namespace from the description (create)
Write
helm_list
List all the Helm releases in the current or provided namespace (or in all namespaces if specified) from the name (list)
Read
helm_uninstall
Uninstall a Helm release in the current or provided namespace from the name
Unknown
kcp_workspace_describe
Get detailed information about a specific kcp workspace from the description (get)
Read
kcp_workspaces_list
List all available kcp workspaces in the current cluster from the name (list)
Read
kiali_get_logs
Get the logs of a Kubernetes Pod (or workload name that will be resolved to a pod) in a namespace. Output is plain text, matching kubernetes-mcp-server pods_log. The line_count field tells you the total number of log lines returned. Analyze ALL of them, but summarize the resul... from the name (get)
Read
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 co... from the name (get)
Read
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. from the name (get)
Read
kiali_get_metrics
Returns a compact JSON summary of Istio metrics (latency quantiles, traffic trends, throughput, payload sizes) for the given resource. from the name (get)
Read
kiali_get_pod_performance
Returns a human-readable text summary with current Pod CPU/memory usage (from Prometheus) compared to Kubernetes requests/limits (from the Pod spec). Useful to answer questions like 'Is this workload using too much memory?' from the name (get)
Read
kiali_get_resource_details
Fetches a list of resources OR retrieves detailed data for a specific resource. If 'resourceName' is omitted, it returns a list. If 'resourceName' is provided, it returns details for that specific resource. from the name (get)
Read
kiali_get_trace_details
Fetches a single distributed trace by trace_id and returns its call hierarchy (service tree with duration, status, and nested calls). Use this after list_traces to drill into a specific trace. from the name (get)
Read
kiali_list_mesh_clusters
Returns the list of Istio mesh clusters that Kiali can access. Each entry includes its name and whether it is the home cluster (where Kiali is deployed). Call this tool before using meshCluster on other Kiali tools when the target cluster is unknown. from the name (list)
Read
kiali_list_traces
Lists distributed traces for a service in a namespace. Returns a summary (namespace, service, total_found, avg_duration_ms) and a list of traces with id, duration_ms, spans_count, root_op, slowest_service, has_errors. Use get_trace_details with a trace id to get full hierarchy. from the name (list)
Read
kiali_manage_istio_config
Create, patch, or delete Istio, Gateway API, and Inference API config. Supports Istio resources (networking.istio.io, security.istio.io), Gateway API resources (gateway.networking.k8s.io), and Inference API resources (inference.networking.k8s.io) when installed on the cluster.... from the description (delete)
Destructive
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,... from the name
Unknown
list_metrics
MANDATORY FIRST STEP: List all available metric names in Prometheus. YOU MUST CALL THIS TOOL BEFORE ANY OTHER QUERY TOOL This tool MUST be called first for EVERY observability question to: 1. Discover what metrics actually exist in this environment 2. Find the EXACT metric nam... from the name (list)
Read
loki_label_names
List available Loki label names for a time range. Use this before writing LogQL queries. from the description (list)
Read
loki_label_values
List possible values for a Loki label key. Use this to build precise label matchers in LogQL. from the description (list)
Read
loki_list_instances
List LokiStack instances available in the Kubernetes cluster. Call this first when using Loki Operator managed stacks so you can pass lokiNamespace and lokiName to other Loki tools. from the name (list)
Read
loki_query_range
Execute a Loki LogQL range query and return matching log streams and lines. Use precise label matchers and a short time window first. from the description (execute)
Destructive
namespace annotation disagrees
Optional namespace to limit health check scope (default: all namespaces) from the name
Unknown
namespaces
Comma-separated list of namespaces to include in the graph, or 'all' to include all accessible mesh namespaces from the description (list)
Read
namespaces_list
List all the Kubernetes namespaces in the current cluster from the name (list)
Read
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 from the description (get)
Read
nodes_stats_summary
Get detailed resource usage statistics from a Kubernetes node via the kubelet's Summary API. Provides comprehensive metrics including CPU, memory, filesystem, and network usage at the node, pod, and container levels. On systems with cgroup v2 and kernel 4.20+, also includes PS... from the description (get)
Read
nodes_top
List the resource consumption (CPU and memory) as recorded by the Kubernetes Metrics Server for the specified Kubernetes Nodes or all nodes in the cluster from the description (list)
Read
otelcol_get_component_schema
Get the JSON schema for an OpenTelemetry Collector component's configuration options. from the name (get)
Read
otelcol_get_versions
List available OpenTelemetry Collector versions and identify the latest. from the name (get)
Read
otelcol_list_components
List available OpenTelemetry Collector components (receivers, processors, exporters, extensions, connectors) for a given version. from the name (list)
Read
otelcol_validate_config
Validate an OpenTelemetry Collector component configuration against its JSON schema. from the name
Unknown
pipelineVersion
Pipeline version (default: latest). Use specific version like 0.25.0 if needed from the name
Unknown
pods_delete
Delete a Kubernetes Pod in the current or provided namespace with the provided name from the name (delete)
Destructive
pods_exec
Execute a command in a Kubernetes Pod (shell access, run commands in container) in the current or provided namespace with the provided name and command from the name (exec)
Destructive
pods_get
Get a Kubernetes Pod in the current or provided namespace with the provided name from the name (get)
Read
pods_list
List all the Kubernetes pods in the current cluster from all namespaces from the name (list)
Read
pods_list_in_namespace
List all the Kubernetes pods in the specified namespace in the current cluster from the name (list)
Read
pods_log
Get the logs of a Kubernetes Pod in the current or provided namespace with the provided name from the description (get)
Read
pods_run
Run a Kubernetes Pod in the current or provided namespace with the provided container image and optional name from the name (run)
Destructive
pods_top
List the resource consumption (CPU and memory) as recorded by the Kubernetes Metrics Server for the specified Kubernetes Pods in the all namespaces, the provided namespace, or the current namespace from the description (list)
Read
projects_list
List all the OpenShift projects in the current cluster from the name (list)
Read
resources_create_or_update
Create or update a Kubernetes resource via Server-Side Apply. The manifest is the complete desired state: any field this tool previously set and the new manifest omits is removed. To edit an existing resource, fetch it with resources_get, modify it, then re-apply the full reso... from the name (create)
Write
resources_delete
Delete a Kubernetes resource in the current cluster by providing its apiVersion, kind, optionally the namespace, and its name (common apiVersion and kind include: v1 Pod, v1 Service, v1 Node, apps/v1 Deployment, networking.k8s.io/v1 Ingress, route.openshift.io/v1 Route) from the name (delete)
Destructive
resources_get
Get a Kubernetes resource in the current cluster by providing its apiVersion, kind, optionally the namespace, and its name (common apiVersion and kind include: v1 Pod, v1 Service, v1 Node, apps/v1 Deployment, networking.k8s.io/v1 Ingress, route.openshift.io/v1 Route) from the name (get)
Read
resources_list
List Kubernetes resources and objects in the current cluster by providing their apiVersion and kind and optionally the namespace and label selector (common apiVersion and kind include: v1 Pod, v1 Service, v1 Node, apps/v1 Deployment, networking.k8s.io/v1 Ingress, route.openshi... from the name (list)
Read
resources_scale
Get or update the scale of a Kubernetes resource in the current cluster by providing its apiVersion, kind, name, and optionally the namespace. If the scale is set in the tool call, the scale will be updated to that value. Always returns the current scale of the resource from the description (update)
Write
service
Name of the service to troubleshoot from the name
Unknown
show_timeseries
Display the results as an interactive timeseries chart. This tool works like execute_range_query but renders the results as a visual chart in the UI clients. Use it when the user wants to see a graph or visualization of time-series data and to use visuals to provide the answer... from the description (execute)
Destructive
targets_list
List all available targets from the name (list)
Read
tekton_pipeline_start
Start a Tekton Pipeline by creating a PipelineRun that references it from the description (run)
Destructive
tekton_pipelinerun_lifecycle
Manage a Tekton PipelineRun lifecycle by restarting it with the same spec or cancelling it by setting spec.status to Cancelled. from the description (run)
Destructive
tekton_pipelinerun_logs
Get logs for all TaskRuns owned by a Tekton PipelineRun. Use this to inspect PipelineRun execution output without locating pods manually. from the description (runs)
Destructive
tekton_task_start
Start a Tekton Task by creating a TaskRun that references it from the description (run)
Destructive
tekton_taskrun_logs
Get the logs from a Tekton TaskRun by resolving its underlying pod from the description (run)
Destructive
tekton_taskrun_restart
Restart a Tekton TaskRun by creating a new TaskRun with the same spec from the description (run)
Destructive
tempo_get_trace_by_id
Retrieve a single distributed trace by its trace ID from Tempo. Returns the full trace with all its spans, including service names, operation names, durations, and attributes. Use this tool when you already have a specific trace ID, e.g. from search results or logs. from the name (get)
Read
tempo_list_instances
List all Tempo instances available in the Kubernetes cluster. Call this tool first to discover available Tempo instances before using other Tempo tools, as the returned namespace, name, and tenant values are required parameters for all other Tempo tools. Always print the outpu... from the name (list)
Read
tempo_search_tag_values
List the known values for a specific tag (attribute key) in Tempo. Use this tool to discover what values exist for a given tag, e.g. to find all service names (values of "resource.service.name") or all HTTP methods (values of "span.http.request.method"). This is useful for bui... from the name (search)
Read
tempo_search_tags
List available tag names (attribute keys) in Tempo, grouped by scope. Use this tool to discover which attributes are available for building TraceQL queries with tempo_search_traces. For example, this tool may reveal tag names like "service.name" (in the "resource" scope) or "h... from the name (search)
Read
tempo_search_traces
Search for distributed traces in Tempo using TraceQL. Use this tool to find traces matching specific criteria such as service name, HTTP status code, duration, or other span or resource attributes. IMPORTANT — "slow" or "long" trace requests: Do NOT guess a duration threshold.... from the name (search)
Read
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 from the description (creates)
Write
vm_console_screenshot
Capture a screenshot of the graphical (VNC) console of a VirtualMachine on KubeVirt as a PNG image. Use this to see what is currently displayed on the VM's screen (for example firmware, a bootloader, or a login prompt). Read-only: it never sends input to the guest. from the name
Unknown
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. from the name (create)
Write
vm_create_from_template
Create a VirtualMachine from a VirtualMachineTemplate (virt-template) on KubeVirt. Processes the template server-side to substitute parameters (required values, defaults, and auto-generated values like passwords), then creates the resulting VirtualMachine in the same namespace... from the name (create)
Write
vm_guest_info
Get guest operating system information from a VirtualMachine's QEMU guest agent. Requires the guest agent to be installed and running inside the VM. Provides detailed information about the OS, filesystems, network interfaces, and logged-in users. from the description (get)
Read
vm_lifecycle
Manage KubeVirt VirtualMachine lifecycle: start, stop, restart, pause, or unpause a VM from the name
Unknown
vm_troubleshoot
Diagnose KubeVirt VirtualMachine issues with automated root-cause detection. Collects VM status, VMI status, volumes, DataVolume/PVC state, cloud-init configuration, pod state, logs, and events, then runs heuristic checks to identify specific problems and suggest fixes. Return... from the description (runs)
Destructive
windowsVersion
Windows version: 10, 11, 2k22 (default), or 2k25 from the name
Unknown
winImageDownloadURL
Microsoft Windows ISO download URL (must be https://) from the name
Unknown
workload
Optional workload or pod name to fetch logs from (if omitted, uses the service name) from the name
Unknown

Score

65 of 100 points (65%). A factor that was not scored counts as 0 of its full weight.

OpsMCP rubric 2026-10-16.3. Checked 16 Oct 2026.
Factor Points Full weight Status
Tool capability 22 35 Partly scored
Access 6 25 Partly scored
Maintenance 20 20 Scored
Publisher 17 20 Scored

Tool capability

47 read, 6 write, 16 destructive, 12 unknown.

Access

PartValuePointsWhere this came from
Scope unknown unknown unknown
Where it runs Local process 6 of 8 Registry package transport is stdio.
Credentials unknown unknown unknown

Maintenance

PartValuePoints
Last commit 0 days 8 of 8
Releases 28 days 6 of 6
Issues 193 closed / 256 issues (0.75) 6 of 6

Publisher

PartValuePointsWhere this came from
Who publishes it Organization 5 of 8 GitHub owner type is Organization (containers). Not on the vendor allowlist.
Registry listing Listed 5 of 5 Official registry server io.github.containers/kubernetes-mcp-server (status active).
License Apache-2.0 4 of 4 GitHub SPDX license Apache-2.0.
Stars 2162 2 of 2 2162 GitHub stars.
Repository age 612 days 1 of 1 Repository created 2025-02-11T02:57:36Z.

How the rubric works

What this score does not cover

This score is not a code audit and it is not a human review. It has not been hands-on tested. Nothing on this page is a certification.

Access needed

Environment variables: unknown. The registry entry does not list any.

Maintenance

Archived
no
Last commit
16 Oct 2026 · 5ce4c1b
Latest release
v0.0.67 · 18 Sep 2026
Issues
63 open · 193 closed
Stars
2,162
License
Apache-2.0
Repository created
11 Feb 2025

npm and PyPI

npm
kubernetes-mcp-server · version 0.0.67 · downloads last month 56,751 · published 18 Sep 2026
PyPI
kubernetes-mcp-server · version 0.0.67 · downloads last month 7,912 · published 18 Sep 2026
Maintainers
manusa

Install

Source: registry. This is the published command, not a rewritten one.

npx -y [email protected]
uvx kubernetes-mcp-server==0.0.67
docker run ghcr.io/containers/kubernetes-mcp-server:v0.0.67

Other Kubernetes servers

Badge

The SVG is generated for this server. The embed links to this server page.

OpsMCP grade C, 65 out of 100, provisional

Sources for this listing

Official registry server io.github.containers/kubernetes-mcp-server (status active).