diff --git a/mrhlpr/mr.py b/mrhlpr/mr.py
index 6af25ea861a15139ffdc1ed3705388841382e41a..276f592ecda09459e04609a8d92e2ec15075718f 100644
--- a/mrhlpr/mr.py
+++ b/mrhlpr/mr.py
@@ -130,7 +130,9 @@ def get_status(
     )
 
 
-def get_pipeline_metadata(mr_id, no_cache: bool, origin: gitlab.GitLabOrigin) -> PipelineMetadata:
+def get_pipeline_metadata(
+    mr_id: int, no_cache: bool, origin: gitlab.GitLabOrigin
+) -> PipelineMetadata:
     # Get the latest pipeline (without cache so we don't miss newer ones)
     url_mr = "/projects/{}/merge_requests/{}".format(origin.api_project_id, mr_id)
     api = gitlab.download_json(origin, url_mr, no_cache=True)
@@ -447,7 +449,7 @@ def commits_are_signed(commits: list[str]) -> bool:
 
 def run_git_filter_branch(
     script: str, from_ref: str, mr_id: Optional[int] = None, label: Optional[str] = None
-):
+) -> None:
     script = os.path.realpath(os.path.realpath(__file__) + f"/../data/{script}")
     env = os.environ.copy()
     env["FILTER_BRANCH_SQUELCH_WARNING"] = "1"
diff --git a/mrtest/frontend.py b/mrtest/frontend.py
index a523b937ecfb0e017cfeb3e7c699b97b9995f8f5..04d87dc6d02ca44614453137d0601e91ae855f65 100644
--- a/mrtest/frontend.py
+++ b/mrtest/frontend.py
@@ -18,7 +18,7 @@ except ImportError:
     pass
 
 
-def arguments_add(sub) -> None:
+def arguments_add(sub: argparse._SubParsersAction) -> None:
     """:param sub: argparser's subparser"""
     parser = sub.add_parser("add", help="install packages from an MR")
     parser.add_argument(
@@ -27,7 +27,7 @@ def arguments_add(sub) -> None:
     parser.add_argument("mr_id", type=int, help="merge request ID")
 
 
-def arguments_upgrade(sub) -> None:
+def arguments_upgrade(sub: argparse._SubParsersAction) -> None:
     """:param sub: argparser's subparser"""
     parser = sub.add_parser("upgrade", help="upgrade to packages from an MR")
     parser.add_argument(
@@ -42,7 +42,7 @@ def arguments_upgrade(sub) -> None:
     parser.add_argument("mr_id", type=int, help="merge request ID")
 
 
-def arguments_zap(sub) -> None:
+def arguments_zap(sub: argparse._SubParsersAction) -> None:
     """:param sub: argparser's subparser"""
     sub.add_parser("zap", help="uninstall previously added packages")
 
diff --git a/mrtest/select_package.py b/mrtest/select_package.py
index 8a290ec3ba24f001c33c47cff7c1087f08018bb8..fa18b28bbadef6b88f9e5d69cb149101341c946b 100644
--- a/mrtest/select_package.py
+++ b/mrtest/select_package.py
@@ -8,7 +8,7 @@ import zipfile
 import mrtest.apk_installed
 
 
-def get_apks_in_zip(zip_path) -> list[str]:
+def get_apks_in_zip(zip_path: str) -> list[str]:
     """
     :param zip_path: downloaded artifacts zip containing the apks
     :returns: list of paths inside the zip file like:
@@ -92,7 +92,7 @@ def show_commands() -> None:
     print("Toggling multiple packages in one command is possible (e.g. 2 3 4 10-15 20)")
 
 
-def toggle_package(selection, apks: list[str], ret) -> list[str]:
+def toggle_package(selection: int | str, apks: list[str], ret: list[str]) -> list[str]:
     """Toggle the package based on the user action.
     :param selection: user input, single integer
     :param apks: list of packages available for install
@@ -109,7 +109,7 @@ def toggle_package(selection, apks: list[str], ret) -> list[str]:
     return ret
 
 
-def toggle_packages(action, apks: list[str], ret: list[str]) -> list[str]:
+def toggle_packages(action: str, apks: list[str], ret: list[str]) -> list[str]:
     """Toggle multiple packages based on the user action.
     :param action: user input, multiple integers or range
     :param apks: list of packages available for install