Copyright | (C) 2025 Matthias Pall Gissurarson |
---|---|
License | MIT |
Maintainer | mpg@mpg.is |
Stability | experimental |
Portability | GHC |
Safe Haskell | Safe-Inferred |
Language | GHC2021 |
MCP.Protocol
Description
This module implements the JSON-RPC 2.0 protocol layer for MCP version 2025-06-18, including request/response handling, message parsing and encoding, and protocol-level error handling. Supports all MCP operations including initialization, resources, tools, prompts, completion, sampling, elicitation, and notifications.
New in 2025-06-18: - Enhanced completion requests with context parameters - Elicitation system for interactive user input - Sampling message restrictions for LLM compatibility - Comprehensive _meta field support throughout protocol messages - Resource template references with correct schema compliance
Synopsis
- data JSONRPCRequest = JSONRPCRequest {}
- data JSONRPCResponse = JSONRPCResponse {}
- data JSONRPCError = JSONRPCError {}
- data JSONRPCNotification = JSONRPCNotification {}
- data JSONRPCMessage
- data JSONRPCErrorInfo = JSONRPCErrorInfo {}
- data CompletionContext = CompletionContext {}
- data InitializeRequest = InitializeRequest {
- method :: Text
- params :: InitializeParams
- data InitializeParams = InitializeParams {}
- data PingRequest = PingRequest {
- method :: Text
- params :: Maybe PingParams
- data PingParams where
- PingParams :: {..} -> PingParams
- data ListResourcesRequest = ListResourcesRequest {}
- data ListResourcesParams where
- ListResourcesParams :: {..} -> ListResourcesParams
- data ListResourceTemplatesRequest = ListResourceTemplatesRequest {}
- data ListResourceTemplatesParams where
- data ReadResourceRequest = ReadResourceRequest {}
- data ReadResourceParams where
- ReadResourceParams :: {..} -> ReadResourceParams
- data SubscribeRequest = SubscribeRequest {
- method :: Text
- params :: SubscribeParams
- data SubscribeParams where
- SubscribeParams :: {..} -> SubscribeParams
- data UnsubscribeRequest = UnsubscribeRequest {}
- data UnsubscribeParams where
- UnsubscribeParams :: {..} -> UnsubscribeParams
- data ListPromptsRequest = ListPromptsRequest {}
- data ListPromptsParams where
- ListPromptsParams :: {..} -> ListPromptsParams
- data GetPromptRequest = GetPromptRequest {
- method :: Text
- params :: GetPromptParams
- data GetPromptParams = GetPromptParams {}
- data ListToolsRequest = ListToolsRequest {
- method :: Text
- params :: Maybe ListToolsParams
- data ListToolsParams where
- ListToolsParams :: {..} -> ListToolsParams
- data CallToolRequest = CallToolRequest {
- method :: Text
- params :: CallToolParams
- data CallToolParams = CallToolParams {}
- data SetLevelRequest = SetLevelRequest {
- method :: Text
- params :: SetLevelParams
- data SetLevelParams where
- SetLevelParams :: {..} -> SetLevelParams
- data CompleteRequest = CompleteRequest {
- method :: Text
- params :: CompleteParams
- data CompleteParams = CompleteParams {}
- data CompletionArgument = CompletionArgument {}
- data Reference
- data CreateMessageRequest = CreateMessageRequest {}
- data CreateMessageParams = CreateMessageParams {}
- data ListRootsRequest = ListRootsRequest {
- method :: Text
- params :: Maybe ListRootsParams
- data ListRootsParams where
- ListRootsParams :: {..} -> ListRootsParams
- data ElicitRequest = ElicitRequest {
- method :: Text
- params :: ElicitParams
- data ElicitParams = ElicitParams {
- message :: Text
- requestedSchema :: Object
- data InitializeResult = InitializeResult {}
- data ListResourcesResult = ListResourcesResult {}
- data ListResourceTemplatesResult = ListResourceTemplatesResult {}
- data ReadResourceResult = ReadResourceResult {
- contents :: [ResourceContents]
- _meta :: Maybe Metadata
- data ListPromptsResult = ListPromptsResult {}
- data GetPromptResult = GetPromptResult {
- description :: Maybe Text
- messages :: [PromptMessage]
- _meta :: Maybe Metadata
- data ListToolsResult = ListToolsResult {}
- data CallToolResult = CallToolResult {}
- data CompleteResult = CompleteResult {}
- data CompletionResult = CompletionResult {}
- data CreateMessageResult = CreateMessageResult {}
- data ListRootsResult = ListRootsResult {}
- data ElicitResult = ElicitResult {}
- data PrimitiveSchemaDefinition
- data StringSchema = StringSchema {}
- data NumberSchema = NumberSchema {}
- data BooleanSchema = BooleanSchema {
- schemaType :: Text
- title :: Maybe Text
- description :: Maybe Text
- defaultValue :: Maybe Bool
- data EnumSchema = EnumSchema {}
- data CancelledNotification = CancelledNotification {
- method :: Text
- params :: CancelledParams
- data CancelledParams = CancelledParams {}
- data InitializedNotification = InitializedNotification {}
- data InitializedParams where
- InitializedParams :: {..} -> InitializedParams
- data ProgressNotification = ProgressNotification {
- method :: Text
- params :: ProgressParams
- data ProgressParams = ProgressParams {
- progressToken :: ProgressToken
- progress :: Double
- total :: Maybe Double
- message :: Maybe Text
- data ResourceListChangedNotification = ResourceListChangedNotification {}
- data ResourceUpdatedNotification = ResourceUpdatedNotification {}
- data ResourceUpdatedParams = ResourceUpdatedParams {}
- data PromptListChangedNotification = PromptListChangedNotification {}
- data ToolListChangedNotification = ToolListChangedNotification {}
- data LoggingMessageNotification = LoggingMessageNotification {}
- data LoggingMessageParams = LoggingMessageParams {}
- data RootsListChangedNotification = RootsListChangedNotification {}
- data ClientRequest
- = InitializeReq InitializeRequest
- | PingReq PingRequest
- | ListResourcesReq ListResourcesRequest
- | ListResourceTemplatesReq ListResourceTemplatesRequest
- | ReadResourceReq ReadResourceRequest
- | SubscribeReq SubscribeRequest
- | UnsubscribeReq UnsubscribeRequest
- | ListPromptsReq ListPromptsRequest
- | GetPromptReq GetPromptRequest
- | ListToolsReq ListToolsRequest
- | CallToolReq CallToolRequest
- | SetLevelReq SetLevelRequest
- | CompleteReq CompleteRequest
- data ServerRequest
- data ClientNotification
- data ServerNotification
- = CancelledServerNotif CancelledNotification
- | ProgressServerNotif ProgressNotification
- | ResourceListChangedNotif ResourceListChangedNotification
- | ResourceUpdatedNotif ResourceUpdatedNotification
- | PromptListChangedNotif PromptListChangedNotification
- | ToolListChangedNotif ToolListChangedNotification
- | LoggingMessageNotif LoggingMessageNotification
JSON-RPC Types
data JSONRPCRequest Source #
A JSON-RPC request that expects a response
Constructors
JSONRPCRequest | |
Instances
data JSONRPCResponse Source #
A successful JSON-RPC response
Instances
data JSONRPCError Source #
A JSON-RPC error response
Constructors
JSONRPCError | |
Instances
data JSONRPCNotification Source #
A JSON-RPC notification (no response expected)
Instances
data JSONRPCMessage Source #
Any JSON-RPC message
Constructors
RequestMessage JSONRPCRequest | |
ResponseMessage JSONRPCResponse | |
ErrorMessage JSONRPCError | |
NotificationMessage JSONRPCNotification |
Instances
data JSONRPCErrorInfo Source #
JSON-RPC error information
Instances
data CompletionContext Source #
Context for completion requests
Instances
Client Request Types
data InitializeRequest Source #
Initialize request
Constructors
InitializeRequest | |
Fields
|
Instances
data InitializeParams Source #
Initialize request parameters
Constructors
InitializeParams | |
Fields |
Instances
data PingRequest Source #
Ping request
Constructors
PingRequest | |
Fields
|
Instances
data PingParams where Source #
Ping request parameters
Constructors
PingParams | |
Fields
|
Instances
FromJSON PingParams Source # | |
Defined in MCP.Protocol | |
ToJSON PingParams Source # | |
Defined in MCP.Protocol Methods toJSON :: PingParams -> Value # toEncoding :: PingParams -> Encoding # toJSONList :: [PingParams] -> Value # toEncodingList :: [PingParams] -> Encoding # omitField :: PingParams -> Bool # | |
Generic PingParams Source # | |
Defined in MCP.Protocol Associated Types type Rep PingParams :: Type -> Type # | |
Show PingParams Source # | |
Defined in MCP.Protocol Methods showsPrec :: Int -> PingParams -> ShowS # show :: PingParams -> String # showList :: [PingParams] -> ShowS # | |
Eq PingParams Source # | |
Defined in MCP.Protocol | |
type Rep PingParams Source # | |
Defined in MCP.Protocol type Rep PingParams = D1 ('MetaData "PingParams" "MCP.Protocol" "mcp-0.3.0.0-inplace" 'False) (C1 ('MetaCons "PingParams" 'PrefixI 'True) (S1 ('MetaSel ('Just "_meta") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Metadata)))) |
data ListResourcesRequest Source #
List resources request
Constructors
ListResourcesRequest | |
Fields
|
Instances
data ListResourcesParams where Source #
List resources request parameters
Constructors
ListResourcesParams | |
Fields
|
Instances
data ListResourceTemplatesRequest Source #
List resource templates request
Constructors
ListResourceTemplatesRequest | |
Fields |
Instances
data ListResourceTemplatesParams where Source #
List resource templates request parameters
Constructors
ListResourceTemplatesParams | |
Fields
|
Instances
data ReadResourceRequest Source #
Read resource request
Constructors
ReadResourceRequest | |
Fields
|
Instances
data ReadResourceParams where Source #
Read resource request parameters
Constructors
ReadResourceParams | |
Fields
|
Instances
data SubscribeRequest Source #
Subscribe request
Constructors
SubscribeRequest | |
Fields
|
Instances
data SubscribeParams where Source #
Subscribe request parameters
Constructors
SubscribeParams | |
Fields
|
Instances
data UnsubscribeRequest Source #
Unsubscribe request
Constructors
UnsubscribeRequest | |
Fields
|
Instances
data UnsubscribeParams where Source #
Unsubscribe request parameters
Constructors
UnsubscribeParams | |
Fields
|
Instances
data ListPromptsRequest Source #
List prompts request
Constructors
ListPromptsRequest | |
Fields
|
Instances
data ListPromptsParams where Source #
List prompts request parameters
Constructors
ListPromptsParams | |
Fields
|
Instances
data GetPromptRequest Source #
Get prompt request
Constructors
GetPromptRequest | |
Fields
|
Instances
data GetPromptParams Source #
Get prompt request parameters
Instances
data ListToolsRequest Source #
List tools request
Constructors
ListToolsRequest | |
Fields
|
Instances
data ListToolsParams where Source #
List tools request parameters
Constructors
ListToolsParams | |
Fields
|
Instances
data CallToolRequest Source #
Call tool request
Constructors
CallToolRequest | |
Fields
|
Instances
data CallToolParams Source #
Call tool request parameters
Instances
data SetLevelRequest Source #
Set level request
Constructors
SetLevelRequest | |
Fields
|
Instances
data SetLevelParams where Source #
Set level request parameters
Constructors
SetLevelParams | |
Fields
|
Instances
data CompleteRequest Source #
Complete request
Constructors
CompleteRequest | |
Fields
|
Instances
data CompleteParams Source #
Parameters for a completion request
Constructors
CompleteParams | |
Fields
|
Instances
data CompletionArgument Source #
Completion argument
Constructors
CompletionArgument | |
Instances
Reference (prompt or resource template)
Instances
FromJSON Reference Source # | |
Defined in MCP.Protocol | |
ToJSON Reference Source # | |
Generic Reference Source # | |
Show Reference Source # | |
Eq Reference Source # | |
type Rep Reference Source # | |
Defined in MCP.Protocol type Rep Reference = D1 ('MetaData "Reference" "MCP.Protocol" "mcp-0.3.0.0-inplace" 'False) (C1 ('MetaCons "PromptRef" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 PromptReference)) :+: C1 ('MetaCons "ResourceTemplateRef" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ResourceTemplateReference))) |
Server Request Types
data CreateMessageRequest Source #
Create message request
Constructors
CreateMessageRequest | |
Fields
|
Instances
data CreateMessageParams Source #
Create message request parameters
Constructors
CreateMessageParams | |
Fields
|
Instances
data ListRootsRequest Source #
List roots request
Constructors
ListRootsRequest | |
Fields
|
Instances
data ListRootsParams where Source #
List roots request parameters
Constructors
ListRootsParams | |
Fields
|
Instances
data ElicitRequest Source #
Elicit request
Constructors
ElicitRequest | |
Fields
|
Instances
data ElicitParams Source #
Elicit request parameters
Constructors
ElicitParams | |
Fields
|
Instances
Response Types
data InitializeResult Source #
Initialize result
Constructors
InitializeResult | |
Fields |
Instances
data ListResourcesResult Source #
List resources result
Constructors
ListResourcesResult | |
Instances
data ListResourceTemplatesResult Source #
List resource templates result
Constructors
ListResourceTemplatesResult | |
Fields
|
Instances
data ReadResourceResult Source #
Read resource result
Constructors
ReadResourceResult | |
Fields
|
Instances
data ListPromptsResult Source #
List prompts result
Constructors
ListPromptsResult | |
Instances
data GetPromptResult Source #
Get prompt result
Constructors
GetPromptResult | |
Fields
|
Instances
data ListToolsResult Source #
List tools result
Constructors
ListToolsResult | |
Instances
data CallToolResult Source #
Call tool result
Constructors
CallToolResult | |
Instances
data CompleteResult Source #
Complete result
Constructors
CompleteResult | |
Fields |
Instances
data CompletionResult Source #
Completion result inner type
Instances
data CreateMessageResult Source #
Create message result (extends SamplingMessage)
Constructors
CreateMessageResult | |
Instances
data ListRootsResult Source #
List roots result
Instances
data ElicitResult Source #
Elicit result
Instances
Schema Types
data PrimitiveSchemaDefinition Source #
Primitive schema definition union type
Constructors
StringSchemaDef StringSchema | |
NumberSchemaDef NumberSchema | |
BooleanSchemaDef BooleanSchema | |
EnumSchemaDef EnumSchema |
Instances
data StringSchema Source #
Schema for string fields
Constructors
StringSchema | |
Instances
data NumberSchema Source #
Schema for number/integer fields
Constructors
NumberSchema | |
Instances
data BooleanSchema Source #
Schema for boolean fields
Constructors
BooleanSchema | |
Fields
|
Instances
data EnumSchema Source #
Schema for enum fields
Constructors
EnumSchema | |
Instances
Notification Types
data CancelledNotification Source #
Cancelled notification
Constructors
CancelledNotification | |
Fields
|
Instances
data CancelledParams Source #
Cancelled notification parameters
Instances
data InitializedNotification Source #
Initialized notification
Constructors
InitializedNotification | |
Fields
|
Instances
data InitializedParams where Source #
Initialized notification parameters
Constructors
InitializedParams | |
Fields
|
Instances
data ProgressNotification Source #
Progress notification
Constructors
ProgressNotification | |
Fields
|
Instances
data ProgressParams Source #
Progress notification parameters
Constructors
ProgressParams | |
Fields
|
Instances
data ResourceListChangedNotification Source #
Resource list changed notification
Constructors
ResourceListChangedNotification | |
Fields
|
Instances
data ResourceUpdatedNotification Source #
Resource updated notification
Constructors
ResourceUpdatedNotification | |
Fields |
Instances
data ResourceUpdatedParams Source #
Resource updated notification parameters
Constructors
ResourceUpdatedParams | |
Instances
data PromptListChangedNotification Source #
Prompt list changed notification
Constructors
PromptListChangedNotification | |
Fields
|
Instances
data ToolListChangedNotification Source #
Tool list changed notification
Constructors
ToolListChangedNotification | |
Fields
|
Instances
data LoggingMessageNotification Source #
Logging message notification
Constructors
LoggingMessageNotification | |
Fields
|
Instances
data LoggingMessageParams Source #
Logging message notification parameters
Constructors
LoggingMessageParams | |
Instances
data RootsListChangedNotification Source #
Roots list changed notification
Constructors
RootsListChangedNotification | |
Fields
|
Instances
Union Types
data ClientRequest Source #
Any client request
Constructors
Instances
data ServerRequest Source #
Any server request
Constructors
PingServerReq PingRequest | |
CreateMessageReq CreateMessageRequest | |
ListRootsReq ListRootsRequest | |
ElicitReq ElicitRequest |
Instances
data ClientNotification Source #
Any client notification
Constructors
CancelledNotif CancelledNotification | |
InitializedNotif InitializedNotification | |
ProgressNotif ProgressNotification | |
RootsListChangedNotif RootsListChangedNotification |
Instances
data ServerNotification Source #
Any server notification
Constructors