diff --git a/kind b/kind new file mode 100755 index 0000000..bc54f28 Binary files /dev/null and b/kind differ diff --git a/pkg/controller/mcpserver_controller.go b/pkg/controller/mcpserver_controller.go index 80788f0..4628bb8 100644 --- a/pkg/controller/mcpserver_controller.go +++ b/pkg/controller/mcpserver_controller.go @@ -207,8 +207,11 @@ func (r *MCPServerReconciler) validateMCPServer(server *kagentdevv1alpha1.MCPSer } // Check if required fields are present + // Allow empty image if command is npx or uvx (default images will be injected) if server.Spec.Deployment.Image == "" { - return fmt.Errorf("deployment.image is required") + if server.Spec.Deployment.Cmd != "npx" && server.Spec.Deployment.Cmd != "uvx" { + return fmt.Errorf("deployment.image is required when command is not 'npx' or 'uvx'") + } } // Additional validation could be added here diff --git a/pkg/controller/transportadapter/transportadapter_translator.go b/pkg/controller/transportadapter/transportadapter_translator.go index bde5f59..76c67bb 100644 --- a/pkg/controller/transportadapter/transportadapter_translator.go +++ b/pkg/controller/transportadapter/transportadapter_translator.go @@ -85,9 +85,11 @@ func (t *transportAdapterTranslator) translateTransportAdapterDeployment( image := server.Spec.Deployment.Image if image == "" && server.Spec.Deployment.Cmd == "uvx" { image = "ghcr.io/astral-sh/uv:debian" + klog.Infof("MCPServer %s: Injected default image for uvx command: %s", server.Name, image) } if image == "" && server.Spec.Deployment.Cmd == "npx" { image = "node:24-alpine3.21" + klog.Infof("MCPServer %s: Injected default image for npx command: %s", server.Name, image) } if image == "" { return nil, fmt.Errorf("image must be specified for MCPServer %s or the command must be 'uvx' or 'npx'", server.Name)