diff --git a/minindn/minindn_play/server.py b/minindn/minindn_play/server.py
new file mode 100644
index 0000000..8a4bb85
--- /dev/null
+++ b/minindn/minindn_play/server.py
@@ -0,0 +1,63 @@
+import signal
+from threading import Thread
+
+from mininet.net import Mininet
+from minindn.minindn_play.monitor import LogMonitor
+from minindn.minindn_play.socket import PlaySocket
+from minindn.minindn_play.net.topo import TopoExecutor
+from minindn.minindn_play.net.state import StateExecutor
+from minindn.minindn_play.term.term import TermExecutor
+from minindn.minindn_play.shark.shark import SharkExecutor
+
+class PlayServer:
+    net: Mininet
+    repl: bool
+    cli: bool
+    monitors: list[LogMonitor] = []
+
+    def __init__(self, net: Mininet, **kwargs) -> None:
+        """
+        Start NDN Play GUI server.
+        If cli=True is specified (default), will block for the Mininet CLI.
+        """
+
+        self.net = net
+        self.repl = kwargs.get('repl', False)
+        self.cli = kwargs.get('cli', True)
+
+        self.socket = PlaySocket()
+        self.socket.add_executor(TopoExecutor(net))
+        self.socket.add_executor(StateExecutor(net))
+
+        self.shark_executor = SharkExecutor(net, self.socket)
+        self.socket.add_executor(self.shark_executor)
+
+        self.pty_executor = TermExecutor(net, self.socket)
+        self.socket.add_executor(self.pty_executor)
+
+    def start(self):
+        if self.repl:
+            Thread(target=self.pty_executor.start_repl).start()
+
+        # Start all monitors
+        for monitor in self.monitors:
+            monitor.start(self.socket)
+
+        # Blocks until Mininet CLI is closed
+        if self.cli:
+            self.hook_sigint()
+            self.pty_executor.start_cli()
+
+        # Stop all monitors
+        for monitor in self.monitors:
+            monitor.stop()
+
+    def hook_sigint(self):
+        def signal_handler(sig, frame):
+            print('SIGINT received, stopping Mininet...')
+            self.net.stop()
+            exit(127)
+        signal.signal(signal.SIGINT, signal_handler)
+
+    def add_monitor(self, monitor: LogMonitor):
+        self.monitors.append(monitor)
