@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.
@@ -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"),
@@ -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')"),
@@ -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();
@@ -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();
@@ -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 }) => {