Kubently
概览
作者提供的说明(英文原文)
Troubleshoot Kubernetes agentically: natural-language cluster diagnosis via ask_kubently
PopNx MCP 的三大支柱
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
- 用户评价i暂无评价评价功能将在后续阶段与账户功能一起开放
- 我们的基础检查i2 项中通过 2 项依据公开信息检查;尚未扫描代码
- 使用情况i起步阶段↓ 44/周 · ★ 46
它能帮你做什么
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
- 连接方式: 在你的电脑上运行
- 传输方式: stdio
- 分类: 开发者工具
安装
选择你使用的 AI 应用,然后复制设置。
安装之前
- 基础检查:2 项中通过 2 项
- 在你的电脑上运行,拥有你的用户账户的权限(文件、网络、应用)。
- 注册中心没有列出需要填写的密钥。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"kubently": {
"command": "npx",
"args": [
"-y",
"@kubently/cli",
"mcp"
]
}
}
}在终端中运行这条命令
claude mcp add kubently -- npx -y @kubently/cli mcp或者自己复制设置
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"kubently": {
"command": "npx",
"args": [
"-y",
"@kubently/cli",
"mcp"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
或者自己复制设置
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"kubently": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@kubently/cli",
"mcp"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
哪些应用可以使用它
依据这个服务器的连接方式和各应用自己的文档,检查于 2026年11月10日。
在你的电脑上运行,适用于
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast
它能做什么
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
基础检查i
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月11日
- ✓ 通过
作者与仓库一致
注册名称已通过 GitHub 账户 kubently 验证,该账户拥有此仓库
- ✓ 通过
仍在维护
代码最后更新于前天
- … 尚未检查
有许可证
我们还没有从 GitHub 读取这个仓库
- – 不适用
端点有响应
它在你的电脑上运行,没有互联网端点
- – 不适用
使用 OAuth 登录
在你的电脑上运行,改用本地设置
- … 尚未检查
工具描述中没有隐藏指令
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与“开发者工具”中的其他服务器比较i
- 星标数多于此分类中其他 5735 个服务器的 94%
- 发布到注册中心的时间比此分类中其他 5735 个服务器的 20% 更新
- 基础检查结果等于或优于此分类中其他 5735 个服务器的 100%
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
常见问题
Kubently 安全吗?
它在 2 项适用的基础检查中通过了 2 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
它需要哪些密钥或代码?
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在我的电脑上运行还是在云端?
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
它还在维护吗?
GitHub 仓库最后更新于前天,最新版本(2.3.1)于4个月前进入注册中心。
哪些应用可以使用它?
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
有什么可以替代它?
同一分类中有:REA, Netdata, Front-End Checklist
替代选择
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Netdata
Real-time infrastructure monitoring with metrics, logs, alerts, and ML-based anomaly detection.
Front-End Checklist
Review frontend code and live pages against 386 quality-gated web development rules.
作者的 README
打开 README
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Kubently
Kubently - Troubleshooting Kubernetes Agentically
Overview
Kubently (*Kubernetes + Agentically*) is a free, self-hosted, vendor-neutral multi-cluster Kubernetes troubleshooter. Ask one question, get AI-diagnosed answers from every cluster in your fleet in parallel — including clusters you can't reach directly: executors dial outbound to the central API, so there's no inbound ingress, no shared kubeconfig, and no per-cluster credentials to distribute.
Agents collaborate over the A2A (Agent-to-Agent) protocol, and any MCP client (Claude Code, Cursor, Claude Desktop) can use Kubently as a tool out of the box.
Key Features
- Multi-Cluster Fleet Troubleshooting: One question fans out across all registered clusters in parallel
- Outbound-Dial Executors: Reach clusters behind firewalls/NAT — no inbound ingress, no shared kubeconfig
- Natural Language Interface: Conversational Kubernetes troubleshooting and debugging
- Comprehensive Analysis: Automated issue detection, root cause analysis, and solution recommendations
- Multi-LLM Support: Compatible with Google Gemini, OpenAI, Anthropic, and other providers
- A2A Protocol: Industry-standard agent-to-agent communication for complex workflows
- MCP Server: Optional Model Context Protocol endpoint so MCP clients (Claude Desktop, Cursor, custom agents) get direct tool access
- Security-First: API key authentication, OAuth/OIDC support, and TLS with cert-manager
- Persistent Sessions: Redis-backed conversation history and context management
- Extensive Tool Suite: kubectl integration, log analysis, resource inspection, and more
Quick Start
For Users: Get Started in 5 Minutes
Point kubectl at any cluster (kind, minikube, or real) and run:
npm install -g @kubently/cli
kubently install
That's it. The CLI installs Kubently via Helm, wires up secrets and the executor, port-forwards the API, and drops you into a debug chat:
kubently> why is my nginx pod crashlooping?
You'll need an LLM API key (Anthropic, OpenAI, or Google) — the installer prompts for it, or reads ANTHROPIC_API_KEY / OPENAI_API_KEY / GOOGLE_API_KEY from your environment. Use --provider to pick the LLM, --chart ./deployment/helm/kubently to install from a local checkout, and kubently install --help for everything else.
Use from Claude Code / Cursor (MCP)
Already ran kubently install? Add Kubently to Claude Code:
claude mcp add kubently -- kubently mcp
Or connect directly over HTTP (no bridge process):
claude mcp add --transport http kubently http://localhost:8080/mcp/ \
--header "X-API-Key: "
Then ask Claude things like *"use kubently to figure out why payments pods are crashlooping"*. Any MCP client works — see docs/MCP.md for Cursor and generic configuration.
Proactive diagnosis (Alertmanager → Slack)
Set api.env.SLACK_WEBHOOK_URL to a Slack incoming-webhook URL and point Alertmanager at Kubently:
receivers:
- name: kubently webhook_configs:
- url: https:// /webhooks/alertmanager http_config: http_headers: # Alertmanager >= 0.28 X-API-Key: secrets: [" "]
Each firing alert is diagnosed by the agent and the result is posted to Slack — the bot often explains the root cause before you've opened your laptop.
Scheduled fleet health digest
Alerts are reactive. A digest sweeps *every* registered cluster on a schedule and posts one summary to the same Slack webhook — healthy clusters collapse to a single line, so what's left is what needs you.
fleetReport:
enabled: true schedule: "0 13 * * 1-5" # weekday mornings
Preview it before you schedule it — dry_run returns the digest and posts nothing:
curl -X POST https://<your-kubently-host>/webhooks/fleet-report \
-H "X-API-Key: " -H 'Content-Type: application/json' \ -d '{"dry_run": true}'
The digest question is yours to change. Pass query in that request to try one immediately, then keep the wording you like via fleetReport.query in values:
fleetReport:
query: |- Check every cluster for pods restarting more than 5 times and for PVCs above 85% usage. One line per healthy cluster. No preamble.
To run the real scheduled path once — image, secrets, in-cluster URL and all:
kubectl create job --from=cronjob/kubently-fleet-report fleet-report-test -n kubently
Deployment verification (did that deploy actually work?)
Tell Kubently what you just deployed and it watches the rollout settle, then runs a real investigation — pods ready? events clean? errors in the new logs? metrics regressed vs the pre-deploy window (when Prometheus is configured)? — and posts a PASS/FAIL verdict with the evidence to Slack. Wire it into the last step of your CI pipeline:
curl -X POST https://<your-kubently-host>/webhooks/verify-deployment \
-H "X-API-Key: " -H 'Content-Type: application/json' \ -d '{"cluster": "prod-east", "namespace": "shop", "workload": "deploy/checkout-api", "context": "v1.42.0"}'
Add "dry_run": true to get the verdict back synchronously without posting. No CI access? Label the workload instead — kubently.io/verify=enabled — and enable verifyDeployment.watch in values: Kubently notices every generation change and verifies the rollout unprompted.
Scheduled checks (your recurring questions, on cron)
The digest asks one broad question. Scheduled checks let you ask *your* questions on *their* schedules — each check is a named prompt with a cron schedule and optional target clusters, run by the agent and posted to Slack:
scheduledChecks:
enabled: true checks:
- name: cert-expiry schedule: "0 8 * * 1" # Monday mornings prompt: |- Check TLS secrets for certificates expiring within 21 days. List each as namespace/name with days remaining.
- name: pvc-pressure schedule: "0 */6 * * *" clusters: [prod-east] prompt: Find PersistentVolumeClaims above 85% usage.
A passing check posts nothing — silence means green (set notifyOnPass: true to hear about passes too). Failures always post, evidence included. Iterate on a check without waiting for cron:
curl -X POST https://<your-kubently-host>/webhooks/scheduled-check \
-H "X-API-Key: " -H 'Content-Type: application/json' \ -d '{"check": "cert-expiry", "dry_run": true}'
📖 See [QUICK_START.md](docs/QUICK_START.md) for full quick-start guide
📚 See [GETTING_STARTED.md](docs/GETTING_STARTED.md) for production deployment
For Developers: Local Testing
# Deploy to a local kind cluster (builds images from HEAD)
ANTHROPIC_API_KEY=sk-... ./deployment/scripts/kind-e2e.sh
Run comprehensive test suite
./test-automation/run_tests.sh test-and-analyze --api-key test-api-key
📖 See [CLAUDE.md](CLAUDE.md) for development guidelines
Configuration
LLM Providers
Pick a provider with LLM_PROVIDER and supply that provider's key. There is no default provider — the agent refuses to start without LLM_PROVIDER. For local development with deployment/docker-compose.yaml, put both in .env (see deployment/.env.example):
# Anthropic
LLM_PROVIDER=anthropic-claude ANTHROPIC_API_KEY=your-anthropic-api-key
OpenAI (also matches Azure and OpenAI-compatible endpoints)
LLM_PROVIDER=openai OPENAI_API_KEY=your-openai-api-key
Google Gemini
LLM_PROVIDER=google-gemini GOOGLE_API_KEY=your-gemini-api-key
In Kubernetes the keys come from the kubently-llm-secrets secret and LLM_PROVIDER goes under api.env.
Helm Deployment
Customize deployment using Helm values:
Kubently ships as a single chart. Its components are switched on and off with api.enabled, redis.enabled and executor.enabled — an executor-only install on a remote cluster is the same chart with the first two disabled.
# From a checkout
helm install kubently ./deployment/helm/kubently -n kubently \ -f deployment/helm/test-values.yaml
Or from the published chart repository
helm repo add kubently https://kubently.github.io/kubently helm install kubently kubently/kubently -n kubently -f my-values.yaml
LLM_PROVIDER is required and has no chart default — set it under api.env (anthropic-claude, openai, or google-gemini). See ENVIRONMENT_VARIABLES.md for the full configuration surface, and GETTING_STARTED.md for the production walkthrough.
Operator Runbooks
Feed your organization's tribal knowledge into investigations. Runbooks are hand-written markdown files with lightweight frontmatter; when an investigation (a chat question, an Alertmanager alert, or an A2A call) matches a runbook's criteria, the agent receives it as "the operator's runbook for this situation", follows it where applicable, notes deviations, and cites it by name in the diagnosis.
A worked example:
---
name: Payments CrashLoopBackOff match: alerts: ["KubePodCrashLooping", "PaymentsPod*"] # alert-name globs namespaces: ["payments", "payments-*"] # namespace selectors workloads: ["payment-api*"] # matches derived pod names too topics: ["crashloop", "OOMKilled", "payment service"] # free-text tags
- Check recent deploys first: payment-api ships through ArgoCD, and 90% of crashloops here follow a bad config sync.
- OOMKilled almost always means the JVM heap flag drifted from the container memory limit — compare
-Xmxagainstresources.limits.memorybefore blaming traffic. - If the DB connection pool is exhausted, do NOT restart the pods; escalate to #payments-oncall (restarts thundering-herd the database).
Deploy runbooks as Helm values (they become a ConfigMap mounted into the API pod; edits go live without a pod restart):
# production-values.yaml
runbooks: payments-crashloop.md: |
name: Payments CrashLoopBackOff match: alerts: ["KubePodCrashLooping"] namespaces: ["payments"]
- Check recent deploys first ...
Matching is scored: an alert-name hit outranks namespace/workload selector hits, which outrank topic hits. The best match is injected first, and the total injected size is capped (KUBENTLY_RUNBOOKS_MAX_CHARS, default 8000 characters) — one complete, best-matching runbook beats fragments of many. Outside Helm, point KUBENTLY_RUNBOOKS_DIR at any directory of .md files.
Incident History
Past diagnoses become searchable institutional memory. Whenever an investigation concludes with a root cause, Kubently stores a compact record — date, cluster, resources involved, symptom keywords, the root-cause one-liner, and the resolution when one was stated — in Redis, isolated per authenticated caller (the same namespace boundary as conversation memory, so in multi-tenant deployments one tenant's incidents are never visible to another).
The history is used two ways:
- The agent's