diff --git a/scripts/check_base_registry.py b/scripts/check_base_registry.py
deleted file mode 100755
index 663c6e0..0000000
--- a/scripts/check_base_registry.py
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/env python3
-
-import argparse
-import json
-import re
-
-parser = argparse.ArgumentParser()
-parser.add_argument("-b", "--base", default=None, required=True)
-parser.add_argument("-f", "--file", default=None, required=True)
-args = parser.parse_args()
-
-with open(args.file) as error_file:
-    error_data = error_file.readlines()
-
-    with open(args.base) as base_file:
-        base_json = json.load(base_file)
-        for message_name, message_data in base_json["Messages"].items():
-            message_id = (
-                base_json["RegistryPrefix"]
-                + "."
-                + base_json["RegistryVersion"]
-                + "."
-                + message_name
-            )
-            message_found = False
-            index = 0
-            for i, error in enumerate(error_data):
-                if message_id in error:
-                    message_found = True
-                    index = i
-                    break
-            if not message_found:
-                print("{} not found".format(message_id))
-                continue
-
-            error_info = error_data[index : index + 15]
-            error_str = " ".join(error_info)
-            error_str = re.sub(
-                "std::to_string\\(arg(\\d+)\\)", "arg\\1", error_str
-            )
-            error_str = re.sub('"\n\\s*"', "", error_str, re.MULTILINE)
-            error_str = re.sub(
-                '"\\s*\\+\\s*arg(\\d+)\\s*\\+\n?\\s*"',
-                "%\\1",
-                error_str,
-                re.MULTILINE,
-            )
-            if message_data["Message"] not in error_str:
-                print(
-                    "{}: error in Message: {}".format(
-                        message_id, message_data["Message"]
-                    )
-                )
-                print(error_str)
-
-            if message_data["MessageSeverity"] not in error_str:
-                print(
-                    "{}: error in MessageSeverity: {}".format(
-                        message_id, message_data["MessageSeverity"]
-                    )
-                )
-                print(error_str)
-
-            if message_data["Resolution"] not in error_str:
-                print(
-                    "{}: error in Resolution: {}".format(
-                        message_id, message_data["Resolution"]
-                    )
-                )
-                print(error_str)
