MCP server for Kubernetes cluster operations, providing tools to list pods, namespaces, and retrieve pod logs
The server defines three Kubernetes read-only tools with basic FastMCP registration. Tool names follow verb_noun convention (get-pods, get-namespaces, check-logs) and are reasonably clear. However, there are significant gaps in schema completeness, parameter descriptions are minimal, and output structures are not formally documented. All tools are READ_ONLY and lack error recovery guidance. The implementation wraps Kubernetes API calls but does not provide structured schemas for LLM consumption or actionable error messages.
Get logs from a specific pod.
Get list of all namespaces in the cluster.
Get list of pods in a specified namespace.
Output schemas not documented. Tools return dict with 'content' and optional metadata fields, but LLMs cannot infer the structure of 'pods', 'namespaces', or log text responses. No formal schema definition visible in code.
Parameter descriptions lack format constraints and ranges. 'namespace' param is described as 'Kubernetes namespace (default: "default")' but does not specify format (alphanumeric, length limits, or regex pattern). 'tail_lines' accepts integer but no min/max bounds documented.
Error handling returns generic exception messages ('Error getting pods: ...') without recovery guidance. LLMs cannot determine if errors are retryable, user-fixable, or fatal. Missing 'try search_namespaces() first' or 'check if namespace exists' hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 52 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
get-pods and get-namespaces lack pagination support. If a namespace contains hundreds of pods, the tool returns all of them without limit, risking context window overflow. No documented limit or pagination parameters.
Tool descriptions do not explain WHEN to use each tool or distinguish them for LLM selection. 'Get list of pods' does not convey when this is preferred over 'check-logs'. Descriptions lack context for multi-step planning.
Response fields do not support chaining. If get-pods returns pod information, check-logs requires pod_name and namespace, but there is no guarantee the pod_name field from get-pods matches what check-logs expects. Field naming consistency not enforced.