diff --git a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Modbus.Contracts/ModbusTransportMode.cs b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Modbus.Contracts/ModbusTransportMode.cs
new file mode 100644
index 00000000..6d7cfe0d
--- /dev/null
+++ b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Modbus.Contracts/ModbusTransportMode.cs
@@ -0,0 +1,17 @@
+namespace ZB.MOM.WW.OtOpcUa.Driver.Modbus;
+
+///
+/// Wire transport for a Modbus driver instance. = Modbus/TCP (MBAP + TxId);
+/// = RTU framing (address + CRC-16, no MBAP) tunnelled over a socket to
+/// a serial→Ethernet gateway. Default — existing configs omit the field.
+/// A direct-serial Rtu member is intentionally NOT reserved here (descoped 2026-07-15);
+/// do not number-squat it.
+///
+public enum ModbusTransportMode
+{
+ /// Modbus/TCP — 7-byte MBAP header + transaction id (the historical default).
+ Tcp,
+
+ /// RTU framing ([addr][PDU][CRC-16]) tunnelled over a socket to a serial→Ethernet gateway.
+ RtuOverTcp,
+}
diff --git a/tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Modbus.Tests/ModbusTransportModeTests.cs b/tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Modbus.Tests/ModbusTransportModeTests.cs
new file mode 100644
index 00000000..dc3b2d0e
--- /dev/null
+++ b/tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Modbus.Tests/ModbusTransportModeTests.cs
@@ -0,0 +1,15 @@
+using Shouldly;
+using Xunit;
+
+namespace ZB.MOM.WW.OtOpcUa.Driver.Modbus.Tests;
+
+public sealed class ModbusTransportModeTests
+{
+ [Fact]
+ public void Tcp_is_the_default_zero_member()
+ => ((ModbusTransportMode)0).ShouldBe(ModbusTransportMode.Tcp);
+
+ [Fact]
+ public void Exactly_two_members_ship_in_v1()
+ => Enum.GetNames().ShouldBe(["Tcp", "RtuOverTcp"]);
+}