OCaml Claude SDK using Eio and Jsont
1(*---------------------------------------------------------------------------
2 Copyright (c) 2025 Anil Madhavapeddy <anil@recoil.org>. All rights reserved.
3 SPDX-License-Identifier: ISC
4 ---------------------------------------------------------------------------*)
5
6module J = Jsont.Json
7
8type t = {
9 name : string;
10 description : string;
11 input_schema : Jsont.json;
12 handler : Tool_input.t -> (Jsont.json, string) result;
13}
14
15let create ~name ~description ~input_schema ~handler =
16 { name; description; input_schema; handler }
17
18let name t = t.name
19let description t = t.description
20let input_schema t = t.input_schema
21let call t input = t.handler input
22
23(* Convenience constructors using Jsont.Json builders *)
24
25let text_result s =
26 J.list
27 [
28 J.object'
29 [
30 J.mem (J.name "type") (J.string "text");
31 J.mem (J.name "text") (J.string s);
32 ];
33 ]
34
35let error_result s =
36 J.list
37 [
38 J.object'
39 [
40 J.mem (J.name "type") (J.string "text");
41 J.mem (J.name "text") (J.string s);
42 J.mem (J.name "is_error") (J.bool true);
43 ];
44 ]
45
46(* Schema helpers *)
47
48let schema_string = J.object' [ J.mem (J.name "type") (J.string "string") ]
49let schema_int = J.object' [ J.mem (J.name "type") (J.string "integer") ]
50let schema_number = J.object' [ J.mem (J.name "type") (J.string "number") ]
51let schema_bool = J.object' [ J.mem (J.name "type") (J.string "boolean") ]
52
53let schema_array item_schema =
54 J.object'
55 [
56 J.mem (J.name "type") (J.string "array");
57 J.mem (J.name "items") item_schema;
58 ]
59
60let schema_string_enum values =
61 J.object'
62 [
63 J.mem (J.name "type") (J.string "string");
64 J.mem (J.name "enum") (J.list (List.map J.string values));
65 ]
66
67let schema_object props ~required =
68 J.object'
69 [
70 J.mem (J.name "type") (J.string "object");
71 J.mem (J.name "properties")
72 (J.object' (List.map (fun (k, v) -> J.mem (J.name k) v) props));
73 J.mem (J.name "required") (J.list (List.map J.string required));
74 ]