@bmhall2/skylight-mcp 1.1.7

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 (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +265 -0
  3. package/dist/api/auth.d.ts +38 -0
  4. package/dist/api/auth.d.ts.map +1 -0
  5. package/dist/api/auth.js +62 -0
  6. package/dist/api/auth.js.map +1 -0
  7. package/dist/api/client.d.ts +84 -0
  8. package/dist/api/client.d.ts.map +1 -0
  9. package/dist/api/client.js +228 -0
  10. package/dist/api/client.js.map +1 -0
  11. package/dist/api/endpoints/calendar.d.ts +33 -0
  12. package/dist/api/endpoints/calendar.d.ts.map +1 -0
  13. package/dist/api/endpoints/calendar.js +60 -0
  14. package/dist/api/endpoints/calendar.js.map +1 -0
  15. package/dist/api/endpoints/categories.d.ts +23 -0
  16. package/dist/api/endpoints/categories.d.ts.map +1 -0
  17. package/dist/api/endpoints/categories.js +48 -0
  18. package/dist/api/endpoints/categories.js.map +1 -0
  19. package/dist/api/endpoints/chores.d.ts +50 -0
  20. package/dist/api/endpoints/chores.d.ts.map +1 -0
  21. package/dist/api/endpoints/chores.js +106 -0
  22. package/dist/api/endpoints/chores.js.map +1 -0
  23. package/dist/api/endpoints/devices.d.ts +6 -0
  24. package/dist/api/endpoints/devices.d.ts.map +1 -0
  25. package/dist/api/endpoints/devices.js +10 -0
  26. package/dist/api/endpoints/devices.js.map +1 -0
  27. package/dist/api/endpoints/frames.d.ts +6 -0
  28. package/dist/api/endpoints/frames.d.ts.map +1 -0
  29. package/dist/api/endpoints/frames.js +10 -0
  30. package/dist/api/endpoints/frames.js.map +1 -0
  31. package/dist/api/endpoints/lists.d.ts +55 -0
  32. package/dist/api/endpoints/lists.d.ts.map +1 -0
  33. package/dist/api/endpoints/lists.js +125 -0
  34. package/dist/api/endpoints/lists.js.map +1 -0
  35. package/dist/api/endpoints/meals.d.ts +102 -0
  36. package/dist/api/endpoints/meals.d.ts.map +1 -0
  37. package/dist/api/endpoints/meals.js +100 -0
  38. package/dist/api/endpoints/meals.js.map +1 -0
  39. package/dist/api/endpoints/misc.d.ts +27 -0
  40. package/dist/api/endpoints/misc.d.ts.map +1 -0
  41. package/dist/api/endpoints/misc.js +18 -0
  42. package/dist/api/endpoints/misc.js.map +1 -0
  43. package/dist/api/endpoints/photos.d.ts +13 -0
  44. package/dist/api/endpoints/photos.d.ts.map +1 -0
  45. package/dist/api/endpoints/photos.js +10 -0
  46. package/dist/api/endpoints/photos.js.map +1 -0
  47. package/dist/api/endpoints/rewards.d.ts +49 -0
  48. package/dist/api/endpoints/rewards.d.ts.map +1 -0
  49. package/dist/api/endpoints/rewards.js +105 -0
  50. package/dist/api/endpoints/rewards.js.map +1 -0
  51. package/dist/api/endpoints/taskbox.d.ts +13 -0
  52. package/dist/api/endpoints/taskbox.d.ts.map +1 -0
  53. package/dist/api/endpoints/taskbox.js +22 -0
  54. package/dist/api/endpoints/taskbox.js.map +1 -0
  55. package/dist/api/generated-types.d.ts +18967 -0
  56. package/dist/api/generated-types.d.ts.map +1 -0
  57. package/dist/api/generated-types.js +6 -0
  58. package/dist/api/generated-types.js.map +1 -0
  59. package/dist/api/types.d.ts +283 -0
  60. package/dist/api/types.d.ts.map +1 -0
  61. package/dist/api/types.js +5 -0
  62. package/dist/api/types.js.map +1 -0
  63. package/dist/config.d.ts +52 -0
  64. package/dist/config.d.ts.map +1 -0
  65. package/dist/config.js +80 -0
  66. package/dist/config.js.map +1 -0
  67. package/dist/index.d.ts +3 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +11 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/server.d.ts +7 -0
  72. package/dist/server.d.ts.map +1 -0
  73. package/dist/server.js +48 -0
  74. package/dist/server.js.map +1 -0
  75. package/dist/tools/calendar.d.ts +3 -0
  76. package/dist/tools/calendar.d.ts.map +1 -0
  77. package/dist/tools/calendar.js +297 -0
  78. package/dist/tools/calendar.js.map +1 -0
  79. package/dist/tools/chores.d.ts +3 -0
  80. package/dist/tools/chores.d.ts.map +1 -0
  81. package/dist/tools/chores.js +349 -0
  82. package/dist/tools/chores.js.map +1 -0
  83. package/dist/tools/family.d.ts +3 -0
  84. package/dist/tools/family.d.ts.map +1 -0
  85. package/dist/tools/family.js +182 -0
  86. package/dist/tools/family.js.map +1 -0
  87. package/dist/tools/lists.d.ts +3 -0
  88. package/dist/tools/lists.d.ts.map +1 -0
  89. package/dist/tools/lists.js +481 -0
  90. package/dist/tools/lists.js.map +1 -0
  91. package/dist/tools/meals.d.ts +3 -0
  92. package/dist/tools/meals.d.ts.map +1 -0
  93. package/dist/tools/meals.js +319 -0
  94. package/dist/tools/meals.js.map +1 -0
  95. package/dist/tools/misc.d.ts +3 -0
  96. package/dist/tools/misc.d.ts.map +1 -0
  97. package/dist/tools/misc.js +101 -0
  98. package/dist/tools/misc.js.map +1 -0
  99. package/dist/tools/photos.d.ts +3 -0
  100. package/dist/tools/photos.d.ts.map +1 -0
  101. package/dist/tools/photos.js +42 -0
  102. package/dist/tools/photos.js.map +1 -0
  103. package/dist/tools/rewards.d.ts +3 -0
  104. package/dist/tools/rewards.d.ts.map +1 -0
  105. package/dist/tools/rewards.js +338 -0
  106. package/dist/tools/rewards.js.map +1 -0
  107. package/dist/tools/tasks.d.ts +3 -0
  108. package/dist/tools/tasks.d.ts.map +1 -0
  109. package/dist/tools/tasks.js +68 -0
  110. package/dist/tools/tasks.js.map +1 -0
  111. package/dist/utils/dates.d.ts +26 -0
  112. package/dist/utils/dates.d.ts.map +1 -0
  113. package/dist/utils/dates.js +109 -0
  114. package/dist/utils/dates.js.map +1 -0
  115. package/dist/utils/errors.d.ts +45 -0
  116. package/dist/utils/errors.d.ts.map +1 -0
  117. package/dist/utils/errors.js +102 -0
  118. package/dist/utils/errors.js.map +1 -0
  119. package/package.json +59 -0
@@ -0,0 +1,481 @@
1
+ import { z } from "zod";
2
+ import { getLists, getListWithItems, findListByName, findListByType, createList, updateList, deleteList, createListItem, updateListItem, deleteListItem, } from "../api/endpoints/lists.js";
3
+ import { formatErrorForMcp } from "../utils/errors.js";
4
+ /**
5
+ * Resolve a list ID from either listId or listName
6
+ * Returns error if neither provided (unless defaultToGrocery is true)
7
+ */
8
+ async function resolveListId(listId, listName, defaultToGrocery = false) {
9
+ if (listId) {
10
+ return { success: true, id: listId, name: listName ?? listId };
11
+ }
12
+ if (listName) {
13
+ const list = await findListByName(listName);
14
+ if (!list) {
15
+ return { success: false, error: `Could not find list "${listName}"` };
16
+ }
17
+ return { success: true, id: list.id, name: list.attributes.label };
18
+ }
19
+ if (defaultToGrocery) {
20
+ const list = await findListByType("shopping", true);
21
+ if (!list) {
22
+ return { success: false, error: "No default grocery list found. Use get_lists to see available lists." };
23
+ }
24
+ return { success: true, id: list.id, name: list.attributes.label };
25
+ }
26
+ return { success: false, error: "Either listId or listName is required" };
27
+ }
28
+ export function registerListTools(server) {
29
+ // get_lists tool
30
+ server.tool("get_lists", `Get all lists from Skylight (grocery lists, to-do lists, etc.).
31
+
32
+ Use this to see what lists are available before adding items.
33
+ Returns list names, types (shopping/to_do), and item counts.`, {}, async () => {
34
+ try {
35
+ const lists = await getLists();
36
+ if (lists.length === 0) {
37
+ return {
38
+ content: [
39
+ {
40
+ type: "text",
41
+ text: "No lists found in Skylight.",
42
+ },
43
+ ],
44
+ };
45
+ }
46
+ const listSummary = lists
47
+ .map((list) => {
48
+ const attrs = list.attributes;
49
+ const itemCount = list.relationships?.list_items?.data?.length ?? 0;
50
+ const parts = [
51
+ `- ${attrs.label}`,
52
+ ` Type: ${attrs.kind === "shopping" ? "Shopping list" : "To-do list"}`,
53
+ ` Items: ${itemCount}`,
54
+ ];
55
+ if (attrs.default_grocery_list) {
56
+ parts.push(` (Default grocery list)`);
57
+ }
58
+ return parts.join("\n");
59
+ })
60
+ .join("\n\n");
61
+ return {
62
+ content: [
63
+ {
64
+ type: "text",
65
+ text: `Available lists:\n\n${listSummary}`,
66
+ },
67
+ ],
68
+ };
69
+ }
70
+ catch (error) {
71
+ return {
72
+ content: [
73
+ {
74
+ type: "text",
75
+ text: formatErrorForMcp(error),
76
+ },
77
+ ],
78
+ isError: true,
79
+ };
80
+ }
81
+ });
82
+ // get_list_items tool
83
+ server.tool("get_list_items", `Get items from a specific Skylight list.
84
+
85
+ Use this to answer:
86
+ - "What's on the grocery list?"
87
+ - "Show me my to-do list"
88
+ - "What items are on [list name]?"
89
+
90
+ Returns items organized by section with their completion status.`, {
91
+ listName: z
92
+ .string()
93
+ .optional()
94
+ .describe("List name to query (e.g., 'Grocery List'). If omitted, shows the default grocery list."),
95
+ listType: z
96
+ .enum(["shopping", "to_do"])
97
+ .optional()
98
+ .describe("Type of list to query. Alternative to listName."),
99
+ includeCompleted: z
100
+ .boolean()
101
+ .optional()
102
+ .default(false)
103
+ .describe("Include completed/checked-off items"),
104
+ }, async ({ listName, listType, includeCompleted }) => {
105
+ try {
106
+ // Find the list
107
+ let list;
108
+ if (listName) {
109
+ list = await findListByName(listName);
110
+ if (!list) {
111
+ return {
112
+ content: [
113
+ {
114
+ type: "text",
115
+ text: `Could not find a list named "${listName}". Use get_lists to see available lists.`,
116
+ },
117
+ ],
118
+ isError: true,
119
+ };
120
+ }
121
+ }
122
+ else if (listType) {
123
+ list = await findListByType(listType);
124
+ if (!list) {
125
+ return {
126
+ content: [
127
+ {
128
+ type: "text",
129
+ text: `No ${listType === "shopping" ? "shopping" : "to-do"} list found.`,
130
+ },
131
+ ],
132
+ isError: true,
133
+ };
134
+ }
135
+ }
136
+ else {
137
+ // Default to the default grocery list
138
+ list = await findListByType("shopping", true);
139
+ if (!list) {
140
+ return {
141
+ content: [
142
+ {
143
+ type: "text",
144
+ text: "No default grocery list found. Use get_lists to see available lists.",
145
+ },
146
+ ],
147
+ isError: true,
148
+ };
149
+ }
150
+ }
151
+ // Get list with items
152
+ const result = await getListWithItems(list.id);
153
+ let items = result.items;
154
+ // Filter out completed items if requested
155
+ if (!includeCompleted) {
156
+ items = items.filter((item) => item.attributes.status === "pending");
157
+ }
158
+ if (items.length === 0) {
159
+ return {
160
+ content: [
161
+ {
162
+ type: "text",
163
+ text: `${result.list.attributes.label} is empty${includeCompleted ? "" : " (no pending items)"}.`,
164
+ },
165
+ ],
166
+ };
167
+ }
168
+ // Group items by section
169
+ const sections = new Map();
170
+ const noSection = [];
171
+ for (const item of items) {
172
+ const section = item.attributes.section;
173
+ if (section) {
174
+ if (!sections.has(section)) {
175
+ sections.set(section, []);
176
+ }
177
+ sections.get(section).push(item);
178
+ }
179
+ else {
180
+ noSection.push(item);
181
+ }
182
+ }
183
+ // Format output
184
+ const output = [`${result.list.attributes.label}:`];
185
+ // Items without sections first
186
+ if (noSection.length > 0) {
187
+ for (const item of noSection) {
188
+ const status = item.attributes.status === "completed" ? "[x]" : "[ ]";
189
+ output.push(`${status} ${item.attributes.label}`);
190
+ }
191
+ }
192
+ // Then items by section
193
+ for (const [sectionName, sectionItems] of sections) {
194
+ output.push(`\n${sectionName}:`);
195
+ for (const item of sectionItems) {
196
+ const status = item.attributes.status === "completed" ? "[x]" : "[ ]";
197
+ output.push(`${status} ${item.attributes.label}`);
198
+ }
199
+ }
200
+ return {
201
+ content: [
202
+ {
203
+ type: "text",
204
+ text: output.join("\n"),
205
+ },
206
+ ],
207
+ };
208
+ }
209
+ catch (error) {
210
+ return {
211
+ content: [
212
+ {
213
+ type: "text",
214
+ text: formatErrorForMcp(error),
215
+ },
216
+ ],
217
+ isError: true,
218
+ };
219
+ }
220
+ });
221
+ // create_list tool
222
+ server.tool("create_list", `Create a new list in Skylight.
223
+
224
+ Use this when:
225
+ - Creating a new shopping/grocery list
226
+ - Creating a new to-do list
227
+
228
+ Parameters:
229
+ - label (required): Name of the list (e.g., "Vacation Packing", "Weekly Groceries")
230
+ - kind (required): "shopping" for grocery/shopping lists, "to_do" for task lists
231
+ - color: Optional color for the list
232
+
233
+ Returns: The created list details.`, {
234
+ label: z.string().describe("Name of the list (e.g., 'Vacation Packing')"),
235
+ kind: z.enum(["shopping", "to_do"]).describe("Type of list: 'shopping' or 'to_do'"),
236
+ color: z.string().optional().describe("Optional color for the list"),
237
+ }, async ({ label, kind, color }) => {
238
+ try {
239
+ const list = await createList(label, kind, color);
240
+ return {
241
+ content: [
242
+ {
243
+ type: "text",
244
+ text: `Created ${kind === "shopping" ? "shopping" : "to-do"} list "${list.attributes.label}" (ID: ${list.id})`,
245
+ },
246
+ ],
247
+ };
248
+ }
249
+ catch (error) {
250
+ return {
251
+ content: [{ type: "text", text: formatErrorForMcp(error) }],
252
+ isError: true,
253
+ };
254
+ }
255
+ });
256
+ // update_list tool
257
+ server.tool("update_list", `Update an existing list's name or settings.
258
+
259
+ Use this when:
260
+ - Renaming a list
261
+ - Changing a list's type or color
262
+
263
+ Parameters:
264
+ - listId: ID of the list to update (use get_lists to find IDs)
265
+ - listName: Name of the list to update (alternative to listId)
266
+ - label: New name for the list
267
+ - kind: New type ("shopping" or "to_do")
268
+ - color: New color for the list
269
+
270
+ Returns: The updated list details.`, {
271
+ listId: z.string().optional().describe("ID of the list to update"),
272
+ listName: z.string().optional().describe("Name of the list to update (alternative to listId)"),
273
+ label: z.string().optional().describe("New name for the list"),
274
+ kind: z.enum(["shopping", "to_do"]).optional().describe("New type for the list"),
275
+ color: z.string().nullable().optional().describe("New color for the list"),
276
+ }, async ({ listId, listName, label, kind, color }) => {
277
+ try {
278
+ const resolved = await resolveListId(listId, listName);
279
+ if (!resolved.success) {
280
+ return {
281
+ content: [{ type: "text", text: resolved.error }],
282
+ isError: true,
283
+ };
284
+ }
285
+ const updates = {};
286
+ if (label !== undefined)
287
+ updates.label = label;
288
+ if (kind !== undefined)
289
+ updates.kind = kind;
290
+ if (color !== undefined)
291
+ updates.color = color;
292
+ const updated = await updateList(resolved.id, updates);
293
+ return {
294
+ content: [
295
+ {
296
+ type: "text",
297
+ text: `Updated list: "${updated.attributes.label}"`,
298
+ },
299
+ ],
300
+ };
301
+ }
302
+ catch (error) {
303
+ return {
304
+ content: [{ type: "text", text: formatErrorForMcp(error) }],
305
+ isError: true,
306
+ };
307
+ }
308
+ });
309
+ // delete_list tool
310
+ server.tool("delete_list", `Delete a list from Skylight.
311
+
312
+ Use this when:
313
+ - Removing an old or unused list
314
+ - Deleting a temporary list
315
+
316
+ Parameters:
317
+ - listId: ID of the list to delete (use get_lists to find IDs)
318
+ - listName: Name of the list to delete (alternative to listId)
319
+
320
+ Note: This permanently deletes the list and all its items.`, {
321
+ listId: z.string().optional().describe("ID of the list to delete"),
322
+ listName: z.string().optional().describe("Name of the list to delete (alternative to listId)"),
323
+ }, async ({ listId, listName }) => {
324
+ try {
325
+ const resolved = await resolveListId(listId, listName);
326
+ if (!resolved.success) {
327
+ return {
328
+ content: [{ type: "text", text: resolved.error }],
329
+ isError: true,
330
+ };
331
+ }
332
+ await deleteList(resolved.id);
333
+ return {
334
+ content: [
335
+ {
336
+ type: "text",
337
+ text: `Deleted list "${resolved.name}"`,
338
+ },
339
+ ],
340
+ };
341
+ }
342
+ catch (error) {
343
+ return {
344
+ content: [{ type: "text", text: formatErrorForMcp(error) }],
345
+ isError: true,
346
+ };
347
+ }
348
+ });
349
+ // create_list_item tool
350
+ server.tool("create_list_item", `Add an item to a Skylight list.
351
+
352
+ Use this when:
353
+ - Adding something to the grocery list: "Add milk to the shopping list"
354
+ - Creating a to-do item: "Put 'call doctor' on my to-do list"
355
+ - Adding items to any list
356
+
357
+ Parameters:
358
+ - label (required): The item text (e.g., "Milk", "Call doctor")
359
+ - listId: ID of the list to add to
360
+ - listName: Name of the list to add to (e.g., "Grocery List")
361
+ - section: Category within the list (e.g., "Dairy", "Produce")
362
+
363
+ If no list is specified, adds to the default grocery list.
364
+
365
+ Returns: Confirmation of the added item.
366
+
367
+ Related: Use get_lists to see available lists and their IDs.`, {
368
+ label: z.string().describe("The item text to add (e.g., 'Milk', 'Call doctor')"),
369
+ listId: z.string().optional().describe("ID of the list to add to"),
370
+ listName: z.string().optional().describe("Name of the list (e.g., 'Grocery List', 'To-Do')"),
371
+ section: z.string().optional().describe("Section/category within the list (e.g., 'Dairy', 'Produce')"),
372
+ }, async ({ label, listId, listName, section }) => {
373
+ try {
374
+ const resolved = await resolveListId(listId, listName, true);
375
+ if (!resolved.success) {
376
+ return {
377
+ content: [{ type: "text", text: resolved.error }],
378
+ isError: true,
379
+ };
380
+ }
381
+ const item = await createListItem(resolved.id, label, section);
382
+ const sectionText = section ? ` in section "${section}"` : "";
383
+ return {
384
+ content: [
385
+ {
386
+ type: "text",
387
+ text: `Added "${item.attributes.label}" to ${resolved.name}${sectionText}`,
388
+ },
389
+ ],
390
+ };
391
+ }
392
+ catch (error) {
393
+ return {
394
+ content: [{ type: "text", text: formatErrorForMcp(error) }],
395
+ isError: true,
396
+ };
397
+ }
398
+ });
399
+ // update_list_item tool
400
+ server.tool("update_list_item", `Update a list item (mark complete, rename, move to section).
401
+
402
+ Use this when:
403
+ - Marking an item as complete: "Check off milk from the list"
404
+ - Renaming an item: "Change 'milk' to '2% milk'"
405
+ - Moving an item to a different section
406
+
407
+ Parameters:
408
+ - itemId (required): ID of the item to update
409
+ - listId (required): ID of the list containing the item
410
+ - label: New text for the item
411
+ - status: "completed" to check off, "pending" to uncheck
412
+ - section: Move to a different section
413
+
414
+ Returns: The updated item details.`, {
415
+ itemId: z.string().describe("ID of the item to update"),
416
+ listId: z.string().describe("ID of the list containing the item"),
417
+ label: z.string().optional().describe("New text for the item"),
418
+ status: z.enum(["pending", "completed"]).optional().describe("'completed' to check off, 'pending' to uncheck"),
419
+ section: z.string().nullable().optional().describe("Move to a different section (null to remove from section)"),
420
+ }, async ({ itemId, listId, label, status, section }) => {
421
+ try {
422
+ const updates = {};
423
+ if (label !== undefined)
424
+ updates.label = label;
425
+ if (status !== undefined)
426
+ updates.status = status;
427
+ if (section !== undefined)
428
+ updates.section = section;
429
+ const item = await updateListItem(listId, itemId, updates);
430
+ const statusText = status === "completed" ? " (marked complete)" : status === "pending" ? " (marked pending)" : "";
431
+ return {
432
+ content: [
433
+ {
434
+ type: "text",
435
+ text: `Updated item: "${item.attributes.label}"${statusText}`,
436
+ },
437
+ ],
438
+ };
439
+ }
440
+ catch (error) {
441
+ return {
442
+ content: [{ type: "text", text: formatErrorForMcp(error) }],
443
+ isError: true,
444
+ };
445
+ }
446
+ });
447
+ // delete_list_item tool
448
+ server.tool("delete_list_item", `Remove an item from a list.
449
+
450
+ Use this when:
451
+ - Removing an item that was added by mistake
452
+ - Deleting an item instead of marking it complete
453
+
454
+ Parameters:
455
+ - itemId (required): ID of the item to delete
456
+ - listId (required): ID of the list containing the item
457
+
458
+ Note: This permanently removes the item. Use update_list_item with status="completed" to check it off instead.`, {
459
+ itemId: z.string().describe("ID of the item to delete"),
460
+ listId: z.string().describe("ID of the list containing the item"),
461
+ }, async ({ itemId, listId }) => {
462
+ try {
463
+ await deleteListItem(listId, itemId);
464
+ return {
465
+ content: [
466
+ {
467
+ type: "text",
468
+ text: `Deleted item from list`,
469
+ },
470
+ ],
471
+ };
472
+ }
473
+ catch (error) {
474
+ return {
475
+ content: [{ type: "text", text: formatErrorForMcp(error) }],
476
+ isError: true,
477
+ };
478
+ }
479
+ });
480
+ }
481
+ //# sourceMappingURL=lists.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lists.js","sourceRoot":"","sources":["../../src/tools/lists.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerMealTools(server: McpServer): void;
3
+ //# sourceMappingURL=meals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meals.d.ts","sourceRoot":"","sources":["../../src/tools/meals.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiXzD"}