diff --git a/Cargo.lock b/Cargo.lock
index 781dba880cbe5c735bdf0b2c1087a81be60ff04b..e50baf6e6687ff730c271146462ab8a57a7361e9 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -16709,6 +16709,7 @@ name = "sc-chain-spec"
 version = "28.0.0"
 dependencies = [
  "array-bytes",
+ "clap 4.5.3",
  "docify",
  "log",
  "memmap2 0.9.3",
diff --git a/prdoc/pr_4542.prdoc b/prdoc/pr_4542.prdoc
new file mode 100644
index 0000000000000000000000000000000000000000..faaf9dc2c288551ec84b7bcd739158dd817341e6
--- /dev/null
+++ b/prdoc/pr_4542.prdoc
@@ -0,0 +1,13 @@
+title: "Adds ability to specify chain type in chain-spec-builder"
+
+doc:
+  - audience: Node Operator
+    description: |
+      Currently, `chain-spec-builder` only creates a spec with Live chain type. This PR adds the 
+      ability to specify it while keeping the same default.
+
+crates:
+  - name: staging-chain-spec-builder
+    bump: patch
+  - name: sc-chain-spec
+    bump: patch
diff --git a/substrate/bin/utils/chain-spec-builder/Cargo.toml b/substrate/bin/utils/chain-spec-builder/Cargo.toml
index cc9aa402fd1a8b4ede854aaedc39db41923fcecc..de06bbb3fff698e7bb700b19499e4fce30715df8 100644
--- a/substrate/bin/utils/chain-spec-builder/Cargo.toml
+++ b/substrate/bin/utils/chain-spec-builder/Cargo.toml
@@ -26,6 +26,6 @@ crate-type = ["rlib"]
 [dependencies]
 clap = { version = "4.5.3", features = ["derive"] }
 log = { workspace = true, default-features = true }
-sc-chain-spec = { path = "../../../client/chain-spec" }
+sc-chain-spec = { path = "../../../client/chain-spec", features = ["clap"] }
 serde_json = { workspace = true, default-features = true }
 sp-tracing = { path = "../../../primitives/tracing" }
diff --git a/substrate/bin/utils/chain-spec-builder/src/lib.rs b/substrate/bin/utils/chain-spec-builder/src/lib.rs
index 167704d3633d07c83964b087e147b76447a9a5a1..0f7c003fc8c2da2709076ee3c6f517d9a2ae8beb 100644
--- a/substrate/bin/utils/chain-spec-builder/src/lib.rs
+++ b/substrate/bin/utils/chain-spec-builder/src/lib.rs
@@ -120,7 +120,7 @@
 use std::{fs, path::PathBuf};
 
 use clap::{Parser, Subcommand};
-use sc_chain_spec::{GenericChainSpec, GenesisConfigBuilderRuntimeCaller};
+use sc_chain_spec::{ChainType, GenericChainSpec, GenesisConfigBuilderRuntimeCaller};
 use serde_json::Value;
 
 /// A utility to easily create a chain spec definition.
@@ -154,6 +154,9 @@ pub struct CreateCmd {
 	/// The chain id.
 	#[arg(long, short = 'i', default_value = "custom")]
 	chain_id: String,
+	/// The chain type.
+	#[arg(value_enum, short = 't', default_value = "live")]
+	chain_type: ChainType,
 	/// The path to runtime wasm blob.
 	#[arg(long, short)]
 	runtime_wasm_path: PathBuf,
@@ -261,10 +264,12 @@ pub fn generate_chain_spec_for_runtime(cmd: &CreateCmd) -> Result<String, String
 	let code = fs::read(cmd.runtime_wasm_path.as_path())
 		.map_err(|e| format!("wasm blob shall be readable {e}"))?;
 
+	let chain_type = &cmd.chain_type;
+
 	let builder = GenericChainSpec::<()>::builder(&code[..], Default::default())
 		.with_name(&cmd.chain_name[..])
 		.with_id(&cmd.chain_id[..])
-		.with_chain_type(sc_chain_spec::ChainType::Live);
+		.with_chain_type(chain_type.clone());
 
 	let builder = match cmd.action {
 		GenesisBuildAction::NamedPreset(NamedPresetCmd { ref preset_name }) =>
diff --git a/substrate/client/chain-spec/Cargo.toml b/substrate/client/chain-spec/Cargo.toml
index 9028a2c49eeac68929589e920544a174fd6abfd4..5b411b642a0e3aa410517621d99f4ab3cd245a74 100644
--- a/substrate/client/chain-spec/Cargo.toml
+++ b/substrate/client/chain-spec/Cargo.toml
@@ -16,6 +16,7 @@ workspace = true
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
+clap = { version = "4.5.3", features = ["derive"], optional = true }
 codec = { package = "parity-scale-codec", version = "3.6.12", default-features = false, features = ["derive"] }
 memmap2 = "0.9.3"
 serde = { features = ["derive"], workspace = true, default-features = true }
diff --git a/substrate/client/chain-spec/src/lib.rs b/substrate/client/chain-spec/src/lib.rs
index 066a0ab9e2afeb5b601a276b705cdff7f4699f9d..653c3c618b772a5b8044e7e21746a8d652897407 100644
--- a/substrate/client/chain-spec/src/lib.rs
+++ b/substrate/client/chain-spec/src/lib.rs
@@ -352,6 +352,7 @@ use sp_runtime::BuildStorage;
 /// This can be used by tools to determine the type of a chain for displaying
 /// additional information or enabling additional features.
 #[derive(serde::Serialize, serde::Deserialize, Debug, PartialEq, Clone)]
+#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
 pub enum ChainType {
 	/// A development chain that runs mainly on one node.
 	Development,
@@ -360,6 +361,7 @@ pub enum ChainType {
 	/// A live chain.
 	Live,
 	/// Some custom chain type.
+	#[cfg_attr(feature = "clap", clap(skip))]
 	Custom(String),
 }