diff --git a/src/ZB.MOM.WW.ScadaBridge.Commons/Interfaces/Protocol/IBrowsableDataConnection.cs b/src/ZB.MOM.WW.ScadaBridge.Commons/Interfaces/Protocol/IBrowsableDataConnection.cs
new file mode 100644
index 00000000..ff7ae19c
--- /dev/null
+++ b/src/ZB.MOM.WW.ScadaBridge.Commons/Interfaces/Protocol/IBrowsableDataConnection.cs
@@ -0,0 +1,48 @@
+namespace ZB.MOM.WW.ScadaBridge.Commons.Interfaces.Protocol;
+
+///
+/// Optional capability for an implementation
+/// that supports browsing the server's address space. Consumed only by
+/// management/UI flows (e.g. the OPC UA tag picker on the instance config
+/// page) — never by Instance Actors on the hot path.
+///
+public interface IBrowsableDataConnection
+{
+ ///
+ /// Returns the immediate children of , or
+ /// the server's root-level nodes when null.
+ ///
+ /// Node id whose children to browse, or null for the server root (OPC UA ObjectsFolder).
+ /// Cancellation token; on cancellation the implementation should throw .
+ Task BrowseChildrenAsync(
+ string? parentNodeId,
+ CancellationToken cancellationToken = default);
+}
+
+/// Child nodes returned by the server in browse order.
+/// True when the server reported more children than the per-call cap; remaining children must be discovered via manual entry.
+public record BrowseChildrenResult(
+ IReadOnlyList Children,
+ bool Truncated);
+
+/// Server-issued node identifier (e.g. "ns=2;s=Devices.Pump1.Speed").
+/// Human-readable display name from the server's DisplayName attribute.
+/// Classifies the node for UI purposes (Variable rows are selectable; Object rows are navigable).
+/// Hint so the UI can render an expand chevron without a second roundtrip.
+public record BrowseNode(
+ string NodeId,
+ string DisplayName,
+ BrowseNodeClass NodeClass,
+ bool HasChildren);
+
+public enum BrowseNodeClass { Object, Variable, Method, Other }
+
+///
+/// Thrown by when
+/// the underlying session is not currently connected. Translated to
+/// BrowseFailureKind.ConnectionNotConnected by the site-side handler.
+///
+public sealed class ConnectionNotConnectedException : InvalidOperationException
+{
+ public ConnectionNotConnectedException(string message) : base(message) { }
+}