GitHub
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
作者提供的说明(英文原文)
Troubleshoot Kubernetes agentically: natural-language cluster diagnosis via ask_kubently
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 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 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月6日
注册名称已通过 GitHub 账户 kubently 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(2.3.1)于4个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
同一分类中有:GitHub, Desktop Commander, Cloudflare MCP
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
MCP server for terminal commands, file operations, and process management
Cloudflare MCP servers
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Kubently - Troubleshooting Kubernetes Agentically
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.
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.
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.
Set api.env.SLACK_WEBHOOK_URL to a Slack incoming-webhook URL and point Alertmanager at Kubently:
receivers:
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.
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
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.
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:
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
# Deploy to a local kind cluster (builds images from HEAD)
ANTHROPIC_API_KEY=sk-... ./deployment/scripts/kind-e2e.sh
./test-automation/run_tests.sh test-and-analyze --api-key test-api-key
📖 See [CLAUDE.md](CLAUDE.md) for development guidelines
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
LLM_PROVIDER=openai OPENAI_API_KEY=your-openai-api-key
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.
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
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.
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
-Xmx against resources.limits.memory before blaming traffic.
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"]
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.
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:
只显示了开头部分;其余内容请在仓库中阅读