diff --git a/common/types.hpp b/common/types.hpp
index e3b10ee..86b7542 100644
--- a/common/types.hpp
+++ b/common/types.hpp
@@ -19,6 +19,7 @@
 using UUID = std::string;
 using Request = std::vector<uint8_t>;
 using Response = std::vector<uint8_t>;
+using MCTPMsgTypes = std::vector<uint8_t>;
 using Command = uint8_t;
 
 /** @brief MCTP Endpoint Medium type in string
@@ -40,6 +41,16 @@
  */
 using MctpInfo = std::tuple<eid, UUID, MctpMedium, NetworkId>;
 
+/** @brief Type definition of MCTP endpoint D-Bus properties in
+ *         xyz.openbmc_project.MCTP.Endpoint D-Bus interface.
+ *
+ *         NetworkId: MCTP network index
+ *         eid : Endpoint EID in byte. Defined to match with MCTP D-Bus
+ *               interface
+ *         MCTPMsgTypes: MCTP message types
+ */
+using MctpEndpointProps = std::tuple<NetworkId, eid, MCTPMsgTypes>;
+
 /** @brief Type defined for list of MCTP interface information
  */
 using MctpInfos = std::vector<MctpInfo>;
diff --git a/requester/mctp_endpoint_discovery.cpp b/requester/mctp_endpoint_discovery.cpp
index d0122c9..1b6cd30 100644
--- a/requester/mctp_endpoint_discovery.cpp
+++ b/requester/mctp_endpoint_discovery.cpp
@@ -5,6 +5,8 @@
 #include "common/types.hpp"
 #include "common/utils.hpp"
 
+#include <linux/mctp.h>
+
 #include <phosphor-logging/lg2.hpp>
 
 #include <algorithm>
@@ -58,43 +60,74 @@
         for (const auto& serviceIter : services)
         {
             const std::string& service = serviceIter.first;
-            try
+            const MctpEndpointProps& epProps =
+                getMctpEndpointProps(service, path);
+            const UUID& uuid = getEndpointUUIDProp(service, path);
+            auto types = std::get<MCTPMsgTypes>(epProps);
+            if (std::find(types.begin(), types.end(), mctpTypePLDM) !=
+                types.end())
             {
-                auto properties =
-                    pldm::utils::DBusHandler().getDbusPropertiesVariant(
-                        service.c_str(), path.c_str(), MCTPInterface);
-
-                if (properties.contains("NetworkId") &&
-                    properties.contains("EID") &&
-                    properties.contains("SupportedMessageTypes"))
-                {
-                    auto networkId =
-                        std::get<NetworkId>(properties.at("NetworkId"));
-                    auto eid = std::get<mctp_eid_t>(properties.at("EID"));
-                    auto types = std::get<std::vector<uint8_t>>(
-                        properties.at("SupportedMessageTypes"));
-                    if (std::find(types.begin(), types.end(), mctpTypePLDM) !=
-                        types.end())
-                    {
-                        info(
-                            "Adding Endpoint networkId '{NETWORK}' and EID '{EID}'",
-                            "NETWORK", networkId, "EID", eid);
-                        mctpInfos.emplace_back(
-                            MctpInfo(eid, emptyUUID, "", networkId));
-                    }
-                }
-            }
-            catch (const sdbusplus::exception_t& e)
-            {
-                error(
-                    "Error reading MCTP Endpoint property at path '{PATH}' and service '{SERVICE}', error - {ERROR}",
-                    "ERROR", e, "SERVICE", service, "PATH", path);
-                return;
+                mctpInfos.emplace_back(
+                    MctpInfo(std::get<eid>(epProps), uuid, "",
+                             std::get<NetworkId>(epProps)));
             }
         }
     }
 }
 
