diff --git a/cli/pkg/kctrl/cmd/package/repository/add_or_update.go b/cli/pkg/kctrl/cmd/package/repository/add_or_update.go
index 1c778d4b3a..a7c92166a2 100644
--- a/cli/pkg/kctrl/cmd/package/repository/add_or_update.go
+++ b/cli/pkg/kctrl/cmd/package/repository/add_or_update.go
@@ -35,6 +35,7 @@ type AddOrUpdateOptions struct {
 	SecureNamespaceFlags cmdcore.SecureNamespaceFlags
 	Name                 string
 	URL                  string
+	SemverTagConstraints string
 	CreateNamespace      bool
 
 	DryRun bool
@@ -76,6 +77,7 @@ func NewAddCmd(o *AddOrUpdateOptions, flagsFactory cmdcore.FlagsFactory) *cobra.
 
 	// TODO consider how to support other repository types
 	cmd.Flags().StringVar(&o.URL, "url", "", "OCI registry url for package repository bundle (required)")
+	cmd.Flags().StringVar(&o.SemverTagConstraints, "semver-tag-constraints", "", "Mention tag/semver constraint when tag is not present in URL separated by ':'")
 	cmd.Flags().BoolVar(&o.DryRun, "dry-run", false, "Print YAML for resources being applied to the cluster without applying them, optional")
 
 	cmd.Flags().BoolVar(&o.CreateNamespace, "create-namespace", false, "Create the package repository namespace if not present (default false)")
@@ -116,6 +118,7 @@ func NewUpdateCmd(o *AddOrUpdateOptions, flagsFactory cmdcore.FlagsFactory) *cob
 	}
 
 	cmd.Flags().StringVarP(&o.URL, "url", "", "", "OCI registry url for package repository bundle (required)")
+	cmd.Flags().StringVarP(&o.SemverTagConstraints, "semver-tag-constraints", "", "", "Mention tag/semver constraint when tag is not present in URL separated by ':'")
 
 	o.WaitFlags.Set(cmd, flagsFactory, &cmdcore.WaitFlagsOpts{
 		AllowDisableWait: true,
@@ -268,7 +271,9 @@ func (o *AddOrUpdateOptions) updateExistingPackageRepository(pkgr *kcpkg.Package
 
 	if tag == "" {
 		pkgr.Spec.Fetch.ImgpkgBundle.TagSelection = &versions.VersionSelection{
-			Semver: &versions.VersionSelectionSemver{},
+			Semver: &versions.VersionSelectionSemver{
+				Constraints: o.SemverTagConstraints,
+			},
 		}
 	}
 
@@ -325,7 +330,9 @@ func (o AddOrUpdateOptions) dryRun() error {
 
 	if tag == "" {
 		packageRepo.Spec.Fetch.ImgpkgBundle.TagSelection = &versions.VersionSelection{
-			Semver: &versions.VersionSelectionSemver{},
+			Semver: &versions.VersionSelectionSemver{
+				Constraints: o.SemverTagConstraints,
+			},
 		}
 	}
 
diff --git a/cli/test/e2e/package_repo_dry_run_test.go b/cli/test/e2e/package_repo_dry_run_test.go
index e8f53777b1..757b28ce98 100644
--- a/cli/test/e2e/package_repo_dry_run_test.go
+++ b/cli/test/e2e/package_repo_dry_run_test.go
@@ -26,8 +26,30 @@ status:
   conditions: null
   friendlyDescription: ""
   observedGeneration: 0`
+		semverExpectedOutput := `apiVersion: packaging.carvel.dev/v1alpha1
+kind: PackageRepository
+metadata:
+  creationTimestamp: null
+  name: test-repo
+  namespace: kctrl-test
+spec:
+  fetch:
+    imgpkgBundle:
+      image: registry.carvel.dev/project/repo
+      tagSelection:
+        semver:
+          constraints: 1.0.0
+status:
+  conditions: null
+  friendlyDescription: ""
+  observedGeneration: 0
+`
 
-		output := kappCtrl.Run([]string{"package", "repo", "add", "-r", "test-repo", "--url", "registry.carvel.dev/project/repo:1.0.0", "--dry-run"})
+		output := kappCtrl.Run([]string{"package", "repo", "add", "-r", "test-repo", "--url",
+			"registry.carvel.dev/project/repo:1.0.0", "--semver-tag-constraints", "1.0.0", "--dry-run"})
+		semverOutput := kappCtrl.Run([]string{"package", "repo", "add", "-r", "test-repo", "--url",
+			"registry.carvel.dev/project/repo", "--semver-tag-constraints", "1.0.0", "--dry-run"})
 		require.Contains(t, output, expectedOutput)
+		require.Contains(t, semverOutput, semverExpectedOutput)
 	})
 }