diff --git a/tool/pldm_base_cmd.cpp b/tool/pldm_base_cmd.cpp
index b1028d0..7edc33c 100644
--- a/tool/pldm_base_cmd.cpp
+++ b/tool/pldm_base_cmd.cpp
@@ -199,7 +199,6 @@
                       << "rc=" << rc << ",cc=" << (int)cc << "\n";
             return;
         }
-        std::cout << "Parsed Response Msg: " << std::endl;
         std::cout << "TID : " << static_cast<uint32_t>(tid) << std::endl;
     }
 };
@@ -267,7 +266,6 @@
     void printPldmCommands(std::vector<bitfield8_t>& cmdTypes,
                            pldm_supported_types pldmType)
     {
-        std::cout << "Parsed Response Msg:" << std::endl;
         std::cout << "Supported Commands :";
         for (int i = 0; i < PLDM_MAX_CMDS_PER_TYPE; i++)
         {
diff --git a/tool/pldm_bios_cmd.cpp b/tool/pldm_bios_cmd.cpp
index f2830a2..60a7239 100644
--- a/tool/pldm_bios_cmd.cpp
+++ b/tool/pldm_bios_cmd.cpp
@@ -338,7 +338,6 @@
 
     void decodeStringTable(const std::optional<Table>& stringTable)
     {
-        std::cout << "Parsed Response Msg: " << std::endl;
         if (!stringTable)
         {
             std::cerr << "GetBIOSStringTable Error" << std::endl;
@@ -359,7 +358,6 @@
     void decodeAttributeTable(const std::optional<Table>& attrTable,
                               const std::optional<Table>& stringTable)
     {
-        std::cout << "Parsed Response Msg: " << std::endl;
         if (!stringTable)
         {
             std::cerr << "GetBIOSAttributeTable Error" << std::endl;
@@ -472,7 +470,6 @@
                                    const std::optional<Table>& attrTable,
                                    const std::optional<Table>& stringTable)
     {
-        std::cout << "Parsed Response Msg: " << std::endl;
         if (!attrValTable)
         {
             std::cerr << "GetBIOSAttributeValueTable Error" << std::endl;
diff --git a/tool/pldm_cmd_helper.cpp b/tool/pldm_cmd_helper.cpp
index 17485cd..4da1d37 100644
--- a/tool/pldm_cmd_helper.cpp
+++ b/tool/pldm_cmd_helper.cpp
@@ -16,29 +16,30 @@
 namespace helper
 {
 /*
- * print the input buffer
+ * print the input buffer if pldm verbosity is enabled.
  *
  */
-void printBuffer(const std::vector<uint8_t>& buffer)
+void printBuffer(const std::vector<uint8_t>& buffer, bool pldmVerbose)
 {
-    std::ostringstream tempStream;
-    if (!buffer.empty())
+    if (pldmVerbose && !buffer.empty())
     {
+        std::ostringstream tempStream;
         for (int byte : buffer)
         {
             tempStream << std::setfill('0') << std::setw(2) << std::hex << byte
                        << " ";
         }
+        std::cout << tempStream.str() << std::endl;
     }
-    std::cout << tempStream.str() << std::endl;
 }
 /*
  * Initialize the socket, send pldm command & recieve response from socket
  *
  */
 int mctpSockSendRecv(const std::vector<uint8_t>& requestMsg,
-                     std::vector<uint8_t>& responseMsg)
+                     std::vector<uint8_t>& responseMsg, bool pldmVerbose)
 {
+
     const char devPath[] = "\0mctp-mux";
     int returnCode = 0;
 
@@ -49,8 +50,7 @@
         std::cerr << "Failed to create the socket : RC = " << sockFd << "\n";
         return returnCode;
     }
-    std::cout << "Success in creating the socket : RC = " << sockFd
-              << std::endl;
+    Logger(pldmVerbose, "Success in creating the socket : RC = ", sockFd);
 
     struct sockaddr_un addr
     {
@@ -69,8 +69,7 @@
                   << "\n";
         return returnCode;
     }
-    std::cout << "Success in connecting to socket : RC = " << returnCode
-              << std::endl;
+    Logger(pldmVerbose, "Success in connecting to socket : RC = ", returnCode);
 
     auto pldmType = MCTP_MSG_TYPE_PLDM;
     result = write(socketFd(), &pldmType, sizeof(pldmType));
@@ -81,8 +80,9 @@
                   << returnCode << "\n";
         return returnCode;
     }
-    std::cout << "Success in sending message type as pldm to mctp : RC = "
-              << returnCode << std::endl;
+    Logger(
+        pldmVerbose,
+        "Success in sending message type as pldm to mctp : RC = ", returnCode);
 
     result = send(socketFd(), requestMsg.data(), requestMsg.size(), 0);
     if (-1 == result)
@@ -91,7 +91,7 @@
         std::cerr << "Write to socket failure : RC = " << returnCode << "\n";
         return returnCode;
     }
-    std::cout << "Write to socket successful : RC = " << result << std::endl;
+    Logger(pldmVerbose, "Write to socket successful : RC = ", result);
 
     // Read the response from socket
     ssize_t peekedLength = recv(socketFd(), nullptr, 0, MSG_TRUNC | MSG_PEEK);
@@ -124,7 +124,7 @@
                 resphdr->instance_id == reqhdr->instance_id &&
                 resphdr->request != PLDM_REQUEST)
             {
-                std::cout << "Total length: " << recvDataLength << std::endl;
+                Logger(pldmVerbose, "Total length:", recvDataLength);
                 break;
             }
             else if (recvDataLength != peekedLength)
@@ -145,8 +145,7 @@
         return returnCode;
     }
 
-    std::cout << "Shutdown Socket successful :  RC = " << returnCode
-              << std::endl;
+    Logger(pldmVerbose, "Shutdown Socket successful :  RC = ", returnCode);
     return PLDM_SUCCESS;
 }
 
@@ -179,8 +178,6 @@
         return;
     }
 
-    std::cout << "Encode request successfully" << std::endl;
-
     std::vector<uint8_t> responseMsg;
     rc = pldmSendRecv(requestMsg, responseMsg);
 
@@ -197,13 +194,22 @@
 int CommandInterface::pldmSendRecv(std::vector<uint8_t>& requestMsg,
                                    std::vector<uint8_t>& responseMsg)
 {
+
     // Insert the PLDM message type and EID at the beginning of the
     // msg.
     requestMsg.insert(requestMsg.begin(), MCTP_MSG_TYPE_PLDM);
     requestMsg.insert(requestMsg.begin(), mctp_eid);
 
-    std::cout << "Request Message:" << std::endl;
-    printBuffer(requestMsg);
+    bool mctpVerbose = pldmVerbose;
+
+    // By default enable request/response msgs for pldmtool raw commands.
+    if (CommandInterface::pldmType == "raw")
+    {
+        pldmVerbose = true;
+    }
+
+    Logger(pldmVerbose, "Request Message:", "");
+    printBuffer(requestMsg, pldmVerbose);
 
     if (mctp_eid != PLDM_ENTITY_ID)
     {
@@ -219,19 +225,19 @@
         pldm_send_recv(mctp_eid, fd, requestMsg.data() + 2,
                        requestMsg.size() - 2, &responseMessage,
                        &responseMessageSize);
-        std::cout << "Response Message:" << std::endl;
 
+        Logger(pldmVerbose, "Response Message:", "");
         responseMsg.resize(responseMessageSize);
         memcpy(responseMsg.data(), responseMessage, responseMsg.size());
 
         free(responseMessage);
-        printBuffer(responseMsg);
+        printBuffer(responseMsg, pldmVerbose);
     }
     else
     {
-        mctpSockSendRecv(requestMsg, responseMsg);
-        std::cout << "Response Message:" << std::endl;
-        printBuffer(responseMsg);
+        mctpSockSendRecv(requestMsg, responseMsg, mctpVerbose);
+        Logger(pldmVerbose, "Response Message:", "");
+        printBuffer(responseMsg, pldmVerbose);
         responseMsg.erase(responseMsg.begin(),
                           responseMsg.begin() + 2 /* skip the mctp header */);
     }
diff --git a/tool/pldm_cmd_helper.hpp b/tool/pldm_cmd_helper.hpp
index bea01bd..978da83 100644
--- a/tool/pldm_cmd_helper.hpp
+++ b/tool/pldm_cmd_helper.hpp
@@ -31,22 +31,43 @@
 /** @brief Print the buffer
  *
  *  @param[in]  buffer  - Buffer to print
+ *  @param[in]  pldmVerbose -verbosity flag - true/false
  *
  *  @return - None
  */
-void printBuffer(const std::vector<uint8_t>& buffer);
+void printBuffer(const std::vector<uint8_t>& buffer, bool pldmVerbose);
 
+/** @brief print the input message if pldmverbose is enabled
+ *
+ *  @param[in]  pldmVerbose - verbosity flag - true/false
+ *  @param[in]  msg         - message to print
+ *  @param[in]  data        - data to print
+ *
+ *  @return - None
+ */
+
+template <class T>
+void Logger(bool pldmverbose, const char* msg, const T& data)
+{
+    if (pldmverbose)
+    {
+        std::stringstream s;
+        s << data;
+        std::cout << msg << s.str() << std::endl;
+    }
+}
 /** @brief MCTP socket read/recieve
  *
  *  @param[in]  requestMsg - Request message to compare against loopback
  *              message recieved from mctp socket
  *  @param[out] responseMsg - Response buffer recieved from mctp socket
+ *  @param[in]  pldmVerbose - verbosity flag - true/false
  *
  *  @return -   0 on success.
  *             -1 or -errno on failure.
  */
 int mctpSockSendRecv(const std::vector<uint8_t>& requestMsg,
-                     std::vector<uint8_t>& responseMsg);
+                     std::vector<uint8_t>& responseMsg, bool pldmVerbose);
 
 class CommandInterface
 {
@@ -58,8 +79,10 @@
         commandName(name), mctp_eid(PLDM_ENTITY_ID), instanceId(0)
     {
         app->add_option("-m,--mctp_eid", mctp_eid, "MCTP endpoint ID");
+        app->add_flag("-v, --verbose", pldmVerbose);
         app->callback([&]() { exec(); });
     }
+
     virtual ~CommandInterface() = default;
 
     virtual std::pair<int, std::vector<uint8_t>> createRequestMsg() = 0;
@@ -76,6 +99,7 @@
     const std::string pldmType;
     const std::string commandName;
     uint8_t mctp_eid;
+    bool pldmVerbose;
 
   protected:
     uint8_t instanceId;
diff --git a/tool/pldm_fru_cmd.cpp b/tool/pldm_fru_cmd.cpp
index 2638d60..a5fe5a3 100644
--- a/tool/pldm_fru_cmd.cpp
+++ b/tool/pldm_fru_cmd.cpp
@@ -57,7 +57,6 @@
                       << "rc=" << rc << ",cc=" << (int)cc << std::endl;
             return;
         }
-        std::cout << "Parsed Response Msg : " << std::endl;
         std::cout << "FRUDATAMajorVersion : "
                   << static_cast<uint32_t>(fru_data_major_version) << std::endl;
         std::cout << "FRUDATAMinorVersion : "
diff --git a/tool/pldm_platform_cmd.cpp b/tool/pldm_platform_cmd.cpp
index d2754ae..d3ca8f7 100644
--- a/tool/pldm_platform_cmd.cpp
+++ b/tool/pldm_platform_cmd.cpp
@@ -216,7 +216,6 @@
             return;
         }
 
-        std::cout << "Parsed Response Msg: " << std::endl;
         std::cout << "nextRecordHandle: " << nextRecordHndl << std::endl;
         std::cout << "responseCount: " << respCnt << std::endl;
 
