My agentic slop goes here. Not intended for anyone else!
1(** MCP Protocol Messages *) 2 3(* Protocol Version *) 4 5type protocol_version = string 6 7let protocol_version_jsont = Jsont.string 8 9(* Initialize Protocol *) 10 11module Initialize = struct 12 type request_params = { 13 protocol_version : protocol_version; 14 capabilities : Capabilities.Client.t; 15 client_info : Capabilities.Implementation.t; 16 unknown : Jsont.json; 17 } 18 19 let make_request_params ~protocol_version ~capabilities ~client_info () = 20 let unknown = Jsont.Object ([], Jsont.Meta.none) in 21 { protocol_version; capabilities; client_info; unknown } 22 23 let request_params_jsont : request_params Jsont.t = 24 let make protocol_version capabilities client_info unknown = 25 { protocol_version; capabilities; client_info; unknown } 26 in 27 Jsont.Object.map ~kind:"InitializeRequestParams" make 28 |> Jsont.Object.mem "protocolVersion" protocol_version_jsont 29 ~enc:(fun p -> p.protocol_version) 30 |> Jsont.Object.mem "capabilities" Capabilities.Client.jsont 31 ~enc:(fun p -> p.capabilities) 32 |> Jsont.Object.mem "clientInfo" Capabilities.Implementation.jsont 33 ~enc:(fun p -> p.client_info) 34 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun p -> p.unknown) 35 |> Jsont.Object.finish 36 37 type result = { 38 protocol_version : protocol_version; 39 capabilities : Capabilities.Server.t; 40 server_info : Capabilities.Implementation.t; 41 instructions : string option; 42 unknown : Jsont.json; 43 } 44 45 let make_result ~protocol_version ~capabilities ~server_info ?instructions () = 46 let unknown = Jsont.Object ([], Jsont.Meta.none) in 47 { protocol_version; capabilities; server_info; instructions; unknown } 48 49 let result_jsont : result Jsont.t = 50 let make protocol_version capabilities server_info instructions unknown = 51 { protocol_version; capabilities; server_info; instructions; unknown } 52 in 53 Jsont.Object.map ~kind:"InitializeResult" make 54 |> Jsont.Object.mem "protocolVersion" protocol_version_jsont 55 ~enc:(fun r -> r.protocol_version) 56 |> Jsont.Object.mem "capabilities" Capabilities.Server.jsont 57 ~enc:(fun r -> r.capabilities) 58 |> Jsont.Object.mem "serverInfo" Capabilities.Implementation.jsont 59 ~enc:(fun r -> r.server_info) 60 |> Jsont.Object.opt_mem "instructions" Jsont.string 61 ~enc:(fun r -> r.instructions) 62 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 63 |> Jsont.Object.finish 64 65 let method_ = "initialize" 66end 67 68module Initialized = struct 69 type notification = { 70 unknown : Jsont.json; 71 } 72 73 let make_notification () = 74 let unknown = Jsont.Object ([], Jsont.Meta.none) in 75 { unknown } 76 77 let notification_jsont : notification Jsont.t = 78 let make unknown = { unknown } in 79 Jsont.Object.map ~kind:"InitializedNotification" make 80 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun n -> n.unknown) 81 |> Jsont.Object.finish 82 83 let method_ = "notifications/initialized" 84end 85 86module Ping = struct 87 type params = { 88 unknown : Jsont.json; 89 } 90 91 let make_params () = 92 let unknown = Jsont.Object ([], Jsont.Meta.none) in 93 { unknown } 94 95 let params_jsont : params Jsont.t = 96 let make unknown = { unknown } in 97 Jsont.Object.map ~kind:"PingParams" make 98 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun p -> p.unknown) 99 |> Jsont.Object.finish 100 101 type result = { 102 unknown : Jsont.json; 103 } 104 105 let make_result () = 106 let unknown = Jsont.Object ([], Jsont.Meta.none) in 107 { unknown } 108 109 let result_jsont : result Jsont.t = 110 let make unknown = { unknown } in 111 Jsont.Object.map ~kind:"PingResult" make 112 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 113 |> Jsont.Object.finish 114 115 let method_ = "ping" 116end 117 118(* Resources *) 119 120module Resources = struct 121 type resource = { 122 uri : string; 123 name : string; 124 description : string option; 125 mime_type : string option; 126 unknown : Jsont.json; 127 } 128 129 let make_resource ~uri ~name ?description ?mime_type () = 130 let unknown = Jsont.Object ([], Jsont.Meta.none) in 131 { uri; name; description; mime_type; unknown } 132 133 let resource_jsont : resource Jsont.t = 134 let make uri name description mime_type unknown = 135 { uri; name; description; mime_type; unknown } 136 in 137 Jsont.Object.map ~kind:"Resource" make 138 |> Jsont.Object.mem "uri" Jsont.string ~enc:(fun r -> r.uri) 139 |> Jsont.Object.mem "name" Jsont.string ~enc:(fun r -> r.name) 140 |> Jsont.Object.opt_mem "description" Jsont.string ~enc:(fun r -> r.description) 141 |> Jsont.Object.opt_mem "mimeType" Jsont.string ~enc:(fun r -> r.mime_type) 142 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 143 |> Jsont.Object.finish 144 145 type resource_template = { 146 uri_template : string; 147 name : string; 148 description : string option; 149 mime_type : string option; 150 unknown : Jsont.json; 151 } 152 153 let make_resource_template ~uri_template ~name ?description ?mime_type () = 154 let unknown = Jsont.Object ([], Jsont.Meta.none) in 155 { uri_template; name; description; mime_type; unknown } 156 157 let resource_template_jsont : resource_template Jsont.t = 158 let make uri_template name description mime_type unknown = 159 { uri_template; name; description; mime_type; unknown } 160 in 161 Jsont.Object.map ~kind:"ResourceTemplate" make 162 |> Jsont.Object.mem "uriTemplate" Jsont.string ~enc:(fun t -> t.uri_template) 163 |> Jsont.Object.mem "name" Jsont.string ~enc:(fun t -> t.name) 164 |> Jsont.Object.opt_mem "description" Jsont.string ~enc:(fun t -> t.description) 165 |> Jsont.Object.opt_mem "mimeType" Jsont.string ~enc:(fun t -> t.mime_type) 166 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun t -> t.unknown) 167 |> Jsont.Object.finish 168 169 type resource_contents = { 170 uri : string; 171 mime_type : string option; 172 text : string option; 173 blob : string option; 174 unknown : Jsont.json; 175 } 176 177 let make_text_contents ~uri ~text ?mime_type () = 178 let unknown = Jsont.Object ([], Jsont.Meta.none) in 179 { uri; mime_type; text = Some text; blob = None; unknown } 180 181 let make_blob_contents ~uri ~blob ~mime_type = 182 let unknown = Jsont.Object ([], Jsont.Meta.none) in 183 { uri; mime_type = Some mime_type; text = None; blob = Some blob; unknown } 184 185 let resource_contents_jsont : resource_contents Jsont.t = 186 let make uri mime_type text blob unknown = 187 { uri; mime_type; text; blob; unknown } 188 in 189 Jsont.Object.map ~kind:"ResourceContents" make 190 |> Jsont.Object.mem "uri" Jsont.string ~enc:(fun c -> c.uri) 191 |> Jsont.Object.opt_mem "mimeType" Jsont.string ~enc:(fun c -> c.mime_type) 192 |> Jsont.Object.opt_mem "text" Jsont.string ~enc:(fun c -> c.text) 193 |> Jsont.Object.opt_mem "blob" Jsont.string ~enc:(fun c -> c.blob) 194 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun c -> c.unknown) 195 |> Jsont.Object.finish 196 197 type list_request = { 198 cursor : string option; 199 unknown : Jsont.json; 200 } 201 202 let make_list_request ?cursor () = 203 let unknown = Jsont.Object ([], Jsont.Meta.none) in 204 { cursor; unknown } 205 206 let list_request_jsont : list_request Jsont.t = 207 let make cursor unknown = { cursor; unknown } in 208 Jsont.Object.map ~kind:"ResourcesListRequest" make 209 |> Jsont.Object.opt_mem "cursor" Jsont.string ~enc:(fun r -> r.cursor) 210 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 211 |> Jsont.Object.finish 212 213 type list_result = { 214 resources : resource list; 215 next_cursor : string option; 216 unknown : Jsont.json; 217 } 218 219 let make_list_result ~resources ?next_cursor () = 220 let unknown = Jsont.Object ([], Jsont.Meta.none) in 221 { resources; next_cursor; unknown } 222 223 let list_result_jsont : list_result Jsont.t = 224 let make resources next_cursor unknown = 225 { resources; next_cursor; unknown } 226 in 227 Jsont.Object.map ~kind:"ResourcesListResult" make 228 |> Jsont.Object.mem "resources" (Jsont.list resource_jsont) 229 ~enc:(fun r -> r.resources) 230 |> Jsont.Object.opt_mem "nextCursor" Jsont.string 231 ~enc:(fun r -> r.next_cursor) 232 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 233 |> Jsont.Object.finish 234 235 type read_request = { 236 uri : string; 237 unknown : Jsont.json; 238 } 239 240 let make_read_request ~uri = 241 let unknown = Jsont.Object ([], Jsont.Meta.none) in 242 { uri; unknown } 243 244 let read_request_jsont : read_request Jsont.t = 245 let make uri unknown = { uri; unknown } in 246 Jsont.Object.map ~kind:"ResourcesReadRequest" make 247 |> Jsont.Object.mem "uri" Jsont.string ~enc:(fun r -> r.uri) 248 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 249 |> Jsont.Object.finish 250 251 type read_result = { 252 contents : resource_contents list; 253 unknown : Jsont.json; 254 } 255 256 let make_read_result ~contents = 257 let unknown = Jsont.Object ([], Jsont.Meta.none) in 258 { contents; unknown } 259 260 let read_result_jsont : read_result Jsont.t = 261 let make contents unknown = { contents; unknown } in 262 Jsont.Object.map ~kind:"ResourcesReadResult" make 263 |> Jsont.Object.mem "contents" (Jsont.list resource_contents_jsont) 264 ~enc:(fun r -> r.contents) 265 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 266 |> Jsont.Object.finish 267 268 type subscribe_request = { 269 uri : string; 270 unknown : Jsont.json; 271 } 272 273 let make_subscribe_request ~uri = 274 let unknown = Jsont.Object ([], Jsont.Meta.none) in 275 { uri; unknown } 276 277 let subscribe_request_jsont : subscribe_request Jsont.t = 278 let make uri unknown = { uri; unknown } in 279 Jsont.Object.map ~kind:"ResourcesSubscribeRequest" make 280 |> Jsont.Object.mem "uri" Jsont.string ~enc:(fun r -> r.uri) 281 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 282 |> Jsont.Object.finish 283 284 type unsubscribe_request = { 285 uri : string; 286 unknown : Jsont.json; 287 } 288 289 let make_unsubscribe_request ~uri = 290 let unknown = Jsont.Object ([], Jsont.Meta.none) in 291 { uri; unknown } 292 293 let unsubscribe_request_jsont : unsubscribe_request Jsont.t = 294 let make uri unknown = { uri; unknown } in 295 Jsont.Object.map ~kind:"ResourcesUnsubscribeRequest" make 296 |> Jsont.Object.mem "uri" Jsont.string ~enc:(fun r -> r.uri) 297 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 298 |> Jsont.Object.finish 299 300 type updated_notification = { 301 uri : string; 302 unknown : Jsont.json; 303 } 304 305 let make_updated_notification ~uri = 306 let unknown = Jsont.Object ([], Jsont.Meta.none) in 307 { uri; unknown } 308 309 let updated_notification_jsont : updated_notification Jsont.t = 310 let make uri unknown = { uri; unknown } in 311 Jsont.Object.map ~kind:"ResourceUpdatedNotification" make 312 |> Jsont.Object.mem "uri" Jsont.string ~enc:(fun n -> n.uri) 313 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun n -> n.unknown) 314 |> Jsont.Object.finish 315 316 type list_changed_notification = { 317 unknown : Jsont.json; 318 } 319 320 let make_list_changed_notification () = 321 let unknown = Jsont.Object ([], Jsont.Meta.none) in 322 { unknown } 323 324 let list_changed_notification_jsont : list_changed_notification Jsont.t = 325 let make unknown = { unknown } in 326 Jsont.Object.map ~kind:"ResourceListChangedNotification" make 327 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun n -> n.unknown) 328 |> Jsont.Object.finish 329 330 let list_method = "resources/list" 331 let read_method = "resources/read" 332 let subscribe_method = "resources/subscribe" 333 let unsubscribe_method = "resources/unsubscribe" 334 let updated_notification_method = "notifications/resources/updated" 335 let list_changed_notification_method = "notifications/resources/list_changed" 336end 337 338(* Tools *) 339 340module Tools = struct 341 type tool = { 342 name : string; 343 description : string option; 344 input_schema : Jsont.json; 345 unknown : Jsont.json; 346 } 347 348 let make_tool ~name ?description ~input_schema () = 349 let unknown = Jsont.Object ([], Jsont.Meta.none) in 350 { name; description; input_schema; unknown } 351 352 let tool_jsont : tool Jsont.t = 353 let make name description input_schema unknown = 354 { name; description; input_schema; unknown } 355 in 356 Jsont.Object.map ~kind:"Tool" make 357 |> Jsont.Object.mem "name" Jsont.string ~enc:(fun t -> t.name) 358 |> Jsont.Object.opt_mem "description" Jsont.string ~enc:(fun t -> t.description) 359 |> Jsont.Object.mem "inputSchema" Jsont.json ~enc:(fun t -> t.input_schema) 360 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun t -> t.unknown) 361 |> Jsont.Object.finish 362 363 type list_request = { 364 cursor : string option; 365 unknown : Jsont.json; 366 } 367 368 let make_list_request ?cursor () = 369 let unknown = Jsont.Object ([], Jsont.Meta.none) in 370 { cursor; unknown } 371 372 let list_request_jsont : list_request Jsont.t = 373 let make cursor unknown = { cursor; unknown } in 374 Jsont.Object.map ~kind:"ToolsListRequest" make 375 |> Jsont.Object.opt_mem "cursor" Jsont.string ~enc:(fun r -> r.cursor) 376 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 377 |> Jsont.Object.finish 378 379 type list_result = { 380 tools : tool list; 381 next_cursor : string option; 382 unknown : Jsont.json; 383 } 384 385 let make_list_result ~tools ?next_cursor () = 386 let unknown = Jsont.Object ([], Jsont.Meta.none) in 387 { tools; next_cursor; unknown } 388 389 let list_result_jsont : list_result Jsont.t = 390 let make tools next_cursor unknown = 391 { tools; next_cursor; unknown } 392 in 393 Jsont.Object.map ~kind:"ToolsListResult" make 394 |> Jsont.Object.mem "tools" (Jsont.list tool_jsont) 395 ~enc:(fun r -> r.tools) 396 |> Jsont.Object.opt_mem "nextCursor" Jsont.string 397 ~enc:(fun r -> r.next_cursor) 398 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 399 |> Jsont.Object.finish 400 401 type call_request = { 402 name : string; 403 arguments : Jsont.json option; 404 unknown : Jsont.json; 405 } 406 407 let make_call_request ~name ?arguments () = 408 let unknown = Jsont.Object ([], Jsont.Meta.none) in 409 { name; arguments; unknown } 410 411 let call_request_jsont : call_request Jsont.t = 412 let make name arguments unknown = { name; arguments; unknown } in 413 Jsont.Object.map ~kind:"ToolsCallRequest" make 414 |> Jsont.Object.mem "name" Jsont.string ~enc:(fun r -> r.name) 415 |> Jsont.Object.opt_mem "arguments" Jsont.json ~enc:(fun r -> r.arguments) 416 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 417 |> Jsont.Object.finish 418 419 type call_result = { 420 content : Content.block list; 421 is_error : bool option; 422 unknown : Jsont.json; 423 } 424 425 let make_call_result ~content ?is_error () = 426 let unknown = Jsont.Object ([], Jsont.Meta.none) in 427 { content; is_error; unknown } 428 429 let call_result_jsont : call_result Jsont.t = 430 let make content is_error unknown = 431 { content; is_error; unknown } 432 in 433 Jsont.Object.map ~kind:"ToolsCallResult" make 434 |> Jsont.Object.mem "content" (Jsont.list Content.block_jsont) 435 ~enc:(fun r -> r.content) 436 |> Jsont.Object.opt_mem "isError" Jsont.bool ~enc:(fun r -> r.is_error) 437 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 438 |> Jsont.Object.finish 439 440 type list_changed_notification = { 441 unknown : Jsont.json; 442 } 443 444 let make_list_changed_notification () = 445 let unknown = Jsont.Object ([], Jsont.Meta.none) in 446 { unknown } 447 448 let list_changed_notification_jsont : list_changed_notification Jsont.t = 449 let make unknown = { unknown } in 450 Jsont.Object.map ~kind:"ToolsListChangedNotification" make 451 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun n -> n.unknown) 452 |> Jsont.Object.finish 453 454 let list_method = "tools/list" 455 let call_method = "tools/call" 456 let list_changed_notification_method = "notifications/tools/list_changed" 457end 458 459(* Prompts *) 460 461module Prompts = struct 462 type prompt_argument = { 463 name : string; 464 description : string option; 465 required : bool option; 466 unknown : Jsont.json; 467 } 468 469 let make_prompt_argument ~name ?description ?required () = 470 let unknown = Jsont.Object ([], Jsont.Meta.none) in 471 { name; description; required; unknown } 472 473 let prompt_argument_jsont : prompt_argument Jsont.t = 474 let make name description required unknown = 475 { name; description; required; unknown } 476 in 477 Jsont.Object.map ~kind:"PromptArgument" make 478 |> Jsont.Object.mem "name" Jsont.string ~enc:(fun a -> a.name) 479 |> Jsont.Object.opt_mem "description" Jsont.string ~enc:(fun a -> a.description) 480 |> Jsont.Object.opt_mem "required" Jsont.bool ~enc:(fun a -> a.required) 481 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun a -> a.unknown) 482 |> Jsont.Object.finish 483 484 type prompt = { 485 name : string; 486 description : string option; 487 arguments : prompt_argument list option; 488 unknown : Jsont.json; 489 } 490 491 let make_prompt ~name ?description ?arguments () = 492 let unknown = Jsont.Object ([], Jsont.Meta.none) in 493 { name; description; arguments; unknown } 494 495 let prompt_jsont : prompt Jsont.t = 496 let make name description arguments unknown = 497 { name; description; arguments; unknown } 498 in 499 Jsont.Object.map ~kind:"Prompt" make 500 |> Jsont.Object.mem "name" Jsont.string ~enc:(fun p -> p.name) 501 |> Jsont.Object.opt_mem "description" Jsont.string ~enc:(fun p -> p.description) 502 |> Jsont.Object.opt_mem "arguments" (Jsont.list prompt_argument_jsont) 503 ~enc:(fun p -> p.arguments) 504 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun p -> p.unknown) 505 |> Jsont.Object.finish 506 507 type role = User | Assistant 508 509 let role_jsont : role Jsont.t = 510 Jsont.enum [ 511 "user", User; 512 "assistant", Assistant; 513 ] 514 515 type prompt_message = { 516 role : role; 517 content : Content.block list; 518 unknown : Jsont.json; 519 } 520 521 let make_prompt_message ~role ~content () = 522 let unknown = Jsont.Object ([], Jsont.Meta.none) in 523 { role; content; unknown } 524 525 let prompt_message_jsont : prompt_message Jsont.t = 526 let make role content unknown = { role; content; unknown } in 527 Jsont.Object.map ~kind:"PromptMessage" make 528 |> Jsont.Object.mem "role" role_jsont ~enc:(fun m -> m.role) 529 |> Jsont.Object.mem "content" (Jsont.list Content.block_jsont) 530 ~enc:(fun m -> m.content) 531 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun m -> m.unknown) 532 |> Jsont.Object.finish 533 534 type list_request = { 535 cursor : string option; 536 unknown : Jsont.json; 537 } 538 539 let make_list_request ?cursor () = 540 let unknown = Jsont.Object ([], Jsont.Meta.none) in 541 { cursor; unknown } 542 543 let list_request_jsont : list_request Jsont.t = 544 let make cursor unknown = { cursor; unknown } in 545 Jsont.Object.map ~kind:"PromptsListRequest" make 546 |> Jsont.Object.opt_mem "cursor" Jsont.string ~enc:(fun r -> r.cursor) 547 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 548 |> Jsont.Object.finish 549 550 type list_result = { 551 prompts : prompt list; 552 next_cursor : string option; 553 unknown : Jsont.json; 554 } 555 556 let make_list_result ~prompts ?next_cursor () = 557 let unknown = Jsont.Object ([], Jsont.Meta.none) in 558 { prompts; next_cursor; unknown } 559 560 let list_result_jsont : list_result Jsont.t = 561 let make prompts next_cursor unknown = 562 { prompts; next_cursor; unknown } 563 in 564 Jsont.Object.map ~kind:"PromptsListResult" make 565 |> Jsont.Object.mem "prompts" (Jsont.list prompt_jsont) 566 ~enc:(fun r -> r.prompts) 567 |> Jsont.Object.opt_mem "nextCursor" Jsont.string 568 ~enc:(fun r -> r.next_cursor) 569 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 570 |> Jsont.Object.finish 571 572 (* Arguments as object with string keys *) 573 let arguments_jsont : (string * string) list Jsont.t = 574 let enc_obj args = 575 let pairs = List.map (fun (k, v) -> 576 ((k, Jsont.Meta.none), Jsont.String (v, Jsont.Meta.none)) 577 ) args in 578 Jsont.Object (pairs, Jsont.Meta.none) 579 in 580 let dec_obj = function 581 | Jsont.Object (members, _) -> 582 List.map (fun ((k, _), v) -> 583 match v with 584 | Jsont.String (s, _) -> (k, s) 585 | _ -> Jsont.Error.msgf Jsont.Meta.none 586 "Argument values must be strings" 587 ) members 588 | _ -> 589 Jsont.Error.msgf Jsont.Meta.none "Arguments must be an object" 590 in 591 Jsont.map ~kind:"PromptArguments" ~dec:dec_obj ~enc:enc_obj Jsont.json 592 593 type get_request = { 594 name : string; 595 arguments : (string * string) list option; 596 unknown : Jsont.json; 597 } 598 599 let make_get_request ~name ?arguments () = 600 let unknown = Jsont.Object ([], Jsont.Meta.none) in 601 { name; arguments; unknown } 602 603 let get_request_jsont : get_request Jsont.t = 604 let make name arguments unknown = { name; arguments; unknown } in 605 Jsont.Object.map ~kind:"PromptsGetRequest" make 606 |> Jsont.Object.mem "name" Jsont.string ~enc:(fun r -> r.name) 607 |> Jsont.Object.opt_mem "arguments" arguments_jsont ~enc:(fun r -> r.arguments) 608 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 609 |> Jsont.Object.finish 610 611 type get_result = { 612 description : string option; 613 messages : prompt_message list; 614 unknown : Jsont.json; 615 } 616 617 let make_get_result ?description ~messages () = 618 let unknown = Jsont.Object ([], Jsont.Meta.none) in 619 { description; messages; unknown } 620 621 let get_result_jsont : get_result Jsont.t = 622 let make description messages unknown = 623 { description; messages; unknown } 624 in 625 Jsont.Object.map ~kind:"PromptsGetResult" make 626 |> Jsont.Object.opt_mem "description" Jsont.string ~enc:(fun r -> r.description) 627 |> Jsont.Object.mem "messages" (Jsont.list prompt_message_jsont) 628 ~enc:(fun r -> r.messages) 629 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 630 |> Jsont.Object.finish 631 632 type list_changed_notification = { 633 unknown : Jsont.json; 634 } 635 636 let make_list_changed_notification () = 637 let unknown = Jsont.Object ([], Jsont.Meta.none) in 638 { unknown } 639 640 let list_changed_notification_jsont : list_changed_notification Jsont.t = 641 let make unknown = { unknown } in 642 Jsont.Object.map ~kind:"PromptsListChangedNotification" make 643 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun n -> n.unknown) 644 |> Jsont.Object.finish 645 646 let list_method = "prompts/list" 647 let get_method = "prompts/get" 648 let list_changed_notification_method = "notifications/prompts/list_changed" 649end 650 651(* Logging *) 652 653module Logging = struct 654 type level = 655 | Debug 656 | Info 657 | Notice 658 | Warning 659 | Error 660 | Critical 661 | Alert 662 | Emergency 663 664 let level_jsont : level Jsont.t = 665 Jsont.enum [ 666 "debug", Debug; 667 "info", Info; 668 "notice", Notice; 669 "warning", Warning; 670 "error", Error; 671 "critical", Critical; 672 "alert", Alert; 673 "emergency", Emergency; 674 ] 675 676 let level_to_string = function 677 | Debug -> "debug" 678 | Info -> "info" 679 | Notice -> "notice" 680 | Warning -> "warning" 681 | Error -> "error" 682 | Critical -> "critical" 683 | Alert -> "alert" 684 | Emergency -> "emergency" 685 686 type notification = { 687 level : level; 688 logger : string option; 689 data : Jsont.json option; 690 unknown : Jsont.json; 691 } 692 693 let make_notification ~level ?logger ?data () = 694 let unknown = Jsont.Object ([], Jsont.Meta.none) in 695 { level; logger; data; unknown } 696 697 let notification_jsont : notification Jsont.t = 698 let make level logger data unknown = 699 { level; logger; data; unknown } 700 in 701 Jsont.Object.map ~kind:"LoggingNotification" make 702 |> Jsont.Object.mem "level" level_jsont ~enc:(fun n -> n.level) 703 |> Jsont.Object.opt_mem "logger" Jsont.string ~enc:(fun n -> n.logger) 704 |> Jsont.Object.opt_mem "data" Jsont.json ~enc:(fun n -> n.data) 705 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun n -> n.unknown) 706 |> Jsont.Object.finish 707 708 let method_ = "notifications/message" 709end 710 711(* Completions *) 712 713module Completions = struct 714 type completion_ref = { 715 ref_type : string; 716 uri : string; 717 unknown : Jsont.json; 718 } 719 720 let make_completion_ref ~ref_type ~uri () = 721 let unknown = Jsont.Object ([], Jsont.Meta.none) in 722 { ref_type; uri; unknown } 723 724 let completion_ref_jsont : completion_ref Jsont.t = 725 let make ref_type uri unknown = { ref_type; uri; unknown } in 726 Jsont.Object.map ~kind:"CompletionRef" make 727 |> Jsont.Object.mem "type" Jsont.string ~enc:(fun r -> r.ref_type) 728 |> Jsont.Object.mem "uri" Jsont.string ~enc:(fun r -> r.uri) 729 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 730 |> Jsont.Object.finish 731 732 type request = { 733 ref_ : completion_ref; 734 argument : string option; 735 unknown : Jsont.json; 736 } 737 738 let make_request ~ref_ ?argument () = 739 let unknown = Jsont.Object ([], Jsont.Meta.none) in 740 { ref_; argument; unknown } 741 742 let request_jsont : request Jsont.t = 743 let make ref_ argument unknown = { ref_; argument; unknown } in 744 Jsont.Object.map ~kind:"CompletionRequest" make 745 |> Jsont.Object.mem "ref" completion_ref_jsont ~enc:(fun r -> r.ref_) 746 |> Jsont.Object.opt_mem "argument" Jsont.string ~enc:(fun r -> r.argument) 747 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 748 |> Jsont.Object.finish 749 750 type result = { 751 completion : string list; 752 total : int option; 753 has_more : bool option; 754 unknown : Jsont.json; 755 } 756 757 let make_result ~completion ?total ?has_more () = 758 let unknown = Jsont.Object ([], Jsont.Meta.none) in 759 { completion; total; has_more; unknown } 760 761 let result_jsont : result Jsont.t = 762 let make completion total has_more unknown = 763 { completion; total; has_more; unknown } 764 in 765 Jsont.Object.map ~kind:"CompletionResult" make 766 |> Jsont.Object.mem "completion" (Jsont.list Jsont.string) 767 ~enc:(fun r -> r.completion) 768 |> Jsont.Object.opt_mem "total" Jsont.int ~enc:(fun r -> r.total) 769 |> Jsont.Object.opt_mem "hasMore" Jsont.bool ~enc:(fun r -> r.has_more) 770 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 771 |> Jsont.Object.finish 772 773 let method_ = "completion/complete" 774end 775 776(* Roots *) 777 778module Roots = struct 779 type root = { 780 uri : string; 781 name : string option; 782 unknown : Jsont.json; 783 } 784 785 let make_root ~uri ?name () = 786 let unknown = Jsont.Object ([], Jsont.Meta.none) in 787 { uri; name; unknown } 788 789 let root_jsont : root Jsont.t = 790 let make uri name unknown = { uri; name; unknown } in 791 Jsont.Object.map ~kind:"Root" make 792 |> Jsont.Object.mem "uri" Jsont.string ~enc:(fun r -> r.uri) 793 |> Jsont.Object.opt_mem "name" Jsont.string ~enc:(fun r -> r.name) 794 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 795 |> Jsont.Object.finish 796 797 type list_request = { 798 unknown : Jsont.json; 799 } 800 801 let make_list_request () = 802 let unknown = Jsont.Object ([], Jsont.Meta.none) in 803 { unknown } 804 805 let list_request_jsont : list_request Jsont.t = 806 let make unknown = { unknown } in 807 Jsont.Object.map ~kind:"RootsListRequest" make 808 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 809 |> Jsont.Object.finish 810 811 type list_result = { 812 roots : root list; 813 unknown : Jsont.json; 814 } 815 816 let make_list_result ~roots = 817 let unknown = Jsont.Object ([], Jsont.Meta.none) in 818 { roots; unknown } 819 820 let list_result_jsont : list_result Jsont.t = 821 let make roots unknown = { roots; unknown } in 822 Jsont.Object.map ~kind:"RootsListResult" make 823 |> Jsont.Object.mem "roots" (Jsont.list root_jsont) 824 ~enc:(fun r -> r.roots) 825 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun r -> r.unknown) 826 |> Jsont.Object.finish 827 828 type list_changed_notification = { 829 unknown : Jsont.json; 830 } 831 832 let make_list_changed_notification () = 833 let unknown = Jsont.Object ([], Jsont.Meta.none) in 834 { unknown } 835 836 let list_changed_notification_jsont : list_changed_notification Jsont.t = 837 let make unknown = { unknown } in 838 Jsont.Object.map ~kind:"RootsListChangedNotification" make 839 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun n -> n.unknown) 840 |> Jsont.Object.finish 841 842 let list_method = "roots/list" 843 let list_changed_notification_method = "notifications/roots/list_changed" 844end 845 846(* Progress *) 847 848module Progress = struct 849 type notification = { 850 progress_token : string; 851 progress : float; 852 total : float option; 853 unknown : Jsont.json; 854 } 855 856 let make_notification ~progress_token ~progress ?total () = 857 let unknown = Jsont.Object ([], Jsont.Meta.none) in 858 { progress_token; progress; total; unknown } 859 860 let notification_jsont : notification Jsont.t = 861 let make progress_token progress total unknown = 862 { progress_token; progress; total; unknown } 863 in 864 Jsont.Object.map ~kind:"ProgressNotification" make 865 |> Jsont.Object.mem "progressToken" Jsont.string 866 ~enc:(fun n -> n.progress_token) 867 |> Jsont.Object.mem "progress" Jsont.number ~enc:(fun n -> n.progress) 868 |> Jsont.Object.opt_mem "total" Jsont.number ~enc:(fun n -> n.total) 869 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun n -> n.unknown) 870 |> Jsont.Object.finish 871 872 let method_ = "notifications/progress" 873end 874 875(* Cancellation *) 876 877module Cancellation = struct 878 type notification = { 879 request_id : Jsonrpc.Id.t; 880 reason : string option; 881 unknown : Jsont.json; 882 } 883 884 let make_notification ~request_id ?reason () = 885 let unknown = Jsont.Object ([], Jsont.Meta.none) in 886 { request_id; reason; unknown } 887 888 let notification_jsont : notification Jsont.t = 889 let make request_id reason unknown = 890 { request_id; reason; unknown } 891 in 892 Jsont.Object.map ~kind:"CancellationNotification" make 893 |> Jsont.Object.mem "requestId" Jsonrpc.Id.jsont 894 ~enc:(fun n -> n.request_id) 895 |> Jsont.Object.opt_mem "reason" Jsont.string ~enc:(fun n -> n.reason) 896 |> Jsont.Object.keep_unknown Jsont.json_mems ~enc:(fun n -> n.unknown) 897 |> Jsont.Object.finish 898 899 let method_ = "notifications/cancelled" 900end