{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
module MCP.Server.Types
(
Content(..)
, ContentImageData(..)
, ContentResourceData(..)
, Error(..)
, PromptDefinition(..)
, ResourceDefinition(..)
, ToolDefinition(..)
, ArgumentDefinition(..)
, InputSchemaDefinition(..)
, InputSchemaDefinitionProperty(..)
, McpServerInfo(..)
, McpServerHandlers(..)
, ServerCapabilities(..)
, PromptCapabilities(..)
, ResourceCapabilities(..)
, ToolCapabilities(..)
, LoggingCapabilities(..)
, PromptListHandler
, PromptGetHandler
, ResourceListHandler
, ResourceReadHandler
, ToolListHandler
, ToolCallHandler
, PromptName
, ToolName
, ArgumentName
, ArgumentValue
) where
import Data.Aeson
import Data.Aeson.Key (fromText)
import Data.Aeson.Types (Parser)
import Data.Maybe (catMaybes)
import Data.Text (Text)
import qualified Data.Text as T
import GHC.Generics (Generic)
import Network.URI (URI)
type PromptName = Text
type ToolName = Text
type ArgumentName = Text
type ArgumentValue = Text
data Content
= ContentText Text
| ContentImage ContentImageData
| ContentResource ContentResourceData
deriving (Int -> Content -> ShowS
[Content] -> ShowS
Content -> String
(Int -> Content -> ShowS)
-> (Content -> String) -> ([Content] -> ShowS) -> Show Content
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Content -> ShowS
showsPrec :: Int -> Content -> ShowS
$cshow :: Content -> String
show :: Content -> String
$cshowList :: [Content] -> ShowS
showList :: [Content] -> ShowS
Show, Content -> Content -> Bool
(Content -> Content -> Bool)
-> (Content -> Content -> Bool) -> Eq Content
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Content -> Content -> Bool
== :: Content -> Content -> Bool
$c/= :: Content -> Content -> Bool
/= :: Content -> Content -> Bool
Eq, (forall x. Content -> Rep Content x)
-> (forall x. Rep Content x -> Content) -> Generic Content
forall x. Rep Content x -> Content
forall x. Content -> Rep Content x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. Content -> Rep Content x
from :: forall x. Content -> Rep Content x
$cto :: forall x. Rep Content x -> Content
to :: forall x. Rep Content x -> Content
Generic)
instance ToJSON Content where
toJSON :: Content -> Value
toJSON (ContentText Text
text) = [Pair] -> Value
object
[ Key
"type" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Text
"text" :: Text)
, Key
"text" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
text
]
toJSON (ContentImage ContentImageData
img) = [Pair] -> Value
object
[ Key
"type" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Text
"image" :: Text)
, Key
"data" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= ContentImageData -> Text
contentImageData ContentImageData
img
, Key
"mimeType" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= ContentImageData -> Text
contentImageMimeType ContentImageData
img
]
toJSON (ContentResource ContentResourceData
res) = [Pair] -> Value
object
[ Key
"type" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Text
"resource" :: Text)
, Key
"resource" Key -> Value -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Pair] -> Value
object
[ Key
"uri" Key -> URI -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= ContentResourceData -> URI
contentResourceUri ContentResourceData
res
, Key
"mimeType" Key -> Maybe Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= ContentResourceData -> Maybe Text
contentResourceMimeType ContentResourceData
res
]
]
instance FromJSON Content where
parseJSON :: Value -> Parser Content
parseJSON = String -> (Object -> Parser Content) -> Value -> Parser Content
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"Content" ((Object -> Parser Content) -> Value -> Parser Content)
-> (Object -> Parser Content) -> Value -> Parser Content
forall a b. (a -> b) -> a -> b
$ \Object
o -> do
contentType <- Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"type" :: Parser Text
case contentType of
Text
"text" -> Text -> Content
ContentText (Text -> Content) -> Parser Text -> Parser Content
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"text"
Text
"image" -> do
imgData <- Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"data"
mimeType <- o .: "mimeType"
return $ ContentImage $ ContentImageData imgData mimeType
Text
"resource" -> do
res <- Object
o Object -> Key -> Parser Object
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"resource"
uri <- res .: "uri"
mimeType <- res .:? "mimeType"
return $ ContentResource $ ContentResourceData uri mimeType
Text
_ -> String -> Parser Content
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser Content) -> String -> Parser Content
forall a b. (a -> b) -> a -> b
$ String
"Unknown content type: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Text -> String
T.unpack Text
contentType
data ContentImageData = ContentImageData
{ ContentImageData -> Text
contentImageData :: Text
, ContentImageData -> Text
contentImageMimeType :: Text
} deriving (Int -> ContentImageData -> ShowS
[ContentImageData] -> ShowS
ContentImageData -> String
(Int -> ContentImageData -> ShowS)
-> (ContentImageData -> String)
-> ([ContentImageData] -> ShowS)
-> Show ContentImageData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ContentImageData -> ShowS
showsPrec :: Int -> ContentImageData -> ShowS
$cshow :: ContentImageData -> String
show :: ContentImageData -> String
$cshowList :: [ContentImageData] -> ShowS
showList :: [ContentImageData] -> ShowS
Show, ContentImageData -> ContentImageData -> Bool
(ContentImageData -> ContentImageData -> Bool)
-> (ContentImageData -> ContentImageData -> Bool)
-> Eq ContentImageData
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ContentImageData -> ContentImageData -> Bool
== :: ContentImageData -> ContentImageData -> Bool
$c/= :: ContentImageData -> ContentImageData -> Bool
/= :: ContentImageData -> ContentImageData -> Bool
Eq, (forall x. ContentImageData -> Rep ContentImageData x)
-> (forall x. Rep ContentImageData x -> ContentImageData)
-> Generic ContentImageData
forall x. Rep ContentImageData x -> ContentImageData
forall x. ContentImageData -> Rep ContentImageData x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ContentImageData -> Rep ContentImageData x
from :: forall x. ContentImageData -> Rep ContentImageData x
$cto :: forall x. Rep ContentImageData x -> ContentImageData
to :: forall x. Rep ContentImageData x -> ContentImageData
Generic)
data ContentResourceData = ContentResourceData
{ ContentResourceData -> URI
contentResourceUri :: URI
, ContentResourceData -> Maybe Text
contentResourceMimeType :: Maybe Text
} deriving (Int -> ContentResourceData -> ShowS
[ContentResourceData] -> ShowS
ContentResourceData -> String
(Int -> ContentResourceData -> ShowS)
-> (ContentResourceData -> String)
-> ([ContentResourceData] -> ShowS)
-> Show ContentResourceData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ContentResourceData -> ShowS
showsPrec :: Int -> ContentResourceData -> ShowS
$cshow :: ContentResourceData -> String
show :: ContentResourceData -> String
$cshowList :: [ContentResourceData] -> ShowS
showList :: [ContentResourceData] -> ShowS
Show, ContentResourceData -> ContentResourceData -> Bool
(ContentResourceData -> ContentResourceData -> Bool)
-> (ContentResourceData -> ContentResourceData -> Bool)
-> Eq ContentResourceData
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ContentResourceData -> ContentResourceData -> Bool
== :: ContentResourceData -> ContentResourceData -> Bool
$c/= :: ContentResourceData -> ContentResourceData -> Bool
/= :: ContentResourceData -> ContentResourceData -> Bool
Eq, (forall x. ContentResourceData -> Rep ContentResourceData x)
-> (forall x. Rep ContentResourceData x -> ContentResourceData)
-> Generic ContentResourceData
forall x. Rep ContentResourceData x -> ContentResourceData
forall x. ContentResourceData -> Rep ContentResourceData x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ContentResourceData -> Rep ContentResourceData x
from :: forall x. ContentResourceData -> Rep ContentResourceData x
$cto :: forall x. Rep ContentResourceData x -> ContentResourceData
to :: forall x. Rep ContentResourceData x -> ContentResourceData
Generic)
data Error
= InvalidPromptName Text
| MissingRequiredParams Text
| ResourceNotFound Text
| InternalError Text
| UnknownTool Text
| InvalidRequest Text
| MethodNotFound Text
| InvalidParams Text
deriving (Int -> Error -> ShowS
[Error] -> ShowS
Error -> String
(Int -> Error -> ShowS)
-> (Error -> String) -> ([Error] -> ShowS) -> Show Error
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Error -> ShowS
showsPrec :: Int -> Error -> ShowS
$cshow :: Error -> String
show :: Error -> String
$cshowList :: [Error] -> ShowS
showList :: [Error] -> ShowS
Show, Error -> Error -> Bool
(Error -> Error -> Bool) -> (Error -> Error -> Bool) -> Eq Error
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Error -> Error -> Bool
== :: Error -> Error -> Bool
$c/= :: Error -> Error -> Bool
/= :: Error -> Error -> Bool
Eq, (forall x. Error -> Rep Error x)
-> (forall x. Rep Error x -> Error) -> Generic Error
forall x. Rep Error x -> Error
forall x. Error -> Rep Error x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. Error -> Rep Error x
from :: forall x. Error -> Rep Error x
$cto :: forall x. Rep Error x -> Error
to :: forall x. Rep Error x -> Error
Generic)
instance ToJSON Error where
toJSON :: Error -> Value
toJSON Error
err = [Pair] -> Value
object
[ Key
"code" Key -> Int -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Error -> Int
errorCode Error
err
, Key
"message" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Error -> Text
errorMessage Error
err
]
where
errorCode :: Error -> Int
errorCode :: Error -> Int
errorCode (InvalidPromptName Text
_) = -Int
32602
errorCode (MissingRequiredParams Text
_) = -Int
32602
errorCode (ResourceNotFound Text
_) = -Int
32602
errorCode (InternalError Text
_) = -Int
32603
errorCode (UnknownTool Text
_) = -Int
32602
errorCode (InvalidRequest Text
_) = -Int
32600
errorCode (MethodNotFound Text
_) = -Int
32601
errorCode (InvalidParams Text
_) = -Int
32602
errorMessage :: Error -> Text
errorMessage :: Error -> Text
errorMessage (InvalidPromptName Text
msg) = Text
"Invalid prompt name: " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
msg
errorMessage (MissingRequiredParams Text
msg) = Text
"Missing required parameters: " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
msg
errorMessage (ResourceNotFound Text
msg) = Text
"Resource not found: " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
msg
errorMessage (InternalError Text
msg) = Text
"Internal error: " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
msg
errorMessage (UnknownTool Text
msg) = Text
"Unknown tool: " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
msg
errorMessage (InvalidRequest Text
msg) = Text
"Invalid request: " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
msg
errorMessage (MethodNotFound Text
msg) = Text
"Method not found: " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
msg
errorMessage (InvalidParams Text
msg) = Text
"Invalid parameters: " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
msg
data PromptDefinition = PromptDefinition
{ PromptDefinition -> Text
promptDefinitionName :: Text
, PromptDefinition -> Text
promptDefinitionDescription :: Text
, PromptDefinition -> [ArgumentDefinition]
promptDefinitionArguments :: [ArgumentDefinition]
} deriving (Int -> PromptDefinition -> ShowS
[PromptDefinition] -> ShowS
PromptDefinition -> String
(Int -> PromptDefinition -> ShowS)
-> (PromptDefinition -> String)
-> ([PromptDefinition] -> ShowS)
-> Show PromptDefinition
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PromptDefinition -> ShowS
showsPrec :: Int -> PromptDefinition -> ShowS
$cshow :: PromptDefinition -> String
show :: PromptDefinition -> String
$cshowList :: [PromptDefinition] -> ShowS
showList :: [PromptDefinition] -> ShowS
Show, PromptDefinition -> PromptDefinition -> Bool
(PromptDefinition -> PromptDefinition -> Bool)
-> (PromptDefinition -> PromptDefinition -> Bool)
-> Eq PromptDefinition
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PromptDefinition -> PromptDefinition -> Bool
== :: PromptDefinition -> PromptDefinition -> Bool
$c/= :: PromptDefinition -> PromptDefinition -> Bool
/= :: PromptDefinition -> PromptDefinition -> Bool
Eq, (forall x. PromptDefinition -> Rep PromptDefinition x)
-> (forall x. Rep PromptDefinition x -> PromptDefinition)
-> Generic PromptDefinition
forall x. Rep PromptDefinition x -> PromptDefinition
forall x. PromptDefinition -> Rep PromptDefinition x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. PromptDefinition -> Rep PromptDefinition x
from :: forall x. PromptDefinition -> Rep PromptDefinition x
$cto :: forall x. Rep PromptDefinition x -> PromptDefinition
to :: forall x. Rep PromptDefinition x -> PromptDefinition
Generic)
instance ToJSON PromptDefinition where
toJSON :: PromptDefinition -> Value
toJSON PromptDefinition
def = [Pair] -> Value
object
[ Key
"name" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= PromptDefinition -> Text
promptDefinitionName PromptDefinition
def
, Key
"description" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= PromptDefinition -> Text
promptDefinitionDescription PromptDefinition
def
, Key
"arguments" Key -> [ArgumentDefinition] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= PromptDefinition -> [ArgumentDefinition]
promptDefinitionArguments PromptDefinition
def
]
data ResourceDefinition = ResourceDefinition
{ ResourceDefinition -> Text
resourceDefinitionURI :: Text
, ResourceDefinition -> Text
resourceDefinitionName :: Text
, ResourceDefinition -> Maybe Text
resourceDefinitionDescription :: Maybe Text
, ResourceDefinition -> Maybe Text
resourceDefinitionMimeType :: Maybe Text
} deriving (Int -> ResourceDefinition -> ShowS
[ResourceDefinition] -> ShowS
ResourceDefinition -> String
(Int -> ResourceDefinition -> ShowS)
-> (ResourceDefinition -> String)
-> ([ResourceDefinition] -> ShowS)
-> Show ResourceDefinition
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ResourceDefinition -> ShowS
showsPrec :: Int -> ResourceDefinition -> ShowS
$cshow :: ResourceDefinition -> String
show :: ResourceDefinition -> String
$cshowList :: [ResourceDefinition] -> ShowS
showList :: [ResourceDefinition] -> ShowS
Show, ResourceDefinition -> ResourceDefinition -> Bool
(ResourceDefinition -> ResourceDefinition -> Bool)
-> (ResourceDefinition -> ResourceDefinition -> Bool)
-> Eq ResourceDefinition
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ResourceDefinition -> ResourceDefinition -> Bool
== :: ResourceDefinition -> ResourceDefinition -> Bool
$c/= :: ResourceDefinition -> ResourceDefinition -> Bool
/= :: ResourceDefinition -> ResourceDefinition -> Bool
Eq, (forall x. ResourceDefinition -> Rep ResourceDefinition x)
-> (forall x. Rep ResourceDefinition x -> ResourceDefinition)
-> Generic ResourceDefinition
forall x. Rep ResourceDefinition x -> ResourceDefinition
forall x. ResourceDefinition -> Rep ResourceDefinition x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ResourceDefinition -> Rep ResourceDefinition x
from :: forall x. ResourceDefinition -> Rep ResourceDefinition x
$cto :: forall x. Rep ResourceDefinition x -> ResourceDefinition
to :: forall x. Rep ResourceDefinition x -> ResourceDefinition
Generic)
instance ToJSON ResourceDefinition where
toJSON :: ResourceDefinition -> Value
toJSON ResourceDefinition
def = [Pair] -> Value
object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$
[ Key
"uri" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= ResourceDefinition -> Text
resourceDefinitionURI ResourceDefinition
def
, Key
"name" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= ResourceDefinition -> Text
resourceDefinitionName ResourceDefinition
def
] [Pair] -> [Pair] -> [Pair]
forall a. [a] -> [a] -> [a]
++
[Pair] -> (Text -> [Pair]) -> Maybe Text -> [Pair]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] (\Text
d -> [Key
"description" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
d]) (ResourceDefinition -> Maybe Text
resourceDefinitionDescription ResourceDefinition
def) [Pair] -> [Pair] -> [Pair]
forall a. [a] -> [a] -> [a]
++
[Pair] -> (Text -> [Pair]) -> Maybe Text -> [Pair]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] (\Text
m -> [Key
"mimeType" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
m]) (ResourceDefinition -> Maybe Text
resourceDefinitionMimeType ResourceDefinition
def)
data ToolDefinition = ToolDefinition
{ ToolDefinition -> Text
toolDefinitionName :: Text
, ToolDefinition -> Text
toolDefinitionDescription :: Text
, ToolDefinition -> InputSchemaDefinition
toolDefinitionInputSchema :: InputSchemaDefinition
} deriving (Int -> ToolDefinition -> ShowS
[ToolDefinition] -> ShowS
ToolDefinition -> String
(Int -> ToolDefinition -> ShowS)
-> (ToolDefinition -> String)
-> ([ToolDefinition] -> ShowS)
-> Show ToolDefinition
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ToolDefinition -> ShowS
showsPrec :: Int -> ToolDefinition -> ShowS
$cshow :: ToolDefinition -> String
show :: ToolDefinition -> String
$cshowList :: [ToolDefinition] -> ShowS
showList :: [ToolDefinition] -> ShowS
Show, ToolDefinition -> ToolDefinition -> Bool
(ToolDefinition -> ToolDefinition -> Bool)
-> (ToolDefinition -> ToolDefinition -> Bool) -> Eq ToolDefinition
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ToolDefinition -> ToolDefinition -> Bool
== :: ToolDefinition -> ToolDefinition -> Bool
$c/= :: ToolDefinition -> ToolDefinition -> Bool
/= :: ToolDefinition -> ToolDefinition -> Bool
Eq, (forall x. ToolDefinition -> Rep ToolDefinition x)
-> (forall x. Rep ToolDefinition x -> ToolDefinition)
-> Generic ToolDefinition
forall x. Rep ToolDefinition x -> ToolDefinition
forall x. ToolDefinition -> Rep ToolDefinition x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ToolDefinition -> Rep ToolDefinition x
from :: forall x. ToolDefinition -> Rep ToolDefinition x
$cto :: forall x. Rep ToolDefinition x -> ToolDefinition
to :: forall x. Rep ToolDefinition x -> ToolDefinition
Generic)
instance ToJSON ToolDefinition where
toJSON :: ToolDefinition -> Value
toJSON ToolDefinition
def = [Pair] -> Value
object
[ Key
"name" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= ToolDefinition -> Text
toolDefinitionName ToolDefinition
def
, Key
"description" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= ToolDefinition -> Text
toolDefinitionDescription ToolDefinition
def
, Key
"inputSchema" Key -> InputSchemaDefinition -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= ToolDefinition -> InputSchemaDefinition
toolDefinitionInputSchema ToolDefinition
def
]
data ArgumentDefinition = ArgumentDefinition
{ ArgumentDefinition -> Text
argumentDefinitionName :: Text
, ArgumentDefinition -> Text
argumentDefinitionDescription :: Text
, ArgumentDefinition -> Bool
argumentDefinitionRequired :: Bool
} deriving (Int -> ArgumentDefinition -> ShowS
[ArgumentDefinition] -> ShowS
ArgumentDefinition -> String
(Int -> ArgumentDefinition -> ShowS)
-> (ArgumentDefinition -> String)
-> ([ArgumentDefinition] -> ShowS)
-> Show ArgumentDefinition
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ArgumentDefinition -> ShowS
showsPrec :: Int -> ArgumentDefinition -> ShowS
$cshow :: ArgumentDefinition -> String
show :: ArgumentDefinition -> String
$cshowList :: [ArgumentDefinition] -> ShowS
showList :: [ArgumentDefinition] -> ShowS
Show, ArgumentDefinition -> ArgumentDefinition -> Bool
(ArgumentDefinition -> ArgumentDefinition -> Bool)
-> (ArgumentDefinition -> ArgumentDefinition -> Bool)
-> Eq ArgumentDefinition
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ArgumentDefinition -> ArgumentDefinition -> Bool
== :: ArgumentDefinition -> ArgumentDefinition -> Bool
$c/= :: ArgumentDefinition -> ArgumentDefinition -> Bool
/= :: ArgumentDefinition -> ArgumentDefinition -> Bool
Eq, (forall x. ArgumentDefinition -> Rep ArgumentDefinition x)
-> (forall x. Rep ArgumentDefinition x -> ArgumentDefinition)
-> Generic ArgumentDefinition
forall x. Rep ArgumentDefinition x -> ArgumentDefinition
forall x. ArgumentDefinition -> Rep ArgumentDefinition x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ArgumentDefinition -> Rep ArgumentDefinition x
from :: forall x. ArgumentDefinition -> Rep ArgumentDefinition x
$cto :: forall x. Rep ArgumentDefinition x -> ArgumentDefinition
to :: forall x. Rep ArgumentDefinition x -> ArgumentDefinition
Generic)
instance ToJSON ArgumentDefinition where
toJSON :: ArgumentDefinition -> Value
toJSON ArgumentDefinition
def = [Pair] -> Value
object
[ Key
"name" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= ArgumentDefinition -> Text
argumentDefinitionName ArgumentDefinition
def
, Key
"description" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= ArgumentDefinition -> Text
argumentDefinitionDescription ArgumentDefinition
def
, Key
"required" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= ArgumentDefinition -> Bool
argumentDefinitionRequired ArgumentDefinition
def
]
data InputSchemaDefinition = InputSchemaDefinitionObject
{ InputSchemaDefinition -> [(Text, InputSchemaDefinitionProperty)]
properties :: [(Text, InputSchemaDefinitionProperty)]
, InputSchemaDefinition -> [Text]
required :: [Text]
} deriving (Int -> InputSchemaDefinition -> ShowS
[InputSchemaDefinition] -> ShowS
InputSchemaDefinition -> String
(Int -> InputSchemaDefinition -> ShowS)
-> (InputSchemaDefinition -> String)
-> ([InputSchemaDefinition] -> ShowS)
-> Show InputSchemaDefinition
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> InputSchemaDefinition -> ShowS
showsPrec :: Int -> InputSchemaDefinition -> ShowS
$cshow :: InputSchemaDefinition -> String
show :: InputSchemaDefinition -> String
$cshowList :: [InputSchemaDefinition] -> ShowS
showList :: [InputSchemaDefinition] -> ShowS
Show, InputSchemaDefinition -> InputSchemaDefinition -> Bool
(InputSchemaDefinition -> InputSchemaDefinition -> Bool)
-> (InputSchemaDefinition -> InputSchemaDefinition -> Bool)
-> Eq InputSchemaDefinition
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: InputSchemaDefinition -> InputSchemaDefinition -> Bool
== :: InputSchemaDefinition -> InputSchemaDefinition -> Bool
$c/= :: InputSchemaDefinition -> InputSchemaDefinition -> Bool
/= :: InputSchemaDefinition -> InputSchemaDefinition -> Bool
Eq, (forall x. InputSchemaDefinition -> Rep InputSchemaDefinition x)
-> (forall x. Rep InputSchemaDefinition x -> InputSchemaDefinition)
-> Generic InputSchemaDefinition
forall x. Rep InputSchemaDefinition x -> InputSchemaDefinition
forall x. InputSchemaDefinition -> Rep InputSchemaDefinition x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. InputSchemaDefinition -> Rep InputSchemaDefinition x
from :: forall x. InputSchemaDefinition -> Rep InputSchemaDefinition x
$cto :: forall x. Rep InputSchemaDefinition x -> InputSchemaDefinition
to :: forall x. Rep InputSchemaDefinition x -> InputSchemaDefinition
Generic)
instance ToJSON InputSchemaDefinition where
toJSON :: InputSchemaDefinition -> Value
toJSON (InputSchemaDefinitionObject [(Text, InputSchemaDefinitionProperty)]
props [Text]
req) = [Pair] -> Value
object
[ Key
"type" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= (Text
"object" :: Text)
, Key
"properties" Key -> Value -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Pair] -> Value
object (((Text, InputSchemaDefinitionProperty) -> Pair)
-> [(Text, InputSchemaDefinitionProperty)] -> [Pair]
forall a b. (a -> b) -> [a] -> [b]
map (\(Text
k, InputSchemaDefinitionProperty
v) -> Text -> Key
fromText Text
k Key -> InputSchemaDefinitionProperty -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= InputSchemaDefinitionProperty
v) [(Text, InputSchemaDefinitionProperty)]
props)
, Key
"required" Key -> [Text] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Text]
req
]
data InputSchemaDefinitionProperty = InputSchemaDefinitionProperty
{ InputSchemaDefinitionProperty -> Text
propertyType :: Text
, InputSchemaDefinitionProperty -> Text
propertyDescription :: Text
} deriving (Int -> InputSchemaDefinitionProperty -> ShowS
[InputSchemaDefinitionProperty] -> ShowS
InputSchemaDefinitionProperty -> String
(Int -> InputSchemaDefinitionProperty -> ShowS)
-> (InputSchemaDefinitionProperty -> String)
-> ([InputSchemaDefinitionProperty] -> ShowS)
-> Show InputSchemaDefinitionProperty
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> InputSchemaDefinitionProperty -> ShowS
showsPrec :: Int -> InputSchemaDefinitionProperty -> ShowS
$cshow :: InputSchemaDefinitionProperty -> String
show :: InputSchemaDefinitionProperty -> String
$cshowList :: [InputSchemaDefinitionProperty] -> ShowS
showList :: [InputSchemaDefinitionProperty] -> ShowS
Show, InputSchemaDefinitionProperty
-> InputSchemaDefinitionProperty -> Bool
(InputSchemaDefinitionProperty
-> InputSchemaDefinitionProperty -> Bool)
-> (InputSchemaDefinitionProperty
-> InputSchemaDefinitionProperty -> Bool)
-> Eq InputSchemaDefinitionProperty
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: InputSchemaDefinitionProperty
-> InputSchemaDefinitionProperty -> Bool
== :: InputSchemaDefinitionProperty
-> InputSchemaDefinitionProperty -> Bool
$c/= :: InputSchemaDefinitionProperty
-> InputSchemaDefinitionProperty -> Bool
/= :: InputSchemaDefinitionProperty
-> InputSchemaDefinitionProperty -> Bool
Eq, (forall x.
InputSchemaDefinitionProperty
-> Rep InputSchemaDefinitionProperty x)
-> (forall x.
Rep InputSchemaDefinitionProperty x
-> InputSchemaDefinitionProperty)
-> Generic InputSchemaDefinitionProperty
forall x.
Rep InputSchemaDefinitionProperty x
-> InputSchemaDefinitionProperty
forall x.
InputSchemaDefinitionProperty
-> Rep InputSchemaDefinitionProperty x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
InputSchemaDefinitionProperty
-> Rep InputSchemaDefinitionProperty x
from :: forall x.
InputSchemaDefinitionProperty
-> Rep InputSchemaDefinitionProperty x
$cto :: forall x.
Rep InputSchemaDefinitionProperty x
-> InputSchemaDefinitionProperty
to :: forall x.
Rep InputSchemaDefinitionProperty x
-> InputSchemaDefinitionProperty
Generic)
instance ToJSON InputSchemaDefinitionProperty where
toJSON :: InputSchemaDefinitionProperty -> Value
toJSON InputSchemaDefinitionProperty
prop = [Pair] -> Value
object
[ Key
"type" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= InputSchemaDefinitionProperty -> Text
propertyType InputSchemaDefinitionProperty
prop
, Key
"description" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= InputSchemaDefinitionProperty -> Text
propertyDescription InputSchemaDefinitionProperty
prop
]
data McpServerInfo = McpServerInfo
{ McpServerInfo -> Text
serverName :: Text
, McpServerInfo -> Text
serverVersion :: Text
, McpServerInfo -> Text
serverInstructions :: Text
} deriving (Int -> McpServerInfo -> ShowS
[McpServerInfo] -> ShowS
McpServerInfo -> String
(Int -> McpServerInfo -> ShowS)
-> (McpServerInfo -> String)
-> ([McpServerInfo] -> ShowS)
-> Show McpServerInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> McpServerInfo -> ShowS
showsPrec :: Int -> McpServerInfo -> ShowS
$cshow :: McpServerInfo -> String
show :: McpServerInfo -> String
$cshowList :: [McpServerInfo] -> ShowS
showList :: [McpServerInfo] -> ShowS
Show, McpServerInfo -> McpServerInfo -> Bool
(McpServerInfo -> McpServerInfo -> Bool)
-> (McpServerInfo -> McpServerInfo -> Bool) -> Eq McpServerInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: McpServerInfo -> McpServerInfo -> Bool
== :: McpServerInfo -> McpServerInfo -> Bool
$c/= :: McpServerInfo -> McpServerInfo -> Bool
/= :: McpServerInfo -> McpServerInfo -> Bool
Eq, (forall x. McpServerInfo -> Rep McpServerInfo x)
-> (forall x. Rep McpServerInfo x -> McpServerInfo)
-> Generic McpServerInfo
forall x. Rep McpServerInfo x -> McpServerInfo
forall x. McpServerInfo -> Rep McpServerInfo x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. McpServerInfo -> Rep McpServerInfo x
from :: forall x. McpServerInfo -> Rep McpServerInfo x
$cto :: forall x. Rep McpServerInfo x -> McpServerInfo
to :: forall x. Rep McpServerInfo x -> McpServerInfo
Generic)
data PromptCapabilities = PromptCapabilities
{ PromptCapabilities -> Maybe Bool
promptListChanged :: Maybe Bool
} deriving (Int -> PromptCapabilities -> ShowS
[PromptCapabilities] -> ShowS
PromptCapabilities -> String
(Int -> PromptCapabilities -> ShowS)
-> (PromptCapabilities -> String)
-> ([PromptCapabilities] -> ShowS)
-> Show PromptCapabilities
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PromptCapabilities -> ShowS
showsPrec :: Int -> PromptCapabilities -> ShowS
$cshow :: PromptCapabilities -> String
show :: PromptCapabilities -> String
$cshowList :: [PromptCapabilities] -> ShowS
showList :: [PromptCapabilities] -> ShowS
Show, PromptCapabilities -> PromptCapabilities -> Bool
(PromptCapabilities -> PromptCapabilities -> Bool)
-> (PromptCapabilities -> PromptCapabilities -> Bool)
-> Eq PromptCapabilities
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PromptCapabilities -> PromptCapabilities -> Bool
== :: PromptCapabilities -> PromptCapabilities -> Bool
$c/= :: PromptCapabilities -> PromptCapabilities -> Bool
/= :: PromptCapabilities -> PromptCapabilities -> Bool
Eq, (forall x. PromptCapabilities -> Rep PromptCapabilities x)
-> (forall x. Rep PromptCapabilities x -> PromptCapabilities)
-> Generic PromptCapabilities
forall x. Rep PromptCapabilities x -> PromptCapabilities
forall x. PromptCapabilities -> Rep PromptCapabilities x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. PromptCapabilities -> Rep PromptCapabilities x
from :: forall x. PromptCapabilities -> Rep PromptCapabilities x
$cto :: forall x. Rep PromptCapabilities x -> PromptCapabilities
to :: forall x. Rep PromptCapabilities x -> PromptCapabilities
Generic)
instance ToJSON PromptCapabilities where
toJSON :: PromptCapabilities -> Value
toJSON PromptCapabilities
caps = [Pair] -> Value
object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$ [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes
[ (Bool -> Pair) -> Maybe Bool -> Maybe Pair
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Key
"listChanged" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (PromptCapabilities -> Maybe Bool
promptListChanged PromptCapabilities
caps)
]
data ResourceCapabilities = ResourceCapabilities
{ ResourceCapabilities -> Maybe Bool
resourceSubscribe :: Maybe Bool
, ResourceCapabilities -> Maybe Bool
resourceListChanged :: Maybe Bool
} deriving (Int -> ResourceCapabilities -> ShowS
[ResourceCapabilities] -> ShowS
ResourceCapabilities -> String
(Int -> ResourceCapabilities -> ShowS)
-> (ResourceCapabilities -> String)
-> ([ResourceCapabilities] -> ShowS)
-> Show ResourceCapabilities
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ResourceCapabilities -> ShowS
showsPrec :: Int -> ResourceCapabilities -> ShowS
$cshow :: ResourceCapabilities -> String
show :: ResourceCapabilities -> String
$cshowList :: [ResourceCapabilities] -> ShowS
showList :: [ResourceCapabilities] -> ShowS
Show, ResourceCapabilities -> ResourceCapabilities -> Bool
(ResourceCapabilities -> ResourceCapabilities -> Bool)
-> (ResourceCapabilities -> ResourceCapabilities -> Bool)
-> Eq ResourceCapabilities
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ResourceCapabilities -> ResourceCapabilities -> Bool
== :: ResourceCapabilities -> ResourceCapabilities -> Bool
$c/= :: ResourceCapabilities -> ResourceCapabilities -> Bool
/= :: ResourceCapabilities -> ResourceCapabilities -> Bool
Eq, (forall x. ResourceCapabilities -> Rep ResourceCapabilities x)
-> (forall x. Rep ResourceCapabilities x -> ResourceCapabilities)
-> Generic ResourceCapabilities
forall x. Rep ResourceCapabilities x -> ResourceCapabilities
forall x. ResourceCapabilities -> Rep ResourceCapabilities x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ResourceCapabilities -> Rep ResourceCapabilities x
from :: forall x. ResourceCapabilities -> Rep ResourceCapabilities x
$cto :: forall x. Rep ResourceCapabilities x -> ResourceCapabilities
to :: forall x. Rep ResourceCapabilities x -> ResourceCapabilities
Generic)
instance ToJSON ResourceCapabilities where
toJSON :: ResourceCapabilities -> Value
toJSON ResourceCapabilities
caps = [Pair] -> Value
object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$ [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes
[ (Bool -> Pair) -> Maybe Bool -> Maybe Pair
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Key
"subscribe" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (ResourceCapabilities -> Maybe Bool
resourceSubscribe ResourceCapabilities
caps)
, (Bool -> Pair) -> Maybe Bool -> Maybe Pair
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Key
"listChanged" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (ResourceCapabilities -> Maybe Bool
resourceListChanged ResourceCapabilities
caps)
]
data ToolCapabilities = ToolCapabilities
{ ToolCapabilities -> Maybe Bool
toolListChanged :: Maybe Bool
} deriving (Int -> ToolCapabilities -> ShowS
[ToolCapabilities] -> ShowS
ToolCapabilities -> String
(Int -> ToolCapabilities -> ShowS)
-> (ToolCapabilities -> String)
-> ([ToolCapabilities] -> ShowS)
-> Show ToolCapabilities
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ToolCapabilities -> ShowS
showsPrec :: Int -> ToolCapabilities -> ShowS
$cshow :: ToolCapabilities -> String
show :: ToolCapabilities -> String
$cshowList :: [ToolCapabilities] -> ShowS
showList :: [ToolCapabilities] -> ShowS
Show, ToolCapabilities -> ToolCapabilities -> Bool
(ToolCapabilities -> ToolCapabilities -> Bool)
-> (ToolCapabilities -> ToolCapabilities -> Bool)
-> Eq ToolCapabilities
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ToolCapabilities -> ToolCapabilities -> Bool
== :: ToolCapabilities -> ToolCapabilities -> Bool
$c/= :: ToolCapabilities -> ToolCapabilities -> Bool
/= :: ToolCapabilities -> ToolCapabilities -> Bool
Eq, (forall x. ToolCapabilities -> Rep ToolCapabilities x)
-> (forall x. Rep ToolCapabilities x -> ToolCapabilities)
-> Generic ToolCapabilities
forall x. Rep ToolCapabilities x -> ToolCapabilities
forall x. ToolCapabilities -> Rep ToolCapabilities x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ToolCapabilities -> Rep ToolCapabilities x
from :: forall x. ToolCapabilities -> Rep ToolCapabilities x
$cto :: forall x. Rep ToolCapabilities x -> ToolCapabilities
to :: forall x. Rep ToolCapabilities x -> ToolCapabilities
Generic)
instance ToJSON ToolCapabilities where
toJSON :: ToolCapabilities -> Value
toJSON ToolCapabilities
caps = [Pair] -> Value
object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$ [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes
[ (Bool -> Pair) -> Maybe Bool -> Maybe Pair
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Key
"listChanged" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (ToolCapabilities -> Maybe Bool
toolListChanged ToolCapabilities
caps)
]
data LoggingCapabilities = LoggingCapabilities
{
} deriving (Int -> LoggingCapabilities -> ShowS
[LoggingCapabilities] -> ShowS
LoggingCapabilities -> String
(Int -> LoggingCapabilities -> ShowS)
-> (LoggingCapabilities -> String)
-> ([LoggingCapabilities] -> ShowS)
-> Show LoggingCapabilities
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> LoggingCapabilities -> ShowS
showsPrec :: Int -> LoggingCapabilities -> ShowS
$cshow :: LoggingCapabilities -> String
show :: LoggingCapabilities -> String
$cshowList :: [LoggingCapabilities] -> ShowS
showList :: [LoggingCapabilities] -> ShowS
Show, LoggingCapabilities -> LoggingCapabilities -> Bool
(LoggingCapabilities -> LoggingCapabilities -> Bool)
-> (LoggingCapabilities -> LoggingCapabilities -> Bool)
-> Eq LoggingCapabilities
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: LoggingCapabilities -> LoggingCapabilities -> Bool
== :: LoggingCapabilities -> LoggingCapabilities -> Bool
$c/= :: LoggingCapabilities -> LoggingCapabilities -> Bool
/= :: LoggingCapabilities -> LoggingCapabilities -> Bool
Eq, (forall x. LoggingCapabilities -> Rep LoggingCapabilities x)
-> (forall x. Rep LoggingCapabilities x -> LoggingCapabilities)
-> Generic LoggingCapabilities
forall x. Rep LoggingCapabilities x -> LoggingCapabilities
forall x. LoggingCapabilities -> Rep LoggingCapabilities x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. LoggingCapabilities -> Rep LoggingCapabilities x
from :: forall x. LoggingCapabilities -> Rep LoggingCapabilities x
$cto :: forall x. Rep LoggingCapabilities x -> LoggingCapabilities
to :: forall x. Rep LoggingCapabilities x -> LoggingCapabilities
Generic)
instance ToJSON LoggingCapabilities where
toJSON :: LoggingCapabilities -> Value
toJSON LoggingCapabilities
_ = [Pair] -> Value
object []
data ServerCapabilities = ServerCapabilities
{ ServerCapabilities -> Maybe PromptCapabilities
capabilityPrompts :: Maybe PromptCapabilities
, ServerCapabilities -> Maybe ResourceCapabilities
capabilityResources :: Maybe ResourceCapabilities
, ServerCapabilities -> Maybe ToolCapabilities
capabilityTools :: Maybe ToolCapabilities
, ServerCapabilities -> Maybe LoggingCapabilities
capabilityLogging :: Maybe LoggingCapabilities
} deriving (Int -> ServerCapabilities -> ShowS
[ServerCapabilities] -> ShowS
ServerCapabilities -> String
(Int -> ServerCapabilities -> ShowS)
-> (ServerCapabilities -> String)
-> ([ServerCapabilities] -> ShowS)
-> Show ServerCapabilities
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ServerCapabilities -> ShowS
showsPrec :: Int -> ServerCapabilities -> ShowS
$cshow :: ServerCapabilities -> String
show :: ServerCapabilities -> String
$cshowList :: [ServerCapabilities] -> ShowS
showList :: [ServerCapabilities] -> ShowS
Show, ServerCapabilities -> ServerCapabilities -> Bool
(ServerCapabilities -> ServerCapabilities -> Bool)
-> (ServerCapabilities -> ServerCapabilities -> Bool)
-> Eq ServerCapabilities
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ServerCapabilities -> ServerCapabilities -> Bool
== :: ServerCapabilities -> ServerCapabilities -> Bool
$c/= :: ServerCapabilities -> ServerCapabilities -> Bool
/= :: ServerCapabilities -> ServerCapabilities -> Bool
Eq, (forall x. ServerCapabilities -> Rep ServerCapabilities x)
-> (forall x. Rep ServerCapabilities x -> ServerCapabilities)
-> Generic ServerCapabilities
forall x. Rep ServerCapabilities x -> ServerCapabilities
forall x. ServerCapabilities -> Rep ServerCapabilities x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ServerCapabilities -> Rep ServerCapabilities x
from :: forall x. ServerCapabilities -> Rep ServerCapabilities x
$cto :: forall x. Rep ServerCapabilities x -> ServerCapabilities
to :: forall x. Rep ServerCapabilities x -> ServerCapabilities
Generic)
instance ToJSON ServerCapabilities where
toJSON :: ServerCapabilities -> Value
toJSON ServerCapabilities
caps = [Pair] -> Value
object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$ [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes
[ (PromptCapabilities -> Pair)
-> Maybe PromptCapabilities -> Maybe Pair
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Key
"prompts" Key -> PromptCapabilities -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (ServerCapabilities -> Maybe PromptCapabilities
capabilityPrompts ServerCapabilities
caps)
, (ResourceCapabilities -> Pair)
-> Maybe ResourceCapabilities -> Maybe Pair
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Key
"resources" Key -> ResourceCapabilities -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (ServerCapabilities -> Maybe ResourceCapabilities
capabilityResources ServerCapabilities
caps)
, (ToolCapabilities -> Pair) -> Maybe ToolCapabilities -> Maybe Pair
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Key
"tools" Key -> ToolCapabilities -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (ServerCapabilities -> Maybe ToolCapabilities
capabilityTools ServerCapabilities
caps)
, (LoggingCapabilities -> Pair)
-> Maybe LoggingCapabilities -> Maybe Pair
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Key
"logging" Key -> LoggingCapabilities -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (ServerCapabilities -> Maybe LoggingCapabilities
capabilityLogging ServerCapabilities
caps)
]
type PromptListHandler m = m [PromptDefinition]
type PromptGetHandler m = PromptName -> [(ArgumentName, ArgumentValue)] -> m (Either Error Content)
type ResourceListHandler m = m [ResourceDefinition]
type ResourceReadHandler m = URI -> m (Either Error Content)
type ToolListHandler m = m [ToolDefinition]
type ToolCallHandler m = ToolName -> [(ArgumentName, ArgumentValue)] -> m (Either Error Content)
data McpServerHandlers m = McpServerHandlers
{ forall (m :: * -> *).
McpServerHandlers m
-> Maybe (PromptListHandler m, PromptGetHandler m)
prompts :: Maybe (PromptListHandler m, PromptGetHandler m)
, forall (m :: * -> *).
McpServerHandlers m
-> Maybe (ResourceListHandler m, ResourceReadHandler m)
resources :: Maybe (ResourceListHandler m, ResourceReadHandler m)
, forall (m :: * -> *).
McpServerHandlers m
-> Maybe (ToolListHandler m, PromptGetHandler m)
tools :: Maybe (ToolListHandler m, ToolCallHandler m)
}