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.
- package/README.md +124 -0
- package/dist/auth/device-flow.d.ts +4 -0
- package/dist/auth/device-flow.d.ts.map +1 -0
- package/dist/auth/device-flow.js +133 -0
- package/dist/auth/device-flow.js.map +1 -0
- package/dist/auth/token-store.d.ts +11 -0
- package/dist/auth/token-store.d.ts.map +1 -0
- package/dist/auth/token-store.js +39 -0
- package/dist/auth/token-store.js.map +1 -0
- package/dist/config.d.ts +12 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +20 -0
- package/dist/config.js.map +1 -0
- package/dist/graphql/client.d.ts +9 -0
- package/dist/graphql/client.d.ts.map +1 -0
- package/dist/graphql/client.js +30 -0
- package/dist/graphql/client.js.map +1 -0
- package/dist/graphql/queries.d.ts +17 -0
- package/dist/graphql/queries.d.ts.map +1 -0
- package/dist/graphql/queries.js +309 -0
- package/dist/graphql/queries.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/babies.d.ts +3 -0
- package/dist/tools/babies.d.ts.map +1 -0
- package/dist/tools/babies.js +17 -0
- package/dist/tools/babies.js.map +1 -0
- package/dist/tools/dashboard.d.ts +3 -0
- package/dist/tools/dashboard.d.ts.map +1 -0
- package/dist/tools/dashboard.js +24 -0
- package/dist/tools/dashboard.js.map +1 -0
- package/dist/tools/feedings.d.ts +4 -0
- package/dist/tools/feedings.d.ts.map +1 -0
- package/dist/tools/feedings.js +90 -0
- package/dist/tools/feedings.js.map +1 -0
- package/dist/tools/helpers.d.ts +19 -0
- package/dist/tools/helpers.d.ts.map +1 -0
- package/dist/tools/helpers.js +40 -0
- package/dist/tools/helpers.js.map +1 -0
- package/dist/tools/lengths.d.ts +4 -0
- package/dist/tools/lengths.d.ts.map +1 -0
- package/dist/tools/lengths.js +54 -0
- package/dist/tools/lengths.js.map +1 -0
- package/dist/tools/sleep.d.ts +4 -0
- package/dist/tools/sleep.d.ts.map +1 -0
- package/dist/tools/sleep.js +71 -0
- package/dist/tools/sleep.js.map +1 -0
- package/dist/tools/temperatures.d.ts +4 -0
- package/dist/tools/temperatures.d.ts.map +1 -0
- package/dist/tools/temperatures.js +54 -0
- package/dist/tools/temperatures.js.map +1 -0
- package/dist/tools/weights.d.ts +4 -0
- package/dist/tools/weights.d.ts.map +1 -0
- package/dist/tools/weights.js +70 -0
- package/dist/tools/weights.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET_USER_SETTINGS = exports.CREATE_TEMPERATURE = exports.CREATE_LENGTH = exports.CREATE_WEIGHT = exports.CREATE_SLEEP = exports.CREATE_FEEDING = exports.GET_TEMPERATURES = exports.GET_LENGTHS = exports.WEIGHT_VS_GUIDELINE = exports.GET_WEIGHTS = exports.SLEEP_STATISTICS = exports.GET_SLEEPS = exports.FEEDING_STATISTICS = exports.GET_FEEDINGS = exports.DASHBOARD_STATS = exports.LIST_BABIES = void 0;
|
|
4
|
+
// Baby queries
|
|
5
|
+
exports.LIST_BABIES = `
|
|
6
|
+
query ListBabies {
|
|
7
|
+
babies {
|
|
8
|
+
edges {
|
|
9
|
+
node {
|
|
10
|
+
id
|
|
11
|
+
name
|
|
12
|
+
date_of_birth
|
|
13
|
+
gender
|
|
14
|
+
birth_weight
|
|
15
|
+
birth_weight_unit
|
|
16
|
+
birth_height
|
|
17
|
+
birth_height_unit
|
|
18
|
+
age_in_days
|
|
19
|
+
age_in_weeks
|
|
20
|
+
age_display
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
`;
|
|
26
|
+
exports.DASHBOARD_STATS = `
|
|
27
|
+
query DashboardStats($baby_id: ID!) {
|
|
28
|
+
dashboard_stats(baby_id: $baby_id) {
|
|
29
|
+
today {
|
|
30
|
+
total_feedings
|
|
31
|
+
total_amount
|
|
32
|
+
}
|
|
33
|
+
last_feeding {
|
|
34
|
+
feeding_type
|
|
35
|
+
fed_at
|
|
36
|
+
amount
|
|
37
|
+
food_name
|
|
38
|
+
}
|
|
39
|
+
last_sleep {
|
|
40
|
+
sleep_type
|
|
41
|
+
started_at
|
|
42
|
+
ended_at
|
|
43
|
+
duration_minutes
|
|
44
|
+
}
|
|
45
|
+
in_progress_sleep {
|
|
46
|
+
sleep_type
|
|
47
|
+
started_at
|
|
48
|
+
}
|
|
49
|
+
weekly_average {
|
|
50
|
+
average_daily_feedings
|
|
51
|
+
average_daily_amount
|
|
52
|
+
}
|
|
53
|
+
today_breakdown {
|
|
54
|
+
formula
|
|
55
|
+
breast
|
|
56
|
+
solid
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
`;
|
|
61
|
+
// Feeding queries
|
|
62
|
+
exports.GET_FEEDINGS = `
|
|
63
|
+
query GetFeedings($baby_id: ID!, $start_date: ISO8601Date, $end_date: ISO8601Date) {
|
|
64
|
+
feedings(baby_id: $baby_id, start_date: $start_date, end_date: $end_date) {
|
|
65
|
+
id
|
|
66
|
+
feeding_type
|
|
67
|
+
amount
|
|
68
|
+
duration_minutes
|
|
69
|
+
side
|
|
70
|
+
food_name
|
|
71
|
+
reaction
|
|
72
|
+
notes
|
|
73
|
+
fed_at
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
`;
|
|
77
|
+
exports.FEEDING_STATISTICS = `
|
|
78
|
+
query FeedingStatistics($baby_id: ID!, $start_date: ISO8601Date, $end_date: ISO8601Date) {
|
|
79
|
+
feeding_statistics(baby_id: $baby_id, start_date: $start_date, end_date: $end_date) {
|
|
80
|
+
total_feedings
|
|
81
|
+
average_daily_feedings
|
|
82
|
+
total_by_type {
|
|
83
|
+
feeding_type
|
|
84
|
+
count
|
|
85
|
+
total_amount
|
|
86
|
+
average_amount
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
`;
|
|
91
|
+
// Sleep queries
|
|
92
|
+
exports.GET_SLEEPS = `
|
|
93
|
+
query GetSleeps($baby_id: ID!, $start_date: ISO8601Date, $end_date: ISO8601Date) {
|
|
94
|
+
sleeps(baby_id: $baby_id, start_date: $start_date, end_date: $end_date) {
|
|
95
|
+
id
|
|
96
|
+
sleep_type
|
|
97
|
+
started_at
|
|
98
|
+
ended_at
|
|
99
|
+
duration_minutes
|
|
100
|
+
notes
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
`;
|
|
104
|
+
exports.SLEEP_STATISTICS = `
|
|
105
|
+
query SleepStatistics($baby_id: ID!) {
|
|
106
|
+
sleep_statistics(baby_id: $baby_id) {
|
|
107
|
+
total_sleep_minutes
|
|
108
|
+
average_daily_sleep_minutes
|
|
109
|
+
total_naps
|
|
110
|
+
total_night_sleeps
|
|
111
|
+
average_nap_duration
|
|
112
|
+
average_night_duration
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
`;
|
|
116
|
+
// Weight queries
|
|
117
|
+
exports.GET_WEIGHTS = `
|
|
118
|
+
query GetWeights($baby_id: ID!, $start_date: ISO8601Date, $end_date: ISO8601Date) {
|
|
119
|
+
weights(baby_id: $baby_id, start_date: $start_date, end_date: $end_date) {
|
|
120
|
+
id
|
|
121
|
+
weight_kg
|
|
122
|
+
measured_at
|
|
123
|
+
notes
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
`;
|
|
127
|
+
exports.WEIGHT_VS_GUIDELINE = `
|
|
128
|
+
query WeightVsGuideline($baby_id: ID!) {
|
|
129
|
+
weight_vs_guideline(baby_id: $baby_id) {
|
|
130
|
+
latest_weight
|
|
131
|
+
guideline_median
|
|
132
|
+
guideline_sd1_neg
|
|
133
|
+
guideline_sd1_pos
|
|
134
|
+
guideline_sd2_neg
|
|
135
|
+
guideline_sd2_pos
|
|
136
|
+
percentile
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
`;
|
|
140
|
+
// Length queries
|
|
141
|
+
exports.GET_LENGTHS = `
|
|
142
|
+
query GetLengths($baby_id: ID!, $start_date: ISO8601Date, $end_date: ISO8601Date) {
|
|
143
|
+
lengths(baby_id: $baby_id, start_date: $start_date, end_date: $end_date) {
|
|
144
|
+
id
|
|
145
|
+
length_cm
|
|
146
|
+
measured_at
|
|
147
|
+
notes
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
`;
|
|
151
|
+
// Temperature queries
|
|
152
|
+
exports.GET_TEMPERATURES = `
|
|
153
|
+
query GetTemperatures($baby_id: ID!, $start_date: ISO8601Date, $end_date: ISO8601Date) {
|
|
154
|
+
temperatures(baby_id: $baby_id, start_date: $start_date, end_date: $end_date) {
|
|
155
|
+
id
|
|
156
|
+
temperature_c
|
|
157
|
+
measured_at
|
|
158
|
+
notes
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
`;
|
|
162
|
+
// Mutations (individual arguments, no input wrapper)
|
|
163
|
+
exports.CREATE_FEEDING = `
|
|
164
|
+
mutation CreateFeeding(
|
|
165
|
+
$baby_id: ID!,
|
|
166
|
+
$feeding_type: FeedingTypeEnum!,
|
|
167
|
+
$amount: Float,
|
|
168
|
+
$unit: UnitEnum,
|
|
169
|
+
$duration_minutes: Int,
|
|
170
|
+
$side: SideEnum,
|
|
171
|
+
$food_name: String,
|
|
172
|
+
$reaction: ReactionEnum,
|
|
173
|
+
$notes: String,
|
|
174
|
+
$fed_at: ISO8601DateTime
|
|
175
|
+
) {
|
|
176
|
+
create_feeding(
|
|
177
|
+
baby_id: $baby_id,
|
|
178
|
+
feeding_type: $feeding_type,
|
|
179
|
+
amount: $amount,
|
|
180
|
+
unit: $unit,
|
|
181
|
+
duration_minutes: $duration_minutes,
|
|
182
|
+
side: $side,
|
|
183
|
+
food_name: $food_name,
|
|
184
|
+
reaction: $reaction,
|
|
185
|
+
notes: $notes,
|
|
186
|
+
fed_at: $fed_at
|
|
187
|
+
) {
|
|
188
|
+
feeding {
|
|
189
|
+
id
|
|
190
|
+
feeding_type
|
|
191
|
+
amount
|
|
192
|
+
fed_at
|
|
193
|
+
}
|
|
194
|
+
errors
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
`;
|
|
198
|
+
exports.CREATE_SLEEP = `
|
|
199
|
+
mutation CreateSleep(
|
|
200
|
+
$baby_id: ID!,
|
|
201
|
+
$sleep_type: SleepTypeEnum!,
|
|
202
|
+
$started_at: ISO8601DateTime!,
|
|
203
|
+
$ended_at: ISO8601DateTime,
|
|
204
|
+
$notes: String
|
|
205
|
+
) {
|
|
206
|
+
create_sleep(
|
|
207
|
+
baby_id: $baby_id,
|
|
208
|
+
sleep_type: $sleep_type,
|
|
209
|
+
started_at: $started_at,
|
|
210
|
+
ended_at: $ended_at,
|
|
211
|
+
notes: $notes
|
|
212
|
+
) {
|
|
213
|
+
sleep {
|
|
214
|
+
id
|
|
215
|
+
sleep_type
|
|
216
|
+
started_at
|
|
217
|
+
ended_at
|
|
218
|
+
}
|
|
219
|
+
errors
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
`;
|
|
223
|
+
exports.CREATE_WEIGHT = `
|
|
224
|
+
mutation CreateWeight(
|
|
225
|
+
$baby_id: ID!,
|
|
226
|
+
$weight: Float!,
|
|
227
|
+
$unit: WeightUnitEnum!,
|
|
228
|
+
$measured_at: ISO8601Date!,
|
|
229
|
+
$notes: String
|
|
230
|
+
) {
|
|
231
|
+
create_weight(
|
|
232
|
+
baby_id: $baby_id,
|
|
233
|
+
weight: $weight,
|
|
234
|
+
unit: $unit,
|
|
235
|
+
measured_at: $measured_at,
|
|
236
|
+
notes: $notes
|
|
237
|
+
) {
|
|
238
|
+
weight {
|
|
239
|
+
id
|
|
240
|
+
weight_kg
|
|
241
|
+
measured_at
|
|
242
|
+
}
|
|
243
|
+
errors
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
`;
|
|
247
|
+
exports.CREATE_LENGTH = `
|
|
248
|
+
mutation CreateLength(
|
|
249
|
+
$baby_id: ID!,
|
|
250
|
+
$length: Float!,
|
|
251
|
+
$unit: LengthUnitEnum!,
|
|
252
|
+
$measured_at: ISO8601Date!,
|
|
253
|
+
$notes: String
|
|
254
|
+
) {
|
|
255
|
+
create_length(
|
|
256
|
+
baby_id: $baby_id,
|
|
257
|
+
length: $length,
|
|
258
|
+
unit: $unit,
|
|
259
|
+
measured_at: $measured_at,
|
|
260
|
+
notes: $notes
|
|
261
|
+
) {
|
|
262
|
+
length {
|
|
263
|
+
id
|
|
264
|
+
length_cm
|
|
265
|
+
measured_at
|
|
266
|
+
}
|
|
267
|
+
errors
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
`;
|
|
271
|
+
exports.CREATE_TEMPERATURE = `
|
|
272
|
+
mutation CreateTemperature(
|
|
273
|
+
$baby_id: ID!,
|
|
274
|
+
$temperature: Float!,
|
|
275
|
+
$unit: TemperatureUnitEnum!,
|
|
276
|
+
$measured_at: ISO8601DateTime!,
|
|
277
|
+
$notes: String
|
|
278
|
+
) {
|
|
279
|
+
create_temperature(
|
|
280
|
+
baby_id: $baby_id,
|
|
281
|
+
temperature: $temperature,
|
|
282
|
+
unit: $unit,
|
|
283
|
+
measured_at: $measured_at,
|
|
284
|
+
notes: $notes
|
|
285
|
+
) {
|
|
286
|
+
temperature {
|
|
287
|
+
id
|
|
288
|
+
temperature_c
|
|
289
|
+
measured_at
|
|
290
|
+
}
|
|
291
|
+
errors
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
`;
|
|
295
|
+
// User settings
|
|
296
|
+
exports.GET_USER_SETTINGS = `
|
|
297
|
+
query GetUserSettings {
|
|
298
|
+
me {
|
|
299
|
+
user_setting {
|
|
300
|
+
preferred_unit
|
|
301
|
+
preferred_weight_unit
|
|
302
|
+
preferred_length_unit
|
|
303
|
+
preferred_temperature_unit
|
|
304
|
+
preferred_language
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
`;
|
|
309
|
+
//# sourceMappingURL=queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/graphql/queries.ts"],"names":[],"mappings":";;;AAAA,eAAe;AACF,QAAA,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;CAoB1B,CAAC;AAEW,QAAA,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkC9B,CAAC;AAEF,kBAAkB;AACL,QAAA,YAAY,GAAG;;;;;;;;;;;;;;CAc3B,CAAC;AAEW,QAAA,kBAAkB,GAAG;;;;;;;;;;;;;CAajC,CAAC;AAEF,gBAAgB;AACH,QAAA,UAAU,GAAG;;;;;;;;;;;CAWzB,CAAC;AAEW,QAAA,gBAAgB,GAAG;;;;;;;;;;;CAW/B,CAAC;AAEF,iBAAiB;AACJ,QAAA,WAAW,GAAG;;;;;;;;;CAS1B,CAAC;AAEW,QAAA,mBAAmB,GAAG;;;;;;;;;;;;CAYlC,CAAC;AAEF,iBAAiB;AACJ,QAAA,WAAW,GAAG;;;;;;;;;CAS1B,CAAC;AAEF,sBAAsB;AACT,QAAA,gBAAgB,GAAG;;;;;;;;;CAS/B,CAAC;AAEF,qDAAqD;AACxC,QAAA,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkC7B,CAAC;AAEW,QAAA,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwB3B,CAAC;AAEW,QAAA,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;CAuB5B,CAAC;AAEW,QAAA,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;CAuB5B,CAAC;AAEW,QAAA,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;CAuBjC,CAAC;AAEF,gBAAgB;AACH,QAAA,iBAAiB,GAAG;;;;;;;;;;;;CAYhC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
5
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
6
|
+
const device_flow_js_1 = require("./auth/device-flow.js");
|
|
7
|
+
const babies_js_1 = require("./tools/babies.js");
|
|
8
|
+
const dashboard_js_1 = require("./tools/dashboard.js");
|
|
9
|
+
const feedings_js_1 = require("./tools/feedings.js");
|
|
10
|
+
const sleep_js_1 = require("./tools/sleep.js");
|
|
11
|
+
const weights_js_1 = require("./tools/weights.js");
|
|
12
|
+
const lengths_js_1 = require("./tools/lengths.js");
|
|
13
|
+
const temperatures_js_1 = require("./tools/temperatures.js");
|
|
14
|
+
async function main() {
|
|
15
|
+
// Authenticate before starting the server
|
|
16
|
+
await (0, device_flow_js_1.authenticate)();
|
|
17
|
+
const server = new mcp_js_1.McpServer({
|
|
18
|
+
name: "babylitics",
|
|
19
|
+
version: "0.1.0",
|
|
20
|
+
});
|
|
21
|
+
// Register read tools (always available)
|
|
22
|
+
(0, babies_js_1.registerBabyTools)(server);
|
|
23
|
+
(0, dashboard_js_1.registerDashboardTools)(server);
|
|
24
|
+
(0, feedings_js_1.registerFeedingReadTools)(server);
|
|
25
|
+
(0, sleep_js_1.registerSleepReadTools)(server);
|
|
26
|
+
(0, weights_js_1.registerWeightReadTools)(server);
|
|
27
|
+
(0, lengths_js_1.registerLengthReadTools)(server);
|
|
28
|
+
(0, temperatures_js_1.registerTemperatureReadTools)(server);
|
|
29
|
+
// Register write tools only if scope allows
|
|
30
|
+
const scope = (0, device_flow_js_1.getScope)();
|
|
31
|
+
if (scope.includes("write")) {
|
|
32
|
+
(0, feedings_js_1.registerFeedingWriteTools)(server);
|
|
33
|
+
(0, sleep_js_1.registerSleepWriteTools)(server);
|
|
34
|
+
(0, weights_js_1.registerWeightWriteTools)(server);
|
|
35
|
+
(0, lengths_js_1.registerLengthWriteTools)(server);
|
|
36
|
+
(0, temperatures_js_1.registerTemperatureWriteTools)(server);
|
|
37
|
+
}
|
|
38
|
+
// Connect via stdio transport
|
|
39
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
40
|
+
await server.connect(transport);
|
|
41
|
+
process.stderr.write("[babylitics-mcp] Server started.\n");
|
|
42
|
+
}
|
|
43
|
+
main().catch((error) => {
|
|
44
|
+
process.stderr.write(`[babylitics-mcp] Fatal error: ${error.message}\n`);
|
|
45
|
+
process.exit(1);
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,oEAAoE;AACpE,wEAAiF;AACjF,0DAA+D;AAC/D,iDAAsD;AACtD,uDAA8D;AAC9D,qDAG6B;AAC7B,+CAG0B;AAC1B,mDAG4B;AAC5B,mDAG4B;AAC5B,6DAGiC;AAEjC,KAAK,UAAU,IAAI;IACjB,0CAA0C;IAC1C,MAAM,IAAA,6BAAY,GAAE,CAAC;IAErB,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC;QAC3B,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,yCAAyC;IACzC,IAAA,6BAAiB,EAAC,MAAM,CAAC,CAAC;IAC1B,IAAA,qCAAsB,EAAC,MAAM,CAAC,CAAC;IAC/B,IAAA,sCAAwB,EAAC,MAAM,CAAC,CAAC;IACjC,IAAA,iCAAsB,EAAC,MAAM,CAAC,CAAC;IAC/B,IAAA,oCAAuB,EAAC,MAAM,CAAC,CAAC;IAChC,IAAA,oCAAuB,EAAC,MAAM,CAAC,CAAC;IAChC,IAAA,8CAA4B,EAAC,MAAM,CAAC,CAAC;IAErC,4CAA4C;IAC5C,MAAM,KAAK,GAAG,IAAA,yBAAQ,GAAE,CAAC;IACzB,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,IAAA,uCAAyB,EAAC,MAAM,CAAC,CAAC;QAClC,IAAA,kCAAuB,EAAC,MAAM,CAAC,CAAC;QAChC,IAAA,qCAAwB,EAAC,MAAM,CAAC,CAAC;QACjC,IAAA,qCAAwB,EAAC,MAAM,CAAC,CAAC;QACjC,IAAA,+CAA6B,EAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,8BAA8B;IAC9B,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;AAC7D,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;IACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"babies.d.ts","sourceRoot":"","sources":["../../src/tools/babies.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAYzD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerBabyTools = registerBabyTools;
|
|
4
|
+
const helpers_js_1 = require("./helpers.js");
|
|
5
|
+
function registerBabyTools(server) {
|
|
6
|
+
server.registerTool("list_babies", {
|
|
7
|
+
title: "List Babies",
|
|
8
|
+
description: "List all babies being tracked in the user's Babylitics account. Returns name, date of birth, age, and birth measurements.",
|
|
9
|
+
annotations: { readOnlyHint: true },
|
|
10
|
+
}, async () => {
|
|
11
|
+
const babies = await (0, helpers_js_1.fetchBabies)();
|
|
12
|
+
return {
|
|
13
|
+
content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(babies) }],
|
|
14
|
+
};
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=babies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"babies.js","sourceRoot":"","sources":["../../src/tools/babies.ts"],"names":[],"mappings":";;AAIA,8CAYC;AAdD,6CAA6D;AAE7D,SAAgB,iBAAiB,CAAC,MAAiB;IACjD,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE;QACjC,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,2HAA2H;QAC7H,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EAAE,KAAK,IAAI,EAAE;QACZ,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAW,GAAE,CAAC;QACnC,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAA,6BAAgB,EAAC,MAAM,CAAC,EAAE,CAAC;SAC5D,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/tools/dashboard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgB9D"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerDashboardTools = registerDashboardTools;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const client_js_1 = require("../graphql/client.js");
|
|
6
|
+
const queries_js_1 = require("../graphql/queries.js");
|
|
7
|
+
const helpers_js_1 = require("./helpers.js");
|
|
8
|
+
function registerDashboardTools(server) {
|
|
9
|
+
server.registerTool("get_dashboard", {
|
|
10
|
+
title: "Get Dashboard",
|
|
11
|
+
description: "Get today's dashboard summary for a baby, including the last feeding, last sleep, current sleep status, and weekly averages.",
|
|
12
|
+
inputSchema: {
|
|
13
|
+
baby_name: zod_1.z.string().describe("The baby's name"),
|
|
14
|
+
},
|
|
15
|
+
annotations: { readOnlyHint: true },
|
|
16
|
+
}, async ({ baby_name }) => {
|
|
17
|
+
const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
|
|
18
|
+
const data = await (0, client_js_1.graphqlRequest)(queries_js_1.DASHBOARD_STATS, { baby_id: babyId });
|
|
19
|
+
return {
|
|
20
|
+
content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=dashboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/tools/dashboard.ts"],"names":[],"mappings":";;AAMA,wDAgBC;AAtBD,6BAAwB;AAExB,oDAAsD;AACtD,sDAAwD;AACxD,6CAA+D;AAE/D,SAAgB,sBAAsB,CAAC,MAAiB;IACtD,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE;QACnC,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,8HAA8H;QAChI,WAAW,EAAE;YACX,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;SAClD;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACzB,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAc,EAAC,4BAAe,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACxE,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 @@
|
|
|
1
|
+
{"version":3,"file":"feedings.d.ts","sourceRoot":"","sources":["../../src/tools/feedings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASpE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4ChE;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuCjE"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerFeedingReadTools = registerFeedingReadTools;
|
|
4
|
+
exports.registerFeedingWriteTools = registerFeedingWriteTools;
|
|
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 registerFeedingReadTools(server) {
|
|
10
|
+
server.registerTool("get_feedings", {
|
|
11
|
+
title: "Get Feedings",
|
|
12
|
+
description: "Get feeding 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, e.g. 2026-03-01)"),
|
|
16
|
+
end_date: zod_1.z.string().optional().describe("End date (ISO 8601, e.g. 2026-03-27)"),
|
|
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_FEEDINGS, {
|
|
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_feeding_stats", {
|
|
31
|
+
title: "Get Feeding Statistics",
|
|
32
|
+
description: "Get feeding statistics for a baby, including totals and averages by feeding type. Optionally filter by date range.",
|
|
33
|
+
inputSchema: {
|
|
34
|
+
baby_name: zod_1.z.string().describe("The baby's name"),
|
|
35
|
+
start_date: zod_1.z.string().optional().describe("Start date (ISO 8601)"),
|
|
36
|
+
end_date: zod_1.z.string().optional().describe("End date (ISO 8601)"),
|
|
37
|
+
},
|
|
38
|
+
annotations: { readOnlyHint: true },
|
|
39
|
+
}, async ({ baby_name, start_date, end_date }) => {
|
|
40
|
+
const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
|
|
41
|
+
const data = await (0, client_js_1.graphqlRequest)(queries_js_1.FEEDING_STATISTICS, {
|
|
42
|
+
baby_id: babyId,
|
|
43
|
+
start_date,
|
|
44
|
+
end_date,
|
|
45
|
+
});
|
|
46
|
+
return {
|
|
47
|
+
content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
function registerFeedingWriteTools(server) {
|
|
52
|
+
server.registerTool("log_feeding", {
|
|
53
|
+
title: "Log Feeding",
|
|
54
|
+
description: "Log a feeding for a baby in Babylitics. For formula, provide amount. For solids, provide food_name. For breastfeeding, optionally provide duration and side.",
|
|
55
|
+
inputSchema: {
|
|
56
|
+
baby_name: zod_1.z.string().describe("The baby's name"),
|
|
57
|
+
feeding_type: zod_1.z
|
|
58
|
+
.enum(["formula", "breast", "solid"])
|
|
59
|
+
.describe("Type of feeding"),
|
|
60
|
+
amount: zod_1.z.number().optional().describe("Amount in oz or ml"),
|
|
61
|
+
unit: zod_1.z.enum(["oz", "ml"]).optional().describe("Unit for amount"),
|
|
62
|
+
duration_minutes: zod_1.z.number().optional().describe("Duration in minutes"),
|
|
63
|
+
side: zod_1.z
|
|
64
|
+
.enum(["left", "right"])
|
|
65
|
+
.optional()
|
|
66
|
+
.describe("Breast side (for breastfeeding)"),
|
|
67
|
+
food_name: zod_1.z.string().optional().describe("Food name (for solids)"),
|
|
68
|
+
reaction: zod_1.z
|
|
69
|
+
.enum(["liked", "disliked", "neutral"])
|
|
70
|
+
.optional()
|
|
71
|
+
.describe("Baby's reaction (for solids)"),
|
|
72
|
+
notes: zod_1.z.string().optional().describe("Optional notes"),
|
|
73
|
+
fed_at: zod_1.z
|
|
74
|
+
.string()
|
|
75
|
+
.optional()
|
|
76
|
+
.describe("When the feeding occurred (ISO 8601 datetime). Defaults to now."),
|
|
77
|
+
},
|
|
78
|
+
annotations: { readOnlyHint: false },
|
|
79
|
+
}, async ({ baby_name, ...args }) => {
|
|
80
|
+
const babyId = await (0, helpers_js_1.resolveBabyId)(baby_name);
|
|
81
|
+
const data = await (0, client_js_1.graphqlRequest)(queries_js_1.CREATE_FEEDING, {
|
|
82
|
+
baby_id: babyId,
|
|
83
|
+
...args,
|
|
84
|
+
});
|
|
85
|
+
return {
|
|
86
|
+
content: [{ type: "text", text: (0, helpers_js_1.formatToolResult)(data) }],
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=feedings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedings.js","sourceRoot":"","sources":["../../src/tools/feedings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
interface BabyNode {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
date_of_birth: string;
|
|
5
|
+
gender: string | null;
|
|
6
|
+
birth_weight: number | null;
|
|
7
|
+
birth_weight_unit: string | null;
|
|
8
|
+
birth_height: number | null;
|
|
9
|
+
birth_height_unit: string | null;
|
|
10
|
+
age_in_days: number;
|
|
11
|
+
age_in_weeks: number;
|
|
12
|
+
age_display: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function fetchBabies(): Promise<BabyNode[]>;
|
|
15
|
+
export declare function clearBabyCache(): void;
|
|
16
|
+
export declare function resolveBabyId(babyName: string): Promise<string>;
|
|
17
|
+
export declare function formatToolResult(data: unknown): string;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/tools/helpers.ts"],"names":[],"mappings":"AAGA,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAUD,wBAAsB,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAMvD;AAED,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA2BrE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEtD"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fetchBabies = fetchBabies;
|
|
4
|
+
exports.clearBabyCache = clearBabyCache;
|
|
5
|
+
exports.resolveBabyId = resolveBabyId;
|
|
6
|
+
exports.formatToolResult = formatToolResult;
|
|
7
|
+
const client_js_1 = require("../graphql/client.js");
|
|
8
|
+
const queries_js_1 = require("../graphql/queries.js");
|
|
9
|
+
let cachedBabies = null;
|
|
10
|
+
async function fetchBabies() {
|
|
11
|
+
if (cachedBabies)
|
|
12
|
+
return cachedBabies;
|
|
13
|
+
const data = await (0, client_js_1.graphqlRequest)(queries_js_1.LIST_BABIES);
|
|
14
|
+
cachedBabies = data.babies.edges.map((edge) => edge.node);
|
|
15
|
+
return cachedBabies;
|
|
16
|
+
}
|
|
17
|
+
function clearBabyCache() {
|
|
18
|
+
cachedBabies = null;
|
|
19
|
+
}
|
|
20
|
+
async function resolveBabyId(babyName) {
|
|
21
|
+
const babies = await fetchBabies();
|
|
22
|
+
// Exact match (case-insensitive)
|
|
23
|
+
const exact = babies.find((b) => b.name.toLowerCase() === babyName.toLowerCase());
|
|
24
|
+
if (exact)
|
|
25
|
+
return exact.id;
|
|
26
|
+
// Partial match
|
|
27
|
+
const partial = babies.filter((b) => b.name.toLowerCase().includes(babyName.toLowerCase()));
|
|
28
|
+
if (partial.length === 1)
|
|
29
|
+
return partial[0].id;
|
|
30
|
+
if (partial.length > 1) {
|
|
31
|
+
const names = partial.map((b) => b.name).join(", ");
|
|
32
|
+
throw new Error(`Ambiguous baby name "${babyName}". Did you mean one of: ${names}?`);
|
|
33
|
+
}
|
|
34
|
+
const allNames = babies.map((b) => b.name).join(", ");
|
|
35
|
+
throw new Error(`No baby found with name "${babyName}". Available: ${allNames}`);
|
|
36
|
+
}
|
|
37
|
+
function formatToolResult(data) {
|
|
38
|
+
return JSON.stringify(data, null, 2);
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/tools/helpers.ts"],"names":[],"mappings":";;AAyBA,kCAMC;AAED,wCAEC;AAED,sCA2BC;AAED,4CAEC;AApED,oDAAsD;AACtD,sDAAoD;AAsBpD,IAAI,YAAY,GAAsB,IAAI,CAAC;AAEpC,KAAK,UAAU,WAAW;IAC/B,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IAEtC,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAc,EAAiB,wBAAW,CAAC,CAAC;IAC/D,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAgB,cAAc;IAC5B,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,QAAgB;IAClD,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;IAEnC,iCAAiC;IACjC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,CACvD,CAAC;IACF,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC,EAAE,CAAC;IAE3B,gBAAgB;IAChB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAClC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CACtD,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,IAAI,KAAK,CACb,wBAAwB,QAAQ,2BAA2B,KAAK,GAAG,CACpE,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,IAAI,KAAK,CACb,4BAA4B,QAAQ,iBAAiB,QAAQ,EAAE,CAChE,CAAC;AACJ,CAAC;AAED,SAAgB,gBAAgB,CAAC,IAAa;IAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lengths.d.ts","sourceRoot":"","sources":["../../src/tools/lengths.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsB/D;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsBhE"}
|