diff --git a/incubator/rpc-nb/src/main/java/org/onosproject/incubator/rpc/nb/mcast/MulticastRouteGrpcService.java b/incubator/rpc-nb/src/main/java/org/onosproject/incubator/rpc/nb/mcast/MulticastRouteGrpcService.java
new file mode 100644
index 0000000..c6347f5
--- /dev/null
+++ b/incubator/rpc-nb/src/main/java/org/onosproject/incubator/rpc/nb/mcast/MulticastRouteGrpcService.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.incubator.rpc.nb.mcast;
+
+import io.grpc.stub.StreamObserver;
+import org.onlab.packet.IpAddress;
+import org.onosproject.grpc.net.mcast.MulticastRouteServiceGrpc;
+import org.onosproject.grpc.net.mcast.MulticastRouteServiceOuterClass;
+import org.onosproject.net.mcast.McastRoute;
+import org.onosproject.net.mcast.MulticastRouteService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.annotations.Beta;
+
+/**
+ * Implementation of multicast gRPC service.
+ */
+@Beta
+public class MulticastRouteGrpcService
+    extends MulticastRouteServiceGrpc.MulticastRouteServiceImplBase {
+
+    private final Logger log = LoggerFactory.getLogger(getClass());
+
+    private final MulticastRouteService multicastRouteService;
+
+    public MulticastRouteGrpcService(MulticastRouteService service) {
+        this.multicastRouteService = service;
+    }
+
+    @Override
+    public StreamObserver<MulticastRouteServiceOuterClass.MulticastRequest>
+            operation(StreamObserver<MulticastRouteServiceOuterClass.MulticastReply> responseObserver) {
+
+        return new MulticastServiceServerProxy(responseObserver);
+    }
+
+    private final class MulticastServiceServerProxy
+            implements StreamObserver<MulticastRouteServiceOuterClass.MulticastRequest> {
+
+        private final StreamObserver<MulticastRouteServiceOuterClass.MulticastReply> responseObserver;
+
+        public MulticastServiceServerProxy(
+                StreamObserver<MulticastRouteServiceOuterClass.MulticastReply> responseObserver) {
+            this.responseObserver = responseObserver;
+        }
+
+        @Override
+        public void onNext(MulticastRouteServiceOuterClass.MulticastRequest value) {
+            MulticastRouteServiceOuterClass.MulticastRoute route = value.getRoute();
+
+            switch (value.getOperation()) {
+            case ADD_ROUTE:
+                multicastRouteService.add(
+                        new McastRoute(IpAddress.valueOf(route.getSource()),
+                                IpAddress.valueOf(route.getGroup()),
+                                McastRoute.Type.STATIC));
+                break;
+            case ADD_SOURCE:
+                break;
+            case ADD_SINK:
+                break;
+            case REMOVE_ROUTE:
+                break;
+            case REMOVE_SOURCE:
+                break;
+            case REMOVE_SINK:
+                break;
+            case UNRECOGNIZED:
+            default:
+                break;
+            }
+
+            responseObserver.onNext(MulticastRouteServiceOuterClass.MulticastReply.newBuilder().build());
+        }
+
+        @Override
+        public void onError(Throwable t) {
+            log.warn("Error receiving multicast route", t);
+        }
+
+        @Override
+        public void onCompleted() {
+            // When the client closes their stream, we'll close ours too
+            responseObserver.onCompleted();
+        }
+    }
+}
