diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history for pms-domain-service
 
+## 0.1.0.0 -- 2025-12-31
+
+* Add file system tools.
+
 ## 0.0.9.0 -- 2025-08-24
 
 * Fixed exception handle.
diff --git a/pms-domain-service.cabal b/pms-domain-service.cabal
--- a/pms-domain-service.cabal
+++ b/pms-domain-service.cabal
@@ -20,7 +20,7 @@
 -- PVP summary:     +-+------- breaking API changes
 --                  | | +----- non-breaking API additions
 --                  | | | +--- code changes with no API change
-version:            0.0.9.0
+version:            0.1.0.0
 
 -- A short (one-line) description of the package.
 synopsis:           pms-domain-service
diff --git a/src/PMS/Domain/Service/DS/State/Run/ToolsCall.hs b/src/PMS/Domain/Service/DS/State/Run/ToolsCall.hs
--- a/src/PMS/Domain/Service/DS/State/Run/ToolsCall.hs
+++ b/src/PMS/Domain/Service/DS/State/Run/ToolsCall.hs
@@ -63,6 +63,9 @@
       go dat "serial-read"    = serialReadCommand dat
       go dat "serial-write"   = serialWriteCommand dat
       go dat "serial-message" = serialMessageCommand dat
+      go dat "pms-list-dir"   = fileSystemListDirCommand dat
+      go dat "pms-read-file"  = fileSystemReadFileCommand dat
+      go dat "pms-write-file" = fileSystemWriteFileCommand dat
       go dat x = do
         $logDebugS DM._LOGTAG $ T.pack $ "handled cmdrun. " ++ show x ++ ": " ++ show dat
         cmdRunCommand dat
@@ -331,3 +334,39 @@
   cmdQ <- view DM.serialQueueDomainData <$> lift ask
   liftIO $ STM.atomically $ STM.writeTQueue cmdQ $ DM.SerialMessageCommand cmdDat
 
+
+-- |
+--
+fileSystemListDirCommand :: DM.McpToolsCallRequestData -> AppContext ()
+fileSystemListDirCommand dat = do
+  let cmdDat = DM.ListDirFileSystemCommandData {
+                DM._jsonrpcListDirFileSystemCommandData   = dat^.DM.jsonrpcMcpToolsCallRequestData
+              , DM._argumentsListDirFileSystemCommandData = dat^.DM.paramsMcpToolsCallRequestData^.DM.argumentsMcpToolsCallRequestDataParams
+              }
+
+  cmdQ <- view DM.fileSystemQueueDomainData <$> lift ask
+  liftIO $ STM.atomically $ STM.writeTQueue cmdQ $ DM.ListDirFileSystemCommand cmdDat
+
+-- |
+--
+fileSystemReadFileCommand :: DM.McpToolsCallRequestData -> AppContext ()
+fileSystemReadFileCommand dat = do
+  let cmdDat = DM.ReadFileFileSystemCommandData {
+                DM._jsonrpcReadFileFileSystemCommandData   = dat^.DM.jsonrpcMcpToolsCallRequestData
+              , DM._argumentsReadFileFileSystemCommandData = dat^.DM.paramsMcpToolsCallRequestData^.DM.argumentsMcpToolsCallRequestDataParams
+              }
+
+  cmdQ <- view DM.fileSystemQueueDomainData <$> lift ask
+  liftIO $ STM.atomically $ STM.writeTQueue cmdQ $ DM.ReadFileFileSystemCommand cmdDat
+
+-- |
+--
+fileSystemWriteFileCommand :: DM.McpToolsCallRequestData -> AppContext ()
+fileSystemWriteFileCommand dat = do
+  let cmdDat = DM.WriteFileFileSystemCommandData {
+                DM._jsonrpcWriteFileFileSystemCommandData   = dat^.DM.jsonrpcMcpToolsCallRequestData
+              , DM._argumentsWriteFileFileSystemCommandData = dat^.DM.paramsMcpToolsCallRequestData^.DM.argumentsMcpToolsCallRequestDataParams
+              }
+
+  cmdQ <- view DM.fileSystemQueueDomainData <$> lift ask
+  liftIO $ STM.atomically $ STM.writeTQueue cmdQ $ DM.WriteFileFileSystemCommand cmdDat
