How a click on "Publish" in API Studio turns into running pods on Kubernetes — and the TLS plumbing that keeps every hop of that journey secure.
Authors: Shreyas Raviprakash Technical contributors: Michael O'Sullivan, Olajuwon Owoseni, Niraimathi Gunalan
Our teammates have already written about the AI View in API Studio, about LLM Provider, and about the IDIG Operator's two-tier architecture in the IBM DataPower Interact Gateway (IDIG) Standalone offering. Those posts cover the authoring experience and the cluster lifecycle end of things. This post fills in the piece that sits between them: what actually happens the moment someone hits Publish, and how an authored MCP server or LLM provider becomes a real, invokable workload sitting behind IDIG.
That "in-between" is owned by a small backend service we call idig-broker. It doesn't have a UI, nobody demos it, and it's the kind of service that's easy to take for granted. So consider this the broker's turn in the spotlight.
What actually gets published
When someone builds an MCP server or registers an LLM provider in the AI View, they're really authoring a small graph of related resources, not a single object. On the cluster, that graph is represented as a handful of Kubernetes custom resources:
Runtime — the parent Kubernetes resource, and the same kind regardless of what it's running. It doesn't do anything user-visible on its own; its job is to be the owner of an actual running asset and to represent "this thing, deployed."
MCPTools — nested under MCPServer's Runtime. These are the individual tool definitions an agent actually calls.
APIs — nested under LLMProvider's Runtime. These describe the operations exposed against the registered model provider.
HTTPRoute — the piece that tells the gateway how to reach the running workload.
The reason Runtime exists as its own object rather than folding that concept into MCPServer and LLMProvider directly is ownership. Both asset kinds need identical treatment once they're running — replicas, autoscaling behaviour, teardown when unpublished — and putting that shared behaviour on a common parent means the operator only has to reconcile one lifecycle, not two slightly different ones.