@@ -873,6 +873,10 @@ func (r *VirtualMCPServerReconciler) SetupWithManager(mgr ctrl.Manager) error {
873873 Watches (& mcpv1alpha1.MCPServer {}, handler .EnqueueRequestsFromMapFunc (r .mapMCPServerToVirtualMCPServer )).
874874 Watches (& mcpv1alpha1.MCPExternalAuthConfig {}, handler .EnqueueRequestsFromMapFunc (r .mapExternalAuthConfigToVirtualMCPServer )).
875875 Watches (& mcpv1alpha1.MCPToolConfig {}, handler .EnqueueRequestsFromMapFunc (r .mapToolConfigToVirtualMCPServer )).
876+ Watches (
877+ & mcpv1alpha1.VirtualMCPCompositeToolDefinition {},
878+ handler .EnqueueRequestsFromMapFunc (r .mapCompositeToolDefinitionToVirtualMCPServer ),
879+ ).
876880 Complete (r )
877881}
878882
@@ -1085,3 +1089,53 @@ func (*VirtualMCPServerReconciler) vmcpReferencesExternalAuthConfig(
10851089
10861090 return false
10871091}
1092+
1093+ // mapCompositeToolDefinitionToVirtualMCPServer maps VirtualMCPCompositeToolDefinition changes to
1094+ // VirtualMCPServer reconciliation requests
1095+ func (r * VirtualMCPServerReconciler ) mapCompositeToolDefinitionToVirtualMCPServer (
1096+ ctx context.Context ,
1097+ obj client.Object ,
1098+ ) []reconcile.Request {
1099+ compositeToolDef , ok := obj .(* mcpv1alpha1.VirtualMCPCompositeToolDefinition )
1100+ if ! ok {
1101+ return nil
1102+ }
1103+
1104+ vmcpList := & mcpv1alpha1.VirtualMCPServerList {}
1105+ if err := r .List (ctx , vmcpList , client .InNamespace (compositeToolDef .Namespace )); err != nil {
1106+ log .FromContext (ctx ).Error (err , "Failed to list VirtualMCPServers for VirtualMCPCompositeToolDefinition watch" )
1107+ return nil
1108+ }
1109+
1110+ var requests []reconcile.Request
1111+ for _ , vmcp := range vmcpList .Items {
1112+ if r .vmcpReferencesCompositeToolDefinition (& vmcp , compositeToolDef .Name ) {
1113+ requests = append (requests , reconcile.Request {
1114+ NamespacedName : types.NamespacedName {
1115+ Name : vmcp .Name ,
1116+ Namespace : vmcp .Namespace ,
1117+ },
1118+ })
1119+ }
1120+ }
1121+
1122+ return requests
1123+ }
1124+
1125+ // vmcpReferencesCompositeToolDefinition checks if a VirtualMCPServer references the given VirtualMCPCompositeToolDefinition
1126+ func (* VirtualMCPServerReconciler ) vmcpReferencesCompositeToolDefinition (
1127+ vmcp * mcpv1alpha1.VirtualMCPServer ,
1128+ compositeToolDefName string ,
1129+ ) bool {
1130+ if len (vmcp .Spec .CompositeToolRefs ) == 0 {
1131+ return false
1132+ }
1133+
1134+ for _ , ref := range vmcp .Spec .CompositeToolRefs {
1135+ if ref .Name == compositeToolDefName {
1136+ return true
1137+ }
1138+ }
1139+
1140+ return false
1141+ }
0 commit comments