diff --git a/prdoc/pr_6588.prdoc b/prdoc/pr_6588.prdoc
new file mode 100644
index 0000000000000000000000000000000000000000..bf44b2ed37845736c58df75751a519e7004ee3f7
--- /dev/null
+++ b/prdoc/pr_6588.prdoc
@@ -0,0 +1,14 @@
+# Schema: Polkadot SDK PRDoc Schema (prdoc) v1.0.0
+# See doc at https://raw.githubusercontent.com/paritytech/polkadot-sdk/master/prdoc/schema_user.json
+
+title: "rpc server: fix subscription id_provider being reset to default one"
+
+doc:
+  - audience: Node Dev
+    description: |
+      The modification ensures that the id_provider variable is cloned instead of taken, which can help prevent issues related id provider being reset to the default.
+
+
+crates:
+  - name: sc-rpc-server
+    bump: patch
\ No newline at end of file
diff --git a/substrate/client/rpc-servers/src/lib.rs b/substrate/client/rpc-servers/src/lib.rs
index ca74c2371c257fbfd54784704452158061afa0ed..af31a81831cd1e967c7ab1f23d448c78c52f69dc 100644
--- a/substrate/client/rpc-servers/src/lib.rs
+++ b/substrate/client/rpc-servers/src/lib.rs
@@ -113,7 +113,7 @@ where
 		local_addrs.push(local_addr);
 		let cfg = cfg.clone();
 
-		let mut id_provider2 = id_provider.clone();
+		let id_provider2 = id_provider.clone();
 
 		tokio_handle.spawn(async move {
 			loop {
@@ -166,10 +166,9 @@ where
 					.set_http_middleware(http_middleware)
 					.set_message_buffer_capacity(max_buffer_capacity_per_connection)
 					.set_batch_request_config(batch_config)
-					.custom_tokio_runtime(cfg.tokio_handle.clone())
-					.set_id_provider(RandomStringIdProvider::new(16));
+					.custom_tokio_runtime(cfg.tokio_handle.clone());
 
-				if let Some(provider) = id_provider2.take() {
+				if let Some(provider) = id_provider2.clone() {
 					builder = builder.set_id_provider(provider);
 				} else {
 					builder = builder.set_id_provider(RandomStringIdProvider::new(16));