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.0.3.0 -- 2025-06-29
+
+* Added prompts interface.
+
 ## 0.0.2.0 -- 2025-06-22
 
 * Added file change monitoring for tools-list.json.
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.2.0
+version:            0.0.3.0
 
 -- A short (one-line) description of the package.
 synopsis:           pms-domain-service
@@ -68,12 +68,11 @@
                       PMS.Domain.Service.DS.State.Run,
                       PMS.Domain.Service.DS.State.Run.ToolsList,
                       PMS.Domain.Service.DS.State.Run.ToolsCall,
+                      PMS.Domain.Service.DS.State.Run.PromptsList,
+                      PMS.Domain.Service.DS.State.Run.PromptsGet,
                       PMS.Domain.Service.DS.State.Start,
-                      PMS.Domain.Service.DS.State.Start.Disconnect,
                       PMS.Domain.Service.DS.State.Start.Initialize,
                       PMS.Domain.Service.DS.State.Start.Initialized,
-                      PMS.Domain.Service.DS.State.Start.Launch,
-                      PMS.Domain.Service.DS.State.Start.Terminate,
                       PMS.Domain.Service.DS.State.Stop
 
     -- Modules included in this library but not exported.
@@ -99,6 +98,8 @@
                       filepath,
                       directory,
                       aeson,
+                      unordered-containers,
+                      mustache,
                       pms-domain-model
 
     -- Directories containing source files.
diff --git a/src/PMS/Domain/Service/DM/Type.hs b/src/PMS/Domain/Service/DM/Type.hs
--- a/src/PMS/Domain/Service/DM/Type.hs
+++ b/src/PMS/Domain/Service/DM/Type.hs
@@ -11,10 +11,27 @@
 import qualified PMS.Domain.Model.DM.Type as DM
 import qualified PMS.Domain.Model.DM.Constant as DM
 
+import Data.Aeson
+import qualified Data.Aeson.KeyMap as KM
+import Data.Aeson.Key (toText)
+import Control.Monad (forM)
 
 --------------------------------------------------------------------------------
 -- |
 --
+newtype JsonObjectMap = JsonObjectMap { unJsonObjectMap :: [(String, String)] }
+  deriving (Show)
+
+instance FromJSON JsonObjectMap where
+  parseJSON = withObject "JsonObjectMap" $ \o -> do
+    listPairs <- forM (KM.toList o) $ \(k, v) -> do
+      stringValue <- parseJSON v
+      return (T.unpack (toText k), T.unpack stringValue)
+    return $ JsonObjectMap listPairs
+
+--------------------------------------------------------------------------------
+-- |
+--
 data StateTransition =
     StartToRun
   | RunToStop
@@ -29,14 +46,16 @@
 data ExitEventData        = ExitEventData  deriving (Show)
 data TransitEventData     = TransitEventData StateTransition deriving (Show)
 -- doActibity
-data InitializeEventData        = InitializeEventData DM.McpInitializeRequestData deriving (Show)
+data InitializeEventData  = InitializeEventData DM.McpInitializeRequestData deriving (Show)
 data InitializedEventData = InitializedEventData DM.McpInitializedNotificationData deriving (Show)
 data ToolsListEventData   = ToolsListEventData DM.McpToolsListRequestData deriving (Show)
 data ToolsCallEventData   = ToolsCallEventData DM.McpToolsCallRequestData deriving (Show)
-data LaunchEventData      = LaunchEventData Int deriving (Show)
-data DisconnectEventData  = DisconnectEventData Int deriving (Show)
-data TerminateEventData   = TerminateEventData Int  deriving (Show)
+data PromptsListEventData = PromptsListEventData DM.McpPromptsListRequestData deriving (Show)
+data CancelledEventData   = CancelledEventData DM.McpCancelledNotificationData deriving (Show)
+data CompletionCompleteEventData = CompletionCompleteEventData DM.McpCompletionCompleteRequestData deriving (Show)
+data PromptsGetEventData         = PromptsGetEventData DM.McpPromptsGetRequestData deriving (Show)
 
+
 -- |
 --
 data Event r where
@@ -48,9 +67,10 @@
   InitializedEvent :: InitializedEventData -> Event InitializedEventData
   ToolsListEvent   :: ToolsListEventData   -> Event ToolsListEventData
   ToolsCallEvent   :: ToolsCallEventData   -> Event ToolsCallEventData
