issuesLABSCO SUMMARY
Read tools are annotated read-only and writes are annotated destructive — the client can act on that.
The safety story is not a promise in prose: read tools carry readOnlyHint and every mutating tool carries destructiveHint, so an MCP client can prompt for confirmation before a drain or a rollback, and RBAC still decides what is possible. Secret data is never exposed, environment values are redacted, and logs are scrubbed for keys and tokens. diagnose is the tool to reach for first — it collapses a whole triage sequence into one call and tells you how confident its evidence is.
What it is
An open-source Kubernetes UI that runs as a single binary on your laptop or in-cluster, with an MCP server built in and enabled by default. Its argument against giving an agent raw kubectl is concrete: verbose YAML burns context, raw output carries no topology or health, and kubectl can delete things.
What you get
- A ranked, curated stream of what is actually broken right now — failing workloads and pods, Helm failures, dangling references, pod-startup blockers — with severity and CEL filters —
issues - Root-cause analysis of one workload, GitOps reconciler or network entry in a single call, pairing crashloop status with the highest-signal log line and stating how that line was chosen; network kinds get a coverage-honest reachability diagnosis with an optional bounded probe —
diagnose - Cluster and namespace overviews, live metrics ranked like
kubectl topjoined with Kubernetes context, resource listing and detail with health rollups, and content search that never indexes secret values —get_dashboard,top_resources,list_resources,get_resource,search - Topology as a graph or LLM-friendly text chains, and a BFS neighbourhood around one suspect root —
get_topology,get_neighborhood - Deduplicated events with warnings first, the change timeline including Helm deployment history, and logs from a pod or aggregated across a workload with secret redaction and diagnostic filtering —
get_events,get_changes,get_pod_logs,get_workload_logs - Static configuration posture with remediation, kept separate from live health —
get_cluster_audit - Packages and Helm: installed packages across Helm, labels, CRDs, Argo and Flux, release listings with operation trails, and full revision, hook and diff diagnostics —
list_packages,list_helm_releases,get_helm_release - Effective RBAC for a ServiceAccount, User or Group, including an authoritative SubjectAccessReview for a specific verb and resource —
get_subject_permissions - Prometheus work: PromQL instant and range queries with automatic step adjustment, metric and label discovery before you write the query, and alerting and recording rules with their definitions —
query_prometheus,discover_metrics,get_prometheus_rules - Write tools, RBAC-enforced and annotated as destructive so clients can prompt: apply and patch resources with dry-run and diff verification, restart, scale and rollback workloads, drive Argo Rollouts, trigger CronJobs, sync GitOps, and cordon or drain nodes —
apply_resource,patch_resource,manage_workload,manage_rollout,manage_cronjob,manage_gitops,manage_node
Requirements
The binary and a kubeconfig — curl -fsSL https://get.radarhq.io | sh && kubectl radar, or Homebrew, or the Helm chart for in-cluster deployment. Nothing is installed on the cluster in laptop mode; it talks to the Kubernetes API directly and respects your RBAC. The MCP endpoint is http://localhost:9280/mcp over HTTP transport, matching --port, and is on by default — disable with --no-mcp. claude mcp add radar --transport http http://localhost:9280/mcp wires it up. No account, no agents, no cloud sync. Apache 2.0.
Setup effort
Follow the published steps — curl -fsSL https://get.radarhq.io | sh (or: brew install skyhook-io/tap/radar)
USE CASES
Answering "what is broken right now"
Get the ranked live-failure stream with severity, then diagnose the top offender — resource, context, current and previous logs, the crash-cause line and startup blockers come back together.
Working out why a service is unreachable
Diagnose the Service, Ingress or Gateway and read the per-route outcome with its confidence, what was not tested and why, and the named broken route — optionally running bounded live probes.
Finding what changed before an incident
Read the change timeline over the window including Helm deployment history, then pull the release's revision and operation trail when an upgrade is the suspect.
Chasing a failure across resources rather than inside one
Expand the topology neighbourhood around the suspect root to follow routing, selectors, endpoints and owner chains, RBAC-filtered.
Acting on what you found
Restart, scale or roll back the workload, or apply a manifest with a dry-run preview and diff first — every one of these is RBAC-enforced and flagged destructive to the client.
Checking whether a ServiceAccount can do what you think
Read its effective permissions, or run an authoritative SubjectAccessReview for the exact verb and resource instead of reasoning about bindings.
29 tools
Listed in project docs. Your client may show a different list.
diagnoseget_dashboardtop_resourceslist_resourcessearchget_resourceget_topologyget_neighborhoodget_eventsget_changesget_pod_logsget_workload_logsget_cluster_auditlist_packageslist_helm_releasesget_helm_releaselist_namespacesget_subject_permissionsquery_prometheusdiscover_metricsget_prometheus_rulesapply_resourcepatch_resourcemanage_workloadmanage_rolloutmanage_cronjobmanage_gitopsmanage_nodeBEFORE YOU INSTALL
What to know first
Tools you get
29 tools named in the project's documentation. Seven are write tools (apply_resource, patch_resource, manage_workload, manage_rollout, manage_cronjob, manage_gitops, manage_node), RBAC-enforced and marked destructive so clients can prompt for confirmation. radar --no-mcp turns the MCP server off.
Where it runs
All 7 documented clients run the server on your machine.
INSTALLATION
Connect your client
Server setup
curl -fsSL https://get.radarhq.io | shOr: brew install skyhook-io/tap/radar.
kubectl radarThe MCP server is on by default; disable with --no-mcp.
MCP Clients
Claude Code
claude mcp add radar --transport http http://localhost:9280/mcpCursor, JetBrains IDEs
{
"mcpServers": {
"radar": {
"url": "http://localhost:9280/mcp"
}
}
}Windsurf
{
"mcpServers": {
"radar": {
"serverUrl": "http://localhost:9280/mcp"
}
}
}VS Code
{
"servers": {
"radar": {
"type": "http",
"url": "http://localhost:9280/mcp"
}
}
}Cline
{
"mcpServers": {
"radar": {
"url": "http://localhost:9280/mcp",
"type": "streamableHttp"
}
}
}Gemini CLI
{
"mcpServers": {
"radar": {
"httpUrl": "http://localhost:9280/mcp"
}
}
}