A Model Context Protocol server built with Quarkus that provides tools for Kubernetes cluster observability and Prometheus monitoring. Enables SRE and DevOps teams to query cluster state, pod logs, deployment status, events, node health, and Prometheus metrics through a unified MCP interface.
Server provides 8 well-scoped observability tools with complete input schemas and descriptions. All tools are read-only, reducing risk. Naming follows verb_noun convention (get_*, describe_*, query_*). Descriptions are substantive (100-200 chars typical), explaining WHAT the tool does and WHEN to use it. However, output schemas are not documented in the source code provided, only input schemas are visible. Parameter descriptions are present but some lack explicit constraints (e.g., 'limit' in get_cluster_events lacks min/max bounds). Error handling and recovery guidance are not evident in the tool definitions. No tool annotations (readOnlyHint, etc.) visible despite all being read-only.
Get detailed status and configuration for a Kubernetes deployment. Returns the deployment spec and status as JSON.
Echoes the `message` argument back. Useful for verifying client connectivity.
Retrieve recent Kubernetes events (warnings, errors, scheduling failures, container restarts) in a namespace or across all namespaces. Bounded read-only access for SRE triage.
Retrieve currently active (firing or pending) alerts from Prometheus. Returns alert names, severity, labels, annotations, and active duration. Bounded read-only access for incident triage.
Retrieve health status, readiness, capacity (CPU, memory, pods), and pressure conditions (DiskPressure, MemoryPressure, PIDPressure) for all Kubernetes nodes or a specific node.
Retrieve logs for a specific pod in a Kubernetes cluster. Read-only. Returns at most the last 1000 lines.
Output schemas not documented. Tool descriptions explain inputs but not what fields/structure the LLM should expect in responses. This forces LLMs to guess at response structure, risking failed downstream tool chaining.
Numeric parameter constraints missing. 'limit' in get_cluster_events (max 100, default 50) and 'tailLines' in get_pod_logs (max 1000, default 100) are documented in descriptions but lack JSON Schema minValue/maxValue. LLMs cannot parse natural-language constraints reliably.
No tool annotations visible. All 8 tools are read-only (safe to retry), but readOnlyHint is not declared in schemas. This prevents agents from optimizing retry logic and understanding safety guarantees.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
Run an instant PromQL query against the configured Prometheus instance. Read-only. 5s server-side timeout. Returns at most the configured max-series result series — if your query exceeds that, narrow it with stricter label matchers.
Run a PromQL range query against the configured Prometheus instance over a [start, end] window at a fixed step. Read-only. 5s server-side timeout. Returns at most the configured max-samples data points across all series — if your query exceeds that, widen the step, shorten the window, or narrow the series with label matchers.
Error handling and recovery guidance not evident. Tool descriptions do not explain what errors are possible, whether they are retryable, or what the LLM should do next (e.g., 'If pod not found, try list_pods() first').
Enum constraints not used for categorical parameters. 'type' in get_cluster_events (e.g., 'Warning', 'Normal') and 'state' in get_firing_alerts (e.g., 'firing', 'pending') are free-form strings. Should be enums to prevent hallucinated values.