@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.
- package/LICENSE +21 -0
- package/README.md +265 -0
- package/dist/api/auth.d.ts +38 -0
- package/dist/api/auth.d.ts.map +1 -0
- package/dist/api/auth.js +62 -0
- package/dist/api/auth.js.map +1 -0
- package/dist/api/client.d.ts +84 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +228 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/endpoints/calendar.d.ts +33 -0
- package/dist/api/endpoints/calendar.d.ts.map +1 -0
- package/dist/api/endpoints/calendar.js +60 -0
- package/dist/api/endpoints/calendar.js.map +1 -0
- package/dist/api/endpoints/categories.d.ts +23 -0
- package/dist/api/endpoints/categories.d.ts.map +1 -0
- package/dist/api/endpoints/categories.js +48 -0
- package/dist/api/endpoints/categories.js.map +1 -0
- package/dist/api/endpoints/chores.d.ts +50 -0
- package/dist/api/endpoints/chores.d.ts.map +1 -0
- package/dist/api/endpoints/chores.js +106 -0
- package/dist/api/endpoints/chores.js.map +1 -0
- package/dist/api/endpoints/devices.d.ts +6 -0
- package/dist/api/endpoints/devices.d.ts.map +1 -0
- package/dist/api/endpoints/devices.js +10 -0
- package/dist/api/endpoints/devices.js.map +1 -0
- package/dist/api/endpoints/frames.d.ts +6 -0
- package/dist/api/endpoints/frames.d.ts.map +1 -0
- package/dist/api/endpoints/frames.js +10 -0
- package/dist/api/endpoints/frames.js.map +1 -0
- package/dist/api/endpoints/lists.d.ts +55 -0
- package/dist/api/endpoints/lists.d.ts.map +1 -0
- package/dist/api/endpoints/lists.js +125 -0
- package/dist/api/endpoints/lists.js.map +1 -0
- package/dist/api/endpoints/meals.d.ts +102 -0
- package/dist/api/endpoints/meals.d.ts.map +1 -0
- package/dist/api/endpoints/meals.js +100 -0
- package/dist/api/endpoints/meals.js.map +1 -0
- package/dist/api/endpoints/misc.d.ts +27 -0
- package/dist/api/endpoints/misc.d.ts.map +1 -0
- package/dist/api/endpoints/misc.js +18 -0
- package/dist/api/endpoints/misc.js.map +1 -0
- package/dist/api/endpoints/photos.d.ts +13 -0
- package/dist/api/endpoints/photos.d.ts.map +1 -0
- package/dist/api/endpoints/photos.js +10 -0
- package/dist/api/endpoints/photos.js.map +1 -0
- package/dist/api/endpoints/rewards.d.ts +49 -0
- package/dist/api/endpoints/rewards.d.ts.map +1 -0
- package/dist/api/endpoints/rewards.js +105 -0
- package/dist/api/endpoints/rewards.js.map +1 -0
- package/dist/api/endpoints/taskbox.d.ts +13 -0
- package/dist/api/endpoints/taskbox.d.ts.map +1 -0
- package/dist/api/endpoints/taskbox.js +22 -0
- package/dist/api/endpoints/taskbox.js.map +1 -0
- package/dist/api/generated-types.d.ts +18967 -0
- package/dist/api/generated-types.d.ts.map +1 -0
- package/dist/api/generated-types.js +6 -0
- package/dist/api/generated-types.js.map +1 -0
- package/dist/api/types.d.ts +283 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +5 -0
- package/dist/api/types.js.map +1 -0
- package/dist/config.d.ts +52 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +80 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +7 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +48 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/calendar.d.ts +3 -0
- package/dist/tools/calendar.d.ts.map +1 -0
- package/dist/tools/calendar.js +297 -0
- package/dist/tools/calendar.js.map +1 -0
- package/dist/tools/chores.d.ts +3 -0
- package/dist/tools/chores.d.ts.map +1 -0
- package/dist/tools/chores.js +349 -0
- package/dist/tools/chores.js.map +1 -0
- package/dist/tools/family.d.ts +3 -0
- package/dist/tools/family.d.ts.map +1 -0
- package/dist/tools/family.js +182 -0
- package/dist/tools/family.js.map +1 -0
- package/dist/tools/lists.d.ts +3 -0
- package/dist/tools/lists.d.ts.map +1 -0
- package/dist/tools/lists.js +481 -0
- package/dist/tools/lists.js.map +1 -0
- package/dist/tools/meals.d.ts +3 -0
- package/dist/tools/meals.d.ts.map +1 -0
- package/dist/tools/meals.js +319 -0
- package/dist/tools/meals.js.map +1 -0
- package/dist/tools/misc.d.ts +3 -0
- package/dist/tools/misc.d.ts.map +1 -0
- package/dist/tools/misc.js +101 -0
- package/dist/tools/misc.js.map +1 -0
- package/dist/tools/photos.d.ts +3 -0
- package/dist/tools/photos.d.ts.map +1 -0
- package/dist/tools/photos.js +42 -0
- package/dist/tools/photos.js.map +1 -0
- package/dist/tools/rewards.d.ts +3 -0
- package/dist/tools/rewards.d.ts.map +1 -0
- package/dist/tools/rewards.js +338 -0
- package/dist/tools/rewards.js.map +1 -0
- package/dist/tools/tasks.d.ts +3 -0
- package/dist/tools/tasks.d.ts.map +1 -0
- package/dist/tools/tasks.js +68 -0
- package/dist/tools/tasks.js.map +1 -0
- package/dist/utils/dates.d.ts +26 -0
- package/dist/utils/dates.d.ts.map +1 -0
- package/dist/utils/dates.js +109 -0
- package/dist/utils/dates.js.map +1 -0
- package/dist/utils/errors.d.ts +45 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +102 -0
- package/dist/utils/errors.js.map +1 -0
- 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 @@
|
|
|
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"}
|