diff --git a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/ServerSymbolVisitor.java b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/ServerSymbolVisitor.java
index 746c4338273..5062fee1014 100644
--- a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/ServerSymbolVisitor.java
+++ b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/ServerSymbolVisitor.java
@@ -106,6 +106,8 @@ public Symbol serviceShape(ServiceShape shape) {
                 intermediate.toBuilder().name(serviceName + "Operations").build());
         builder.putProperty("handler",
                 intermediate.toBuilder().name(serviceName + "Handler").build());
+        builder.putProperty("mux",
+                intermediate.toBuilder().name(serviceName + "Mux").build());
         return builder.build();
     }
 
diff --git a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpBindingProtocolGenerator.java b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpBindingProtocolGenerator.java
index 0f2761ab942..73fa3b4f81e 100644
--- a/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpBindingProtocolGenerator.java
+++ b/smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpBindingProtocolGenerator.java
@@ -296,10 +296,13 @@ private void generateServiceMux(GenerationContext context) {
         writer.addImport("httpbinding", null, TypeScriptDependency.SERVER_COMMON);
 
         Symbol serviceSymbol = context.getSymbolProvider().toSymbol(context.getService());
+        Symbol operationsSymbol = serviceSymbol.expectProperty("operations", Symbol.class);
+        Symbol muxSymbol = serviceSymbol.expectProperty("mux", Symbol.class);
 
-        writer.openBlock("const mux = new httpbinding.HttpBindingMux<$S, keyof $T<Context>>([", "]);",
+        writer.openBlock("export const $T = new httpbinding.HttpBindingMux<$S, $T>([", "]);",
+                muxSymbol,
                 context.getService().getId().getName(),
-                serviceSymbol,
+                operationsSymbol,
                 () -> {
                     for (OperationShape operation : topDownIndex.getContainedOperations(context.getService())) {
                         OptionalUtils.ifPresentOrElse(
@@ -392,8 +395,11 @@ public void generateServiceHandlerFactory(GenerationContext context) {
 
         Symbol serviceSymbol = symbolProvider.toSymbol(context.getService());
         Symbol handlerSymbol = serviceSymbol.expectProperty("handler", Symbol.class);
+        Symbol muxSymbol = serviceSymbol.expectProperty("mux", Symbol.class);
         Symbol operationsSymbol = serviceSymbol.expectProperty("operations", Symbol.class);
 
+        generateServiceMux(context);
+
         if (context.getSettings().isDisableDefaultValidation()) {
             writer.write("export const get$L = <Context>(service: $T<Context>, "
                             + "customizer: __ValidationCustomizer<$T>): "
@@ -406,7 +412,6 @@ public void generateServiceHandlerFactory(GenerationContext context) {
         }
         writer.indent();
 
-        generateServiceMux(context);
         writer.addImport("ServiceException", "__ServiceException", TypeScriptDependency.SERVER_COMMON);
         writer.openBlock("const serFn: (op: $1T) => __OperationSerializer<$2T<Context>, $1T, __ServiceException> = "
                        + "(op) => {", "};", operationsSymbol, serviceSymbol, () -> {
@@ -430,7 +435,8 @@ public void generateServiceHandlerFactory(GenerationContext context) {
             );
         }
 
-        writer.write("return new $T(service, mux, serFn, serializeFrameworkException, customizer);", handlerSymbol);
+        writer.write("return new $T(service, $T, serFn, serializeFrameworkException, customizer);",
+            handlerSymbol, muxSymbol);
 
         writer.dedent().write("}");
     }