Model Context Protocol in OCaml
1(** MCP SDK - Model Context Protocol SDK for OCaml *)
2
3open Mcp
4open Jsonrpc
5
6(** SDK version *)
7val version : string
8
9(** Logging utilities *)
10module Log : sig
11 type level = Debug | Info | Warning | Error
12
13 val string_of_level : level -> string
14
15 val log : level -> string -> unit
16 val debug : string -> unit
17 val info : string -> unit
18 val warning : string -> unit
19 val error : string -> unit
20end
21
22(** Context for tools and resources *)
23module Context : sig
24 type t
25
26 val create : ?request_id:RequestId.t -> ?progress_token:ProgressToken.t -> ?lifespan_context:(string * Json.t) list -> unit -> t
27 val get_context_value : t -> string -> Json.t option
28 val report_progress : t -> float -> float -> JSONRPCMessage.t option
29end
30
31(** Tools for the MCP server *)
32module Tool : sig
33 type handler = Context.t -> Json.t -> (Json.t, string) result
34
35 type t = {
36 name: string;
37 description: string option;
38 input_schema: Json.t;
39 handler: handler;
40 }
41
42 val create : name:string -> ?description:string -> input_schema:Json.t -> handler:handler -> unit -> t
43 val to_json : t -> Json.t
44
45 (** Create a tool result with content *)
46 val create_tool_result : Mcp.content list -> is_error:bool -> Json.t
47
48 (** Create a tool error result with structured content *)
49 val create_error_result : string -> Json.t
50
51 (** Handle tool execution errors *)
52 val handle_execution_error : string -> Json.t
53
54 (** Handle unknown tool error *)
55 val handle_unknown_tool_error : string -> Json.t
56
57 (** Handle general tool execution exception *)
58 val handle_execution_exception : exn -> Json.t
59end
60
61(** Resources for the MCP server *)
62module Resource : sig
63 type handler = Context.t -> string list -> (string, string) result
64
65 type t = {
66 uri_template: string;
67 description: string option;
68 mime_type: string option;
69 handler: handler;
70 }
71
72 val create : uri_template:string -> ?description:string -> ?mime_type:string -> handler:handler -> unit -> t
73 val to_json : t -> Json.t
74end
75
76(** Prompts for the MCP server *)
77module Prompt : sig
78 type argument = {
79 name: string;
80 description: string option;
81 required: bool;
82 }
83
84 type message = {
85 role: Role.t;
86 content: content;
87 }
88
89 type handler = Context.t -> (string * string) list -> (message list, string) result
90
91 type t = {
92 name: string;
93 description: string option;
94 arguments: argument list;
95 handler: handler;
96 }
97
98 val create : name:string -> ?description:string -> ?arguments:argument list -> handler:handler -> unit -> t
99 val create_argument : name:string -> ?description:string -> ?required:bool -> unit -> argument
100 val to_json : t -> Json.t
101end
102
103(** Main server type *)
104type server
105
106val name : server -> string
107val version : server -> string
108val protocol_version : server -> string
109val capabilities : server -> Json.t
110val tools : server -> Tool.t list
111val resources : server -> Resource.t list
112val prompts : server -> Prompt.t list
113
114(** Create a new server *)
115val create_server : name:string -> ?version:string -> ?protocol_version:string -> unit -> server
116
117(** Default capabilities for the server *)
118val default_capabilities : ?with_tools:bool -> ?with_resources:bool -> ?with_prompts:bool -> unit -> Json.t
119
120(** Create and register a tool in one step *)
121val add_tool : server -> name:string -> ?description:string -> ?schema_properties:(string * string * string) list -> ?schema_required:string list -> (Json.t -> Json.t) -> Tool.t
122
123(** Create and register a resource in one step *)
124val add_resource : server -> uri_template:string -> ?description:string -> ?mime_type:string -> (string list -> string) -> Resource.t
125
126(** Create and register a prompt in one step *)
127val add_prompt : server -> name:string -> ?description:string -> ?arguments:(string * string option * bool) list -> ((string * string) list -> Prompt.message list) -> Prompt.t
128
129(** Configure server with default capabilities based on registered components *)
130val configure_server : server -> ?with_tools:bool -> ?with_resources:bool -> ?with_prompts:bool -> unit -> server
131
132val make_tool_schema : (string * string * string) list -> string list -> Json.t