diff --git a/src/admin/query/mod.rs b/src/admin/query/mod.rs
index 7fe6a2a249398f528d6a593d4c6662ba3dba882c..2e5b0bb805ca81fba176182111d426bccd705c21 100644
--- a/src/admin/query/mod.rs
+++ b/src/admin/query/mod.rs
@@ -136,6 +136,11 @@ pub(crate) enum RoomAlias {
 #[cfg_attr(test, derive(Debug))]
 #[derive(Subcommand)]
 pub(crate) enum RoomStateCache {
+	ServerInRoom {
+		server: Box<ServerName>,
+		room_id: Box<RoomId>,
+	},
+
 	RoomServers {
 		room_id: Box<RoomId>,
 	},
diff --git a/src/admin/query/room_state_cache.rs b/src/admin/query/room_state_cache.rs
index 5b8ff8bb37888764e02b4a6a3b21190a43359eaa..c062497ed9546fb2090d9bb8438ea7df6bf93162 100644
--- a/src/admin/query/room_state_cache.rs
+++ b/src/admin/query/room_state_cache.rs
@@ -5,6 +5,22 @@
 
 pub(crate) async fn room_state_cache(subcommand: RoomStateCache) -> Result<RoomMessageEventContent> {
 	match subcommand {
+		RoomStateCache::ServerInRoom {
+			server,
+			room_id,
+		} => {
+			let timer = tokio::time::Instant::now();
+			let result = services()
+				.rooms
+				.state_cache
+				.server_in_room(&server, &room_id);
+			let query_time = timer.elapsed();
+
+			Ok(RoomMessageEventContent::text_html(
+				format!("Query completed in {query_time:?}:\n\n```\n{result:?}```"),
+				format!("<p>Query completed in {query_time:?}:</p>\n<pre><code>{result:?}\n</code></pre>"),
+			))
+		},
 		RoomStateCache::RoomServers {
 			room_id,
 		} => {