diff --git a/synapse/config/_base.py b/synapse/config/_base.py
index 14d3f7c1fed75eb11052db523e32a502744678a0..e588f829812ef87f2e76bf3f7e0a81ed166f1c2a 100644
--- a/synapse/config/_base.py
+++ b/synapse/config/_base.py
@@ -137,12 +137,42 @@ class Config(object):
             return file_stream.read()
 
     def invoke_all(self, name, *args, **kargs):
+        """Invoke all instance methods with the given name and arguments in the
+        class's MRO.
+
+        Args:
+            name (str): Name of function to invoke
+            *args
+            **kwargs
+
+        Returns:
+            list: The list of the return values from each method called
+        """
         results = []
         for cls in type(self).mro():
             if name in cls.__dict__:
                 results.append(getattr(cls, name)(self, *args, **kargs))
         return results
 
+    @classmethod
+    def invoke_all_static(cls, name, *args, **kargs):
+        """Invoke all static methods with the given name and arguments in the
+        class's MRO.
+
+        Args:
+            name (str): Name of function to invoke
+            *args
+            **kwargs
+
+        Returns:
+            list: The list of the return values from each method called
+        """
+        results = []
+        for c in cls.mro():
+            if name in c.__dict__:
+                results.append(getattr(c, name)(*args, **kargs))
+        return results
+
     def generate_config(
         self,
         config_dir_path,
@@ -241,7 +271,7 @@ class Config(object):
 
         # We can only invoke `add_arguments` on an actual object, but
         # `add_arguments` should be side effect free so this is probably fine.
-        cls().invoke_all("add_arguments", config_parser)
+        cls.invoke_all_static("add_arguments", config_parser)
 
         return config_parser
 
diff --git a/synapse/config/database.py b/synapse/config/database.py
index bcb2089dd727c3bf0aa878a7cc9a7d130ac922c9..746a6cd1f42a4f477876020f0355ddded4cdae27 100644
--- a/synapse/config/database.py
+++ b/synapse/config/database.py
@@ -69,7 +69,8 @@ class DatabaseConfig(Config):
             if database_path is not None:
                 self.database_config["args"]["database"] = database_path
 
-    def add_arguments(self, parser):
+    @staticmethod
+    def add_arguments(parser):
         db_group = parser.add_argument_group("database")
         db_group.add_argument(
             "-d",
diff --git a/synapse/config/logger.py b/synapse/config/logger.py
index 931aec41c09c911386ed26dce8f6e49a7ee96b77..52cf691227c70fade8c9d37e1f9dba8a5bf33ea2 100644
--- a/synapse/config/logger.py
+++ b/synapse/config/logger.py
@@ -103,7 +103,8 @@ class LoggingConfig(Config):
         if args.log_file is not None:
             self.log_file = args.log_file
 
-    def add_arguments(cls, parser):
+    @staticmethod
+    def add_arguments(parser):
         logging_group = parser.add_argument_group("logging")
         logging_group.add_argument(
             "-v",
diff --git a/synapse/config/registration.py b/synapse/config/registration.py
index 4a59e6ec90f65b6c222d0c540998ec120c1e0a72..ee5885251588c59775377c14849871164897e6d1 100644
--- a/synapse/config/registration.py
+++ b/synapse/config/registration.py
@@ -222,7 +222,8 @@ class RegistrationConfig(Config):
             % locals()
         )
 
-    def add_arguments(self, parser):
+    @staticmethod
+    def add_arguments(parser):
         reg_group = parser.add_argument_group("registration")
         reg_group.add_argument(
             "--enable-registration",
diff --git a/synapse/config/server.py b/synapse/config/server.py
index 2a74dea2ea6b1a00044d7d784ce4074d90bc92b5..080d0630bd96207ead17e421c9262807502552c9 100644
--- a/synapse/config/server.py
+++ b/synapse/config/server.py
@@ -639,7 +639,8 @@ class ServerConfig(Config):
         if args.print_pidfile is not None:
             self.print_pidfile = args.print_pidfile
 
-    def add_arguments(self, parser):
+    @staticmethod
+    def add_arguments(parser):
         server_group = parser.add_argument_group("server")
         server_group.add_argument(
             "-D",