diff --git a/src/config.rs b/src/config.rs
index 155704b79b7207798ee198af534da4f7ac7781a1..a6ab63e336006e735fedfef93b484a3d11ce1923 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -1,5 +1,6 @@
 use std::{
     collections::BTreeMap,
+    fmt,
     net::{IpAddr, Ipv4Addr},
 };
 
@@ -97,6 +98,97 @@ pub fn warn_deprecated(&self) {
     }
 }
 
+impl fmt::Display for Config {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        // Prepare a list of config values to show
+        let lines = [
+            ("Server name", self.server_name.host()),
+            ("Database backend", &self.database_backend),
+            ("Database path", &self.database_path),
+            (
+                "Database cache capacity (MB)",
+                &self.db_cache_capacity_mb.to_string(),
+            ),
+            (
+                "Cache capacity modifier",
+                &self.conduit_cache_capacity_modifier.to_string(),
+            ),
+            #[cfg(feature = "rocksdb")]
+            (
+                "Maximum open files for RocksDB",
+                &self.rocksdb_max_open_files.to_string(),
+            ),
+            ("PDU cache capacity", &self.pdu_cache_capacity.to_string()),
+            (
+                "Cleanup interval in seconds",
+                &self.cleanup_second_interval.to_string(),
+            ),
+            ("Maximum request size", &self.max_request_size.to_string()),
+            (
+                "Maximum concurrent requests",
+                &self.max_concurrent_requests.to_string(),
+            ),
+            ("Allow registration", &self.allow_registration.to_string()),
+            ("Allow encryption", &self.allow_encryption.to_string()),
+            ("Allow federation", &self.allow_federation.to_string()),
+            ("Allow room creation", &self.allow_room_creation.to_string()),
+            (
+                "JWT secret",
+                match self.jwt_secret {
+                    Some(_) => "set",
+                    None => "not set",
+                },
+            ),
+            ("Trusted servers", {
+                let mut lst = vec![];
+                for server in &self.trusted_servers {
+                    lst.push(server.host());
+                }
+                &lst.join(", ")
+            }),
+            (
+                "TURN username",
+                if self.turn_username.is_empty() {
+                    "not set"
+                } else {
+                    &self.turn_username
+                },
+            ),
+            ("TURN password", {
+                if self.turn_password.is_empty() {
+                    "not set"
+                } else {
+                    "set"
+                }
+            }),
+            ("TURN secret", {
+                if self.turn_secret.is_empty() {
+                    "not set"
+                } else {
+                    "set"
+                }
+            }),
+            ("Turn TTL", &self.turn_ttl.to_string()),
+            ("Turn URIs", {
+                let mut lst = vec![];
+                for item in self.turn_uris.to_vec().into_iter().enumerate() {
+                    let (_, uri): (usize, String) = item;
+                    lst.push(uri);
+                }
+                &lst.join(", ")
+            }),
+        ];
+
+        let mut msg: String = "Active config values:\n\n".to_string();
+
+        for line in lines.into_iter().enumerate() {
+            msg += &format!("{}: {}\n", line.1 .0, line.1 .1);
+        }
+
+        write!(f, "{}", msg)
+    }
+}
+
 fn false_fn() -> bool {
     false
 }
diff --git a/src/database/admin.rs b/src/database/admin.rs
index f9d4f425540856cc16e6820b1e540145fb65b595..f2e66e4367342c129d840382e4602b9c87873379 100644
--- a/src/database/admin.rs
+++ b/src/database/admin.rs
@@ -259,6 +259,9 @@ enum AdminCommand {
 
     /// Print database memory usage statistics
     DatabaseMemoryUsage,
+
+    /// Show configuration values
+    ShowConfig,
 }
 
 fn process_admin_command(
@@ -428,6 +431,10 @@ fn process_admin_command(
                 e
             )),
         },
+        AdminCommand::ShowConfig => {
+            // Construct and send the response
+            RoomMessageEventContent::text_plain(format!("{}", db.globals.config))
+        }
     };
 
     Ok(reply_message_content)
diff --git a/src/database/globals.rs b/src/database/globals.rs
index 7bc300d2665d935200fb184328334d50e2aaed32..9a9163be24f4a2312f972417932f060e13182b6c 100644
--- a/src/database/globals.rs
+++ b/src/database/globals.rs
@@ -35,7 +35,7 @@ pub struct Globals {
     pub actual_destination_cache: Arc<RwLock<WellKnownMap>>, // actual_destination, host
     pub tls_name_override: Arc<RwLock<TlsNameMap>>,
     pub(super) globals: Arc<dyn Tree>,
-    config: Config,
+    pub config: Config,
     keypair: Arc<ruma::signatures::Ed25519KeyPair>,
     dns_resolver: TokioAsyncResolver,
     jwt_decoding_key: Option<jsonwebtoken::DecodingKey<'static>>,