diff --git a/tool/meson.build b/tool/meson.build
index 254585c..978d057 100644
--- a/tool/meson.build
+++ b/tool/meson.build
@@ -3,6 +3,7 @@
   'pldm_base_cmd.cpp',
   'pldm_platform_cmd.cpp',
   'pldm_bios_cmd.cpp',
+  'pldm_fru_cmd.cpp',
   'pldmtool.cpp'
 ]
 
diff --git a/tool/pldm_cmd_helper.hpp b/tool/pldm_cmd_helper.hpp
index d7beec9..2c736ec 100644
--- a/tool/pldm_cmd_helper.hpp
+++ b/tool/pldm_cmd_helper.hpp
@@ -15,6 +15,7 @@
 
 #include "libpldm/base.h"
 #include "libpldm/bios.h"
+#include "libpldm/fru.h"
 #include "libpldm/platform.h"
 
 namespace pldmtool
diff --git a/tool/pldm_fru_cmd.cpp b/tool/pldm_fru_cmd.cpp
new file mode 100644
index 0000000..e1cf800
--- /dev/null
+++ b/tool/pldm_fru_cmd.cpp
@@ -0,0 +1,90 @@
+#include "pldm_fru_cmd.hpp"
+
+#include "pldm_cmd_helper.hpp"
+
+namespace pldmtool
+{
+
+namespace fru
+{
+
+namespace
+{
+
+using namespace pldmtool::helper;
+
+std::vector<std::unique_ptr<CommandInterface>> commands;
+
+} // namespace
+
+class GetFruRecordTableMetadata : public CommandInterface
+{
+  public:
+    ~GetFruRecordTableMetadata() = default;
+    GetFruRecordTableMetadata() = delete;
+    GetFruRecordTableMetadata(const GetFruRecordTableMetadata&) = delete;
+    GetFruRecordTableMetadata(GetFruRecordTableMetadata&&) = default;
+    GetFruRecordTableMetadata&
+        operator=(const GetFruRecordTableMetadata&) = delete;
+    GetFruRecordTableMetadata& operator=(GetFruRecordTableMetadata&&) = default;
+
+    using CommandInterface::CommandInterface;
+
+    std::pair<int, std::vector<uint8_t>> createRequestMsg() override
+    {
+        std::vector<uint8_t> requestMsg(sizeof(pldm_msg_hdr));
+        auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
+
+        auto rc = encode_get_fru_record_table_metadata_req(
+            PLDM_LOCAL_INSTANCE_ID, request);
+        return {rc, requestMsg};
+    }
+
+    void parseResponseMsg(pldm_msg* responsePtr, size_t payloadLength) override
+    {
+        uint8_t cc = 0;
+        uint8_t fru_data_major_version, fru_data_minor_version;
+        uint32_t fru_table_maximum_size, fru_table_length;
+        uint16_t total_record_set_identifiers, total_table_records;
+        uint32_t checksum;
+
+        auto rc = decode_get_fru_record_table_metadata_resp(
+            responsePtr, payloadLength, &cc, &fru_data_major_version,
+            &fru_data_minor_version, &fru_table_maximum_size, &fru_table_length,
+            &total_record_set_identifiers, &total_table_records, &checksum);
+        if (rc != PLDM_SUCCESS || cc != PLDM_SUCCESS)
+        {
+            std::cerr << "Response Message Error: "
+                      << "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 : "
+                  << static_cast<uint32_t>(fru_data_minor_version) << std::endl;
+        std::cout << "FRUTableMaximumSize : " << fru_table_maximum_size
+                  << std::endl;
+        std::cout << "FRUTableLength : " << fru_table_length << std::endl;
+        std::cout << "Total number of Record Set Identifiers in table : "
+                  << total_record_set_identifiers << std::endl;
+        std::cout << "Total number of records in table :  "
+                  << total_table_records << std::endl;
+        std::cout << "FRU DATAStructureTableIntegrityChecksum :  " << checksum
+                  << std::endl;
+    }
+};
+
+void registerCommand(CLI::App& app)
+{
+    auto fru = app.add_subcommand("fru", "FRU type command");
+    fru->require_subcommand(1);
+    auto getFruRecordTableMetadata = fru->add_subcommand(
+        "GetFruRecordTableMetadata", "get FRU record table metadata");
+    commands.push_back(std::make_unique<GetFruRecordTableMetadata>(
+        "fru", "GetFruRecordTableMetadata", getFruRecordTableMetadata));
+}
+
+} // namespace fru
+
+} // namespace pldmtool
diff --git a/tool/pldm_fru_cmd.hpp b/tool/pldm_fru_cmd.hpp
new file mode 100644
index 0000000..1cb3210
--- /dev/null
+++ b/tool/pldm_fru_cmd.hpp
@@ -0,0 +1,14 @@
+#pragma once
+
+#include <CLI/CLI.hpp>
+
+namespace pldmtool
+{
+
+namespace fru
+{
+
+void registerCommand(CLI::App& app);
+}
+
+} // namespace pldmtool
diff --git a/tool/pldmtool.cpp b/tool/pldmtool.cpp
index 0f0182b..7e4e0e8 100644
--- a/tool/pldmtool.cpp
+++ b/tool/pldmtool.cpp
@@ -1,6 +1,7 @@
 #include "pldm_base_cmd.hpp"
 #include "pldm_bios_cmd.hpp"
 #include "pldm_cmd_helper.hpp"
+#include "pldm_fru_cmd.hpp"
 #include "pldm_platform_cmd.hpp"
 
 #include <CLI/CLI.hpp>
@@ -70,6 +71,7 @@
     pldmtool::base::registerCommand(app);
     pldmtool::bios::registerCommand(app);
     pldmtool::platform::registerCommand(app);
+    pldmtool::fru::registerCommand(app);
 
     CLI11_PARSE(app, argc, argv);
     return 0;
