One broken Kubernetes cluster, two agents: raw kubectl vs Radar's MCP. Which finds the root cause first?
We gave the same model the same fault twice: once with a shell and kubectl, once reading Radar's live model of the cluster with kubectl blocked. 54 paired fault scenarios on a live EKS cluster. Pick any of them below and watch both agents troubleshoot it, call by call.
Replay any of the 54 Kubernetes faults
Nothing here is hand-picked. Every paired scenario from the run is in the dropdown, including the ones Radar got wrong. Each solid mark is one tool call, drawn at the moment it was issued and as wide as it blocked for; the hatched ground between marks is the model thinking. Hover any mark to see the call.
Accuracy you can actually wait for
Given unlimited time the two arms land close together: 91% vs 87%. But nobody lets an agent grind for half an hour while production is down. Cap it at a budget you would really grant, and the gap opens up, because Radar has already finished.
| Time budget | Radar MCP | kubectl |
|---|---|---|
| 2 min | 83% | 30% |
| 5 min | 91% | 56% |
| 10 min | 91% | 72% |
| 15 min | 91% | 83% |
| 30 min | 91% | 87% |
Not every Kubernetes MCP server would do this
MCP is how an agent reaches a cluster now, and it is the right interface. But the protocol is a connector, and Kubernetes MCP servers differ enormously in what they send back through it. One that proxies kubectl hands the model the same wall of YAML with an extra hop in front of it; we would not expect that to beat a shell. What moved this benchmark is what came back: a model of the cluster Radar keeps current, so the agent asks one question instead of rebuilding the resource graph from a dozen serial commands. The agent didn't get smarter. It stopped waiting.
6% of the incident blocked on the cluster
105% of the incident blocked on the cluster
With a shell, the agent spends nearly three quarters of the incident waiting on the cluster: rollout status, log tails, sleep-and-retry loops, re-listing resources to rebuild context it already lost. Radar answers from a model of the cluster it is already maintaining, so almost none of its time is spent blocked.
That flips diagnosis from I/O-bound to model-bound. Radar's floor is how fast the model thinks; kubectl's floor is how fast a cluster answers serial commands. Faster models widen this gap rather than closing it.
Which is why “does a Kubernetes MCP server help?” is the wrong question to ask of the category. The useful question is what a given server sends back: raw resources the model still has to assemble, or state that has already been correlated. We are writing that comparison up separately; this page is the evidence for one server, measured rather than asserted.
All 54 scenarios, not the flattering ones
One row per paired fault, sorted by how long kubectl took. The question isn't whether Radar was faster; it's how much, and where the shell blew past ten minutes.
Where Radar's MCP server loses to kubectl
Radar loses scenarios, and they are all in the dropdown. Two patterns account for most of it.
Evidence inside a running process. When a database grant is revoked inside the database and no Kubernetes object changes, the kubectl agent can shell in and read it. Radar has no exec, so it gets the component right and the mechanism shallow. Closing that safely, with typed runtime probes rather than free-form shell access, is work in progress.
Detectors that have not fired yet. The benchmark injects a fault and starts the agent seconds later. Some of Radar's signals are time-based and are still warming up, so the agent asks, gets a short and confident-looking answer, and stops. That one is squarely our bug, and the fix is for Radar to say “I have not watched long enough yet” instead of looking done.
Worth being blunt about the other side too: the kubectl arm's distinctive wins rest on giving an autonomous agent free-form exec on your cluster. Almost no security team grants that, and they are right not to.
How we ran the Kubernetes agent benchmark
- Benchmark: SREGym (Microsoft + UIUC), faults injected into OpenTelemetry Astronomy Shop, DeathStarBench Hotel Reservation, and Social Network.
- Cluster: live 3-node EKS, us-east-1. Same cluster, same faults for both arms.
- Agent: Claude Code on claude-sonnet-5, both arms.
- Arms are disjoint: the Radar arm cannot fall back to a shell — kubectl is blocked outright. That models how Radar actually deploys, and it attributes results to the tool surface rather than to whichever tool the agent felt like reaching for.
- Grading: SREGym's own LLM judge at temperature 0. The graded artifact is the first diagnosis each agent submits.
- Timing: agent start to submitted diagnosis, read from the raw transcripts. Not session wall-clock, which also counts the separate remediation stage the benchmark runs afterwards.
AI agents on Kubernetes: common questions
Should I give an AI agent kubectl access to my Kubernetes cluster?
Does a Kubernetes MCP server actually make an AI agent better, or is it hype?
How much faster is an AI agent with an MCP server than with kubectl?
What is an AI SRE and can it actually debug production Kubernetes?
Is a Kubernetes MCP server that wraps kubectl any better than kubectl?
Where does Radar's MCP server lose to raw kubectl?
How was this Kubernetes MCP benchmark run?
More on AI agents and Kubernetes
- The full write-up — methodology, per-scenario analysis, and what we changed in Radar because of it.
- Radar's MCP server — the 22 read tools and 6 annotated write tools the Radar arm was driving, and how to point your own agent at them.
- Diagnose with AI — the same correlation engine the benchmark measured, driven from Radar's own UI.
Bring your first cluster online in 60 seconds.
Install the Helm chart, paste a token, see your cluster. No credit card required.
Apache 2.0 OSS · Unlimited clusters with Radar OSS · Hosted free tier for up to 3 clusters