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