Skip to main content
Kubernetes clusters often have Custom Resource Definitions (CRDs) installed by operators, service meshes, and platform tools. These are APIs the agent has never seen in its training data. Through the kube proxy, it can discover them, read their schemas, and interact with them — no pre-built tools required. There are two ways to discover CRDs, each useful for different things.

Approach 1: CRD API

The CRD API lists every custom resource definition installed in the cluster — names, groups, versions, and scope:
The agent can then drill into a specific CRD to read its embedded structural schema:
Best for: “What CRDs are installed?” — quick inventory, metadata, and embedded schemas.

Approach 2: Kubernetes OpenAPI Spec

Since Kubernetes 1.15+, CRDs with structural schemas are included in the cluster’s OpenAPI spec. The agent can fetch the full API surface — including custom resources — as proper OpenAPI paths:
This gives the agent the actual REST endpoints (GET /apis/cilium.io/v2/namespaces/{ns}/ciliumnetworkpolicies) with full request/response schemas — the same format as the CNAP OpenAPI spec it already knows how to query with search. Best for: “How do I call this custom API?” — full REST paths, request bodies, and response schemas.
Use the CRD API for discovery (“what’s installed?”) and the OpenAPI spec for understanding (“how do I use it?”). An agent typically starts with the CRD API to find what’s interesting, then fetches the OpenAPI group for the full schema.

List Custom Resources

With the group, version, and resource name from the CRD, the agent queries instances:

Full Discovery Flow

The agent can chain the whole thing — discover CRDs, pick one it hasn’t seen, learn its schema, and query instances:

Why This Matters

Traditional MCP servers need a pre-built tool for every API. When a cluster has CRDs from Cilium, cert-manager, Prometheus, Argo, or any other operator, those tools don’t exist. The agent is stuck. With Code Mode + the kube proxy, the agent is self-sufficient. It discovers what’s available, learns the schema, and interacts with custom resources — all at runtime, without any code changes to the MCP server. The API surface of the MCP grows automatically with whatever is installed in the cluster.