-  LaunchEvent      :: LaunchEventData      -> Event LaunchEventData
-  DisconnectEvent  :: DisconnectEventData  -> Event DisconnectEventData
-  TerminateEvent   :: TerminateEventData   -> Event TerminateEventData
+  PromptsListEvent :: PromptsListEventData -> Event PromptsListEventData
+  CancelledEvent   :: CancelledEventData   -> Event CancelledEventData
+  CompletionCompleteEvent :: CompletionCompleteEventData -> Event CompletionCompleteEventData
+  PromptsGetEvent         :: PromptsGetEventData -> Event PromptsGetEventData
 
 deriving instance Show r => Show (Event r)
 
diff --git a/src/PMS/Domain/Service/DS/Core.hs b/src/PMS/Domain/Service/DS/Core.hs
--- a/src/PMS/Domain/Service/DS/Core.hs
+++ b/src/PMS/Domain/Service/DS/Core.hs
@@ -77,9 +77,13 @@
 --
 req2ev :: DM.McpRequest -> AppContext EventW
 req2ev (DM.McpInitializeRequest dat) = pure . EventW . InitializeEvent . InitializeEventData $ dat
-req2ev (DM.McpInitializedNotification dat) = pure . EventW . InitializedEvent . InitializedEventData $ dat
 req2ev (DM.McpToolsListRequest dat) = pure . EventW . ToolsListEvent . ToolsListEventData $ dat
 req2ev (DM.McpToolsCallRequest dat) = pure . EventW . ToolsCallEvent . ToolsCallEventData $ dat
+req2ev (DM.McpPromptsListRequest dat) = pure . EventW . PromptsListEvent . PromptsListEventData $ dat
+req2ev (DM.McpInitializedNotification dat) = pure . EventW . InitializedEvent . InitializedEventData $ dat
+req2ev (DM.McpCancelledNotification dat) = pure . EventW . CancelledEvent . CancelledEventData $ dat
+req2ev (DM.McpCompletionCompleteRequest dat) = pure . EventW . CompletionCompleteEvent . CompletionCompleteEventData $ dat
+req2ev (DM.McpPromptsGetRequest dat) = pure . EventW . PromptsGetEvent . PromptsGetEventData $ dat
 
 ---------------------------------------------------------------------------------
 -- |
diff --git a/src/PMS/Domain/Service/DS/State/Run.hs b/src/PMS/Domain/Service/DS/State/Run.hs
--- a/src/PMS/Domain/Service/DS/State/Run.hs
+++ b/src/PMS/Domain/Service/DS/State/Run.hs
@@ -6,14 +6,19 @@
 module PMS.Domain.Service.DS.State.Run where
 
 import Control.Monad.Logger
+import qualified Data.Text as T
+import Control.Lens
 
+import qualified PMS.Domain.Model.DM.Type as DM
 import qualified PMS.Domain.Model.DM.Constant as DM
 
 import PMS.Domain.Service.DM.Type
 import PMS.Domain.Service.DM.TH
-
+import PMS.Domain.Service.DS.Utility
 import PMS.Domain.Service.DS.State.Run.ToolsList()
 import PMS.Domain.Service.DS.State.Run.ToolsCall()
+import PMS.Domain.Service.DS.State.Run.PromptsList()
+import PMS.Domain.Service.DS.State.Run.PromptsGet()
 
 
 instanceTH_IAppState ''RunStateData
@@ -23,14 +28,14 @@
 instance IStateActivity RunStateData EntryEventData where
   action _ _ = do
     $logDebugS DM._LOGTAG "Run entry called."
-    return Nothing
+    return noStateTransition
 
 -- |
 --
 instance IStateActivity RunStateData ExitEventData where
   action _ _ = do
     $logDebugS DM._LOGTAG "Run exit called."
-    return Nothing
+    return noStateTransition
 
 -- |
 --
@@ -44,24 +49,25 @@
 
 -- |
 --
-instance IStateActivity RunStateData LaunchEventData where
-  action _ _ = do
-    $logDebugS DM._LOGTAG "Run launch called."
-    return Nothing
+instance IStateActivity RunStateData InitializedEventData
+  -- @see default implementation in Type module.
 
--- |
---
-instance IStateActivity RunStateData DisconnectEventData where
-  action _ _ = do
-    $logDebugS DM._LOGTAG "Run discoonect called."
-    return $ Just RunToStop
 
 -- |
 --
-instance IStateActivity RunStateData TerminateEventData
-  -- @see default implementation in Type module.
+instance IStateActivity RunStateData CancelledEventData where
+  action _ dat = do
+    $logInfoS DM._LOGTAG $ T.pack $ "notifications/cancelled called. " ++ show dat
+    return noStateTransition
 
+
 -- |
 --
