Model Context Protocol in OCaml
1(** Mcp_message - High-level RPC message definitions for Model Context Protocol *) 2 3open Mcp 4open Jsonrpc 5 6(** Resources/List - Request to list available resources *) 7module ResourcesList : sig 8 (** Request parameters *) 9 module Request : sig 10 type t = { 11 cursor: Cursor.t option; (** Optional pagination cursor *) 12 } 13 include Json.Jsonable.S with type t := t 14 end 15 16 (** Resource definition *) 17 module Resource : sig 18 type t = { 19 uri: string; (** Unique identifier for the resource *) 20 name: string; (** Human-readable name *) 21 description: string option; (** Optional description *) 22 mime_type: string option; (** Optional MIME type *) 23 size: int option; (** Optional size in bytes *) 24 } 25 include Json.Jsonable.S with type t := t 26 end 27 28 (** Response result *) 29 module Response : sig 30 type t = { 31 resources: Resource.t list; (** List of available resources *) 32 next_cursor: Cursor.t option; (** Optional cursor for the next page *) 33 } 34 include Json.Jsonable.S with type t := t 35 end 36 37 (** Create a resources/list request *) 38 val create_request : ?cursor:Cursor.t -> ?id:RequestId.t -> unit -> JSONRPCMessage.t 39 40 (** Create a resources/list response *) 41 val create_response : id:RequestId.t -> resources:Resource.t list -> ?next_cursor:Cursor.t -> unit -> JSONRPCMessage.t 42end 43 44(** Resources/Templates/List - Request to list available resource templates *) 45module ListResourceTemplatesRequest : sig 46 type t = { 47 cursor: Cursor.t option; (** Optional pagination cursor *) 48 } 49 include Json.Jsonable.S with type t := t 50end 51 52(** Resources/Templates/List - Response with resource templates *) 53module ListResourceTemplatesResult : sig 54 (** Resource Template definition *) 55 module ResourceTemplate : sig 56 type t = { 57 uri_template: string; (** URI template for the resource *) 58 name: string; (** Human-readable name *) 59 description: string option; (** Optional description *) 60 mime_type: string option; (** Optional MIME type *) 61 } 62 include Json.Jsonable.S with type t := t 63 end 64 65 type t = { 66 resource_templates: ResourceTemplate.t list; (** List of available resource templates *) 67 next_cursor: Cursor.t option; (** Optional cursor for the next page *) 68 } 69 include Json.Jsonable.S with type t := t 70 71 (** Create a resources/templates/list request *) 72 val create_request : ?cursor:Cursor.t -> ?id:RequestId.t -> unit -> JSONRPCMessage.t 73 74 (** Create a resources/templates/list response *) 75 val create_response : id:RequestId.t -> resource_templates:ResourceTemplate.t list -> ?next_cursor:Cursor.t -> unit -> JSONRPCMessage.t 76end 77 78(** Resources/Read - Request to read resource contents *) 79module ResourcesRead : sig 80 (** Request parameters *) 81 module Request : sig 82 type t = { 83 uri: string; (** URI of the resource to read *) 84 } 85 include Json.Jsonable.S with type t := t 86 end 87 88 (** Resource content *) 89 module ResourceContent : sig 90 type t = 91 | TextResource of TextResourceContents.t (** Text content *) 92 | BlobResource of BlobResourceContents.t (** Binary content *) 93 include Json.Jsonable.S with type t := t 94 end 95 96 (** Response result *) 97 module Response : sig 98 type t = { 99 contents: ResourceContent.t list; (** List of resource contents *) 100 } 101 include Json.Jsonable.S with type t := t 102 end 103 104 (** Create a resources/read request *) 105 val create_request : uri:string -> ?id:RequestId.t -> unit -> JSONRPCMessage.t 106 107 (** Create a resources/read response *) 108 val create_response : id:RequestId.t -> contents:ResourceContent.t list -> unit -> JSONRPCMessage.t 109end 110 111(** Tools/List - Request to list available tools *) 112module ToolsList : sig 113 (** Request parameters *) 114 module Request : sig 115 type t = { 116 cursor: Cursor.t option; (** Optional pagination cursor *) 117 } 118 include Json.Jsonable.S with type t := t 119 end 120 121 (** Tool definition *) 122 module Tool : sig 123 type t = { 124 name: string; (** Unique identifier for the tool *) 125 description: string option; (** Human-readable description *) 126 input_schema: Json.t; (** JSON Schema defining expected parameters *) 127 annotations: Json.t option; (** Optional properties describing tool behavior *) 128 } 129 include Json.Jsonable.S with type t := t 130 end 131 132 (** Response result *) 133 module Response : sig 134 type t = { 135 tools: Tool.t list; (** List of available tools *) 136 next_cursor: Cursor.t option; (** Optional cursor for the next page *) 137 } 138 include Json.Jsonable.S with type t := t 139 end 140 141 (** Create a tools/list request *) 142 val create_request : ?cursor:Cursor.t -> ?id:RequestId.t -> unit -> JSONRPCMessage.t 143 144 (** Create a tools/list response *) 145 val create_response : id:RequestId.t -> tools:Tool.t list -> ?next_cursor:Cursor.t -> unit -> JSONRPCMessage.t 146end 147 148(** Tools/Call - Request to invoke a tool *) 149module ToolsCall : sig 150 (** Request parameters *) 151 module Request : sig 152 type t = { 153 name: string; (** Name of the tool to call *) 154 arguments: Json.t; (** Arguments for the tool invocation *) 155 } 156 include Json.Jsonable.S with type t := t 157 end 158 159 (** Tool content *) 160 module ToolContent : sig 161 type t = 162 | Text of TextContent.t (** Text content *) 163 | Image of ImageContent.t (** Image content *) 164 | Audio of AudioContent.t (** Audio content *) 165 | Resource of EmbeddedResource.t (** Resource content *) 166 include Json.Jsonable.S with type t := t 167 end 168 169 (** Response result *) 170 module Response : sig 171 type t = { 172 content: ToolContent.t list; (** List of content items returned by the tool *) 173 is_error: bool; (** Whether the result represents an error *) 174 } 175 include Json.Jsonable.S with type t := t 176 end 177 178 (** Create a tools/call request *) 179 val create_request : name:string -> arguments:Json.t -> ?id:RequestId.t -> unit -> JSONRPCMessage.t 180 181 (** Create a tools/call response *) 182 val create_response : id:RequestId.t -> content:ToolContent.t list -> is_error:bool -> unit -> JSONRPCMessage.t 183end 184 185(** Prompts/List - Request to list available prompts *) 186module PromptsList : sig 187 (** Prompt argument *) 188 module PromptArgument : sig 189 type t = { 190 name: string; (** Name of the argument *) 191 description: string option; (** Description of the argument *) 192 required: bool; (** Whether the argument is required *) 193 } 194 include Json.Jsonable.S with type t := t 195 end 196 197 (** Prompt definition *) 198 module Prompt : sig 199 type t = { 200 name: string; (** Unique identifier for the prompt *) 201 description: string option; (** Human-readable description *) 202 arguments: PromptArgument.t list; (** Arguments for customization *) 203 } 204 include Json.Jsonable.S with type t := t 205 end 206 207 (** Request parameters *) 208 module Request : sig 209 type t = { 210 cursor: Cursor.t option; (** Optional pagination cursor *) 211 } 212 include Json.Jsonable.S with type t := t 213 end 214 215 (** Response result *) 216 module Response : sig 217 type t = { 218 prompts: Prompt.t list; (** List of available prompts *) 219 next_cursor: Cursor.t option; (** Optional cursor for the next page *) 220 } 221 include Json.Jsonable.S with type t := t 222 end 223 224 (** Create a prompts/list request *) 225 val create_request : ?cursor:Cursor.t -> ?id:RequestId.t -> unit -> JSONRPCMessage.t 226 227 (** Create a prompts/list response *) 228 val create_response : id:RequestId.t -> prompts:Prompt.t list -> ?next_cursor:Cursor.t -> unit -> JSONRPCMessage.t 229end 230 231(** Prompts/Get - Request to get a prompt with arguments *) 232module PromptsGet : sig 233 (** Request parameters *) 234 module Request : sig 235 type t = { 236 name: string; (** Name of the prompt to get *) 237 arguments: (string * string) list; (** Arguments for the prompt *) 238 } 239 include Json.Jsonable.S with type t := t 240 end 241 242 (** Response result *) 243 module Response : sig 244 type t = { 245 description: string option; (** Description of the prompt *) 246 messages: PromptMessage.t list; (** List of messages in the prompt *) 247 } 248 include Json.Jsonable.S with type t := t 249 end 250 251 (** Create a prompts/get request *) 252 val create_request : name:string -> arguments:(string * string) list -> ?id:RequestId.t -> unit -> JSONRPCMessage.t 253 254 (** Create a prompts/get response *) 255 val create_response : id:RequestId.t -> ?description:string -> messages:PromptMessage.t list -> unit -> JSONRPCMessage.t 256end 257 258(** List Changed Notifications *) 259module ListChanged : sig 260 (** Create a resources/list_changed notification *) 261 val create_resources_notification : unit -> JSONRPCMessage.t 262 263 (** Create a tools/list_changed notification *) 264 val create_tools_notification : unit -> JSONRPCMessage.t 265 266 (** Create a prompts/list_changed notification *) 267 val create_prompts_notification : unit -> JSONRPCMessage.t 268end 269 270(** Resource Updated Notification *) 271module ResourceUpdated : sig 272 (** Notification parameters *) 273 module Notification : sig 274 type t = { 275 uri: string; (** URI of the updated resource *) 276 } 277 include Json.Jsonable.S with type t := t 278 end 279 280 (** Create a resources/updated notification *) 281 val create_notification : uri:string -> unit -> JSONRPCMessage.t 282end 283 284(** Progress Notification *) 285module Progress : sig 286 (** Notification parameters *) 287 module Notification : sig 288 type t = { 289 progress: float; (** Current progress value *) 290 total: float; (** Total progress value *) 291 progress_token: ProgressToken.t; (** Token identifying the operation *) 292 } 293 include Json.Jsonable.S with type t := t 294 end 295 296 (** Create a progress notification *) 297 val create_notification : progress:float -> total:float -> progress_token:ProgressToken.t -> unit -> JSONRPCMessage.t 298end