@bmhall2/skylight-mcp 1.1.7 → 1.1.9
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/LICENSE +21 -21
- package/README.md +265 -265
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.d.ts.map +1 -1
- package/dist/config.js +25 -25
- package/dist/tools/calendar.d.ts.map +1 -1
- package/dist/tools/calendar.js +61 -63
- package/dist/tools/calendar.js.map +1 -1
- package/dist/tools/chores.js +39 -39
- package/dist/tools/family.js +19 -19
- package/dist/tools/family.js.map +1 -1
- package/dist/tools/lists.js +85 -85
- package/dist/tools/meals.js +70 -70
- package/dist/tools/misc.js +14 -14
- package/dist/tools/photos.js +6 -6
- package/dist/tools/rewards.js +69 -69
- package/dist/tools/tasks.js +9 -9
- package/dist/utils/errors.js +16 -16
- package/package.json +59 -59
package/dist/tools/lists.js
CHANGED
|
@@ -27,9 +27,9 @@ async function resolveListId(listId, listName, defaultToGrocery = false) {
|
|
|
27
27
|
}
|
|
28
28
|
export function registerListTools(server) {
|
|
29
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.
|
|
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
33
|
Returns list names, types (shopping/to_do), and item counts.`, {}, async () => {
|
|
34
34
|
try {
|
|
35
35
|
const lists = await getLists();
|
|
@@ -80,13 +80,13 @@ Returns list names, types (shopping/to_do), and item counts.`, {}, async () => {
|
|
|
80
80
|
}
|
|
81
81
|
});
|
|
82
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
|
-
|
|
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
90
|
Returns items organized by section with their completion status.`, {
|
|
91
91
|
listName: z
|
|
92
92
|
.string()
|
|
@@ -219,17 +219,17 @@ Returns items organized by section with their completion status.`, {
|
|
|
219
219
|
}
|
|
220
220
|
});
|
|
221
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
|
-
|
|
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
233
|
Returns: The created list details.`, {
|
|
234
234
|
label: z.string().describe("Name of the list (e.g., 'Vacation Packing')"),
|
|
235
235
|
kind: z.enum(["shopping", "to_do"]).describe("Type of list: 'shopping' or 'to_do'"),
|
|
@@ -254,19 +254,19 @@ Returns: The created list details.`, {
|
|
|
254
254
|
}
|
|
255
255
|
});
|
|
256
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
|
-
|
|
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
270
|
Returns: The updated list details.`, {
|
|
271
271
|
listId: z.string().optional().describe("ID of the list to update"),
|
|
272
272
|
listName: z.string().optional().describe("Name of the list to update (alternative to listId)"),
|
|
@@ -307,16 +307,16 @@ Returns: The updated list details.`, {
|
|
|
307
307
|
}
|
|
308
308
|
});
|
|
309
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
|
-
|
|
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
320
|
Note: This permanently deletes the list and all its items.`, {
|
|
321
321
|
listId: z.string().optional().describe("ID of the list to delete"),
|
|
322
322
|
listName: z.string().optional().describe("Name of the list to delete (alternative to listId)"),
|
|
@@ -347,23 +347,23 @@ Note: This permanently deletes the list and all its items.`, {
|
|
|
347
347
|
}
|
|
348
348
|
});
|
|
349
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
|
-
|
|
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
367
|
Related: Use get_lists to see available lists and their IDs.`, {
|
|
368
368
|
label: z.string().describe("The item text to add (e.g., 'Milk', 'Call doctor')"),
|
|
369
369
|
listId: z.string().optional().describe("ID of the list to add to"),
|
|
@@ -397,20 +397,20 @@ Related: Use get_lists to see available lists and their IDs.`, {
|
|
|
397
397
|
}
|
|
398
398
|
});
|
|
399
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
|
-
|
|
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
414
|
Returns: The updated item details.`, {
|
|
415
415
|
itemId: z.string().describe("ID of the item to update"),
|
|
416
416
|
listId: z.string().describe("ID of the list containing the item"),
|
|
@@ -445,16 +445,16 @@ Returns: The updated item details.`, {
|
|
|
445
445
|
}
|
|
446
446
|
});
|
|
447
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
|
-
|
|
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
458
|
Note: This permanently removes the item. Use update_list_item with status="completed" to check it off instead.`, {
|
|
459
459
|
itemId: z.string().describe("ID of the item to delete"),
|
|
460
460
|
listId: z.string().describe("ID of the list containing the item"),
|
package/dist/tools/meals.js
CHANGED
|
@@ -5,12 +5,12 @@ import { formatErrorForMcp } from "../utils/errors.js";
|
|
|
5
5
|
import { getConfig } from "../config.js";
|
|
6
6
|
export function registerMealTools(server) {
|
|
7
7
|
// get_meal_categories tool
|
|
8
|
-
server.tool("get_meal_categories", `Get meal categories (Breakfast, Lunch, Dinner, etc.) - Plus subscription required.
|
|
9
|
-
|
|
10
|
-
Use this when:
|
|
11
|
-
- Finding category IDs for scheduling meals
|
|
12
|
-
- Seeing what meal times are available
|
|
13
|
-
|
|
8
|
+
server.tool("get_meal_categories", `Get meal categories (Breakfast, Lunch, Dinner, etc.) - Plus subscription required.
|
|
9
|
+
|
|
10
|
+
Use this when:
|
|
11
|
+
- Finding category IDs for scheduling meals
|
|
12
|
+
- Seeing what meal times are available
|
|
13
|
+
|
|
14
14
|
Returns: List of meal categories with IDs.`, {}, async () => {
|
|
15
15
|
try {
|
|
16
16
|
const categories = await getMealCategories();
|
|
@@ -34,12 +34,12 @@ Returns: List of meal categories with IDs.`, {}, async () => {
|
|
|
34
34
|
}
|
|
35
35
|
});
|
|
36
36
|
// get_recipes tool
|
|
37
|
-
server.tool("get_recipes", `Get all saved recipes - Plus subscription required.
|
|
38
|
-
|
|
39
|
-
Use this when:
|
|
40
|
-
- Browsing available recipes
|
|
41
|
-
- Finding a recipe ID for meal planning
|
|
42
|
-
|
|
37
|
+
server.tool("get_recipes", `Get all saved recipes - Plus subscription required.
|
|
38
|
+
|
|
39
|
+
Use this when:
|
|
40
|
+
- Browsing available recipes
|
|
41
|
+
- Finding a recipe ID for meal planning
|
|
42
|
+
|
|
43
43
|
Returns: List of recipes with their details.`, {}, async () => {
|
|
44
44
|
try {
|
|
45
45
|
const recipes = await getRecipes();
|
|
@@ -69,11 +69,11 @@ Returns: List of recipes with their details.`, {}, async () => {
|
|
|
69
69
|
}
|
|
70
70
|
});
|
|
71
71
|
// get_recipe tool
|
|
72
|
-
server.tool("get_recipe", `Get details for a specific recipe - Plus subscription required.
|
|
73
|
-
|
|
74
|
-
Parameters:
|
|
75
|
-
- recipeId (required): ID of the recipe
|
|
76
|
-
|
|
72
|
+
server.tool("get_recipe", `Get details for a specific recipe - Plus subscription required.
|
|
73
|
+
|
|
74
|
+
Parameters:
|
|
75
|
+
- recipeId (required): ID of the recipe
|
|
76
|
+
|
|
77
77
|
Returns: Recipe details including description.`, {
|
|
78
78
|
recipeId: z.string().describe("ID of the recipe"),
|
|
79
79
|
}, async ({ recipeId }) => {
|
|
@@ -97,17 +97,17 @@ Returns: Recipe details including description.`, {
|
|
|
97
97
|
}
|
|
98
98
|
});
|
|
99
99
|
// create_recipe tool
|
|
100
|
-
server.tool("create_recipe", `Create a new recipe - Plus subscription required.
|
|
101
|
-
|
|
102
|
-
Use this when:
|
|
103
|
-
- Adding a new family recipe
|
|
104
|
-
- Saving a meal for meal planning
|
|
105
|
-
|
|
106
|
-
Parameters:
|
|
107
|
-
- summary (required): Recipe name
|
|
108
|
-
- description: Recipe details or instructions
|
|
109
|
-
- mealCategoryId: Category ID (use get_meal_categories)
|
|
110
|
-
|
|
100
|
+
server.tool("create_recipe", `Create a new recipe - Plus subscription required.
|
|
101
|
+
|
|
102
|
+
Use this when:
|
|
103
|
+
- Adding a new family recipe
|
|
104
|
+
- Saving a meal for meal planning
|
|
105
|
+
|
|
106
|
+
Parameters:
|
|
107
|
+
- summary (required): Recipe name
|
|
108
|
+
- description: Recipe details or instructions
|
|
109
|
+
- mealCategoryId: Category ID (use get_meal_categories)
|
|
110
|
+
|
|
111
111
|
Returns: The created recipe.`, {
|
|
112
112
|
summary: z.string().describe("Recipe name (e.g., 'Spaghetti Bolognese')"),
|
|
113
113
|
description: z.string().optional().describe("Recipe details or instructions"),
|
|
@@ -132,13 +132,13 @@ Returns: The created recipe.`, {
|
|
|
132
132
|
}
|
|
133
133
|
});
|
|
134
134
|
// update_recipe tool
|
|
135
|
-
server.tool("update_recipe", `Update an existing recipe - Plus subscription required.
|
|
136
|
-
|
|
137
|
-
Parameters:
|
|
138
|
-
- recipeId (required): ID of the recipe
|
|
139
|
-
- summary: New name
|
|
140
|
-
- description: New description
|
|
141
|
-
|
|
135
|
+
server.tool("update_recipe", `Update an existing recipe - Plus subscription required.
|
|
136
|
+
|
|
137
|
+
Parameters:
|
|
138
|
+
- recipeId (required): ID of the recipe
|
|
139
|
+
- summary: New name
|
|
140
|
+
- description: New description
|
|
141
|
+
|
|
142
142
|
Returns: The updated recipe.`, {
|
|
143
143
|
recipeId: z.string().describe("ID of the recipe to update"),
|
|
144
144
|
summary: z.string().optional().describe("New recipe name"),
|
|
@@ -168,11 +168,11 @@ Returns: The updated recipe.`, {
|
|
|
168
168
|
}
|
|
169
169
|
});
|
|
170
170
|
// delete_recipe tool
|
|
171
|
-
server.tool("delete_recipe", `Delete a recipe - Plus subscription required.
|
|
172
|
-
|
|
173
|
-
Parameters:
|
|
174
|
-
- recipeId (required): ID of the recipe to delete
|
|
175
|
-
|
|
171
|
+
server.tool("delete_recipe", `Delete a recipe - Plus subscription required.
|
|
172
|
+
|
|
173
|
+
Parameters:
|
|
174
|
+
- recipeId (required): ID of the recipe to delete
|
|
175
|
+
|
|
176
176
|
Note: This permanently removes the recipe.`, {
|
|
177
177
|
recipeId: z.string().describe("ID of the recipe to delete"),
|
|
178
178
|
}, async ({ recipeId }) => {
|
|
@@ -190,15 +190,15 @@ Note: This permanently removes the recipe.`, {
|
|
|
190
190
|
}
|
|
191
191
|
});
|
|
192
192
|
// add_recipe_to_grocery_list tool
|
|
193
|
-
server.tool("add_recipe_to_grocery_list", `Add a recipe's ingredients to the grocery list - Plus subscription required.
|
|
194
|
-
|
|
195
|
-
Use this when:
|
|
196
|
-
- Planning to make a recipe and need to buy ingredients
|
|
197
|
-
- Adding meal ingredients to shopping list
|
|
198
|
-
|
|
199
|
-
Parameters:
|
|
200
|
-
- recipeId (required): ID of the recipe
|
|
201
|
-
|
|
193
|
+
server.tool("add_recipe_to_grocery_list", `Add a recipe's ingredients to the grocery list - Plus subscription required.
|
|
194
|
+
|
|
195
|
+
Use this when:
|
|
196
|
+
- Planning to make a recipe and need to buy ingredients
|
|
197
|
+
- Adding meal ingredients to shopping list
|
|
198
|
+
|
|
199
|
+
Parameters:
|
|
200
|
+
- recipeId (required): ID of the recipe
|
|
201
|
+
|
|
202
202
|
Returns: Confirmation that ingredients were added.`, {
|
|
203
203
|
recipeId: z.string().describe("ID of the recipe"),
|
|
204
204
|
}, async ({ recipeId }) => {
|
|
@@ -221,16 +221,16 @@ Returns: Confirmation that ingredients were added.`, {
|
|
|
221
221
|
}
|
|
222
222
|
});
|
|
223
223
|
// get_meal_sittings tool
|
|
224
|
-
server.tool("get_meal_sittings", `Get scheduled meals for a date range - Plus subscription required.
|
|
225
|
-
|
|
226
|
-
Use this when:
|
|
227
|
-
- Viewing the meal plan for the week
|
|
228
|
-
- Checking what's scheduled for dinner
|
|
229
|
-
|
|
230
|
-
Parameters:
|
|
231
|
-
- date: Start date (defaults to today)
|
|
232
|
-
- dateEnd: End date (defaults to 7 days from start)
|
|
233
|
-
|
|
224
|
+
server.tool("get_meal_sittings", `Get scheduled meals for a date range - Plus subscription required.
|
|
225
|
+
|
|
226
|
+
Use this when:
|
|
227
|
+
- Viewing the meal plan for the week
|
|
228
|
+
- Checking what's scheduled for dinner
|
|
229
|
+
|
|
230
|
+
Parameters:
|
|
231
|
+
- date: Start date (defaults to today)
|
|
232
|
+
- dateEnd: End date (defaults to 7 days from start)
|
|
233
|
+
|
|
234
234
|
Returns: List of scheduled meals.`, {
|
|
235
235
|
date: z.string().optional().describe("Start date (YYYY-MM-DD or 'today')"),
|
|
236
236
|
dateEnd: z.string().optional().describe("End date (YYYY-MM-DD)"),
|
|
@@ -275,17 +275,17 @@ Returns: List of scheduled meals.`, {
|
|
|
275
275
|
}
|
|
276
276
|
});
|
|
277
277
|
// create_meal_sitting tool
|
|
278
|
-
server.tool("create_meal_sitting", `Schedule a meal for a specific date - Plus subscription required.
|
|
279
|
-
|
|
280
|
-
Use this when:
|
|
281
|
-
- Planning meals for the week
|
|
282
|
-
- Scheduling a recipe for dinner
|
|
283
|
-
|
|
284
|
-
Parameters:
|
|
285
|
-
- date (required): Date for the meal (YYYY-MM-DD)
|
|
286
|
-
- mealCategoryId (required): Meal category ID (use get_meal_categories)
|
|
287
|
-
- recipeId: Recipe ID to schedule (optional)
|
|
288
|
-
|
|
278
|
+
server.tool("create_meal_sitting", `Schedule a meal for a specific date - Plus subscription required.
|
|
279
|
+
|
|
280
|
+
Use this when:
|
|
281
|
+
- Planning meals for the week
|
|
282
|
+
- Scheduling a recipe for dinner
|
|
283
|
+
|
|
284
|
+
Parameters:
|
|
285
|
+
- date (required): Date for the meal (YYYY-MM-DD)
|
|
286
|
+
- mealCategoryId (required): Meal category ID (use get_meal_categories)
|
|
287
|
+
- recipeId: Recipe ID to schedule (optional)
|
|
288
|
+
|
|
289
289
|
Returns: The created meal sitting.`, {
|
|
290
290
|
date: z.string().describe("Date for the meal (YYYY-MM-DD or 'today', 'tomorrow')"),
|
|
291
291
|
mealCategoryId: z.string().describe("Meal category ID (e.g., ID for 'Dinner')"),
|
package/dist/tools/misc.js
CHANGED
|
@@ -2,13 +2,13 @@ import { getAvatars, getColors } from "../api/endpoints/misc.js";
|
|
|
2
2
|
import { formatErrorForMcp } from "../utils/errors.js";
|
|
3
3
|
export function registerMiscTools(server) {
|
|
4
4
|
// get_avatars tool
|
|
5
|
-
server.tool("get_avatars", `Get available avatar options for Skylight profiles.
|
|
6
|
-
|
|
7
|
-
Use this when:
|
|
8
|
-
- Setting up a new family member profile
|
|
9
|
-
- Changing someone's profile picture
|
|
10
|
-
- Exploring available avatar options
|
|
11
|
-
|
|
5
|
+
server.tool("get_avatars", `Get available avatar options for Skylight profiles.
|
|
6
|
+
|
|
7
|
+
Use this when:
|
|
8
|
+
- Setting up a new family member profile
|
|
9
|
+
- Changing someone's profile picture
|
|
10
|
+
- Exploring available avatar options
|
|
11
|
+
|
|
12
12
|
Returns: List of available avatars with their IDs and details.`, {}, async () => {
|
|
13
13
|
try {
|
|
14
14
|
const avatars = await getAvatars();
|
|
@@ -50,13 +50,13 @@ Returns: List of available avatars with their IDs and details.`, {}, async () =>
|
|
|
50
50
|
}
|
|
51
51
|
});
|
|
52
52
|
// get_colors tool
|
|
53
|
-
server.tool("get_colors", `Get available color options for Skylight profiles and lists.
|
|
54
|
-
|
|
55
|
-
Use this when:
|
|
56
|
-
- Choosing a color for a family member profile
|
|
57
|
-
- Setting a list color
|
|
58
|
-
- Exploring available color options
|
|
59
|
-
|
|
53
|
+
server.tool("get_colors", `Get available color options for Skylight profiles and lists.
|
|
54
|
+
|
|
55
|
+
Use this when:
|
|
56
|
+
- Choosing a color for a family member profile
|
|
57
|
+
- Setting a list color
|
|
58
|
+
- Exploring available color options
|
|
59
|
+
|
|
60
60
|
Returns: List of available colors with their IDs and hex values.`, {}, async () => {
|
|
61
61
|
try {
|
|
62
62
|
const colors = await getColors();
|
package/dist/tools/photos.js
CHANGED
|
@@ -2,12 +2,12 @@ import { getAlbums } from "../api/endpoints/photos.js";
|
|
|
2
2
|
import { formatErrorForMcp } from "../utils/errors.js";
|
|
3
3
|
export function registerPhotoTools(server) {
|
|
4
4
|
// get_albums tool
|
|
5
|
-
server.tool("get_albums", `Get photo albums from Skylight - Plus subscription required.
|
|
6
|
-
|
|
7
|
-
Use this when:
|
|
8
|
-
- Viewing available photo albums
|
|
9
|
-
- Getting album IDs for photo management
|
|
10
|
-
|
|
5
|
+
server.tool("get_albums", `Get photo albums from Skylight - Plus subscription required.
|
|
6
|
+
|
|
7
|
+
Use this when:
|
|
8
|
+
- Viewing available photo albums
|
|
9
|
+
- Getting album IDs for photo management
|
|
10
|
+
|
|
11
11
|
Returns: List of photo albums with their IDs.`, {}, async () => {
|
|
12
12
|
try {
|
|
13
13
|
const albums = await getAlbums();
|
package/dist/tools/rewards.js
CHANGED
|
@@ -4,13 +4,13 @@ import { findCategoryByName } from "../api/endpoints/categories.js";
|
|
|
4
4
|
import { formatErrorForMcp } from "../utils/errors.js";
|
|
5
5
|
export function registerRewardTools(server) {
|
|
6
6
|
// get_rewards tool
|
|
7
|
-
server.tool("get_rewards", `Get available rewards that can be redeemed with reward points.
|
|
8
|
-
|
|
9
|
-
For family gamification - shows rewards that family members can earn.
|
|
10
|
-
|
|
11
|
-
Use this to answer:
|
|
12
|
-
- "What rewards can we redeem?"
|
|
13
|
-
- "What can the kids earn?"
|
|
7
|
+
server.tool("get_rewards", `Get available rewards that can be redeemed with reward points.
|
|
8
|
+
|
|
9
|
+
For family gamification - shows rewards that family members can earn.
|
|
10
|
+
|
|
11
|
+
Use this to answer:
|
|
12
|
+
- "What rewards can we redeem?"
|
|
13
|
+
- "What can the kids earn?"
|
|
14
14
|
- "Show available rewards"`, {
|
|
15
15
|
redeemedSince: z
|
|
16
16
|
.string()
|
|
@@ -65,13 +65,13 @@ Use this to answer:
|
|
|
65
65
|
}
|
|
66
66
|
});
|
|
67
67
|
// get_reward_points tool
|
|
68
|
-
server.tool("get_reward_points", `Get reward points balance for family members.
|
|
69
|
-
|
|
70
|
-
Shows how many reward points each family member has earned.
|
|
71
|
-
|
|
72
|
-
Use this to answer:
|
|
73
|
-
- "How many points does [name] have?"
|
|
74
|
-
- "Show reward points balance"
|
|
68
|
+
server.tool("get_reward_points", `Get reward points balance for family members.
|
|
69
|
+
|
|
70
|
+
Shows how many reward points each family member has earned.
|
|
71
|
+
|
|
72
|
+
Use this to answer:
|
|
73
|
+
- "How many points does [name] have?"
|
|
74
|
+
- "Show reward points balance"
|
|
75
75
|
- "Who has the most points?"`, {}, async () => {
|
|
76
76
|
try {
|
|
77
77
|
const points = await getRewardPoints();
|
|
@@ -119,20 +119,20 @@ Use this to answer:
|
|
|
119
119
|
}
|
|
120
120
|
});
|
|
121
121
|
// create_reward tool
|
|
122
|
-
server.tool("create_reward", `Create a new reward that can be redeemed with points (Plus subscription required).
|
|
123
|
-
|
|
124
|
-
Use this when:
|
|
125
|
-
- Adding a new reward: "Create a reward for 30 minutes of screen time"
|
|
126
|
-
- Setting up family incentives: "Add a pizza night reward worth 100 points"
|
|
127
|
-
|
|
128
|
-
Parameters:
|
|
129
|
-
- name (required): Reward name (e.g., "30 min Screen Time")
|
|
130
|
-
- pointValue (required): Points needed to redeem this reward
|
|
131
|
-
- description: Additional details about the reward
|
|
132
|
-
- emojiIcon: Emoji to display with the reward
|
|
133
|
-
- assignee: Family member name to assign this reward to
|
|
134
|
-
- respawnOnRedemption: If true, reward can be redeemed multiple times
|
|
135
|
-
|
|
122
|
+
server.tool("create_reward", `Create a new reward that can be redeemed with points (Plus subscription required).
|
|
123
|
+
|
|
124
|
+
Use this when:
|
|
125
|
+
- Adding a new reward: "Create a reward for 30 minutes of screen time"
|
|
126
|
+
- Setting up family incentives: "Add a pizza night reward worth 100 points"
|
|
127
|
+
|
|
128
|
+
Parameters:
|
|
129
|
+
- name (required): Reward name (e.g., "30 min Screen Time")
|
|
130
|
+
- pointValue (required): Points needed to redeem this reward
|
|
131
|
+
- description: Additional details about the reward
|
|
132
|
+
- emojiIcon: Emoji to display with the reward
|
|
133
|
+
- assignee: Family member name to assign this reward to
|
|
134
|
+
- respawnOnRedemption: If true, reward can be redeemed multiple times
|
|
135
|
+
|
|
136
136
|
Returns: The created reward details.`, {
|
|
137
137
|
name: z.string().describe("Reward name (e.g., '30 min Screen Time')"),
|
|
138
138
|
pointValue: z.number().describe("Points needed to redeem this reward"),
|
|
@@ -178,19 +178,19 @@ Returns: The created reward details.`, {
|
|
|
178
178
|
}
|
|
179
179
|
});
|
|
180
180
|
// update_reward tool
|
|
181
|
-
server.tool("update_reward", `Update an existing reward (Plus subscription required).
|
|
182
|
-
|
|
183
|
-
Use this when:
|
|
184
|
-
- Changing point value: "Make the screen time reward cost 50 points"
|
|
185
|
-
- Updating reward details: "Add a description to the pizza reward"
|
|
186
|
-
|
|
187
|
-
Parameters:
|
|
188
|
-
- rewardId (required): ID of the reward (from get_rewards)
|
|
189
|
-
- name: New reward name
|
|
190
|
-
- pointValue: New point cost
|
|
191
|
-
- description: Updated description
|
|
192
|
-
- emojiIcon: Updated emoji
|
|
193
|
-
|
|
181
|
+
server.tool("update_reward", `Update an existing reward (Plus subscription required).
|
|
182
|
+
|
|
183
|
+
Use this when:
|
|
184
|
+
- Changing point value: "Make the screen time reward cost 50 points"
|
|
185
|
+
- Updating reward details: "Add a description to the pizza reward"
|
|
186
|
+
|
|
187
|
+
Parameters:
|
|
188
|
+
- rewardId (required): ID of the reward (from get_rewards)
|
|
189
|
+
- name: New reward name
|
|
190
|
+
- pointValue: New point cost
|
|
191
|
+
- description: Updated description
|
|
192
|
+
- emojiIcon: Updated emoji
|
|
193
|
+
|
|
194
194
|
Returns: The updated reward details.`, {
|
|
195
195
|
rewardId: z.string().describe("ID of the reward to update"),
|
|
196
196
|
name: z.string().optional().describe("New reward name"),
|
|
@@ -229,15 +229,15 @@ Returns: The updated reward details.`, {
|
|
|
229
229
|
}
|
|
230
230
|
});
|
|
231
231
|
// delete_reward tool
|
|
232
|
-
server.tool("delete_reward", `Delete a reward (Plus subscription required).
|
|
233
|
-
|
|
234
|
-
Use this when:
|
|
235
|
-
- Removing an old reward
|
|
236
|
-
- Cleaning up unused rewards
|
|
237
|
-
|
|
238
|
-
Parameters:
|
|
239
|
-
- rewardId (required): ID of the reward to delete (from get_rewards)
|
|
240
|
-
|
|
232
|
+
server.tool("delete_reward", `Delete a reward (Plus subscription required).
|
|
233
|
+
|
|
234
|
+
Use this when:
|
|
235
|
+
- Removing an old reward
|
|
236
|
+
- Cleaning up unused rewards
|
|
237
|
+
|
|
238
|
+
Parameters:
|
|
239
|
+
- rewardId (required): ID of the reward to delete (from get_rewards)
|
|
240
|
+
|
|
241
241
|
Note: This permanently removes the reward.`, {
|
|
242
242
|
rewardId: z.string().describe("ID of the reward to delete"),
|
|
243
243
|
}, async ({ rewardId }) => {
|
|
@@ -260,16 +260,16 @@ Note: This permanently removes the reward.`, {
|
|
|
260
260
|
}
|
|
261
261
|
});
|
|
262
262
|
// redeem_reward tool
|
|
263
|
-
server.tool("redeem_reward", `Redeem a reward using points (Plus subscription required).
|
|
264
|
-
|
|
265
|
-
Use this when:
|
|
266
|
-
- A family member wants to cash in points: "Redeem the screen time reward for Johnny"
|
|
267
|
-
- Claiming an earned reward
|
|
268
|
-
|
|
269
|
-
Parameters:
|
|
270
|
-
- rewardId (required): ID of the reward to redeem (from get_rewards)
|
|
271
|
-
- assignee: Family member redeeming the reward (uses their points)
|
|
272
|
-
|
|
263
|
+
server.tool("redeem_reward", `Redeem a reward using points (Plus subscription required).
|
|
264
|
+
|
|
265
|
+
Use this when:
|
|
266
|
+
- A family member wants to cash in points: "Redeem the screen time reward for Johnny"
|
|
267
|
+
- Claiming an earned reward
|
|
268
|
+
|
|
269
|
+
Parameters:
|
|
270
|
+
- rewardId (required): ID of the reward to redeem (from get_rewards)
|
|
271
|
+
- assignee: Family member redeeming the reward (uses their points)
|
|
272
|
+
|
|
273
273
|
Returns: The redeemed reward details.`, {
|
|
274
274
|
rewardId: z.string().describe("ID of the reward to redeem"),
|
|
275
275
|
assignee: z.string().optional().describe("Family member redeeming the reward"),
|
|
@@ -304,15 +304,15 @@ Returns: The redeemed reward details.`, {
|
|
|
304
304
|
}
|
|
305
305
|
});
|
|
306
306
|
// unredeem_reward tool
|
|
307
|
-
server.tool("unredeem_reward", `Cancel a reward redemption (Plus subscription required).
|
|
308
|
-
|
|
309
|
-
Use this when:
|
|
310
|
-
- A redemption was made by mistake
|
|
311
|
-
- Undoing a reward claim
|
|
312
|
-
|
|
313
|
-
Parameters:
|
|
314
|
-
- rewardId (required): ID of the reward to unredeem
|
|
315
|
-
|
|
307
|
+
server.tool("unredeem_reward", `Cancel a reward redemption (Plus subscription required).
|
|
308
|
+
|
|
309
|
+
Use this when:
|
|
310
|
+
- A redemption was made by mistake
|
|
311
|
+
- Undoing a reward claim
|
|
312
|
+
|
|
313
|
+
Parameters:
|
|
314
|
+
- rewardId (required): ID of the reward to unredeem
|
|
315
|
+
|
|
316
316
|
Returns: The unredeemed reward details.`, {
|
|
317
317
|
rewardId: z.string().describe("ID of the reward to unredeem"),
|
|
318
318
|
}, async ({ rewardId }) => {
|