MCP server for managing a MicroK8s cluster from Claude Code, read-only by default
36 tools with consistent verb-noun naming (get_, list_, apply_, delete_, scale_, etc.). All tools have descriptions (avg ~80 chars, within baseline 34-392). Input schemas present for all tools with proper JSON Schema types. However, descriptions are terse and lack LLM-optimized guidance on WHEN to use each tool vs. similar ones. Parameter descriptions are minimal (e.g., 'Kubernetes namespace' repeated 20+ times without context on defaults or mutual exclusivity). Output schemas are not documented, LLMs cannot predict response structure. Error handling is absent from descriptions. Destructive tools (delete_resource, drain_node, patch_resource) lack confirmation/dry-run guidance. No per-tool risk classification in descriptions despite Risk field in metadata.
Apply a Kubernetes manifest (YAML) to the cluster
Get a high-level overview of the cluster: node count, namespace count, pod count, and recent events
Mark a node as unschedulable (cordon)
Delete a Kubernetes resource
Get detailed information about a Kubernetes resource
Disable a MicroK8s addon
Drain a node (evict all pods) to prepare it for maintenance
Enable a MicroK8s addon
Output schemas not documented. LLMs cannot predict response structure (fields, types, pagination). Baseline: 100% of A+ tools document return types.
Destructive/write tools lack confirmation or dry-run guidance in descriptions. delete_resource, drain_node, patch_resource, exec_in_pod should document recovery paths and confirmation patterns.
Parameter descriptions are generic and repeated (e.g., 'Kubernetes namespace' 20+ times). Lack context on defaults, mutual exclusivity, or when to omit. Baseline: 94% of A+ tools have detailed param annotations.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | <=2025-11-25 | v2 |
Execute a command in a pod
Get the status of MicroK8s addons
List ConfigMaps in a namespace
List CronJobs in a namespace
List DaemonSets in a namespace
List deployments in a namespace
Get recent events from a namespace or cluster-wide
List HorizontalPodAutoscalers in a namespace
List Ingresses in a namespace
List Jobs in a namespace
List all namespaces in the cluster
List NetworkPolicies in a namespace
Get detailed status of a node
List all nodes in the cluster with their status, roles, and resource allocation
Get logs from a pod
List pods in a namespace with their status, restarts, and age
List PersistentVolumes in the cluster
List PersistentVolumeClaims in a namespace
List RBAC resources (Roles, RoleBindings, ClusterRoles, ClusterRoleBindings) in a namespace or cluster-wide
Get the YAML representation of a Kubernetes resource
List secrets in a namespace (values are redacted)
List services in a namespace
List StatefulSets in a namespace
Patch a Kubernetes resource with a JSON or strategic merge patch
Set up port forwarding to a pod
Restart a deployment by rolling out a new set of pods
Scale a deployment to a specific number of replicas
Mark a node as schedulable (uncordon)
No error handling guidance in descriptions. LLMs cannot determine if errors are retryable, user-fixable, or fatal. Missing recovery hints like 'If pod not found, call get_pods() first.'
Namespace parameter marked optional in get_pods but required in most other tools. Inconsistent defaults and mutual exclusivity not documented. LLMs will guess wrong.