Skip to main content
Glama

k8s-aiops

Audit availability: Real writes require a committed pending audit row and stop before contacting the platform if storage is unavailable. Reads and previews may continue with a warning; new audit rows store outcome summaries rather than full responses.

Disclaimer: This is a community-maintained open-source project and is not affiliated with, endorsed by, or sponsored by the Cloud Native Computing Foundation, the Kubernetes project, or k3s/Rancher. "Kubernetes" and "k3s" are trademarks of their respective owners. Source code is publicly auditable at github.com/AIops-tools/K8s-AIops under the MIT license.

Governed Kubernetes operations for AI agents — 55 MCP tools, every one wrapped with the bundled @governed_tool harness: a local unified audit log under ~/.k8s-aiops/, a token/runaway budget guard, undo-token recording, and a descriptive risk-tier label on every audit row. Coverage spans pods, deployments, statefulsets, daemonsets, replicasets, jobs/cronjobs, services, ingresses, endpoints, configmaps, secrets (names/keys only), PVCs/PVs/storageclasses, nodes, namespaces, events, rollouts (status/history/undo/pause/resume/set-image), pod/node describe, pod/node top, a cluster health summary, and read-only diagnostics / RCA (pod-health and workload-readiness) that flag the root cause worst-first.

Standalone: the governance harness is bundled in the package (k8s_aiops.governance) — k8s-aiops has no external skill-family dependency. Coverage focuses on common cluster operations and is not yet exhaustive.

Verification status: exercised end-to-end against a live kind cluster (v1.36); the diagnostics/RCA tools added in this release are mock-tested only. See docs/VERIFICATION.md.

What works

Any cluster a kubeconfig can reach: standard Kubernetes, k3s, EKS, GKE, AKS, kind, minikube. Authentication (client certs, tokens, EKS/GKE/AKS exec plugins) is delegated entirely to the kubeconfig.

Related MCP server: k8scortex-mcp

What this tool does, and does not, decide

It delivers Kubernetes operations — reads and writes — accurately and efficiently, and records every one of them. It does not decide whether a write is allowed to happen. That is the agent's judgement, or the permission of the kubeconfig context / ServiceAccount you connect it with: point it at a context bound to a read-only RBAC role and the writes fail at the apiserver — the place that actually owns the permission.

So there is no read-only switch, no policy file, no approval gate to configure. The one thing the tool guarantees is that nothing is silent: every call, over MCP and over the CLI alike, lands an audit row in ~/.k8s-aiops/audit.db, and destructive writes still capture their before-state and record an inverse where one exists. The runaway budget guard is a safety backstop, not authorization.

Each tool declares a risk_level, kept in agreement with its [READ]/[WRITE] documentation tag by a test, and carried into the audit row as a descriptive tier — so a reviewer can see at a glance that a row was a high-risk delete. It is a label, not a gate.

