diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Clients/FleetDiagnosticsClient.cs b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Clients/FleetDiagnosticsClient.cs
new file mode 100644
index 0000000..199445a
--- /dev/null
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Clients/FleetDiagnosticsClient.cs
@@ -0,0 +1,36 @@
+using Akka.Actor;
+using ZB.MOM.WW.OtOpcUa.Commons.Interfaces;
+using ZB.MOM.WW.OtOpcUa.Commons.Types;
+
+namespace ZB.MOM.WW.OtOpcUa.AdminUI.Clients;
+
+///
+/// that targets a named node's DriverHostActor over
+/// Akka cluster .
+///
+/// The actual GetDiagnosticsRequest/NodeDiagnosticsSnapshot round-trip on the
+/// driver side is staged for follow-up F17 (depends on DriverHostActor exposing the request
+/// handler; right now it only handles DispatchDeployment). For now the client returns an empty
+/// snapshot so the UI can render a "no data yet" state.
+///
+public sealed class FleetDiagnosticsClient : IFleetDiagnosticsClient
+{
+ private readonly ActorSystem _system;
+
+ public FleetDiagnosticsClient(ActorSystem system)
+ {
+ _system = system;
+ }
+
+ public Task GetDiagnosticsAsync(NodeId nodeId, CancellationToken ct)
+ {
+ // F17: ActorSelection at $"akka.tcp://{system}@{nodeId.Value}:4053/user/driver-host"
+ // → Ask(new GetDiagnostics(), timeout).
+ var snapshot = new NodeDiagnosticsSnapshot(
+ nodeId,
+ CurrentRevision: null,
+ Drivers: Array.Empty(),
+ AsOfUtc: DateTime.UtcNow);
+ return Task.FromResult(snapshot);
+ }
+}