mcp-server-0.1.0.11: src/MCP/Server.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
module MCP.Server
( -- * Server Runtime
runMcpServerStdIn
, runMcpServerWithTransport
-- * Transport Support
, module MCP.Server.Transport.Types
, module MCP.Server.Transport.Stdio
, module MCP.Server.Transport.Http
-- * Utility Functions
, jsonValueToText
-- * Re-exports
, module MCP.Server.Types
) where
import Control.Monad.IO.Class (MonadIO)
import Data.Aeson
import Data.Text (Text)
import qualified Data.Text as T
import MCP.Server.Transport.Types
import MCP.Server.Transport.Stdio
import MCP.Server.Transport.Http
import MCP.Server.Types
-- | Convert JSON Value to Text representation suitable for handlers
jsonValueToText :: Value -> Text
jsonValueToText (String t) = t
jsonValueToText (Number n) =
-- Check if it's a whole number, if so format as integer
if fromInteger (round n) == n
then T.pack $ show (round n :: Integer)
else T.pack $ show n
jsonValueToText (Bool True) = "true"
jsonValueToText (Bool False) = "false"
jsonValueToText Null = ""
jsonValueToText v = T.pack $ show v
-- | Run an MCP server with a specific transport
runMcpServerWithTransport :: (MonadIO m, McpTransport t)
=> t -- ^ Transport configuration
-> McpServerInfo -- ^ Server information
-> McpServerHandlers m -- ^ Message handlers
-> m TransportResult -- ^ Result of transport operation
runMcpServerWithTransport transport serverInfo handlers =
runTransport transport serverInfo handlers
-- | Run an MCP server using stdin/stdout
runMcpServerStdIn :: McpServerInfo -> McpServerHandlers IO -> IO ()
runMcpServerStdIn serverInfo handlers = do
_ <- runMcpServerWithTransport StdioTransport serverInfo handlers
return ()