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.2.0 -- 2026-04-30
+
+* Add async read/write tools.
+
 ## 0.1.1.0 -- 2026-01-31
 
 * Add file system pms-make-dir tools.
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.1.1.0
+version:            0.1.2.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
@@ -52,6 +52,8 @@
       go dat "proc-plink"     = procRunCommand dat
       go dat "proc-terminate" = procTerminateCommand dat
       go dat "proc-message"   = procMessageCommand dat
+      go dat "proc-read"      = procReadCommand dat
+      go dat "proc-write"     = procWriteCommand dat
       go dat "socket-open"    = socketOpenCommand dat
       go dat "socket-close"   = socketCloseCommand dat
       go dat "socket-read"    = socketReadCommand dat
@@ -173,6 +175,32 @@
 
   cmdQ <- view DM.procspawnQueueDomainData <$> lift ask
   liftIO $ STM.atomically $ STM.writeTQueue cmdQ $ DM.ProcMessageCommand cmdDat
+
+
+-- |
+--
+procReadCommand :: DM.McpToolsCallRequestData -> AppContext ()
+procReadCommand dat = do
+  let cmdDat = DM.ProcReadCommandData {
+                DM._jsonrpcProcReadCommandData   = dat^.DM.jsonrpcMcpToolsCallRequestData
+              , DM._argumentsProcReadCommandData = dat^.DM.paramsMcpToolsCallRequestData^.DM.argumentsMcpToolsCallRequestDataParams
+              }
+
+  cmdQ <- view DM.procspawnQueueDomainData <$> lift ask
+  liftIO $ STM.atomically $ STM.writeTQueue cmdQ $ DM.ProcReadCommand cmdDat
+
+
+-- |
+--
+procWriteCommand :: DM.McpToolsCallRequestData -> AppContext ()
+procWriteCommand dat = do
+  let cmdDat = DM.ProcWriteCommandData {
+                DM._jsonrpcProcWriteCommandData   = dat^.DM.jsonrpcMcpToolsCallRequestData
+              , DM._argumentsProcWriteCommandData = dat^.DM.paramsMcpToolsCallRequestData^.DM.argumentsMcpToolsCallRequestDataParams
+              }
+
+  cmdQ <- view DM.procspawnQueueDomainData <$> lift ask
+  liftIO $ STM.atomically $ STM.writeTQueue cmdQ $ DM.ProcWriteCommand cmdDat
 
 
 -- |