+MctpEndpointProps MctpDiscovery::getMctpEndpointProps(
+    const std::string& service, const std::string& path)
+{
+    try
+    {
+        auto properties = pldm::utils::DBusHandler().getDbusPropertiesVariant(
+            service.c_str(), path.c_str(), MCTPInterface);
+
+        if (properties.contains("NetworkId") && properties.contains("EID") &&
+            properties.contains("SupportedMessageTypes"))
+        {
+            auto networkId = std::get<NetworkId>(properties.at("NetworkId"));
+            auto eid = std::get<mctp_eid_t>(properties.at("EID"));
+            auto types = std::get<std::vector<uint8_t>>(
+                properties.at("SupportedMessageTypes"));
+            return MctpEndpointProps(networkId, eid, types);
+        }
+    }
+    catch (const sdbusplus::exception_t& e)
+    {
+        error(
+            "Error reading MCTP Endpoint property at path '{PATH}' and service '{SERVICE}', error - {ERROR}",
+            "SERVICE", service, "PATH", path, "ERROR", e);
+        return MctpEndpointProps(0, MCTP_ADDR_ANY, {});
+    }
+
+    return MctpEndpointProps(0, MCTP_ADDR_ANY, {});
+}
+
+UUID MctpDiscovery::getEndpointUUIDProp(const std::string& service,
+                                        const std::string& path)
+{
+    try
+    {
+        auto properties = pldm::utils::DBusHandler().getDbusPropertiesVariant(
+            service.c_str(), path.c_str(), EndpointUUID);
+
+        if (properties.contains("UUID"))
+        {
+            return std::get<UUID>(properties.at("UUID"));
+        }
+    }
+    catch (const sdbusplus::exception_t& e)
+    {
+        error(
+            "Error reading Endpoint UUID property at path '{PATH}' and service '{SERVICE}', error - {ERROR}",
+            "SERVICE", service, "PATH", path, "ERROR", e);
+        return static_cast<UUID>(emptyUUID);
+    }
+
+    return static_cast<UUID>(emptyUUID);
+}
+
 void MctpDiscovery::getAddedMctpInfos(sdbusplus::message_t& msg,
                                       MctpInfos& mctpInfos)
 {
@@ -103,6 +136,7 @@
     using Property = std::string;
     using PropertyMap = std::map<Property, dbus::Value>;
     std::map<std::string, PropertyMap> interfaces;
+    std::string uuid = emptyUUID;
 
     try
     {
@@ -116,6 +150,19 @@
         return;
     }
 
+    /* Get UUID */
+    try
+    {
+        auto service = pldm::utils::DBusHandler().getService(
+            objPath.str.c_str(), EndpointUUID);
+        uuid = getEndpointUUIDProp(service, objPath.str);
+    }
+    catch (const sdbusplus::exception_t& e)
+    {
+        error("Error getting Endpoint UUID D-Bus interface, error - {ERROR}",
+              "ERROR", e);
+    }
+
     for (const auto& [intfName, properties] : interfaces)
     {
         if (intfName == MCTPInterface)
@@ -133,10 +180,9 @@
                     types.end())
                 {
                     info(
-                        "Adding Endpoint networkId '{NETWORK}' and EID '{EID}'",
-                        "NETWORK", networkId, "EID", eid);
-                    mctpInfos.emplace_back(
-                        MctpInfo(eid, emptyUUID, "", networkId));
+                        "Adding Endpoint networkId '{NETWORK}' and EID '{EID}' UUID '{UUID}'",
+                        "NETWORK", networkId, "EID", eid, "UUID", uuid);
+                    mctpInfos.emplace_back(MctpInfo(eid, uuid, "", networkId));
                 }
             }
         }
diff --git a/requester/mctp_endpoint_discovery.hpp b/requester/mctp_endpoint_discovery.hpp
index 643d1ce..1bd9526 100644
--- a/requester/mctp_endpoint_discovery.hpp
+++ b/requester/mctp_endpoint_discovery.hpp
@@ -17,6 +17,7 @@
 const std::string emptyUUID = "00000000-0000-0000-0000-000000000000";
 constexpr const char* MCTPService = "xyz.openbmc_project.MCTP";
 constexpr const char* MCTPInterface = "xyz.openbmc_project.MCTP.Endpoint";
+constexpr const char* EndpointUUID = "xyz.openbmc_project.Common.UUID";
 constexpr const char* MCTPPath = "/xyz/openbmc_project/mctp";
 
 /** @class MctpDiscoveryHandlerIntf
@@ -124,6 +125,28 @@
                                      MctpInfos& removedInfos);
 
   private:
+    /** @brief Get MCTP Endpoint D-Bus Properties in the
+     *         `xyz.openbmc_project.MCTP.Endpoint` D-Bus interface
+     *
+     *  @param[in] service - the MCTP service name
+     *  @param[in] path - the MCTP endpoints object path
+     *
+     *  @return tuple of Network Index, Endpoint ID and MCTP message types
+     */
+    MctpEndpointProps getMctpEndpointProps(const std::string& service,
+                                           const std::string& path);
+
+    /** @brief Get Endpoint UUID from `UUID` D-Bus property in the
+     *         `xyz.openbmc_project.Common.UUID` D-Bus interface.
+     *
+     *  @param[in] service - the MCTP service name
+     *  @param[in] path - the MCTP endpoints object path
+     *
+     *  @return Endpoint UUID
+     */
+    UUID getEndpointUUIDProp(const std::string& service,
+                             const std::string& path);
+
     static constexpr uint8_t mctpTypePLDM = 1;
 };
 