-instance IStateActivity RunStateData InitializedEventData
-  -- @see default implementation in Type module.
+instance IStateActivity RunStateData CompletionCompleteEventData where
+  action _ (CompletionCompleteEvent (CompletionCompleteEventData evDat)) = do
+    $logInfoS DM._LOGTAG $ T.pack $ "CompletionCompleteEvent called. " ++ show evDat
+
+    sendCompletionResponse $ evDat^.DM.jsonrpcMcpCompletionCompleteRequestData
+
+    return noStateTransition
+
diff --git a/src/PMS/Domain/Service/DS/State/Run/PromptsGet.hs b/src/PMS/Domain/Service/DS/State/Run/PromptsGet.hs
new file mode 100644
--- /dev/null
+++ b/src/PMS/Domain/Service/DS/State/Run/PromptsGet.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE GADTs #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module PMS.Domain.Service.DS.State.Run.PromptsGet where
+
+
+import Control.Monad.IO.Class
+import Control.Monad.Trans.Class
+import Control.Monad.Logger
+import Control.Lens
+import Control.Monad.Reader
+import qualified Control.Concurrent.STM as STM
+import qualified Data.Text as T
+import Data.Aeson
+import Control.Monad.Except
+import System.FilePath
+import Data.Default
+import Text.Mustache
+import qualified Data.Aeson as Aeson
+import Data.Bifunctor
+
+import qualified PMS.Domain.Model.DM.Type as DM
+import qualified PMS.Domain.Model.DM.Constant as DM
+
+import PMS.Domain.Service.DM.Type
+
+
+-- |
+--
+instance IStateActivity RunStateData PromptsGetEventData where
+  action _ (PromptsGetEvent (PromptsGetEventData evDat)) = flip catchError errHdl $ do
+    $logDebugS DM._LOGTAG $ T.pack $ "Run PromptsGetEvent called." ++ show evDat
+
+    let params = evDat^.DM.paramsMcpPromptsGetRequestData
+        name = params^.DM.nameMcpPromptsGetRequestDataParams
+        argsBS = DM.unRawJsonByteString $ params^.DM.argumentsMcpPromptsGetRequestDataParams
+    
+    promptsDir <- view DM.promptsDirDomainData <$> lift ask
+    let promptsFile = name ++ ".md"
+        promptsFilePath = promptsDir </> promptsFile
+    
+    argsDat <- liftEither $ eitherDecode $ argsBS
+    let args = unJsonObjectMap argsDat
+        
+    $logDebugS DM._LOGTAG $ T.pack $ "promptsFile : " ++ promptsFile
+    $logDebugS DM._LOGTAG $ T.pack $ "promptsFilePath : " ++ promptsFilePath
+    $logDebugS DM._LOGTAG $ T.pack $ "arguments : " ++ show args
+
+    tmplParams <- liftEither $ eitherDecode $ argsBS
+    tmplTmp <- liftIO $ automaticCompile [promptsDir] promptsFile
+    tmpl <- liftEither $ first show tmplTmp
+    let rendered = substitute tmpl (tmplParams :: Aeson.Value)
+        cont = T.unpack rendered
+    
+    -- cont <- U.readFile promptsFilePath
+    -- response $ TL.unpack $ TLE.decodeUtf8 cont
+
+    response cont
+    
+    return noStateTransition
+
+    where
+      errHdl :: String -> AppContext (Maybe StateTransition)
+      errHdl msg = do
+        $logErrorS DM._LOGTAG $ T.pack $ "PromptsGetEventData: exception occurred. " ++ msg
+        response msg
+        return noStateTransition
+
+      response :: String -> AppContext ()
+      response cont = do
+        let role = "assistant"
+            txtDat = def {DM._textMcpTextContent = cont} 
+            content = encode txtDat
+            msg = DM.McpPromptsGetResponseResultPromptMessage role (DM.RawJsonByteString content)
+            result = DM.McpPromptsGetResponseResult [msg]
+            jsonRpc = evDat^.DM.jsonrpcMcpPromptsGetRequestData
+            resDat = DM.McpPromptsGetResponseData jsonRpc result
+            res = DM.McpPromptsGetResponse resDat
+
+        $logDebugS DM._LOGTAG $ T.pack $ show res
+
+        queue <- view DM.responseQueueDomainData <$> lift ask
+        liftIO $ STM.atomically $ STM.writeTQueue queue res
+  
diff --git a/src/PMS/Domain/Service/DS/State/Run/PromptsList.hs b/src/PMS/Domain/Service/DS/State/Run/PromptsList.hs
new file mode 100644
--- /dev/null
+++ b/src/PMS/Domain/Service/DS/State/Run/PromptsList.hs
@@ -0,0 +1,64 @@
+{-# LANGUAGE GADTs #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module PMS.Domain.Service.DS.State.Run.PromptsList where
+
+import Control.Monad.IO.Class
+import Control.Monad.Trans.Class
+import Control.Monad.Logger
+import qualified Data.Text as T
+import Control.Lens
+import Control.Monad.Reader
+import qualified Control.Concurrent.STM as STM
+import System.FilePath
+import System.Directory
+import Control.Monad.Except
+import qualified Data.ByteString.Lazy as BL
+import qualified Data.ByteString.Lazy.Char8 as BL8
+
+import qualified PMS.Domain.Model.DM.Type as DM
+import qualified PMS.Domain.Model.DM.Constant as DM
+
+import PMS.Domain.Service.DM.Type
+import qualified PMS.Domain.Service.DS.Utility as U
+
+
+-- |
+--
+instance IStateActivity RunStateData PromptsListEventData where
+  action _ (PromptsListEvent (PromptsListEventData dat)) = flip catchError errHdl $ do
+    $logDebugS DM._LOGTAG "Run PromptsListEvent called."
+
+    promptsDir <- view DM.promptsDirDomainData <$> lift ask
+
+    let promptsFile = promptsDir </> DM._PROMPTS_LIST_FILE
+    exists <- liftIO $ doesFileExist promptsFile
+    cont <- if exists
+              then U.readFile promptsFile
+              else do
+                $logInfoS DM._LOGTAG $ T.pack $ "file not found." ++ promptsFile
+                return "[]"
+
+    response cont
+    return noStateTransition
+
+    where
+      errHdl :: String -> AppContext (Maybe StateTransition)
+      errHdl msg = do
+        $logErrorS DM._LOGTAG $ T.pack $ "PromptsListEventData: exception occurred. " ++ msg
+        response $ BL8.pack msg
+        return noStateTransition
+
+      response :: BL.ByteString -> AppContext ()
+      response cont = do
+        let result = DM.McpPromptsListResponseResult $ DM.RawJsonByteString cont
+            jsonRpc = dat^.DM.jsonrpcMcpPromptsListRequestData
+            resDat = DM.McpPromptsListResponseData jsonRpc result
+            res = DM.McpPromptsListResponse resDat
+
+        $logDebugS DM._LOGTAG $ T.pack $ show res
+
+        queue <- view DM.responseQueueDomainData <$> lift ask
+        liftIO $ STM.atomically $ STM.writeTQueue queue res
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
@@ -33,14 +33,17 @@
     
     where
       go :: DM.McpToolsCallRequestData -> String -> AppContext ()
-      go dat "pty-connect"   = ptyConnectCommand dat
-      go dat "pty-terminate" = ptyTerminateCommand dat
-      go dat "pty-message"   = ptyMessageCommand dat
-      go dat "pty-bash"      = ptyConnectCommand dat
-      go dat "pty-ssh"       = ptyConnectCommand dat
-      go dat "pty-cabal"     = ptyConnectCommand dat
-      go dat "pty-stack"     = ptyConnectCommand dat
-      go dat "pty-ghci"      = ptyConnectCommand dat
+      go dat "pty-connect"    = ptyConnectCommand dat
+      go dat "pty-terminate"  = ptyTerminateCommand dat
+      go dat "pty-message"    = ptyMessageCommand dat
+      go dat "pty-bash"       = ptyConnectCommand dat
+      go dat "pty-ssh"        = ptyConnectCommand dat
+      go dat "pty-cabal"      = ptyConnectCommand dat
+      go dat "pty-stack"      = ptyConnectCommand dat
+      go dat "pty-ghci"       = ptyConnectCommand dat
+      go dat "proc-spawn"     = procRunCommand dat
+      go dat "proc-terminate" = procTerminateCommand dat
+      go dat "proc-message"   = procMessageCommand dat
       go dat _ = cmdRunCommand dat
 
 
@@ -65,9 +68,7 @@
 ptyTerminateCommand dat = do
   resQ <- view DM.responseQueueDomainData <$> lift ask
   let cmdDat = DM.PtyTerminateCommandData {
-                DM._namePtyTerminateCommandData      = dat^.DM.paramsMcpToolsCallRequestData^.DM.nameMcpToolsCallRequestDataParams
-              , DM._argumentsPtyTerminateCommandData = dat^.DM.paramsMcpToolsCallRequestData^.DM.argumentsMcpToolsCallRequestDataParams
-              , DM._callbackPtyTerminateCommandData  = callback dat resQ
+                DM._callbackPtyTerminateCommandData  = callback dat resQ
               }
 
   cmdQ <- view DM.commandQueueDomainData <$> lift ask
@@ -80,8 +81,7 @@
 ptyMessageCommand dat = do
   resQ <- view DM.responseQueueDomainData <$> lift ask
   let cmdDat = DM.PtyMessageCommandData {
-                DM._namePtyMessageCommandData      = dat^.DM.paramsMcpToolsCallRequestData^.DM.nameMcpToolsCallRequestDataParams
-              , DM._argumentsPtyMessageCommandData = dat^.DM.paramsMcpToolsCallRequestData^.DM.argumentsMcpToolsCallRequestDataParams
+                DM._argumentsPtyMessageCommandData = dat^.DM.paramsMcpToolsCallRequestData^.DM.argumentsMcpToolsCallRequestDataParams
               , DM._callbackPtyMessageCommandData  = callback dat resQ
               }
 
@@ -91,7 +91,7 @@
 
 -- |
 --
-callback :: DM.McpToolsCallRequestData -> STM.TQueue DM.McpResponse -> DM.SystemCommandCallback ()
+callback :: DM.McpToolsCallRequestData -> STM.TQueue DM.McpResponse -> DM.ToolsCallCommandCallback ()
 callback evDat resQ code outStr errStr = do
   hPutStrLn stderr $ "[INFO] PMS.Domain.Service.DS.State.Run.callback called."
 
@@ -113,20 +113,47 @@
 
 -- |
 --
-cmdRunCommand :: DM.McpToolsCallRequestData -> AppContext ()
-cmdRunCommand dat = do
-  {-
-  resQ <- view DM.responseQueueDomainData <$> lift ask
-  let cmdDat2 = DM.SystemCommandData {
-                DM._nameSystemCommandData = dat^.DM.paramsMcpToolsCallRequestData^.DM.nameMcpToolsCallRequestDataParams
-              , DM._argumentsSystemCommandData = dat^.DM.paramsMcpToolsCallRequestData^.DM.argumentsMcpToolsCallRequestDataParams
-              , DM._callbackSystemCommandData = callback dat resQ
+procRunCommand :: DM.McpToolsCallRequestData -> AppContext ()
+procRunCommand dat = do
+  let cmdDat = DM.ProcRunCommandData {
+                DM._jsonrpcProcRunCommandData   = dat^.DM.jsonrpcMcpToolsCallRequestData
+              , DM._nameProcRunCommandData      = dat^.DM.paramsMcpToolsCallRequestData^.DM.nameMcpToolsCallRequestDataParams
+              , DM._argumentsProcRunCommandData = dat^.DM.paramsMcpToolsCallRequestData^.DM.argumentsMcpToolsCallRequestDataParams
               }
 
-  cmdQ2 <- view DM.commandQueueDomainData <$> lift ask
-  -}
-  -- liftIO $ STM.atomically $ STM.writeTQueue cmdQ2 $ DM.SystemCommand cmdDat2
+  cmdQ <- view DM.procspawnQueueDomainData <$> lift ask
+  liftIO $ STM.atomically $ STM.writeTQueue cmdQ $ DM.ProcRunCommand cmdDat
 
+
+-- |
+--
+procTerminateCommand :: DM.McpToolsCallRequestData -> AppContext ()
+procTerminateCommand dat = do
+  let cmdDat = DM.ProcTerminateCommandData {
+                DM._jsonrpcProcTerminateCommandData   = dat^.DM.jsonrpcMcpToolsCallRequestData
+              }
+
+  cmdQ <- view DM.procspawnQueueDomainData <$> lift ask
+  liftIO $ STM.atomically $ STM.writeTQueue cmdQ $ DM.ProcTerminateCommand cmdDat
+
+
+-- |
+--
+procMessageCommand :: DM.McpToolsCallRequestData -> AppContext ()
+procMessageCommand dat = do
+  let cmdDat = DM.ProcMessageCommandData {
+                DM._jsonrpcProcMessageCommandData   = dat^.DM.jsonrpcMcpToolsCallRequestData
+              , DM._argumentsProcMessageCommandData = dat^.DM.paramsMcpToolsCallRequestData^.DM.argumentsMcpToolsCallRequestDataParams
+              }
+
+  cmdQ <- view DM.procspawnQueueDomainData <$> lift ask
+  liftIO $ STM.atomically $ STM.writeTQueue cmdQ $ DM.ProcMessageCommand cmdDat
+
+
+-- |
+--
+cmdRunCommand :: DM.McpToolsCallRequestData -> AppContext ()
+cmdRunCommand dat = do
   let cmdDat = DM.DefaultCmdRunCommandData {
                 DM._jsonrpcDefaultCmdRunCommandData   = dat^.DM.jsonrpcMcpToolsCallRequestData
               , DM._nameDefaultCmdRunCommandData      = dat^.DM.paramsMcpToolsCallRequestData^.DM.nameMcpToolsCallRequestDataParams
diff --git a/src/PMS/Domain/Service/DS/State/Run/ToolsList.hs b/src/PMS/Domain/Service/DS/State/Run/ToolsList.hs
--- a/src/PMS/Domain/Service/DS/State/Run/ToolsList.hs
+++ b/src/PMS/Domain/Service/DS/State/Run/ToolsList.hs
@@ -13,6 +13,10 @@
 import Control.Monad.Reader
 import qualified Control.Concurrent.STM as STM
 import System.FilePath
+import System.Directory
+import Control.Monad.Except
+import qualified Data.ByteString.Lazy as BL
+import qualified Data.ByteString.Lazy.Char8 as BL8
 
 import qualified PMS.Domain.Model.DM.Type as DM
 import qualified PMS.Domain.Model.DM.Constant as DM
@@ -24,23 +28,37 @@
 -- |
 --
 instance IStateActivity RunStateData ToolsListEventData where
-  action s (ToolsListEvent r@(ToolsListEventData dat)) = do
+  action _ (ToolsListEvent (ToolsListEventData dat)) = flip catchError errHdl $ do
     $logDebugS DM._LOGTAG "Run ToolsListEvent called."
-    $logDebugS DM._LOGTAG (T.pack (show s))
-    $logDebugS DM._LOGTAG (T.pack (show r))
 
     toolsDir <- view DM.toolsDirDomainData <$> lift ask
 
     let toolFile = toolsDir </> DM._TOOLS_LIST_FILE
-    cont <- U.readFile toolFile
-    let result = DM.McpToolsListResponseResult $ DM.RawJsonByteString cont
-        jsonRpc = dat^.DM.jsonrpcMcpToolsListRequestData
-        resDat = DM.McpToolsListResponseData jsonRpc result
-        res = DM.McpToolsListResponse resDat
+    exists <- liftIO $ doesFileExist toolFile
+    cont <- if exists
+              then U.readFile toolFile
+              else do
+                $logInfoS DM._LOGTAG $ T.pack $ "file not found." ++ toolFile
+                return "[]"
 
-    $logDebugS DM._LOGTAG $ T.pack $ show res
+    response cont
+    return noStateTransition
 
-    queue <- view DM.responseQueueDomainData <$> lift ask
-    liftIO $ STM.atomically $ STM.writeTQueue queue res
+    where
+      errHdl :: String -> AppContext (Maybe StateTransition)
+      errHdl msg = do
+        $logErrorS DM._LOGTAG $ T.pack $ "PromptsListEventData: exception occurred. " ++ msg
+        response $ BL8.pack msg
+        return noStateTransition
 
-    return noStateTransition
+      response :: BL.ByteString -> AppContext ()
+      response cont = do
+        let result = DM.McpToolsListResponseResult $ DM.RawJsonByteString cont
+            jsonRpc = dat^.DM.jsonrpcMcpToolsListRequestData
+            resDat = DM.McpToolsListResponseData jsonRpc result
+            res = DM.McpToolsListResponse resDat
+
+        $logDebugS DM._LOGTAG $ T.pack $ show res
+
+        queue <- view DM.responseQueueDomainData <$> lift ask
+        liftIO $ STM.atomically $ STM.writeTQueue queue res
diff --git a/src/PMS/Domain/Service/DS/State/Start.hs b/src/PMS/Domain/Service/DS/State/Start.hs
--- a/src/PMS/Domain/Service/DS/State/Start.hs
+++ b/src/PMS/Domain/Service/DS/State/Start.hs
@@ -6,16 +6,17 @@
 module PMS.Domain.Service.DS.State.Start where
 
 import Control.Monad.Logger
+import qualified Data.Text as T
+import Control.Lens
 
+import qualified PMS.Domain.Model.DM.Type as DM
 import qualified PMS.Domain.Model.DM.Constant as DM
 
+import PMS.Domain.Service.DS.Utility
 import PMS.Domain.Service.DM.Type
 import PMS.Domain.Service.DM.TH
 import PMS.Domain.Service.DS.State.Start.Initialize()
 import PMS.Domain.Service.DS.State.Start.Initialized()
-import PMS.Domain.Service.DS.State.Start.Launch()
-import PMS.Domain.Service.DS.State.Start.Disconnect()
-import PMS.Domain.Service.DS.State.Start.Terminate()
 
 {-
 -- |
@@ -36,14 +37,14 @@
 instance IStateActivity StartStateData EntryEventData where
   action _ _ = do
     $logDebugS DM._LOGTAG "Start entry called."
-    return Nothing
+    return noStateTransition
 
 -- |
 --
 instance IStateActivity StartStateData ExitEventData where
   action _ _ = do
     $logDebugS DM._LOGTAG "Start exit called."
-    return Nothing
+    return noStateTransition
 
 -- |
 --
@@ -77,4 +78,31 @@
 -- |
 --
 instance IStateActivity StartStateData ToolsCallEventData
+  -- @see default implementation in Type module.
+
+-- |
+--
+instance IStateActivity StartStateData PromptsListEventData
+  -- @see default implementation in Type module.
+
+-- |
+--
+instance IStateActivity StartStateData CancelledEventData where
+  action _ dat = do
+    $logInfoS DM._LOGTAG $ T.pack $ "notifications/cancelled called. " ++ show dat
+    return noStateTransition
+
+-- |
+--
+instance IStateActivity StartStateData CompletionCompleteEventData where
+  action _ (CompletionCompleteEvent (CompletionCompleteEventData evDat)) = do
+    $logInfoS DM._LOGTAG $ T.pack $ "CompletionCompleteEvent called. " ++ show evDat
+
+    sendCompletionResponse $ evDat^.DM.jsonrpcMcpCompletionCompleteRequestData
+
+    return noStateTransition
+
+-- |
+--
+instance IStateActivity StartStateData PromptsGetEventData
   -- @see default implementation in Type module.
diff --git a/src/PMS/Domain/Service/DS/State/Start/Disconnect.hs b/src/PMS/Domain/Service/DS/State/Start/Disconnect.hs
deleted file mode 100644
--- a/src/PMS/Domain/Service/DS/State/Start/Disconnect.hs
+++ /dev/null
@@ -1,12 +0,0 @@
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-
-module PMS.Domain.Service.DS.State.Start.Disconnect where
-
-import PMS.Domain.Service.DM.Type
-
--- |
---
-instance IStateActivity StartStateData DisconnectEventData
-  -- @see default implementation in Type module.
-
diff --git a/src/PMS/Domain/Service/DS/State/Start/Initialized.hs b/src/PMS/Domain/Service/DS/State/Start/Initialized.hs
--- a/src/PMS/Domain/Service/DS/State/Start/Initialized.hs
+++ b/src/PMS/Domain/Service/DS/State/Start/Initialized.hs
@@ -24,11 +24,15 @@
   action _ (InitializedEvent (InitializedEventData _)) = do
     $logDebugS DM._LOGTAG "initialized called."
 
-    $logDebugS DM._LOGTAG "start watch tools-list.json."
-    let cmd = DM.ToolsListWatchCommand DM.ToolsListWatchCommandData
-
     wq <- view DM.watchQueueDomainData <$> lift ask
-    liftIO $ STM.atomically $ STM.writeTQueue wq cmd
+
+    $logDebugS DM._LOGTAG "start watch tools-list.json."
+    let toolCmd = DM.ToolsListWatchCommand DM.ToolsListWatchCommandData
+    liftIO $ STM.atomically $ STM.writeTQueue wq toolCmd
     
+    $logDebugS DM._LOGTAG "start watch prompts-list.json."
+    let promptsCmd = DM.PromptsListWatchCommand DM.PromptsListWatchCommandData
+    liftIO $ STM.atomically $ STM.writeTQueue wq promptsCmd
+
     return $ Just StartToRun
 
diff --git a/src/PMS/Domain/Service/DS/State/Start/Launch.hs b/src/PMS/Domain/Service/DS/State/Start/Launch.hs
deleted file mode 100644
--- a/src/PMS/Domain/Service/DS/State/Start/Launch.hs
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-
-module PMS.Domain.Service.DS.State.Start.Launch where
-
-import PMS.Domain.Service.DM.Type
-
-
--- |
---
-instance IStateActivity StartStateData LaunchEventData
-  -- @see default implementation in Type module.
-
diff --git a/src/PMS/Domain/Service/DS/State/Start/Terminate.hs b/src/PMS/Domain/Service/DS/State/Start/Terminate.hs
deleted file mode 100644
--- a/src/PMS/Domain/Service/DS/State/Start/Terminate.hs
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-
-module PMS.Domain.Service.DS.State.Start.Terminate where
-
-import PMS.Domain.Service.DM.Type
-
-
--- |
---
-instance IStateActivity StartStateData TerminateEventData
-  -- @see default implementation in Type module.
-
diff --git a/src/PMS/Domain/Service/DS/State/Stop.hs b/src/PMS/Domain/Service/DS/State/Stop.hs
--- a/src/PMS/Domain/Service/DS/State/Stop.hs
+++ b/src/PMS/Domain/Service/DS/State/Stop.hs
@@ -6,9 +6,13 @@
 module PMS.Domain.Service.DS.State.Stop where
 
 import Control.Monad.Logger
+import qualified Data.Text as T
+import Control.Lens
 
+import qualified PMS.Domain.Model.DM.Type as DM
 import qualified PMS.Domain.Model.DM.Constant as DM
 
+import PMS.Domain.Service.DS.Utility
 import PMS.Domain.Service.DM.Type
 import PMS.Domain.Service.DM.TH
 
@@ -21,14 +25,14 @@
 instance IStateActivity StopStateData EntryEventData where
   action _ _ = do
     $logDebugS DM._LOGTAG "Stop entry called."
-    return Nothing
+    return noStateTransition
 
 -- |
 --
 instance IStateActivity StopStateData ExitEventData where
   action _ _ = do
     $logDebugS DM._LOGTAG "Stop exit called."
-    return Nothing
+    return noStateTransition
 
 -- |
 --
@@ -42,21 +46,22 @@
 
 -- |
 --
-instance IStateActivity StopStateData LaunchEventData
+-- instance IStateActivity StopStateData LaunchEventData
   -- @see default implementation in Type module.
 
 -- |
 --
-instance IStateActivity StopStateData DisconnectEventData
+-- instance IStateActivity StopStateData DisconnectEventData
   -- @see default implementation in Type module.
 
 -- |
 --
+{-
 instance IStateActivity StopStateData TerminateEventData where
   action _ _ = do
     $logDebugS DM._LOGTAG "Stop terminate called. will exit."
     return Nothing
-
+-}
 -- |
 --
 instance IStateActivity StopStateData InitializedEventData
@@ -71,3 +76,32 @@
 --
 instance IStateActivity StopStateData ToolsCallEventData
   -- @see default implementation in Type module.
+
+-- |
+--
+instance IStateActivity StopStateData PromptsListEventData
+  -- @see default implementation in Type module.
+
+-- |
+--
+instance IStateActivity StopStateData CancelledEventData where
+  action _ dat = do
+    $logInfoS DM._LOGTAG $ T.pack $ "notifications/cancelled called. " ++ show dat
+    return noStateTransition
+
+
+-- |
+--
+instance IStateActivity StopStateData CompletionCompleteEventData where
+  action _ (CompletionCompleteEvent (CompletionCompleteEventData evDat)) = do
+    $logInfoS DM._LOGTAG $ T.pack $ "CompletionCompleteEvent called. " ++ show evDat
+
+    sendCompletionResponse $ evDat^.DM.jsonrpcMcpCompletionCompleteRequestData
+
+    return noStateTransition
+
+-- |
+--
+instance IStateActivity StopStateData PromptsGetEventData
+  -- @see default implementation in Type module.
+
diff --git a/src/PMS/Domain/Service/DS/Utility.hs b/src/PMS/Domain/Service/DS/Utility.hs
--- a/src/PMS/Domain/Service/DS/Utility.hs
+++ b/src/PMS/Domain/Service/DS/Utility.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TemplateHaskell #-}
 
 module PMS.Domain.Service.DS.Utility where
 
@@ -11,9 +12,16 @@
 import qualified Data.Text.Encoding as TE
 import qualified Data.ByteString.Lazy as BL
 import System.Directory
+import Control.Monad.Logger
+import qualified Control.Concurrent.STM as STM
+import Control.Lens
+import Data.Default
+import qualified Data.Text as T
 
 import qualified PMS.Domain.Model.DM.Type as DM
 import qualified PMS.Domain.Model.DS.Utility as DM
+import qualified PMS.Domain.Model.DM.Constant as DM
+
 import PMS.Domain.Service.DM.Type
 
 
@@ -74,3 +82,16 @@
 isReadable f = liftIOE (readable <$> getPermissions f) >>= \case
   True  -> return f
   False -> throwError $ "invalid file. not readable." ++ f
+
+-- |
+--
+sendCompletionResponse :: DM.JsonRpcRequest -> AppContext ()
+sendCompletionResponse jsonRpc = do
+  let result = def
+      resDat = DM.McpCompleteResponseData jsonRpc result
+      res = DM.McpCompleteResponse resDat
+
+  $logDebugS DM._LOGTAG $ T.pack $ show res
+
+  queue <- view DM.responseQueueDomainData <$> lift ask
+  liftIO $ STM.atomically $ STM.writeTQueue queue res
