@@ -18,8 +18,11 @@ limitations under the License.
1818package main
1919
2020import (
21+ "context"
2122 "crypto/tls"
23+ "errors"
2224 "flag"
25+ "net/http"
2326 "os"
2427 "time"
2528
@@ -35,6 +38,7 @@ import (
3538 ctrl "sigs.k8s.io/controller-runtime"
3639 "sigs.k8s.io/controller-runtime/pkg/healthz"
3740 "sigs.k8s.io/controller-runtime/pkg/log/zap"
41+ "sigs.k8s.io/controller-runtime/pkg/manager"
3842 "sigs.k8s.io/controller-runtime/pkg/metrics/filters"
3943 metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
4044 "sigs.k8s.io/controller-runtime/pkg/webhook"
@@ -46,6 +50,7 @@ import (
4650 "github.com/gitcommitankit/agentrax/internal/controller"
4751 "github.com/gitcommitankit/agentrax/internal/metrics"
4852 "github.com/gitcommitankit/agentrax/internal/quota"
53+ "github.com/gitcommitankit/agentrax/internal/registry"
4954 "github.com/gitcommitankit/agentrax/internal/rollout"
5055 agentraxwebhook "github.com/gitcommitankit/agentrax/internal/webhook"
5156 // +kubebuilder:scaffold:imports
@@ -68,6 +73,8 @@ func init() {
6873 // +kubebuilder:scaffold:scheme
6974}
7075
76+ // +kubebuilder:rbac:groups="",resources=configmaps,verbs=get;list;watch;create;update;patch
77+
7178// main is the entrypoint for the Agentrax controller manager binary.
7279func main () {
7380 var metricsAddr string
@@ -79,6 +86,7 @@ func main() {
7986 var prometheusURL string
8087 var gatewayName string
8188 var gatewayNamespace string
89+ var registryAddr string
8290 var tlsOpts []func (* tls.Config )
8391 flag .StringVar (& metricsAddr , "metrics-bind-address" , "0" , "The address the metrics endpoint binds to. " +
8492 "Use :8443 for HTTPS or :8080 for HTTP, or leave as 0 to disable the metrics service." )
@@ -99,6 +107,8 @@ func main() {
99107 "Name of the Gateway API Gateway object used for canary traffic splitting." )
100108 flag .StringVar (& gatewayNamespace , "gateway-namespace" , "agentrax-system" ,
101109 "Namespace of the Gateway API Gateway object used for canary traffic splitting." )
110+ flag .StringVar (& registryAddr , "registry-bind-address" , ":9090" ,
111+ "The address the MCP discovery registry HTTP endpoint binds to." )
102112 opts := zap.Options {
103113 Development : true ,
104114 }
@@ -204,12 +214,47 @@ func main() {
204214 setupLog .Info ("canary rollout disabled (no --prometheus-url)" )
205215 }
206216
207- if err = (& controller.AgentDeploymentReconciler {
217+ // Initialize MCP discovery registry and registrar.
218+ mcpRegistry := registry .NewRegistry (mgr .GetClient (), "agentrax-system" , registry .DefaultTTL )
219+ mcpRegistrar := registry .NewRegistrar (mcpRegistry , registry .NewHTTPMCPClient ())
220+
221+ if registryAddr != "" && registryAddr != "0" {
222+ if err := mgr .Add (manager .RunnableFunc (func (ctx context.Context ) error {
223+ mcpRegistry .Start (ctx )
224+ srv := & http.Server {
225+ Addr : registryAddr ,
226+ Handler : mcpRegistry .Handler (),
227+ }
228+ go func () {
229+ <- ctx .Done ()
230+ _ = srv .Shutdown (context .Background ())
231+ }()
232+ setupLog .Info ("starting MCP discovery registry server" , "addr" , registryAddr )
233+ if err := srv .ListenAndServe (); err != nil && ! errors .Is (err , http .ErrServerClosed ) {
234+ return err
235+ }
236+ return nil
237+ })); err != nil {
238+ setupLog .Error (err , "unable to add registry server to manager" )
239+ os .Exit (1 )
240+ }
241+ }
242+
243+ agentDeploymentReconciler := & controller.AgentDeploymentReconciler {
208244 Client : mgr .GetClient (),
209245 Scheme : mgr .GetScheme (),
210246 GPUResourceName : gpuResourceName ,
211247 CanaryController : canaryController ,
212- }).SetupWithManager (mgr ); err != nil {
248+ Registrar : mcpRegistrar ,
249+ }
250+ agentDeploymentReconciler .SetDeregister (func (ctx context.Context , ad * agentraxv1alpha1.AgentDeployment ) error {
251+ return mcpRegistrar .Deregister (ctx , ad )
252+ })
253+ if canaryController != nil {
254+ canaryController .Registrar = mcpRegistrar
255+ }
256+
257+ if err = agentDeploymentReconciler .SetupWithManager (mgr ); err != nil {
213258 setupLog .Error (err , "unable to create controller" , "controller" , "AgentDeployment" )
214259 os .Exit (1 )
215260 }
0 commit comments