diff --git a/src/mpsd_software_manager/mpsd_software.py b/src/mpsd_software_manager/mpsd_software.py
index 59504e71def83dcb27561f2690c036dc9afbfc8a..cf6aaac7a4c2deca168ddff8601a4c5f68511991 100755
--- a/src/mpsd_software_manager/mpsd_software.py
+++ b/src/mpsd_software_manager/mpsd_software.py
@@ -476,9 +476,10 @@ def get_available_package_sets(mpsd_release: str) -> List[str]:
 
     """
     logging.debug(f"get_available_package_sets({mpsd_release=})")
-    logging.info(f"Retrieving available package_sets for release {mpsd_release}")
     print_log = logging.getLogger("print")
 
+    logging.info(f"Retrieving available package_sets for release {mpsd_release}")
+
     # create temporary directory
     tmp_dir = tempfile.TemporaryDirectory(prefix="mpsd-software-available-")
     tmp_dir_path = Path(tmp_dir.name)
@@ -755,6 +756,28 @@ def clone_repo(
                 run(["git", "pull"], check=True, capture_output=capture_output)
 
 
+def get_available_releases(print_result: bool = False) -> List[str]:
+    """
+    Return available MPSD software release versions.
+
+    Example
+    -------
+    >>> get_available_releases()
+    ["dev-23a"]
+
+    Notes
+    -----
+    This needs to be updated when a new version (such as 23b) is released.
+    """
+    releases = ["dev-23a"]
+    print_log = logging.getLogger("print")
+    if print_result:
+        print_log.info("Available MPSD software releases:")
+        for release in releases:
+            print_log.info(f"    {release}")
+    return releases
+
+
 def get_release_info(mpsd_release: str, root_dir: Path) -> Tuple[str, str, List[str]]:
     """
     Get information about the specified release.
@@ -1303,13 +1326,22 @@ def main():
             )
 
         else:
-            # all commands except init need a release version
-            if cmd != "init":
+            # most commands except need a release version
+            if cmd in ["install", "prepare", "reinstall", "remove", "status"]:
                 subp.add_argument(
                     "release",
                     type=str,
                     help="Release version to prepare, install, reinstall or remove",
                 )
+            elif cmd in ["available"]:
+                # for some commands the release version is optional
+                subp.add_argument(
+                    "release",
+                    type=str,
+                    nargs="?",
+                    help="Release version to prepare, install, reinstall or remove",
+                )
+
             if cmd in ["install", "reinstall", "remove"]:
                 # "install" command needs additional documentation
                 package_set_help = (
@@ -1347,20 +1379,30 @@ def main():
         initialise_environment(Path(os.getcwd()))
         sys.exit(0)
 
-    # sanity check for common mistakes in command line arguments
-    if args.release.endswith("/"):  # happens easily with autocompletion
-        args.release = args.release.removesuffix("/")
-        logging.warning(f"Removed trailing slash from release: {args.release}")
+    # if a release version is specified:
+    if args.release:
+        # sanity check for common mistakes in command line arguments
+        if args.release.endswith("/"):  # happens easily with autocompletion
+            args.release = args.release.removesuffix("/")
+            logging.warning(f"Removed trailing slash from release: {args.release}")
 
     # root_dir is the place where this MPSD software instance has its root
     root_dir = get_root_dir()
 
-    # set up logging ( with file handler) for all actions (except init)
-    log_file = get_log_file_path(
-        args.release,
-        args.action,
-        root_dir,
-    )
+    # set up logging filename: we record activities that change the installation
+    if args.action in ["init", "install", "reinstall", "remove"]:
+        log_file = get_log_file_path(
+            args.release,
+            args.action,
+            root_dir,
+        )
+    # some commands do not write any log_files:
+    elif args.action in ["available", "status"]:
+        log_file = None
+    else:
+        # sanity check
+        raise NotImplementedError(f"Should never happen: unknown {args.action=}")
+
     set_up_logging(
         args.loglevel,
         log_file,
@@ -1380,7 +1422,11 @@ def main():
     elif args.action == "prepare":
         prepare_environment(args.release, root_dir)
     elif args.action == "available":
-        get_available_package_sets(args.release)
+        if args.release:
+            get_available_package_sets(args.release)
+        else:
+            get_available_releases(print_result=True)
+            sys.exit(0)
     else:
         message = (
             f"No known action found ({args.action=}). Should probably never happen."
diff --git a/tests/test_mpsd_software.py b/tests/test_mpsd_software.py
index ac72dac9ec5f2310296fe62206196c33c176abfe..982a0a9c1d39090ef4b8f1f5ec07726a3579631a 100644
--- a/tests/test_mpsd_software.py
+++ b/tests/test_mpsd_software.py
@@ -564,6 +564,14 @@ def test_get_root_dir(tmp_path):
             assert root_dir == sub_dir
 
 
+def test_get_available_releases():
+    res = mod.get_available_releases()
+    assert "dev-23a" in res
+    assert len(res) >= 1
+    for release in res:
+        assert isinstance(release, str)
+
+
 def test_interface(tmp_path):
     """Test other things (not implemented yet)."""
     pass