···
1
+
(** MCP Protocol Messages *)
3
+
(* Protocol Version *)
5
+
type protocol_version = string
7
+
let protocol_version_jsont = Jsont.string
9
+
(* Initialize Protocol *)
11
+
module 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;
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 }
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 }
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
38
+
protocol_version : protocol_version;
39
+
capabilities : Capabilities.Server.t;
40
+
server_info : Capabilities.Implementation.t;
41
+
instructions : string option;
42
+
unknown : Jsont.json;
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 }
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 }
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
65
+
let method_ = "initialize"
68
+
module Initialized = struct
69
+
type notification = {
70
+
unknown : Jsont.json;
73
+
let make_notification () =
74
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
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
83
+
let method_ = "notifications/initialized"
86
+
module Ping = struct
88
+
unknown : Jsont.json;
91
+
let make_params () =
92
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
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
102
+
unknown : Jsont.json;
105
+
let make_result () =
106
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
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
115
+
let method_ = "ping"
120
+
module Resources = struct
124
+
description : string option;
125
+
mime_type : string option;
126
+
unknown : Jsont.json;
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 }
133
+
let resource_jsont : resource Jsont.t =
134
+
let make uri name description mime_type unknown =
135
+
{ uri; name; description; mime_type; unknown }
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
145
+
type resource_template = {
146
+
uri_template : string;
148
+
description : string option;
149
+
mime_type : string option;
150
+
unknown : Jsont.json;
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 }
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 }
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
169
+
type resource_contents = {
171
+
mime_type : string option;
172
+
text : string option;
173
+
blob : string option;
174
+
unknown : Jsont.json;
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 }
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 }
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 }
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
197
+
type list_request = {
198
+
cursor : string option;
199
+
unknown : Jsont.json;
202
+
let make_list_request ?cursor () =
203
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
204
+
{ cursor; unknown }
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
213
+
type list_result = {
214
+
resources : resource list;
215
+
next_cursor : string option;
216
+
unknown : Jsont.json;
219
+
let make_list_result ~resources ?next_cursor () =
220
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
221
+
{ resources; next_cursor; unknown }
223
+
let list_result_jsont : list_result Jsont.t =
224
+
let make resources next_cursor unknown =
225
+
{ resources; next_cursor; unknown }
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
235
+
type read_request = {
237
+
unknown : Jsont.json;
240
+
let make_read_request ~uri =
241
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
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
251
+
type read_result = {
252
+
contents : resource_contents list;
253
+
unknown : Jsont.json;
256
+
let make_read_result ~contents =
257
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
258
+
{ contents; unknown }
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
268
+
type subscribe_request = {
270
+
unknown : Jsont.json;
273
+
let make_subscribe_request ~uri =
274
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
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
284
+
type unsubscribe_request = {
286
+
unknown : Jsont.json;
289
+
let make_unsubscribe_request ~uri =
290
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
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
300
+
type updated_notification = {
302
+
unknown : Jsont.json;
305
+
let make_updated_notification ~uri =
306
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
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
316
+
type list_changed_notification = {
317
+
unknown : Jsont.json;
320
+
let make_list_changed_notification () =
321
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
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
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"
340
+
module Tools = struct
343
+
description : string option;
344
+
input_schema : Jsont.json;
345
+
unknown : Jsont.json;
348
+
let make_tool ~name ?description ~input_schema () =
349
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
350
+
{ name; description; input_schema; unknown }
352
+
let tool_jsont : tool Jsont.t =
353
+
let make name description input_schema unknown =
354
+
{ name; description; input_schema; unknown }
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
363
+
type list_request = {
364
+
cursor : string option;
365
+
unknown : Jsont.json;
368
+
let make_list_request ?cursor () =
369
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
370
+
{ cursor; unknown }
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
379
+
type list_result = {
381
+
next_cursor : string option;
382
+
unknown : Jsont.json;
385
+
let make_list_result ~tools ?next_cursor () =
386
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
387
+
{ tools; next_cursor; unknown }
389
+
let list_result_jsont : list_result Jsont.t =
390
+
let make tools next_cursor unknown =
391
+
{ tools; next_cursor; unknown }
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
401
+
type call_request = {
403
+
arguments : Jsont.json option;
404
+
unknown : Jsont.json;
407
+
let make_call_request ~name ?arguments () =
408
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
409
+
{ name; arguments; unknown }
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
419
+
type call_result = {
420
+
content : Content.block list;
421
+
is_error : bool option;
422
+
unknown : Jsont.json;
425
+
let make_call_result ~content ?is_error () =
426
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
427
+
{ content; is_error; unknown }
429
+
let call_result_jsont : call_result Jsont.t =
430
+
let make content is_error unknown =
431
+
{ content; is_error; unknown }
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
440
+
type list_changed_notification = {
441
+
unknown : Jsont.json;
444
+
let make_list_changed_notification () =
445
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
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
454
+
let list_method = "tools/list"
455
+
let call_method = "tools/call"
456
+
let list_changed_notification_method = "notifications/tools/list_changed"
461
+
module Prompts = struct
462
+
type prompt_argument = {
464
+
description : string option;
465
+
required : bool option;
466
+
unknown : Jsont.json;
469
+
let make_prompt_argument ~name ?description ?required () =
470
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
471
+
{ name; description; required; unknown }
473
+
let prompt_argument_jsont : prompt_argument Jsont.t =
474
+
let make name description required unknown =
475
+
{ name; description; required; unknown }
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
486
+
description : string option;
487
+
arguments : prompt_argument list option;
488
+
unknown : Jsont.json;
491
+
let make_prompt ~name ?description ?arguments () =
492
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
493
+
{ name; description; arguments; unknown }
495
+
let prompt_jsont : prompt Jsont.t =
496
+
let make name description arguments unknown =
497
+
{ name; description; arguments; unknown }
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
507
+
type role = User | Assistant
509
+
let role_jsont : role Jsont.t =
512
+
"assistant", Assistant;
515
+
type prompt_message = {
517
+
content : Content.block list;
518
+
unknown : Jsont.json;
521
+
let make_prompt_message ~role ~content () =
522
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
523
+
{ role; content; unknown }
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
534
+
type list_request = {
535
+
cursor : string option;
536
+
unknown : Jsont.json;
539
+
let make_list_request ?cursor () =
540
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
541
+
{ cursor; unknown }
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
550
+
type list_result = {
551
+
prompts : prompt list;
552
+
next_cursor : string option;
553
+
unknown : Jsont.json;
556
+
let make_list_result ~prompts ?next_cursor () =
557
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
558
+
{ prompts; next_cursor; unknown }
560
+
let list_result_jsont : list_result Jsont.t =
561
+
let make prompts next_cursor unknown =
562
+
{ prompts; next_cursor; unknown }
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
572
+
(* Arguments as object with string keys *)
573
+
let arguments_jsont : (string * string) list Jsont.t =
575
+
let pairs = List.map (fun (k, v) ->
576
+
((k, Jsont.Meta.none), Jsont.String (v, Jsont.Meta.none))
578
+
Jsont.Object (pairs, Jsont.Meta.none)
580
+
let dec_obj = function
581
+
| Jsont.Object (members, _) ->
582
+
List.map (fun ((k, _), v) ->
584
+
| Jsont.String (s, _) -> (k, s)
585
+
| _ -> Jsont.Error.msgf Jsont.Meta.none
586
+
"Argument values must be strings"
589
+
Jsont.Error.msgf Jsont.Meta.none "Arguments must be an object"
591
+
Jsont.map ~kind:"PromptArguments" ~dec:dec_obj ~enc:enc_obj Jsont.json
593
+
type get_request = {
595
+
arguments : (string * string) list option;
596
+
unknown : Jsont.json;
599
+
let make_get_request ~name ?arguments () =
600
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
601
+
{ name; arguments; unknown }
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
611
+
type get_result = {
612
+
description : string option;
613
+
messages : prompt_message list;
614
+
unknown : Jsont.json;
617
+
let make_get_result ?description ~messages () =
618
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
619
+
{ description; messages; unknown }
621
+
let get_result_jsont : get_result Jsont.t =
622
+
let make description messages unknown =
623
+
{ description; messages; unknown }
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
632
+
type list_changed_notification = {
633
+
unknown : Jsont.json;
636
+
let make_list_changed_notification () =
637
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
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
646
+
let list_method = "prompts/list"
647
+
let get_method = "prompts/get"
648
+
let list_changed_notification_method = "notifications/prompts/list_changed"
653
+
module Logging = struct
664
+
let level_jsont : level Jsont.t =
669
+
"warning", Warning;
671
+
"critical", Critical;
673
+
"emergency", Emergency;
676
+
let level_to_string = function
679
+
| Notice -> "notice"
680
+
| Warning -> "warning"
682
+
| Critical -> "critical"
684
+
| Emergency -> "emergency"
686
+
type notification = {
688
+
logger : string option;
689
+
data : Jsont.json option;
690
+
unknown : Jsont.json;
693
+
let make_notification ~level ?logger ?data () =
694
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
695
+
{ level; logger; data; unknown }
697
+
let notification_jsont : notification Jsont.t =
698
+
let make level logger data unknown =
699
+
{ level; logger; data; unknown }
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
708
+
let method_ = "notifications/message"
713
+
module Completions = struct
714
+
type completion_ref = {
717
+
unknown : Jsont.json;
720
+
let make_completion_ref ~ref_type ~uri () =
721
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
722
+
{ ref_type; uri; unknown }
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
733
+
ref_ : completion_ref;
734
+
argument : string option;
735
+
unknown : Jsont.json;
738
+
let make_request ~ref_ ?argument () =
739
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
740
+
{ ref_; argument; unknown }
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
751
+
completion : string list;
752
+
total : int option;
753
+
has_more : bool option;
754
+
unknown : Jsont.json;
757
+
let make_result ~completion ?total ?has_more () =
758
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
759
+
{ completion; total; has_more; unknown }
761
+
let result_jsont : result Jsont.t =
762
+
let make completion total has_more unknown =
763
+
{ completion; total; has_more; unknown }
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
773
+
let method_ = "completion/complete"
778
+
module Roots = struct
781
+
name : string option;
782
+
unknown : Jsont.json;
785
+
let make_root ~uri ?name () =
786
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
787
+
{ uri; name; unknown }
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
797
+
type list_request = {
798
+
unknown : Jsont.json;
801
+
let make_list_request () =
802
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
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
811
+
type list_result = {
813
+
unknown : Jsont.json;
816
+
let make_list_result ~roots =
817
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
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
828
+
type list_changed_notification = {
829
+
unknown : Jsont.json;
832
+
let make_list_changed_notification () =
833
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
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
842
+
let list_method = "roots/list"
843
+
let list_changed_notification_method = "notifications/roots/list_changed"
848
+
module Progress = struct
849
+
type notification = {
850
+
progress_token : string;
852
+
total : float option;
853
+
unknown : Jsont.json;
856
+
let make_notification ~progress_token ~progress ?total () =
857
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
858
+
{ progress_token; progress; total; unknown }
860
+
let notification_jsont : notification Jsont.t =
861
+
let make progress_token progress total unknown =
862
+
{ progress_token; progress; total; unknown }
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
872
+
let method_ = "notifications/progress"
877
+
module Cancellation = struct
878
+
type notification = {
879
+
request_id : Jsonrpc.Id.t;
880
+
reason : string option;
881
+
unknown : Jsont.json;
884
+
let make_notification ~request_id ?reason () =
885
+
let unknown = Jsont.Object ([], Jsont.Meta.none) in
886
+
{ request_id; reason; unknown }
888
+
let notification_jsont : notification Jsont.t =
889
+
let make request_id reason unknown =
890
+
{ request_id; reason; unknown }
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
899
+
let method_ = "notifications/cancelled"