diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history for pms-ui-response
 
+## 0.0.4.0 -- 2025-07-06
+
+*Added resources interface.
+
 ## 0.0.3.0 -- 2025-06-22
 
 *Added prompts interface.
diff --git a/pms-ui-response.cabal b/pms-ui-response.cabal
--- a/pms-ui-response.cabal
+++ b/pms-ui-response.cabal
@@ -20,7 +20,7 @@
 -- PVP summary:     +-+------- breaking API changes
 --                  | | +----- non-breaking API additions
 --                  | | | +--- code changes with no API change
-version:            0.0.3.0
+version:            0.0.4.0
 
 -- A short (one-line) description of the package.
 synopsis:           pms-ui-response
diff --git a/src/PMS/UI/Response/DS/Core.hs b/src/PMS/UI/Response/DS/Core.hs
--- a/src/PMS/UI/Response/DS/Core.hs
+++ b/src/PMS/UI/Response/DS/Core.hs
@@ -90,14 +90,29 @@
       result = encode $ dat^.DM.resultMcpPromptsListResponseData
       res = json {DM._resultJsonRpcResponse = DM.RawJsonByteString result}
   return res
-mcp2json (DM.McpCompleteResponse dat) = do
-  let json = DM.defaultJsonRpcResponse $ dat^.DM.jsonrpcMcpCompleteResponseData
-      result = encode $ dat^.DM.resultMcpCompleteResponseData
-      res = json {DM._resultJsonRpcResponse = DM.RawJsonByteString result}
-  return res
 mcp2json (DM.McpPromptsGetResponse dat) = do
   let json = DM.defaultJsonRpcResponse $ dat^.DM.jsonrpcMcpPromptsGetResponseData
       result = encode $ dat^.DM.resultMcpPromptsGetResponseData
+      res = json {DM._resultJsonRpcResponse = DM.RawJsonByteString result}
+  return res
+mcp2json (DM.McpResourcesTemplatesListResponse dat) = do
+  let json = DM.defaultJsonRpcResponse $ dat^.DM.jsonrpcMcpResourcesTemplatesListResponseData
+      result = encode $ dat^.DM.resultMcpResourcesTemplatesListResponseData
+      res = json {DM._resultJsonRpcResponse = DM.RawJsonByteString result}
+  return res
+mcp2json (DM.McpResourcesListResponse dat) = do
+  let json = DM.defaultJsonRpcResponse $ dat^.DM.jsonrpcMcpResourcesListResponseData
+      result = encode $ dat^.DM.resultMcpResourcesListResponseData
+      res = json {DM._resultJsonRpcResponse = DM.RawJsonByteString result}
+  return res
+mcp2json (DM.McpResourcesReadResponse dat) = do
+  let json = DM.defaultJsonRpcResponse $ dat^.DM.jsonrpcMcpResourcesReadResponseData
+      result = encode $ dat^.DM.resultMcpResourcesReadResponseData
+      res = json {DM._resultJsonRpcResponse = DM.RawJsonByteString result}
+  return res
+mcp2json (DM.McpCompleteResponse dat) = do
+  let json = DM.defaultJsonRpcResponse $ dat^.DM.jsonrpcMcpCompleteResponseData
+      result = encode $ dat^.DM.resultMcpCompleteResponseData
       res = json {DM._resultJsonRpcResponse = DM.RawJsonByteString result}
   return res
 
