diff --git a/examples/java-matter-controller/java/src/com/matter/controller/commands/common/Command.java b/examples/java-matter-controller/java/src/com/matter/controller/commands/common/Command.java
index 16c3b30..fe33e24 100644
--- a/examples/java-matter-controller/java/src/com/matter/controller/commands/common/Command.java
+++ b/examples/java-matter-controller/java/src/com/matter/controller/commands/common/Command.java
@@ -76,6 +76,10 @@
     return mArgs.size();
   }
 
+  public final boolean getArgumentIsOptional(int index) {
+    return mArgs.get(index).isOptional();
+  }
+
   /**
    * @brief Get argument description if it exists
    * @return A pointer to an Optional where the argument description will be stored
diff --git a/examples/java-matter-controller/java/src/com/matter/controller/commands/common/CommandManager.java b/examples/java-matter-controller/java/src/com/matter/controller/commands/common/CommandManager.java
index ad6cd68..8a7110a 100644
--- a/examples/java-matter-controller/java/src/com/matter/controller/commands/common/CommandManager.java
+++ b/examples/java-matter-controller/java/src/com/matter/controller/commands/common/CommandManager.java
@@ -22,6 +22,7 @@
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Optional;
 
 public final class CommandManager {
   private final ArrayList<Command> mCommandMgr = new ArrayList<Command>();
@@ -96,7 +97,7 @@
       command.initArguments(temp.length, temp);
       command.run();
     } catch (IllegalArgumentException e) {
-      System.out.println("Arguments init failed with exception: " + e.getMessage());
+      showCommand(args[0], command);
     } catch (Exception e) {
       System.out.println("Run command failed with exception: " + e.getMessage());
     }
@@ -244,4 +245,45 @@
     System.out.println(
         "  +-------------------------------------------------------------------------------------+");
   }
+
+  private void showCommand(String clusterName, Command command) {
+    System.out.println("Usage:");
+
+    String arguments = command.getName();
+    String description = "";
+
+    int argumentsCount = command.getArgumentsCount();
+    for (int i = 0; i < argumentsCount; i++) {
+      String arg = "";
+      boolean isOptional = command.getArgumentIsOptional(i);
+      if (isOptional) {
+        arg += "[--";
+      }
+      arg += command.getArgumentName(i);
+      if (isOptional) {
+        arg += "]";
+      }
+      arguments += " ";
+      arguments += arg;
+
+      Optional<String> argDescription = command.getArgumentDescription(i);
+      if (argDescription.isPresent()) {
+        description += "\n";
+        description += arg;
+        description += ":\n  ";
+        description += argDescription.get();
+        description += "\n";
+      }
+    }
+    System.out.format("  java-matter-controller %s %s\n", clusterName, arguments);
+
+    Optional<String> helpText = command.getHelpText();
+    if (helpText.isPresent()) {
+      System.out.format("\n%s\n", helpText.get());
+    }
+
+    if (!description.isEmpty()) {
+      System.out.println(description);
+    }
+  }
 }
diff --git a/examples/java-matter-controller/java/src/com/matter/controller/commands/common/MatterCommand.java b/examples/java-matter-controller/java/src/com/matter/controller/commands/common/MatterCommand.java
index d78a7bb..5336ce8 100644
--- a/examples/java-matter-controller/java/src/com/matter/controller/commands/common/MatterCommand.java
+++ b/examples/java-matter-controller/java/src/com/matter/controller/commands/common/MatterCommand.java
@@ -58,38 +58,38 @@
     this.mChipDeviceController = controller;
 
     addArgument(
-        "--paa-trust-store-path",
+        "paa-trust-store-path",
         mPaaTrustStorePath,
         "Path to directory holding PAA certificate information.  Can be absolute or relative to the current working "
             + "directory.",
         true);
     addArgument(
-        "--cd-trust-store-path",
+        "cd-trust-store-path",
         mCDTrustStorePath,
         "Path to directory holding CD certificate information.  Can be absolute or relative to the current working "
             + "directory.",
         true);
     addArgument(
-        "--commissioner-name",
+        "commissioner-name",
         mCommissionerName,
         "Name of fabric to use. Valid values are \"alpha\", \"beta\", \"gamma\", and integers greater than or equal to "
             + "4.  The default if not specified is \"alpha\".",
         true);
     addArgument(
-        "--commissioner-nodeid",
+        "commissioner-nodeid",
         0,
         Long.MAX_VALUE,
         mCommissionerNodeId,
-        "The node id to use for chip-tool.  If not provided, kTestControllerNodeId (112233, 0x1B669) will be used.",
+        "The node id to use for java-matter-controller.  If not provided, kTestControllerNodeId (112233, 0x1B669) will be used.",
         true);
     addArgument(
-        "--use-max-sized-certs",
+        "use-max-sized-certs",
         mUseMaxSizedCerts,
         "Maximize the size of operational certificates. If not provided or 0 (\"false\"), normally sized operational "
             + "certificates are generated.",
         true);
     addArgument(
-        "--only-allow-trusted-cd-keys",
+        "only-allow-trusted-cd-keys",
         mOnlyAllowTrustedCdKeys,
         "Only allow trusted CD verifying keys (disallow test keys). If not provided or 0 (\"false\"), untrusted CD "
             + "verifying keys are allowed. If 1 (\"true\"), test keys are disallowed.",
