diff --git a/host-bmc/dbus/cpu_core.cpp b/host-bmc/dbus/cpu_core.cpp
new file mode 100644
index 0000000..91531ed
--- /dev/null
+++ b/host-bmc/dbus/cpu_core.cpp
@@ -0,0 +1,21 @@
+#include "cpu_core.hpp"
+
+namespace pldm
+{
+namespace dbus
+{
+
+uint32_t CPUCore::microcode() const
+{
+    return sdbusplus::xyz::openbmc_project::Inventory::Item::server::CpuCore::
+        microcode();
+}
+
+uint32_t CPUCore::microcode(uint32_t value)
+{
+    return sdbusplus::xyz::openbmc_project::Inventory::Item::server::CpuCore::
+        microcode(value);
+}
+
+} // namespace dbus
+} // namespace pldm
diff --git a/host-bmc/dbus/cpu_core.hpp b/host-bmc/dbus/cpu_core.hpp
new file mode 100644
index 0000000..3a58529
--- /dev/null
+++ b/host-bmc/dbus/cpu_core.hpp
@@ -0,0 +1,39 @@
+#pragma once
+
+#include <sdbusplus/bus.hpp>
+#include <sdbusplus/server.hpp>
+#include <sdbusplus/server/object.hpp>
+#include <xyz/openbmc_project/Inventory/Item/CpuCore/server.hpp>
+
+#include <string>
+
+namespace pldm
+{
+namespace dbus
+{
+using CoreIntf = sdbusplus::server::object_t<
+    sdbusplus::xyz::openbmc_project::Inventory::Item::server::CpuCore>;
+
+class CPUCore : public CoreIntf
+{
+  public:
+    CPUCore() = delete;
+    ~CPUCore() = default;
+    CPUCore(const CPUCore&) = delete;
+    CPUCore& operator=(const CPUCore&) = delete;
+    CPUCore(CPUCore&&) = default;
+    CPUCore& operator=(CPUCore&&) = default;
+
+    CPUCore(sdbusplus::bus_t& bus, const std::string& objPath) :
+        CoreIntf(bus, objPath.c_str())
+    {}
+
+    /** Get value of Microcode */
+    uint32_t microcode() const override;
+
+    /** Set value of Microcode */
+    uint32_t microcode(uint32_t value) override;
+};
+
+} // namespace dbus
+} // namespace pldm
diff --git a/host-bmc/dbus/custom_dbus.cpp b/host-bmc/dbus/custom_dbus.cpp
index 6427a93..435d574 100644
--- a/host-bmc/dbus/custom_dbus.cpp
+++ b/host-bmc/dbus/custom_dbus.cpp
@@ -27,5 +27,33 @@
     return std::nullopt;
 }
 
+void CustomDBus::implementCpuCoreInterface(const std::string& path)
+{
+    if (!cpuCore.contains(path))
+    {
+        cpuCore.emplace(path, std::make_unique<CPUCore>(
+                                  pldm::utils::DBusHandler::getBus(), path));
+    }
+}
+
+void CustomDBus::setMicroCode(const std::string& path, uint32_t value)
+{
+    if (!cpuCore.contains(path))
+    {
+        cpuCore.emplace(path, std::make_unique<CPUCore>(
+                                  pldm::utils::DBusHandler::getBus(), path));
+    }
+    cpuCore.at(path)->microcode(value);
+}
+
+std::optional<uint32_t> CustomDBus::getMicroCode(const std::string& path) const
+{
+    if (cpuCore.contains(path))
+    {
+        return cpuCore.at(path)->microcode();
+    }
+
+    return std::nullopt;
+}
 } // namespace dbus
 } // namespace pldm
diff --git a/host-bmc/dbus/custom_dbus.hpp b/host-bmc/dbus/custom_dbus.hpp
index a320641..c8307c6 100644
--- a/host-bmc/dbus/custom_dbus.hpp
+++ b/host-bmc/dbus/custom_dbus.hpp
@@ -1,6 +1,7 @@
 #pragma once
 
 #include "common/utils.hpp"
+#include "cpu_core.hpp"
 
 #include <sdbusplus/server.hpp>
 #include <xyz/openbmc_project/Inventory/Decorator/LocationCode/server.hpp>
@@ -53,15 +54,37 @@
 
     /** @brief Get the LocationCode property
      *
-     *  @param[in] path     - The object path
+     *  @param[in] path - The object path
      *
      *  @return std::optional<std::string> - The value of the LocationCode
      *          property
      */
     std::optional<std::string> getLocationCode(const std::string& path) const;
+    /** @brief Implement CpuCore Interface
+     *
+     *  @param[in] path - The object path
+     *
+     */
+    void implementCpuCoreInterface(const std::string& path);
+    /** @brief Set the microcode property
+     *
+     *  @param[in] path   - The object path
+     *
+     *  @param[in] value  - microcode value
+     */
+    void setMicroCode(const std::string& path, uint32_t value);
+
+    /** @brief Get the microcode property
+     *
+     *  @param[in] path   - The object path
+     *
+     *  @return std::optional<uint32_t> - The value of the microcode value
+     */
+    std::optional<uint32_t> getMicroCode(const std::string& path) const;
 
   private:
     std::unordered_map<ObjectPath, std::unique_ptr<LocationIntf>> location;
+    std::unordered_map<ObjectPath, std::unique_ptr<CPUCore>> cpuCore;
 };
 
 } // namespace dbus
