diff --git a/build_helper/__init__.py b/build_helper/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/build_helper/__init__.py
diff --git a/configs.py b/configs.py
new file mode 100755
index 0000000..3b5bc7d
--- /dev/null
+++ b/configs.py
@@ -0,0 +1,76 @@
+#!/usr/bin/env python
+"""
+Script for querying specific build configurations of TF-M.
+Can list available build configurations, and can give environment
+variables to build a specific build configuration using run-build.sh
+"""
+
+import argparse
+import os
+import sys
+
+from tfm_ci_pylib.tfm_build_manager import TFM_Build_Manager
+from build_helper.build_helper_configs import config_full
+from build_helper.build_helper_configs import _builtin_configs
+
+
+__copyright__ = """
+/*
+ * Copyright (c) 2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+ """
+
+
+def get_build_manager(group=None):
+    """Get a TFM_Build_Manager instance, silencing stdout"""
+    config = config_full
+    if group:
+        config = _builtin_configs[group]
+    _dir = os.getcwd()
+    # Block default stdout from __init__
+    sys.stdout = open(os.devnull, "w")
+    build_manager = TFM_Build_Manager(_dir, _dir, config)
+    # Allow stdout again
+    sys.stdout = sys.__stdout__
+    return build_manager
+
+
+def list_configs(group):
+    """Lists available configurations"""
+    build_manager = get_build_manager(group)
+    build_manager.print_config()
+
+
+def print_config_environment(config, group=None):
+    """Prints particular configuration environment variables"""
+    build_manager = get_build_manager(group)
+    build_manager.print_config_environment(config)
+
+
+if __name__ == "__main__":
+    PARSER = argparse.ArgumentParser(description="Extract build configurations.")
+    PARSER.add_argument(
+        "config",
+        default=None,
+        nargs="?",
+        help="Configuration to print environment variables for. "
+        "Then run-build.sh can be run directly with these set. "
+        "If not specified, the available configurations are printed",
+    )
+    PARSER.add_argument(
+        "-g",
+        "--group",
+        default=None,
+        help="Only list configurations under a certain group. ",
+        choices=list(_builtin_configs.keys()),
+    )
+    ARGS = PARSER.parse_args()
+
+    # By default print available configs
+    if not ARGS.config:
+        list_configs(ARGS.group)
+    else:
+        print_config_environment(ARGS.config, group=ARGS.group)
diff --git a/tfm_ci_pylib/tfm_build_manager.py b/tfm_ci_pylib/tfm_build_manager.py
index 0849a4b..8eac0a4 100644
--- a/tfm_ci_pylib/tfm_build_manager.py
+++ b/tfm_ci_pylib/tfm_build_manager.py
@@ -70,6 +70,38 @@
 
         super(TFM_Build_Manager, self).__init__(name="TFM_Build_Manager")
 
+    def print_config(self):
+        """Prints a list of available build configurations"""
+        print("\n".join(list(self._tbm_build_cfg.keys())))
+
+    def print_config_environment(self, config):
+        """
+        For a given build configuration from output of print_config
+        method, print environment variables to build.
+        """
+        if config not in self._tbm_build_cfg:
+            print("Error: no such config {}".format(config), file=sys.stderr)
+            sys.exit(1)
+        config_details = self._tbm_build_cfg[config]
+        argument_list = [
+            "TARGET_PLATFORM={}",
+            "COMPILER={}",
+            "PROJ_CONFIG={}",
+            "CMAKE_BUILD_TYPE={}",
+            "BL2={}",
+        ]
+        print(
+            "\n".join(argument_list)
+            .format(
+                config_details.target_platform,
+                config_details.compiler,
+                config_details.proj_config,
+                config_details.cmake_build_type,
+                config_details.with_mcuboot,
+            )
+            .strip()
+        )
+
     def pre_eval(self):
         """ Tests that need to be run in set-up state """
         return True
