babylitics-mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +124 -0
  2. package/dist/auth/device-flow.d.ts +4 -0
  3. package/dist/auth/device-flow.d.ts.map +1 -0
  4. package/dist/auth/device-flow.js +133 -0
  5. package/dist/auth/device-flow.js.map +1 -0
  6. package/dist/auth/token-store.d.ts +11 -0
  7. package/dist/auth/token-store.d.ts.map +1 -0
  8. package/dist/auth/token-store.js +39 -0
  9. package/dist/auth/token-store.js.map +1 -0
  10. package/dist/config.d.ts +12 -0
  11. package/dist/config.d.ts.map +1 -0
  12. package/dist/config.js +20 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/graphql/client.d.ts +9 -0
  15. package/dist/graphql/client.d.ts.map +1 -0
  16. package/dist/graphql/client.js +30 -0
  17. package/dist/graphql/client.js.map +1 -0
  18. package/dist/graphql/queries.d.ts +17 -0
  19. package/dist/graphql/queries.d.ts.map +1 -0
  20. package/dist/graphql/queries.js +309 -0
  21. package/dist/graphql/queries.js.map +1 -0
  22. package/dist/index.d.ts +3 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +47 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/tools/babies.d.ts +3 -0
  27. package/dist/tools/babies.d.ts.map +1 -0
  28. package/dist/tools/babies.js +17 -0
  29. package/dist/tools/babies.js.map +1 -0
  30. package/dist/tools/dashboard.d.ts +3 -0
  31. package/dist/tools/dashboard.d.ts.map +1 -0
  32. package/dist/tools/dashboard.js +24 -0
  33. package/dist/tools/dashboard.js.map +1 -0
  34. package/dist/tools/feedings.d.ts +4 -0
  35. package/dist/tools/feedings.d.ts.map +1 -0
  36. package/dist/tools/feedings.js +90 -0
  37. package/dist/tools/feedings.js.map +1 -0
  38. package/dist/tools/helpers.d.ts +19 -0
  39. package/dist/tools/helpers.d.ts.map +1 -0
  40. package/dist/tools/helpers.js +40 -0
  41. package/dist/tools/helpers.js.map +1 -0
  42. package/dist/tools/lengths.d.ts +4 -0
  43. package/dist/tools/lengths.d.ts.map +1 -0
  44. package/dist/tools/lengths.js +54 -0
  45. package/dist/tools/lengths.js.map +1 -0
  46. package/dist/tools/sleep.d.ts +4 -0
  47. package/dist/tools/sleep.d.ts.map +1 -0
  48. package/dist/tools/sleep.js +71 -0
  49. package/dist/tools/sleep.js.map +1 -0
  50. package/dist/tools/temperatures.d.ts +4 -0
  51. package/dist/tools/temperatures.d.ts.map +1 -0
  52. package/dist/tools/temperatures.js +54 -0
  53. package/dist/tools/temperatures.js.map +1 -0
  54. package/dist/tools/weights.d.ts +4 -0
  55. package/dist/tools/weights.d.ts.map +1 -0
  56. package/dist/tools/weights.js +70 -0
  57. package/dist/tools/weights.js.map +1 -0
  58. package/package.json +51 -0
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerLengthReadTools = registerLengthReadTools;
4
+ exports.registerLengthWriteTools = registerLengthWriteTools;
5
+ const zod_1 = require("zod");
6
+ const client_js_1 = require("../graphql/client.js");
7
+ const queries_js_1 = require("../graphql/queries.js");
8
+ const helpers_js_1 = require("./helpers.js");
9
+ function registerLengthReadTools(server) {
10
+ server.registerTool("get_lengths", {
11
+ title: "Get Length Records",
12
+ description: "Get length/height measurement records for a baby. Optionally filter by date range.",
13
+ inputSchema: {
14
+ baby_name: zod_1.z.string().describe("The baby's name"),
15
+ start_date: zod_1.z.string().optional().describe("Start date (ISO 8601)"),
16
+ end_date: zod_1.z.string().optional().describe("End date (ISO 8601)"),
17
+ },
18
+ annotations: { readOnlyHint: true },
19
+ }, async ({ baby_name, start_date, end_date }) => {
20
+ const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
21
+ const data = await (0, client_js_1.graphqlRequest)(queries_js_1.GET_LENGTHS, {
22
+ baby_id: babyId,
23
+ start_date,
24
+ end_date,
25
+ });
26
+ return {
27
+ content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
28
+ };
29
+ });
30
+ }
31
+ function registerLengthWriteTools(server) {
32
+ server.registerTool("log_length", {
33
+ title: "Log Length",
34
+ description: "Log a length/height measurement for a baby in Babylitics.",
35
+ inputSchema: {
36
+ baby_name: zod_1.z.string().describe("The baby's name"),
37
+ length: zod_1.z.number().describe("Length/height value"),
38
+ unit: zod_1.z.enum(["cm", "in"]).describe("Length unit"),
39
+ measured_at: zod_1.z.string().describe("Date of measurement (ISO 8601 date, e.g. 2026-03-27)"),
40
+ notes: zod_1.z.string().optional().describe("Optional notes"),
41
+ },
42
+ annotations: { readOnlyHint: false },
43
+ }, async ({ baby_name, ...args }) => {
44
+ const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
45
+ const data = await (0, client_js_1.graphqlRequest)(queries_js_1.CREATE_LENGTH, {
46
+ baby_id: babyId,
47
+ ...args,
48
+ });
49
+ return {
50
+ content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
51
+ };
52
+ });
53
+ }
54
+ //# sourceMappingURL=lengths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lengths.js","sourceRoot":"","sources":["../../src/tools/lengths.ts"],"names":[],"mappings":";;AAMA,0DAsBC;AAED,4DAsBC;AApDD,6BAAwB;AAExB,oDAAsD;AACtD,sDAAmE;AACnE,6CAA+D;AAE/D,SAAgB,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE;QACjC,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,oFAAoF;QACtF,WAAW,EAAE;YACX,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACjD,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YACnE,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;SAChE;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC/C,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAc,EAAC,wBAAW,EAAE;YAC7C,OAAO,EAAE,MAAM;YACf,UAAU;YACV,QAAQ;SACT,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAA,6BAAgB,EAAC,IAAI,CAAC,EAAE,CAAC;SAC1D,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE;QAChC,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,2DAA2D;QACxE,WAAW,EAAE;YACX,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACjD,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YAClD,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;YAClD,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;YACxF,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;SACxD;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;KACrC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;QAClC,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAc,EAAC,0BAAa,EAAE;YAC/C,OAAO,EAAE,MAAM;YACf,GAAG,IAAI;SACR,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAA,6BAAgB,EAAC,IAAI,CAAC,EAAE,CAAC;SAC1D,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerSleepReadTools(server: McpServer): void;
3
+ export declare function registerSleepWriteTools(server: McpServer): void;
4
+ //# sourceMappingURL=sleep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../src/tools/sleep.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsC9D;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0B/D"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerSleepReadTools = registerSleepReadTools;
4
+ exports.registerSleepWriteTools = registerSleepWriteTools;
5
+ const zod_1 = require("zod");
6
+ const client_js_1 = require("../graphql/client.js");
7
+ const queries_js_1 = require("../graphql/queries.js");
8
+ const helpers_js_1 = require("./helpers.js");
9
+ function registerSleepReadTools(server) {
10
+ server.registerTool("get_sleeps", {
11
+ title: "Get Sleep Records",
12
+ description: "Get sleep records for a baby, including naps and night sleeps. Optionally filter by date range.",
13
+ inputSchema: {
14
+ baby_name: zod_1.z.string().describe("The baby's name"),
15
+ start_date: zod_1.z.string().optional().describe("Start date (ISO 8601)"),
16
+ end_date: zod_1.z.string().optional().describe("End date (ISO 8601)"),
17
+ },
18
+ annotations: { readOnlyHint: true },
19
+ }, async ({ baby_name, start_date, end_date }) => {
20
+ const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
21
+ const data = await (0, client_js_1.graphqlRequest)(queries_js_1.GET_SLEEPS, {
22
+ baby_id: babyId,
23
+ start_date,
24
+ end_date,
25
+ });
26
+ return {
27
+ content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
28
+ };
29
+ });
30
+ server.registerTool("get_sleep_stats", {
31
+ title: "Get Sleep Statistics",
32
+ description: "Get sleep statistics for a baby, including total sleep time, nap counts, and average durations.",
33
+ inputSchema: {
34
+ baby_name: zod_1.z.string().describe("The baby's name"),
35
+ },
36
+ annotations: { readOnlyHint: true },
37
+ }, async ({ baby_name }) => {
38
+ const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
39
+ const data = await (0, client_js_1.graphqlRequest)(queries_js_1.SLEEP_STATISTICS, { baby_id: babyId });
40
+ return {
41
+ content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
42
+ };
43
+ });
44
+ }
45
+ function registerSleepWriteTools(server) {
46
+ server.registerTool("log_sleep", {
47
+ title: "Log Sleep",
48
+ description: "Log a sleep session for a baby in Babylitics. Omit ended_at to mark a sleep as in progress.",
49
+ inputSchema: {
50
+ baby_name: zod_1.z.string().describe("The baby's name"),
51
+ sleep_type: zod_1.z.enum(["nap", "night"]).describe("Type of sleep"),
52
+ started_at: zod_1.z.string().describe("When sleep started (ISO 8601 datetime)"),
53
+ ended_at: zod_1.z
54
+ .string()
55
+ .optional()
56
+ .describe("When sleep ended (ISO 8601 datetime). Omit if still sleeping."),
57
+ notes: zod_1.z.string().optional().describe("Optional notes"),
58
+ },
59
+ annotations: { readOnlyHint: false },
60
+ }, async ({ baby_name, ...args }) => {
61
+ const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
62
+ const data = await (0, client_js_1.graphqlRequest)(queries_js_1.CREATE_SLEEP, {
63
+ baby_id: babyId,
64
+ ...args,
65
+ });
66
+ return {
67
+ content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
68
+ };
69
+ });
70
+ }
71
+ //# sourceMappingURL=sleep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sleep.js","sourceRoot":"","sources":["../../src/tools/sleep.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerTemperatureReadTools(server: McpServer): void;
3
+ export declare function registerTemperatureWriteTools(server: McpServer): void;
4
+ //# sourceMappingURL=temperatures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temperatures.d.ts","sourceRoot":"","sources":["../../src/tools/temperatures.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsBpE;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsBrE"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerTemperatureReadTools = registerTemperatureReadTools;
4
+ exports.registerTemperatureWriteTools = registerTemperatureWriteTools;
5
+ const zod_1 = require("zod");
6
+ const client_js_1 = require("../graphql/client.js");
7
+ const queries_js_1 = require("../graphql/queries.js");
8
+ const helpers_js_1 = require("./helpers.js");
9
+ function registerTemperatureReadTools(server) {
10
+ server.registerTool("get_temperatures", {
11
+ title: "Get Temperature Records",
12
+ description: "Get temperature measurement records for a baby. Optionally filter by date range.",
13
+ inputSchema: {
14
+ baby_name: zod_1.z.string().describe("The baby's name"),
15
+ start_date: zod_1.z.string().optional().describe("Start date (ISO 8601)"),
16
+ end_date: zod_1.z.string().optional().describe("End date (ISO 8601)"),
17
+ },
18
+ annotations: { readOnlyHint: true },
19
+ }, async ({ baby_name, start_date, end_date }) => {
20
+ const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
21
+ const data = await (0, client_js_1.graphqlRequest)(queries_js_1.GET_TEMPERATURES, {
22
+ baby_id: babyId,
23
+ start_date,
24
+ end_date,
25
+ });
26
+ return {
27
+ content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
28
+ };
29
+ });
30
+ }
31
+ function registerTemperatureWriteTools(server) {
32
+ server.registerTool("log_temperature", {
33
+ title: "Log Temperature",
34
+ description: "Log a temperature measurement for a baby in Babylitics.",
35
+ inputSchema: {
36
+ baby_name: zod_1.z.string().describe("The baby's name"),
37
+ temperature: zod_1.z.number().describe("Temperature value"),
38
+ unit: zod_1.z.enum(["c", "f"]).describe("Temperature unit (Celsius or Fahrenheit)"),
39
+ measured_at: zod_1.z.string().describe("When the temperature was taken (ISO 8601 datetime)"),
40
+ notes: zod_1.z.string().optional().describe("Optional notes"),
41
+ },
42
+ annotations: { readOnlyHint: false },
43
+ }, async ({ baby_name, ...args }) => {
44
+ const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
45
+ const data = await (0, client_js_1.graphqlRequest)(queries_js_1.CREATE_TEMPERATURE, {
46
+ baby_id: babyId,
47
+ ...args,
48
+ });
49
+ return {
50
+ content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
51
+ };
52
+ });
53
+ }
54
+ //# sourceMappingURL=temperatures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temperatures.js","sourceRoot":"","sources":["../../src/tools/temperatures.ts"],"names":[],"mappings":";;AAMA,oEAsBC;AAED,sEAsBC;AApDD,6BAAwB;AAExB,oDAAsD;AACtD,sDAA6E;AAC7E,6CAA+D;AAE/D,SAAgB,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,YAAY,CAAC,kBAAkB,EAAE;QACtC,KAAK,EAAE,yBAAyB;QAChC,WAAW,EACT,kFAAkF;QACpF,WAAW,EAAE;YACX,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACjD,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YACnE,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;SAChE;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC/C,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAc,EAAC,6BAAgB,EAAE;YAClD,OAAO,EAAE,MAAM;YACf,UAAU;YACV,QAAQ;SACT,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAA,6BAAgB,EAAC,IAAI,CAAC,EAAE,CAAC;SAC1D,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,6BAA6B,CAAC,MAAiB;IAC7D,MAAM,CAAC,YAAY,CAAC,iBAAiB,EAAE;QACrC,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,yDAAyD;QACtE,WAAW,EAAE;YACX,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACjD,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YACrD,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC;YAC7E,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;YACtF,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;SACxD;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;KACrC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;QAClC,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAc,EAAC,+BAAkB,EAAE;YACpD,OAAO,EAAE,MAAM;YACf,GAAG,IAAI;SACR,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAA,6BAAgB,EAAC,IAAI,CAAC,EAAE,CAAC;SAC1D,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerWeightReadTools(server: McpServer): void;
3
+ export declare function registerWeightWriteTools(server: McpServer): void;
4
+ //# sourceMappingURL=weights.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weights.d.ts","sourceRoot":"","sources":["../../src/tools/weights.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwC/D;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsBhE"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerWeightReadTools = registerWeightReadTools;
4
+ exports.registerWeightWriteTools = registerWeightWriteTools;
5
+ const zod_1 = require("zod");
6
+ const client_js_1 = require("../graphql/client.js");
7
+ const queries_js_1 = require("../graphql/queries.js");
8
+ const helpers_js_1 = require("./helpers.js");
9
+ function registerWeightReadTools(server) {
10
+ server.registerTool("get_weights", {
11
+ title: "Get Weight Records",
12
+ description: "Get weight measurement records for a baby. Optionally filter by date range.",
13
+ inputSchema: {
14
+ baby_name: zod_1.z.string().describe("The baby's name"),
15
+ start_date: zod_1.z.string().optional().describe("Start date (ISO 8601)"),
16
+ end_date: zod_1.z.string().optional().describe("End date (ISO 8601)"),
17
+ },
18
+ annotations: { readOnlyHint: true },
19
+ }, async ({ baby_name, start_date, end_date }) => {
20
+ const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
21
+ const data = await (0, client_js_1.graphqlRequest)(queries_js_1.GET_WEIGHTS, {
22
+ baby_id: babyId,
23
+ start_date,
24
+ end_date,
25
+ });
26
+ return {
27
+ content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
28
+ };
29
+ });
30
+ server.registerTool("get_weight_vs_guideline", {
31
+ title: "Get Weight vs WHO Guideline",
32
+ description: "Compare a baby's latest weight against WHO growth standards, showing percentile and standard deviation ranges.",
33
+ inputSchema: {
34
+ baby_name: zod_1.z.string().describe("The baby's name"),
35
+ },
36
+ annotations: { readOnlyHint: true },
37
+ }, async ({ baby_name }) => {
38
+ const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
39
+ const data = await (0, client_js_1.graphqlRequest)(queries_js_1.WEIGHT_VS_GUIDELINE, {
40
+ baby_id: babyId,
41
+ });
42
+ return {
43
+ content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
44
+ };
45
+ });
46
+ }
47
+ function registerWeightWriteTools(server) {
48
+ server.registerTool("log_weight", {
49
+ title: "Log Weight",
50
+ description: "Log a weight measurement for a baby in Babylitics.",
51
+ inputSchema: {
52
+ baby_name: zod_1.z.string().describe("The baby's name"),
53
+ weight: zod_1.z.number().describe("Weight value"),
54
+ unit: zod_1.z.enum(["kg", "lb"]).describe("Weight unit"),
55
+ measured_at: zod_1.z.string().describe("Date of measurement (ISO 8601 date, e.g. 2026-03-27)"),
56
+ notes: zod_1.z.string().optional().describe("Optional notes"),
57
+ },
58
+ annotations: { readOnlyHint: false },
59
+ }, async ({ baby_name, ...args }) => {
60
+ const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
61
+ const data = await (0, client_js_1.graphqlRequest)(queries_js_1.CREATE_WEIGHT, {
62
+ baby_id: babyId,
63
+ ...args,
64
+ });
65
+ return {
66
+ content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
67
+ };
68
+ });
69
+ }
70
+ //# sourceMappingURL=weights.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weights.js","sourceRoot":"","sources":["../../src/tools/weights.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "babylitics-mcp",
3
+ "version": "0.1.0",
4
+ "description": "MCP server for Babylitics — Connect AI agents to your baby tracking data",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "babylitics-mcp": "dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsc --watch",
13
+ "start": "node dist/index.js",
14
+ "test": "vitest run --passWithNoTests",
15
+ "test:watch": "vitest",
16
+ "lint": "tsc --noEmit"
17
+ },
18
+ "keywords": [
19
+ "mcp",
20
+ "babylitics",
21
+ "baby-tracker",
22
+ "ai",
23
+ "claude",
24
+ "model-context-protocol"
25
+ ],
26
+ "author": "SimpleTek Dev",
27
+ "license": "MIT",
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "git+ssh://git@gitlab.com/simpletek-dev/babylitics-mcp.git"
31
+ },
32
+ "bugs": {
33
+ "url": "https://gitlab.com/simpletek-dev/babylitics-mcp/issues"
34
+ },
35
+ "homepage": "https://gitlab.com/simpletek-dev/babylitics-mcp#readme",
36
+ "engines": {
37
+ "node": ">=18"
38
+ },
39
+ "files": [
40
+ "dist"
41
+ ],
42
+ "dependencies": {
43
+ "@modelcontextprotocol/sdk": "^1.28.0",
44
+ "zod": "^4.3.6"
45
+ },
46
+ "devDependencies": {
47
+ "@types/node": "^25.5.0",
48
+ "typescript": "^6.0.2",
49
+ "vitest": "^4.1.2"
50
+ }
51
+ }