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