diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..188c9bd6a36f8131b1c4383749c34fb409b7e752
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+netcode/
diff --git a/client/python/client.py b/client/python/client.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..578ac190f6830770920d0fc3606dcac9ef5f0055 100644
--- a/client/python/client.py
+++ b/client/python/client.py
@@ -0,0 +1,13 @@
+import grpc
+from netcode.netcode_pb2_grpc import NotifierComStub
+from netcode.netcode_pb2 import *
+
+channel = grpc.insecure_channel('localhost:8080')
+stub = NotifierComStub(channel)
+
+def sendMessage(msg):
+    request = SendMessageRequest(msg)
+    response = stub.SendMessage(request)
+
+if __name__ == "__main__":
+    sendMessage("test")
\ No newline at end of file
diff --git a/server/server.py b/server/server.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..25fb0e2bc4a53325afe9b358d15907d0b0a42be3 100644
--- a/server/server.py
+++ b/server/server.py
@@ -0,0 +1,18 @@
+import grpc
+from concurrent import futures
+
+from netcode.netcode_pb2_grpc import *
+from netcode.netcode_pb2 import *
+
+class NotifierService(NotifierComServicer):
+    def SendMessage(self, request, context):
+        print(request.message)
+        return Nothing()
+
+if __name__ == "__main__":
+    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
+    add_NotifierComServicer_to_server(
+        NotifierService, server)
+    server.add_insecure_port('[::]:8080')
+    server.start()
+    server.wait_for_termination()
diff --git a/shared/gen-python-netcode.sh b/shared/gen-python-netcode.sh
new file mode 100644
index 0000000000000000000000000000000000000000..f70d5d3252ba055bad243b407ff23a0bf4fc6164
--- /dev/null
+++ b/shared/gen-python-netcode.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+##################################
+# Author: Martin Wistauder
+# Date: 05.10.2021
+# Version: 1.0
+##################################
+set -e
+
+usage='Usage: ./gen-python-netcode.sh {protobuf source dir} {output dir}
+Example usage: ./gen-python-netcode.sh ./protobuf ./netcode'
+
+# check params
+[ -z $1 ] && echo -e "Error: First parameter missing.\n$usage" && exit 1 || proto_dir="$1"
+[ -z $2 ] && echo -e "Error: Second parameter missing.\n$usage" && exit 1 || output_dir="$2"
+
+# vars
+proto_dir="$1"
+output_dir="$2"
+
+# generate the python netcode
+mkdir -p "$output_dir"
+python -m grpc_tools.protoc -I"$proto_dir" --python_out="$output_dir" --grpc_python_out="$output_dir" $(find "$proto_dir" -name "*.proto" -printf "%P ")
diff --git a/shared/netcode.proto b/shared/netcode.proto
new file mode 100644
index 0000000000000000000000000000000000000000..efb2582317b2e6cbf17503327044089a4fb16a7b
--- /dev/null
+++ b/shared/netcode.proto
@@ -0,0 +1,13 @@
+syntax = "proto3";
+package netcode;
+
+service NotifierCom {
+  rpc SendMessage (SendMessageRequest) returns (Nothing);
+}
+
+message SendMessageRequest {
+  string message = 1;
+}
+
+message Nothing {
+}