Running a smaller / local model? See agent-guardrails.md — it lists the guardrails this tool now enforces for you (so you don't spend prompt budget restating them) and gives a ready-made system prompt for what's left.

Quick Start

As a Claude Code plugin

One install gives an agent both the skill and the MCP server:

/plugin marketplace add AIops-tools/marketplace
/plugin install k8s-aiops@aiops-tools

The MCP server is fetched with uv and pinned to the package version this plugin declares, so an audit row can be traced back to the code that wrote it. Credentials are still configured with k8s-aiops init — see below.

As an OpenClaw plugin

The same bundle is published on ClawHub, where one install delivers the skill and its MCP server together:

openclaw plugins install clawhub:@zw008/k8s-aiops
openclaw skills info k8s-aiops          # expect: Visible to model: yes

Restart the OpenClaw gateway afterwards so it loads the plugin. The MCP server is fetched with uv, pinned to this exact release, so uvx has to be on PATH — without it the skill still installs but reports Visible to model: no. Credentials are configured exactly as below.

As a CLI or standalone MCP server

uv tool install k8s-aiops

# Friendly onboarding wizard — registers your kube contexts as named targets:
k8s-aiops init

# Or skip it — uses your current kube-context out of the box:
k8s-aiops doctor
k8s-aiops pod list
k8s-aiops deployment list -n default

# Read-only RCA — worst-first root-cause findings, no changes made:
k8s-aiops diagnose pod-health -n prod
k8s-aiops diagnose workload-readiness -n prod

To define named targets (multiple clusters/contexts), create ~/.k8s-aiops/config.yaml:

targets:
  - name: prod          # used as -t prod
    context: prod-eks   # a context in your kubeconfig (omit for current-context)
    namespace: default  # optional default namespace
    # kubeconfig: /path/to/alt/kubeconfig   # optional explicit path
  - name: lab
    context: k3s-lab

No secrets live in this file — credentials come from the kubeconfig.

MCP

{
  "command": "k8s-aiops",
  "args": ["mcp"],
  "env": { "K8S_AIOPS_CONFIG": "~/.k8s-aiops/config.yaml" }
}

Note — MCP servers get a clean environment: most MCP clients spawn the server without your shell's exports, so variables like K8S_AIOPS_HOME, K8S_AUDIT_APPROVED_BY, K8S_AUDIT_RATIONALE (and KUBECONFIG, if your kubeconfig is not at ~/.kube/config) must be set in the MCP server config's env block above — values exported only in your terminal may never reach the server.

Audit & Safety

  • Every tool call is logged to ~/.k8s-aiops/audit.db (local SQLite; relocate with K8S_AIOPS_HOME).

  • Reversible writes record an inverse undo descriptor (scale_deployment → scale-back to previous; cordon_node ↔ uncordon_node).

  • Every MCP write tool takes dry_run=True and returns a {"dryRun": true, ...} preview without touching the cluster (no undo recorded for a preview).

  • delete_deployment is risk_level=high; destructive CLI commands require double confirmation, medium-risk ones (deployment scale/restart) a single confirmation, and all write commands support --dry-run.

  • All API text passes through sanitize() (output hygiene: control/format-char stripping + truncation).

See skills/k8s-aiops/SKILL.md and SECURITY.md for details.

Secrets

k8s-aiops deliberately has no encrypted secret store (no secrets.enc, no secret CLI): authentication is delegated entirely to your kubeconfig — client certificates, bearer tokens, or exec plugins (EKS/GKE/AKS) — and the tool never handles or stores cluster credentials itself. This is a documented exception to the AIops-tools line-wide encrypted-secret-store pattern.

Companion Skills

If you want…

Use

Kubernetes pods / deployments / nodes

k8s-aiops (this)

Hypervisor VM lifecycle

a hypervisor ops skill

Backup & restore

a backup ops skill

Contributing & feature requests

Coverage is intentionally focused. Missing a device, action, or feature you need? Open an issue or pull request at github.com/AIops-tools/K8s-AIops — feature requests, contributions, and comments are all welcome.

License

MIT — github.com/AIops-tools/K8s-AIops

Available Tools

55 tools
api_resourcesA
Read-only

[READ] List available API groups and their versions.

Args: target: k8s target name from config; omit to use the default.

Inputs: target.

cluster_infoA
Read-only

[READ] Friendly cluster health summary: server version, node/ns counts.

Args: target: k8s target name from config; omit to use the default.

Inputs: target.

configmap_getA
Read-only

[READ] Return a configmap's data (keys + values — config, not secrets).

Args: name: ConfigMap name (see configmap_list). namespace: Namespace; omit for the target's default namespace. target: k8s target name from config.

Inputs: name (required), target, namespace.

configmap_listA
Read-only

[READ] List configmaps (name, namespace, key count, age).

Args: namespace: Namespace; omit for all namespaces. target: k8s target name from config.

Inputs: target, namespace.

cordon_nodeA
Destructive

[WRITE][risk=medium] Mark a node unschedulable (no new pods land). Inverse: uncordon_node.

Pass dry_run=True to preview without cordoning.

Args: name: Node name (see node_list). dry_run: If True, preview without cordoning. target: k8s target name from config.

Inputs: name (required), target, dry_run.

create_namespaceA
Destructive

[WRITE][risk=medium] Create a namespace. Inverse: delete_namespace.

Pass dry_run=True to preview without creating.

Args: name: Namespace name to create. dry_run: If True, preview without creating. target: k8s target name from config.

Inputs: name (required), target, dry_run.

cronjob_getA
Read-only

[READ] Return detail for a single cronjob by name.

Args: name: CronJob name (see cronjob_list). namespace: Namespace; omit for the target's default namespace. target: k8s target name from config.

Inputs: name (required), target, namespace.

cronjob_listA
Read-only

[READ] List cronjobs (name, namespace, schedule, suspend, active, age).

Args: namespace: Namespace; omit for all namespaces. target: k8s target name from config.

Inputs: target, namespace.

daemonset_getA
Read-only

[READ] Return detail for a single daemonset by name.

Args: name: DaemonSet name (see daemonset_list). namespace: Namespace; omit for the target's default namespace. target: k8s target name from config.

Inputs: name (required), target, namespace.

daemonset_listA
Read-only

[READ] List daemonsets (name, namespace, desired/ready/available, age).

Args: namespace: Namespace; omit for all namespaces. target: k8s target name from config.

Inputs: target, namespace.

delete_deploymentA
Destructive

[WRITE][risk=high] Delete a deployment and its pods. HIGH RISK — no undo.

Pass dry_run=True to preview without deleting.

Args: name: Deployment name. namespace: Namespace; omit for the target's default namespace. dry_run: If True, preview without deleting. target: k8s target name from config.

Inputs: name (required), target, dry_run, namespace.

delete_jobA
Destructive

[WRITE][risk=high] Delete a job and its pods. HIGH RISK — no undo.

Pass dry_run=True to preview without deleting.

Args: name: Job name. namespace: Namespace; omit for the target's default namespace. dry_run: If True, preview without deleting. target: k8s target name from config.

Inputs: name (required), target, dry_run, namespace.

delete_namespaceA
Destructive

[WRITE][risk=high] Delete a namespace and EVERYTHING in it. HIGH RISK — no undo.

Pass dry_run=True to preview without deleting.

Two namespaces are refused. The cluster's control-plane namespaces (kube-system, kube-public, kube-node-lease) need confirm=True — deleting one takes DNS and pod networking with it. The namespace holding this target's own ServiceAccount credential is refused outright and confirm does NOT override it: that delete revokes the credential it is running on. Both refusals are raised on the dry_run path too, so a preview never shows a green wouldDelete for a delete that would be rejected.

Args: name: Namespace name to delete. dry_run: If True, preview without deleting. confirm: Acknowledge deleting a protected control-plane namespace. target: k8s target name from config.

Inputs: name (required), target, confirm, dry_run.

delete_podA
Destructive

[WRITE][risk=medium] Delete a pod. No undo — a controller usually recreates it.

Pass dry_run=True to preview without deleting.

Args: name: Pod name. namespace: Namespace; omit for the target's default namespace. dry_run: If True, preview without deleting. target: k8s target name from config.

Inputs: name (required), target, dry_run, namespace.

deployment_getA
Read-only

[READ] Return detail for a single deployment by name.

Args: name: Deployment name (see deployment_list). namespace: Namespace; omit for the target's default namespace. target: k8s target name from config.

Inputs: name (required), target, namespace.

deployment_listA
Read-only

[READ] List deployments (name, namespace, desired/ready/available, age).

Args: namespace: Namespace; omit for all namespaces. target: k8s target name from config.

Inputs: target, namespace.

drain_nodeA
Destructive

[WRITE][risk=high] Cordon a node and evict its pods. HIGH RISK — no full undo.

DaemonSet-managed and mirror pods are skipped (like kubectl drain). The cordon is reversible (uncordon_node); the evictions are not. Pass dry_run=True to preview without draining.

Args: name: Node name (see node_list). dry_run: If True, preview without cordoning or evicting. target: k8s target name from config.

Inputs: name (required), target, dry_run.

endpoints_listB
Read-only

[READ] List endpoints (name, namespace, ready addresses, ports, age).

Args: namespace: Namespace; omit for all namespaces. target: k8s target name from config.

Inputs: target, namespace.

event_listA
Read-only

[READ] List recent events (type, reason, object, message, age).

Useful for diagnosing why a pod is not starting (FailedScheduling, etc.).

Returns {"events": [...], "returned": N, "limit": L, "truncated": bool}. When truncated is true there are MORE events than shown — re-run with a higher limit instead of reporting the shown set as complete.

Args: namespace: Namespace; omit for all namespaces. limit: Maximum number of events to return. target: k8s target name from config.

Inputs: limit, target, namespace.

ingress_getA
Read-only

[READ] Return detail for a single ingress, including path→backend rules.

Args: name: Ingress name (see ingress_list). namespace: Namespace; omit for the target's default namespace. target: k8s target name from config.

Inputs: name (required), target, namespace.

ingress_listA
Read-only

[READ] List ingresses (name, namespace, class, hosts, age).

Args: namespace: Namespace; omit for all namespaces. target: k8s target name from config.

Inputs: target, namespace.

job_getB
Read-only

[READ] Return detail for a single job by name.

Args: name: Job name (see job_list). namespace: Namespace; omit for the target's default namespace. target: k8s target name from config.

Inputs: name (required), target, namespace.

job_listA
Read-only

[READ] List jobs (name, namespace, completions, succeeded/failed, age).

Args: namespace: Namespace; omit for all namespaces. target: k8s target name from config.

Inputs: target, namespace.

namespace_listB
Read-only

[READ] List namespaces (name, phase, age).

Args: target: k8s target name from config; omit to use the default.

Inputs: target.

node_describeA
Read-only

[READ] Describe a node: capacity, allocatable, conditions, taints.

Args: name: Node name (see node_list). target: k8s target name from config.

Inputs: name (required), target.

node_listA
Read-only

[READ] List cluster nodes (name, status, roles, version, schedulable, age).

Args: target: k8s target name from config; omit to use the default.

Inputs: target.

node_topA
Read-only

[READ] CPU/memory usage per node (requires metrics-server).

Returns available: False with a clear message when metrics-server is not installed.

Args: target: k8s target name from config; omit to use the default.

Inputs: target.

pod_describeA
Read-only

[READ] Describe a pod: status, conditions, container states, recent events.

The fastest single call to diagnose why a pod is not Ready (CrashLoopBackOff, ImagePullBackOff, scheduling failures).

Args: name: Pod name (see pod_list). namespace: Namespace; omit for the target's default namespace. target: k8s target name from config.

Inputs: name (required), target, namespace.

pod_getA
Read-only

[READ] Return detail for a single pod by name.

Args: name: Pod name (see pod_list). namespace: Namespace; omit to use the target's default namespace. target: k8s target name from config.

Inputs: name (required), target, namespace.

pod_health_rcaA
Read-only

[READ] Scan pods for CrashLoopBackOff, image-pull failures, OOMKilled, unschedulable Pending pods, and high restart counts.

Returns worst-first findings, each citing the reason string / restart count that tripped it plus a concrete kubectl action. Omit namespace to scan all.

Args: namespace: Namespace to scope to; omit for all namespaces. label_selector: Optional label selector, e.g. "app=web". target: k8s target name from config; omit to use the default.

Inputs: target, namespace, label_selector.

pod_listA
Read-only

[READ] List pods (name, namespace, phase, ready, restarts, node, age).

Omit namespace to list across all namespaces. Use pod_get for full detail.

Args: namespace: Namespace to scope to; omit for all namespaces. label_selector: Optional label selector, e.g. "app=web". target: k8s target name from config; omit to use the default.

Inputs: target, namespace, label_selector.

pod_logsA
Read-only

[READ] Return the most recent log lines for a pod (default 100).

Args: name: Pod name. namespace: Namespace; omit for the target's default namespace. tail_lines: Number of trailing log lines to return. container: Container name (required only for multi-container pods). target: k8s target name from config.

Inputs: name (required), target, container, namespace, +1 more.

pod_topA
Read-only

[READ] CPU/memory usage per pod (requires metrics-server).

Returns available: False with a clear message when metrics-server is not installed.

Args: namespace: Namespace; omit for all namespaces. target: k8s target name from config.

Inputs: target, namespace.

pvc_getA
Read-only

[READ] Return detail for a single PVC by name.

Args: name: PVC name (see pvc_list). namespace: Namespace; omit for the target's default namespace. target: k8s target name from config.

Inputs: name (required), target, namespace.

pvc_listA
Read-only

[READ] List persistent volume claims (name, status, capacity, class, age).

Args: namespace: Namespace; omit for all namespaces. target: k8s target name from config.

Inputs: target, namespace.

pv_listB
Read-only

[READ] List persistent volumes (name, capacity, status, claim, class, age).

Args: target: k8s target name from config; omit to use the default.

Inputs: target.

replicaset_listA
Read-only

[READ] List replicasets (name, namespace, desired/ready, age).

Args: namespace: Namespace; omit for all namespaces. target: k8s target name from config.

Inputs: target, namespace.

rollout_historyB
Read-only

[READ] List a deployment's rollout revisions (from its replicasets).

Args: name: Deployment name. namespace: Namespace; omit for the target's default namespace. target: k8s target name from config.

Inputs: name (required), target, namespace.

rollout_pauseA
Destructive

[WRITE][risk=medium] Pause a deployment's rollout. Inverse: rollout_resume.

Pass dry_run=True to preview without pausing.

Args: name: Deployment name. namespace: Namespace; omit for the target's default namespace. dry_run: If True, preview without pausing. target: k8s target name from config.

Inputs: name (required), target, dry_run, namespace.

rollout_restart_deploymentA
Destructive

[WRITE][risk=medium] Trigger a rolling restart of a deployment. No clean undo.

Pass dry_run=True to preview without restarting.

Args: name: Deployment name. namespace: Namespace; omit for the target's default namespace. dry_run: If True, preview without restarting. target: k8s target name from config.

Inputs: name (required), target, dry_run, namespace.

rollout_resumeA
Destructive

[WRITE][risk=medium] Resume a paused deployment's rollout. Inverse: rollout_pause.

Pass dry_run=True to preview without resuming.

Args: name: Deployment name. namespace: Namespace; omit for the target's default namespace. dry_run: If True, preview without resuming. target: k8s target name from config.

Inputs: name (required), target, dry_run, namespace.

rollout_statusA
Read-only

[READ] Rollout status: desired/updated/available/unavailable + paused.

Args: name: Deployment name. namespace: Namespace; omit for the target's default namespace. target: k8s target name from config.

Inputs: name (required), target, namespace.

rollout_undo_deploymentA
Destructive

[WRITE][risk=high] Roll a deployment back to a prior revision. HIGH RISK.

Defaults to the immediately previous revision. No clean automatic inverse — re-deploy the intended image/revision to move forward again. Pass dry_run=True to preview without rolling back.

Args: name: Deployment name. namespace: Namespace; omit for the target's default namespace. to_revision: Specific revision to roll back to (0 = previous). dry_run: If True, preview without rolling back. target: k8s target name from config.

Inputs: name (required), target, dry_run, namespace, +1 more.

scale_deploymentA
Destructive

[WRITE][risk=medium] Scale a deployment to replicas. Inverse: restore previous count.

Returns previous_replicas so the change can be undone. Pass dry_run=True to preview without changing anything (no undo is recorded for a preview).

Args: name: Deployment name. replicas: Desired replica count. namespace: Namespace; omit for the target's default namespace. dry_run: If True, preview without scaling. target: k8s target name from config.

Inputs: name (required), replicas (required), target, dry_run, +1 more.

scale_statefulsetA
Destructive

[WRITE][risk=medium] Scale a statefulset to replicas. Inverse: restore previous count.

Pass dry_run=True to preview without scaling (no undo is recorded for a preview).

Args: name: StatefulSet name. replicas: Desired replica count. namespace: Namespace; omit for the target's default namespace. dry_run: If True, preview without scaling. target: k8s target name from config.

Inputs: name (required), replicas (required), target, dry_run, +1 more.

secret_listA
Read-only

[READ] List secrets — names, types, and key NAMES only (values redacted).

Secret VALUES are never returned. Use this to discover which secrets and keys exist, then mount/reference them via the kubeconfig-authorized workload.

Args: namespace: Namespace; omit for all namespaces. target: k8s target name from config.

Inputs: target, namespace.

service_listA
Read-only

[READ] List services (name, namespace, type, cluster IP, ports).

Args: namespace: Namespace; omit for all namespaces. target: k8s target name from config.

Inputs: target, namespace.

set_deployment_imageA
Destructive

[WRITE][risk=medium] Update a deployment container's image. Inverse: restore previous.

Returns previous_image so the change can be undone. Pass dry_run=True to preview without changing anything (no undo is recorded for a preview).

Args: name: Deployment name. container: Container name within the pod template (see deployment_get). image: New image reference (e.g. "nginx:1.27"). namespace: Namespace; omit for the target's default namespace. dry_run: If True, preview without updating the image. target: k8s target name from config.

Inputs: name (required), image (required), container (required), target, +2 more.

statefulset_getA
Read-only

[READ] Return detail for a single statefulset by name.

Args: name: StatefulSet name (see statefulset_list). namespace: Namespace; omit for the target's default namespace. target: k8s target name from config.

Inputs: name (required), target, namespace.

statefulset_listA
Read-only

[READ] List statefulsets (name, namespace, desired/ready/current, age).

Args: namespace: Namespace; omit for all namespaces. target: k8s target name from config.

Inputs: target, namespace.

storageclass_listA
Read-only

[READ] List storage classes (name, provisioner, reclaim policy, default).

Args: target: k8s target name from config; omit to use the default.

Inputs: target.

uncordon_nodeA
Destructive

[WRITE][risk=medium] Mark a node schedulable again. Inverse: cordon_node.

Pass dry_run=True to preview without uncordoning.

Args: name: Node name (see node_list). dry_run: If True, preview without uncordoning. target: k8s target name from config.

Inputs: name (required), target, dry_run.

undo_applyA
Destructive

[WRITE][risk=medium] Apply a recorded undo by dispatching its inverse tool.

The inverse runs through its own governed tool, so it is audited and labelled with its own risk tier there. Pass dry_run=True to preview the inverse call without executing it. A token can only be applied once.

Args: undo_id: The undoId from undo_list (or an _undo_id in a write result). dry_run: If True, preview the inverse tool + params without running it. target: Passed through to the inverse tool when it accepts a target.

Inputs: undo_id (required), target, dry_run.

undo_listA
Read-only

[READ] List recorded, not-yet-applied undo tokens (most recent first).

Each entry names the original tool, the inverse tool that undo_apply would run, and a human note. Use the undoId with undo_apply.

Returns {"undos": [...], "returned": N, "limit": L, "truncated": bool}. truncated is measured (one extra row is fetched), not guessed from a length coincidence: when it is true there are MORE tokens than shown, so re-run with a higher limit rather than reporting the list as complete.

Each entry carries effectVerified. False means the original write lost its response, so the change it reverses is PROBABLE, not confirmed — check the live state before applying, and do not report the result as a restore of a state that may never have been reached.

Args: limit: Max rows to return (default 50, capped at 500). target: Unused (undo state is host-local); accepted for CLI uniformity.

Inputs: limit, target.

workload_readiness_rcaA
Read-only

[READ] Scan Deployments/StatefulSets/DaemonSets for ready-vs-desired shortfalls, zero-ready outages, and rollout-stuck conditions.

Returns worst-first findings, each citing the measured ready/desired ratio or the failing condition reason plus a concrete kubectl action.

Args: namespace: Namespace to scope to; omit for all namespaces. target: k8s target name from config; omit to use the default.

Inputs: target, namespace.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 55 tools

    Disambiguation5/5

    Each tool targets a distinct resource + action (job_list vs job_get vs delete_job, scale_deployment vs rollout_restart_deployment vs set_deployment_image vs rollout_undo_deployment). The few adjacent diagnostic tools (pod_describe, pod_health_rca, workload_readiness_rca, event_list) are explicitly scoped in their descriptions, so misselection risk is low.

    Naming Consistency4/5

    Strong, predictable snake_case resource_action pattern (job_list, pod_get, delete_namespace, scale_statefulset, cordon_node), with a few deviations like cluster_info, api_resources, and the *_rca scan tools that follow a noun/concept rather than verb_noun convention. Readable and mostly uniform throughout.

    Tool Count2/5

    55 tools is well above the 3-15 sweet spot and past the 25+ 'too many' threshold. Kubernetes is broad enough that most individual tools earn their place (list/get pairs per resource), but the surface is heavy and forces an agent to sift through many similar read endpoints to find the right one.

    Completeness4/5

    Read/list/get coverage is broad across pods, workloads, nodes, network, storage, RBAC-adjacent, diagnostics, and metrics, plus key remediations (scale, rollout, set image, cordon/drain, namespace lifecycle) and a thoughtful undo system. Gaps remain: no exec/port-forward, no create/update for deployments/services/configmaps/secrets/jobs, and no service_get detail, so some lifecycle operations lack coverage.

    Maintenance

    ActivityActive
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      C
      maintenance
      Safe, read-only-by-default Kubernetes access for AI agents via MCP. Provides explicit readonly, readwrite, and dangerous permission modes, plus MCPB bundles for desktop clients.
      2
      MIT
    • A
      license
      B
      quality
      B
      maintenance
      A production-grade MCP server providing a secure, natural-language interface to Kubernetes for developers and AI agents, with multi-cluster routing, OIDC authentication, RBAC, and audit logging.
      75
      75 npm
      1
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      A local MCP server for Kubernetes that applies RBAC-style, context-scoped access control to constrain AI agents, with tools for common Kubernetes operations.
      1
      Apache 2.0