mcp-server-0.1.0.12: src/MCP/Server.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
module MCP.Server
( -- * Server Runtime
runMcpServerStdio
, runMcpServerHttp
, runMcpServerHttpWithConfig
-- * Transport Configuration
, HttpConfig(..)
-- * 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.Stdio (transportRunStdio)
import MCP.Server.Transport.Http (HttpConfig(..), transportRunHttp, defaultHttpConfig)
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 using STDIO transport
runMcpServerStdio :: McpServerInfo -> McpServerHandlers IO -> IO ()
runMcpServerStdio serverInfo handlers = transportRunStdio serverInfo handlers
-- | Run an MCP server using HTTP transport with default configuration
runMcpServerHttp :: McpServerInfo -> McpServerHandlers IO -> IO ()
runMcpServerHttp serverInfo handlers = transportRunHttp defaultHttpConfig serverInfo handlers
-- | Run an MCP server using HTTP transport with custom configuration
runMcpServerHttpWithConfig :: HttpConfig -> McpServerInfo -> McpServerHandlers IO -> IO ()
runMcpServerHttpWithConfig config serverInfo handlers = transportRunHttp config serverInfo handlers