diff --git a/lib/gat/gatcaddyfile/handler.go b/lib/gat/gatcaddyfile/handler.go
index 00c8aaa154d18da7210181d31b3248a136701ec1..49a2cbcd294828bfb7148d11361f3bb085058dc7 100644
--- a/lib/gat/gatcaddyfile/handler.go
+++ b/lib/gat/gatcaddyfile/handler.go
@@ -162,6 +162,7 @@ func init() {
 					"provider",
 					warnings,
 				),
+				ServerMaxConnections: 20,
 			},
 		}
 
@@ -200,6 +201,26 @@ func init() {
 						return nil, d.WrapErr(err)
 					}
 					module.ReconcilePeriod = caddy.Duration(val)
+				case "max_connections":
+					if !d.NextArg() {
+						return nil, d.ArgErr()
+					}
+
+					val, err := strconv.Atoi(d.Val())
+					if err != nil {
+						return nil, d.WrapErr(err)
+					}
+					module.ServerMaxConnections = val
+				case "min_connections":
+					if !d.NextArg() {
+						return nil, d.ArgErr()
+					}
+
+					val, err := strconv.Atoi(d.Val())
+					if err != nil {
+						return nil, d.WrapErr(err)
+					}
+					module.ServerMinConnections = val
 				case "discoverer":
 					if !d.NextArg() {
 						return nil, d.ArgErr()
diff --git a/lib/gat/handlers/discovery/config.go b/lib/gat/handlers/discovery/config.go
index 056fa5a5c697bb953ac567aab093818a6b5b8c65..bf61b4d33deff52e76cff966ad260ee77f442d1a 100644
--- a/lib/gat/handlers/discovery/config.go
+++ b/lib/gat/handlers/discovery/config.go
@@ -19,5 +19,8 @@ type Config struct {
 	ServerSSLMode bouncer.SSLMode `json:"server_ssl_mode,omitempty"`
 	ServerSSL     json.RawMessage `json:"server_ssl,omitempty" caddy:"namespace=pggat.ssl.clients inline_key=provider"`
 
+	ServerMinConnections int `json:"server_min_connections,omitempty"`
+	ServerMaxConnections int `json:"server_max_connections,omitempty"`
+
 	ServerStartupParameters map[string]string `json:"server_startup_parameters,omitempty"`
 }
diff --git a/lib/gat/handlers/discovery/module.go b/lib/gat/handlers/discovery/module.go
index dfd4033f5aecbee923184e9f71c364d11535ec3d..edbe3d392b0f28448d84b7c12733b0c061321a42 100644
--- a/lib/gat/handlers/discovery/module.go
+++ b/lib/gat/handlers/discovery/module.go
@@ -228,7 +228,9 @@ func (T *Module) addPrimaryNode(user User, database string, primary Node) {
 			SSLConfig:   T.sslConfig,
 			Parameters:  T.serverStartupParameters,
 		},
-		Priority: primary.Priority,
+		Priority:       primary.Priority,
+		MinConnections: T.ServerMinConnections,
+		MaxConnections: T.ServerMaxConnections,
 	}
 	p.pool.AddRecipe("primary", &d)
 }
@@ -252,7 +254,9 @@ func (T *Module) addReplicaNodes(user User, database string, replicas map[string
 					SSLConfig:   T.sslConfig,
 					Parameters:  T.serverStartupParameters,
 				},
-				Priority: replica.Priority,
+				Priority:       replica.Priority,
+				MinConnections: T.ServerMinConnections,
+				MaxConnections: T.ServerMaxConnections,
 			}
 			rp.AddReplicaRecipe(id, &d)
 		}
@@ -271,7 +275,9 @@ func (T *Module) addReplicaNodes(user User, database string, replicas map[string
 				SSLConfig:   T.sslConfig,
 				Parameters:  T.serverStartupParameters,
 			},
-			Priority: replica.Priority,
+			Priority:       replica.Priority,
+			MinConnections: T.ServerMinConnections,
+			MaxConnections: T.ServerMaxConnections,
 		}
 		rp.pool.AddRecipe(id, &d)
 	}
@@ -308,7 +314,9 @@ func (T *Module) addReplicaNode(user User, database string, id string, replica N
 			SSLConfig:   T.sslConfig,
 			Parameters:  T.serverStartupParameters,
 		},
-		Priority: replica.Priority,
+		Priority:       replica.Priority,
+		MinConnections: T.ServerMinConnections,
+		MaxConnections: T.ServerMaxConnections,
 	}
 
 	if rp, ok := p.pool.(pool.ReplicaPool); ok {