diff --git a/cli/src/main/java/org/onosproject/cli/net/AddProtectedTransportIntentCommand.java b/cli/src/main/java/org/onosproject/cli/net/AddProtectedTransportIntentCommand.java
new file mode 100644
index 0000000..faa3405
--- /dev/null
+++ b/cli/src/main/java/org/onosproject/cli/net/AddProtectedTransportIntentCommand.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2017-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.cli.net;
+
+import java.util.Optional;
+
+import org.apache.karaf.shell.commands.Argument;
+import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.commands.Option;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.intent.Intent;
+import org.onosproject.net.intent.IntentService;
+import org.onosproject.net.intent.Key;
+import org.onosproject.net.intent.ProtectedTransportIntent;
+
+/**
+ * Installs ProtectedTransportIntent.
+ */
+@Command(scope = "onos", name = "add-protected-transport",
+         description = "Adds ProtectedTransportIntent")
+public class AddProtectedTransportIntentCommand
+    extends AbstractShellCommand {
+
+    @Option(name = "--key", aliases = "-k",
+            description = "Intent key",
+            required = false, multiValued = false)
+    private String keyStr = null;
+
+    @Argument(index = 0, name = "deviceId1",
+            description = "First Device ID of protected path",
+            required = true, multiValued = false)
+    private String deviceId1Str = null;
+
+    @Argument(index = 1, name = "deviceId2",
+            description = "Second Device ID of protected path",
+            required = true, multiValued = false)
+    private String deviceId2Str = null;
+
+    private IntentService intentService;
+
+    @Override
+    protected void execute() {
+        intentService = get(IntentService.class);
+
+        DeviceId did1 = DeviceId.deviceId(deviceId1Str);
+        DeviceId did2 = DeviceId.deviceId(deviceId2Str);
+
+        Intent intent;
+        intent = ProtectedTransportIntent.builder()
+                .key(key())
+                .appId(appId())
+                .one(did1)
+                .two(did2)
+                .build();
+
+        print("Submitting: %s", intent);
+        intentService.submit(intent);
+    }
+
+    /**
+     * Returns Key if specified in the option.
+     *
+     * @return Key instance or null
+     */
+    protected Key key() {
+        return Optional.ofNullable(keyStr)
+                    .map(s -> Key.of(s, appId()))
+                    .orElse(null);
+    }
+}
diff --git a/cli/src/main/java/org/onosproject/cli/net/TestProtectionEndpointIntentCommand.java b/cli/src/main/java/org/onosproject/cli/net/TestProtectionEndpointIntentCommand.java
new file mode 100644
index 0000000..8189990
--- /dev/null
+++ b/cli/src/main/java/org/onosproject/cli/net/TestProtectionEndpointIntentCommand.java
@@ -0,0 +1,139 @@
+/*
+ * Copyright 2017-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.cli.net;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+import org.apache.karaf.shell.commands.Argument;
+import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.commands.Option;
+import org.onlab.packet.VlanId;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.FilteredConnectPoint;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.behaviour.protection.ProtectedTransportEndpointDescription;
+import org.onosproject.net.behaviour.protection.TransportEndpointDescription;
+import org.onosproject.net.device.DeviceService;
+import org.onosproject.net.flow.DefaultTrafficSelector;
+import org.onosproject.net.flow.TrafficSelector;
+import org.onosproject.net.intent.IntentService;
+import org.onosproject.net.intent.Key;
+import org.onosproject.net.intent.ProtectionEndpointIntent;
+
+/**
+ * Test tool to add ProtectionEndpointIntent.
+ */
+@Command(scope = "onos", name = "test-add-protection-endpoint",
+         description = "Test tool to add ProtectionEndpointIntent")
+public class TestProtectionEndpointIntentCommand extends AbstractShellCommand {
+
+    private static final String DEFAULT_FINGERPRINT = "[fingerprint]";
+
+    @Option(name = "--fingerprint",
+            description = "Fingerprint to identify the protected transport entity",
+            valueToShowInHelp = DEFAULT_FINGERPRINT)
+    private String fingerprint = DEFAULT_FINGERPRINT;
+
+    @Argument(index = 0, name = "deviceId",
+            description = "Device ID to configure",
+            required = true)
+    private String deviceIdStr = null;
+
+    @Argument(index = 1, name = "peerDeviceId",
+            description = "Device ID of remote peer",
+            required = true)
+    private String peerStr = null;
+
+    @Argument(index = 2, name = "portNumber1",
+            description = "PortNumber leading to working path on deviceId",
+            required = true)
+    private String portNumber1Str = null;
+
+    @Argument(index = 3, name = "portNumber2",
+            description = "PortNumber leading to standby path on deviceId",
+            required = true)
+    private String portNumber2Str = null;
+
+    @Option(name = "--vlan1",
+            description = "VLAN ID to push on portNumber1 expressed in decimal")
+    private String vlan1Str = null;
+
+    @Option(name = "--vlan2",
+            description = "VLAN ID to push on portNumber2 expressed in decimal")
+    private String vlan2Str = null;
+
+    private IntentService intentService;
+    private DeviceService deviceService;
+
+    @Override
+    protected void execute() {
+        fingerprint = Optional.ofNullable(fingerprint)
+                              .orElse(DEFAULT_FINGERPRINT);
+
+        intentService = get(IntentService.class);
+        deviceService = get(DeviceService.class);
+
+        DeviceId did = DeviceId.deviceId(deviceIdStr);
+        DeviceId peer = DeviceId.deviceId(peerStr);
+
+        ProtectedTransportEndpointDescription description;
+        List<TransportEndpointDescription> paths = new ArrayList<>();
+
+        paths.add(TransportEndpointDescription.builder()
+                  .withOutput(output(did, portNumber1Str, vlan1Str))
+                  .build());
+        paths.add(TransportEndpointDescription.builder()
+                  .withOutput(output(did, portNumber2Str, vlan2Str))
+                  .build());
+
+        description = ProtectedTransportEndpointDescription.of(paths, peer, fingerprint);
+
+        ProtectionEndpointIntent intent;
+        intent = ProtectionEndpointIntent.builder()
+                .key(Key.of(fingerprint, appId()))
+                .appId(appId())
+                .deviceId(did)
+                .description(description)
+                .build();
+        print("Submitting: %s", intent);
+        intentService.submit(intent);
+    }
+
+    private FilteredConnectPoint output(DeviceId did, String portNumberStr, String vlanStr) {
+        ConnectPoint cp = new ConnectPoint(did,
+                                           PortNumber.fromString(portNumberStr));
+        if (deviceService.getPort(cp) == null) {
+            print("Unknown port: %s", cp);
+        }
+
+        if (vlanStr == null) {
+            return new FilteredConnectPoint(cp);
+        } else {
+            VlanId vlan = VlanId.vlanId(vlanStr);
+            TrafficSelector sel = DefaultTrafficSelector.builder()
+                    .matchVlanId(vlan)
+                    .build();
+
+            return new FilteredConnectPoint(cp, sel);
+
+        }
+    }
+
+}
diff --git a/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
index 03eede3..ad54204 100644
--- a/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
+++ b/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
@@ -394,6 +394,24 @@
         </command>
 
         <command>
+            <action class="org.onosproject.cli.net.TestProtectionEndpointIntentCommand"/>
+            <completers>
+                <ref component-id="deviceIdCompleter"/>
+                <ref component-id="deviceIdCompleter"/>
+                <null/>
+            </completers>
+        </command>
+
+        <command>
+            <action class="org.onosproject.cli.net.AddProtectedTransportIntentCommand"/>
+            <completers>
+                <ref component-id="deviceIdCompleter"/>
+                <ref component-id="deviceIdCompleter"/>
+                <null/>
+            </completers>
+        </command>
+
+        <command>
             <action class="org.onosproject.cli.net.ClustersListCommand"/>
         </command>
         <command>
