diff --git a/agent/src/main/java/org/apache/airavata/mft/agent/rpc/RPCParser.java b/agent/src/main/java/org/apache/airavata/mft/agent/rpc/RPCParser.java
index a915348..e4d5deb 100644
--- a/agent/src/main/java/org/apache/airavata/mft/agent/rpc/RPCParser.java
+++ b/agent/src/main/java/org/apache/airavata/mft/agent/rpc/RPCParser.java
@@ -20,6 +20,7 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.airavata.mft.admin.models.rpc.SyncRPCRequest;
 import org.apache.airavata.mft.admin.models.rpc.SyncRPCResponse;
+import org.apache.airavata.mft.core.DirectoryResourceMetadata;
 import org.apache.airavata.mft.core.FileResourceMetadata;
 import org.apache.airavata.mft.core.MetadataCollectorResolver;
 import org.apache.airavata.mft.core.api.MetadataCollector;
@@ -63,6 +64,20 @@
                     return mapper.writeValueAsString(fileResourceMetadata);
                 }
                 break;
+            case "getDirectoryResourceMetadata":
+                resourceId = request.getParameters().get("resourceId");
+                resourceType = request.getParameters().get("resourceType");
+                resourceToken = request.getParameters().get("resourceToken");
+                mftAuthorizationToken = request.getParameters().get("mftAuthorizationToken");
+
+                metadataCollectorOp = MetadataCollectorResolver.resolveMetadataCollector(resourceType);
+                if (metadataCollectorOp.isPresent()) {
+                    MetadataCollector metadataCollector = metadataCollectorOp.get();
+                    metadataCollector.init(resourceServiceHost, resourceServicePort, secretServiceHost, secretServicePort);
+                    DirectoryResourceMetadata dirResourceMetadata = metadataCollector.getDirectoryResourceMetadata(resourceId, resourceToken);
+                    return mapper.writeValueAsString(dirResourceMetadata);
+                }
+                break;
         }
         logger.error("Unknown method type specified {}", request.getMethod());
         throw new Exception("Unknown method " + request.getMethod());
diff --git a/api/service/src/main/java/org/apache/airavata/mft/api/handler/MFTApiHandler.java b/api/service/src/main/java/org/apache/airavata/mft/api/handler/MFTApiHandler.java
index a2c7511..21f85bb 100644
--- a/api/service/src/main/java/org/apache/airavata/mft/api/handler/MFTApiHandler.java
+++ b/api/service/src/main/java/org/apache/airavata/mft/api/handler/MFTApiHandler.java
@@ -26,6 +26,7 @@
 import org.apache.airavata.mft.admin.models.rpc.SyncRPCRequest;
 import org.apache.airavata.mft.admin.models.rpc.SyncRPCResponse;
 import org.apache.airavata.mft.api.service.*;
+import org.apache.airavata.mft.core.DirectoryResourceMetadata;
 import org.apache.airavata.mft.core.FileResourceMetadata;
 import org.apache.airavata.mft.core.MetadataCollectorResolver;
 import org.apache.airavata.mft.core.api.MetadataCollector;
