MCP server for querying and managing Kubernetes resources across multiple clusters, with specialized support for Submariner and ServiceExports
The server implements 8 Kubernetes-focused tools with consistent naming (verb_noun pattern), reasonable descriptions (100-200 chars typical), and proper JSON Schema definitions for all tools. However, there are significant gaps in output schema documentation, error handling guidance, and parameter validation constraints. Descriptions are functional but lack LLM-optimized detail about when to use each tool, dependencies, and recovery paths. No tool annotations (readOnlyHint/destructiveHint) despite having clear risk classifications. Parameters lack constraint details (enums, ranges, patterns) that would help LLMs avoid invalid inputs.
Create a new ServiceExport for a service. By default, creates a minimal ServiceExport with just the name. Optionally accepts a full manifest for advanced use cases.
Delete a ServiceExport
Get a specific Kubernetes resource from a cluster. Use 'all' or 'ALL' for cluster/namespace to query all clusters/namespaces.
Get a specific ServiceExport from a cluster. Use 'all' or 'ALL' for cluster/namespace to query all clusters/namespaces.
List all configured Kubernetes clusters
List all namespaces in a cluster. Use 'all' or 'ALL' for cluster to query all clusters.
Output schemas not documented. Tools return results but descriptions do not specify what fields to expect, forcing LLMs to infer output structure and plan subsequent calls blindly.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint) despite risk classifications being present in metadata. create_serviceexport and delete_serviceexport should declare destructiveHint=true; read tools should declare readOnlyHint=true. This prevents agents from planning safely.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 70 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 47 | 2024-11-05+ | v1 |
List Kubernetes resources from a cluster. Use 'all' or 'ALL' for cluster/namespace to query all clusters/namespaces.
List ServiceExports in a namespace. Use 'all' or 'ALL' for cluster/namespace to query all clusters/namespaces.
Parameter constraint descriptions are minimal. 'cluster' accepts 'all' or 'ALL' but this special case is mentioned in descriptions rather than as an enum constraint. api_version, resource, and namespace lack format guidance (e.g., 'Resource must be plural form like submariners, services, pods'). Labels parameter has no selector syntax documentation.
Destructive operations (delete_serviceexport, create_serviceexport) lack confirmation/dry-run patterns. No guidance on irreversibility or recovery steps in descriptions. An agent may accidentally delete resources without warning.
No error handling guidance. Descriptions do not explain what errors are possible, when to retry, or what to do if a resource is not found. An LLM will have no context for recovery after a tool call fails.
delete_serviceexport description is only 31 characters ('Delete a ServiceExport'), below the 50-char threshold for adequate LLM context. Lacks detail on consequences, when to use it, and what happens to exported services.
create_serviceexport 'manifest' parameter accepts 'JSON string' but no schema or format details provided. LLMs will guess the manifest structure. Should define expected fields (apiVersion, kind, metadata.name, etc.) or link to a ServiceExport CRD example.
Pagination not mentioned. list_clusters, list_namespaces, list_resources, and list_serviceexports may return large result sets. No limit or offset parameters, no pagination guidance. Large responses risk context window exhaustion.