@@ -172,13 +173,55 @@
                                                             rpcResponse.getErrorAsStr()));
             }
         } catch (Exception e) {
-            logger.error("Error while fetching resource metadata for resource " + request.getResourceId(), e);
-            responseObserver.onError(new Exception("Failed to fetch resource metadata", e));
+            logger.error("Error while fetching resource metadata for file resource " + request.getResourceId(), e);
+            responseObserver.onError(new Exception("Failed to fetch file resource metadata", e));
         }
     }
 
     @Override
     public void getDirectoryResourceMetadata(FetchResourceMetadataRequest request, StreamObserver<DirectoryMetadataResponse> responseObserver) {
-        super.getDirectoryResourceMetadata(request, responseObserver);
+        try {
+            SyncRPCResponse rpcResponse = agentRPCClient.sendSyncRequest(SyncRPCRequest.SyncRPCRequestBuilder.builder()
+                    .withAgentId(request.getTargetAgentId())
+                    .withMessageId(UUID.randomUUID().toString())
+                    .withMethod("getDirectoryResourceMetadata")
+                    .withParameter("resourceId", request.getResourceId())
+                    .withParameter("resourceType", request.getResourceType())
+                    .withParameter("resourceToken", request.getResourceToken())
+                    .withParameter("mftAuthorizationToken", request.getMftAuthorizationToken())
+                    .build());
+
+            switch (rpcResponse.getResponseStatus()) {
+                case SUCCESS:
+                    DirectoryResourceMetadata dirResourceMetadata = jsonMapper.readValue(rpcResponse.getResponseAsStr(), DirectoryResourceMetadata.class);
+                    DirectoryMetadataResponse.Builder responseBuilder = DirectoryMetadataResponse.newBuilder();
+                    dozerBeanMapper.map(dirResourceMetadata, responseBuilder);
+
+                    // As dozer mapper can't map collections in protobuf, do it manually for directories and files
+                    for (DirectoryResourceMetadata dm : dirResourceMetadata.getDirectories()) {
+                        DirectoryMetadataResponse.Builder db = DirectoryMetadataResponse.newBuilder();
+                        dozerBeanMapper.map(dm, db);
+                        responseBuilder.addDirectories(db);
+                    }
+
+                    for (FileResourceMetadata fm : dirResourceMetadata.getFiles()) {
+                        FileMetadataResponse.Builder fb = FileMetadataResponse.newBuilder();
+                        dozerBeanMapper.map(fm, fb);
+                        responseBuilder.addFiles(fb);
+                    }
+
+                    responseObserver.onNext(responseBuilder.build());
+                    responseObserver.onCompleted();
+                    return;
+                case FAIL:
+                    logger.error("Errored while processing the fetch directory metadata response for resource id {}. Error msg : {}",
+                            request.getResourceId(), rpcResponse.getErrorAsStr());
+                    responseObserver.onError(new Exception("Errored while processing the the fetch directory metadata response. Error msg : " +
+                            rpcResponse.getErrorAsStr()));
+            }
+        } catch (Exception e) {
+            logger.error("Error while fetching directory resource metadata for resource " + request.getResourceId(), e);
+            responseObserver.onError(new Exception("Failed to fetch directory resource metadata", e));
+        }
     }
 }
diff --git a/examples/src/main/java/org/apache/airavata/mft/examples/metadata/SCPExample.java b/examples/src/main/java/org/apache/airavata/mft/examples/metadata/SCPExample.java
index ed378b8..4d4e0a7 100644
--- a/examples/src/main/java/org/apache/airavata/mft/examples/metadata/SCPExample.java
+++ b/examples/src/main/java/org/apache/airavata/mft/examples/metadata/SCPExample.java
@@ -1,6 +1,7 @@
 package org.apache.airavata.mft.examples.metadata;
 
 import org.apache.airavata.mft.api.client.MFTApiClient;
+import org.apache.airavata.mft.api.service.DirectoryMetadataResponse;
 import org.apache.airavata.mft.api.service.FetchResourceMetadataRequest;
 import org.apache.airavata.mft.api.service.FileMetadataResponse;
 import org.apache.airavata.mft.api.service.MFTApiServiceGrpc;
@@ -20,5 +21,18 @@
         System.out.println("File metadata response ");
         System.out.println(fileResourceMetadata);
         System.out.println("Time for processing : " + (endTime - startTime) + " ms");
+
+        startTime = System.currentTimeMillis();
+        DirectoryMetadataResponse directoryMetadataResponse = client.getDirectoryResourceMetadata(FetchResourceMetadataRequest.newBuilder()
+                .setResourceId("remote-ssh-dir-resource")
+                .setResourceType("SCP")
+                .setResourceToken("local-ssh-cred")
+                .setTargetAgentId("agent0")
+                .build());
+        endTime = System.currentTimeMillis();
+
+        System.out.println("Directory metadata response ");
+        System.out.println(directoryMetadataResponse);
+        System.out.println("Time for processing : " + (endTime - startTime) + " ms");
     }
 }
