@taazkareem/clickup-mcp-server 0.4.73 → 0.4.74
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/build/server.log +685 -31
- package/build/tools/folder.js +87 -58
- package/build/tools/list.js +123 -86
- package/build/tools/task/bulk-operations.js +64 -4
- package/build/tools/task/single-operations.js +98 -8
- package/build/tools/workspace.js +46 -32
- package/package.json +1 -1
package/build/tools/folder.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* updating, and deleting folders in the ClickUp workspace hierarchy.
|
|
6
6
|
*/
|
|
7
7
|
import { clickUpServices } from '../services/shared.js';
|
|
8
|
+
import { sponsorService } from '../utils/sponsor-service.js';
|
|
8
9
|
// Use shared services instance
|
|
9
10
|
const { folder: folderService, workspace: workspaceService } = clickUpServices;
|
|
10
11
|
/**
|
|
@@ -12,7 +13,19 @@ const { folder: folderService, workspace: workspaceService } = clickUpServices;
|
|
|
12
13
|
*/
|
|
13
14
|
export const createFolderTool = {
|
|
14
15
|
name: "create_folder",
|
|
15
|
-
description:
|
|
16
|
+
description: `Purpose: Create a new folder in a ClickUp space for organizing related lists.
|
|
17
|
+
|
|
18
|
+
Valid Usage:
|
|
19
|
+
1. Provide spaceId (preferred) + folder name
|
|
20
|
+
2. Provide spaceName + folder name
|
|
21
|
+
|
|
22
|
+
Requirements:
|
|
23
|
+
- name: REQUIRED
|
|
24
|
+
- EITHER spaceId OR spaceName: REQUIRED
|
|
25
|
+
|
|
26
|
+
Notes:
|
|
27
|
+
- After creating a folder, you can add lists to it using create_list_in_folder
|
|
28
|
+
- Use override_statuses to set folder-specific statuses`,
|
|
16
29
|
inputSchema: {
|
|
17
30
|
type: "object",
|
|
18
31
|
properties: {
|
|
@@ -41,7 +54,18 @@ export const createFolderTool = {
|
|
|
41
54
|
*/
|
|
42
55
|
export const getFolderTool = {
|
|
43
56
|
name: "get_folder",
|
|
44
|
-
description:
|
|
57
|
+
description: `Purpose: Retrieve details about a specific folder including name, status, and metadata.
|
|
58
|
+
|
|
59
|
+
Valid Usage:
|
|
60
|
+
1. Use folderId alone (preferred)
|
|
61
|
+
2. Use folderName + (spaceId or spaceName)
|
|
62
|
+
|
|
63
|
+
Requirements:
|
|
64
|
+
- EITHER folderId OR (folderName + space information) is REQUIRED
|
|
65
|
+
- When using folderName, you MUST provide EITHER spaceId OR spaceName
|
|
66
|
+
|
|
67
|
+
Notes:
|
|
68
|
+
- Helps you understand folder structure before creating or updating lists`,
|
|
45
69
|
inputSchema: {
|
|
46
70
|
type: "object",
|
|
47
71
|
properties: {
|
|
@@ -70,7 +94,19 @@ export const getFolderTool = {
|
|
|
70
94
|
*/
|
|
71
95
|
export const updateFolderTool = {
|
|
72
96
|
name: "update_folder",
|
|
73
|
-
description:
|
|
97
|
+
description: `Purpose: Modify an existing folder's properties.
|
|
98
|
+
|
|
99
|
+
Valid Usage:
|
|
100
|
+
1. Use folderId alone (preferred)
|
|
101
|
+
2. Use folderName + (spaceId or spaceName)
|
|
102
|
+
|
|
103
|
+
Requirements:
|
|
104
|
+
- At least one update field (name or override_statuses) must be provided
|
|
105
|
+
- EITHER folderId OR (folderName + space information) is REQUIRED
|
|
106
|
+
- When using folderName, you MUST provide EITHER spaceId OR spaceName
|
|
107
|
+
|
|
108
|
+
Notes:
|
|
109
|
+
- Changes apply immediately to all lists within the folder`,
|
|
74
110
|
inputSchema: {
|
|
75
111
|
type: "object",
|
|
76
112
|
properties: {
|
|
@@ -107,7 +143,20 @@ export const updateFolderTool = {
|
|
|
107
143
|
*/
|
|
108
144
|
export const deleteFolderTool = {
|
|
109
145
|
name: "delete_folder",
|
|
110
|
-
description:
|
|
146
|
+
description: `Purpose: PERMANENTLY DELETE a folder and all its contents.
|
|
147
|
+
|
|
148
|
+
Valid Usage:
|
|
149
|
+
1. Use folderId alone (preferred and safest)
|
|
150
|
+
2. Use folderName + (spaceId or spaceName)
|
|
151
|
+
|
|
152
|
+
Requirements:
|
|
153
|
+
- EITHER folderId OR (folderName + space information) is REQUIRED
|
|
154
|
+
- When using folderName, you MUST provide EITHER spaceId OR spaceName
|
|
155
|
+
|
|
156
|
+
⚠️ CRITICAL WARNING:
|
|
157
|
+
- This action CANNOT be undone
|
|
158
|
+
- All lists and tasks within the folder will also be permanently deleted
|
|
159
|
+
- Using folderName is risky as names may not be unique across different spaces`,
|
|
111
160
|
inputSchema: {
|
|
112
161
|
type: "object",
|
|
113
162
|
properties: {
|
|
@@ -163,23 +212,18 @@ export async function handleCreateFolder(parameters) {
|
|
|
163
212
|
try {
|
|
164
213
|
// Create the folder
|
|
165
214
|
const newFolder = await folderService.createFolder(targetSpaceId, folderData);
|
|
166
|
-
return {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
},
|
|
176
|
-
message: `Folder "${newFolder.name}" created successfully`
|
|
177
|
-
}, null, 2)
|
|
178
|
-
}]
|
|
179
|
-
};
|
|
215
|
+
return sponsorService.createResponse({
|
|
216
|
+
id: newFolder.id,
|
|
217
|
+
name: newFolder.name,
|
|
218
|
+
space: {
|
|
219
|
+
id: newFolder.space.id,
|
|
220
|
+
name: newFolder.space.name
|
|
221
|
+
},
|
|
222
|
+
message: `Folder "${newFolder.name}" created successfully`
|
|
223
|
+
}, true);
|
|
180
224
|
}
|
|
181
225
|
catch (error) {
|
|
182
|
-
|
|
226
|
+
return sponsorService.createErrorResponse(`Failed to create folder: ${error.message}`);
|
|
183
227
|
}
|
|
184
228
|
}
|
|
185
229
|
/**
|
|
@@ -215,22 +259,17 @@ export async function handleGetFolder(parameters) {
|
|
|
215
259
|
try {
|
|
216
260
|
// Get the folder
|
|
217
261
|
const folder = await folderService.getFolder(targetFolderId);
|
|
218
|
-
return {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
name: folder.space.name
|
|
227
|
-
}
|
|
228
|
-
}, null, 2)
|
|
229
|
-
}]
|
|
230
|
-
};
|
|
262
|
+
return sponsorService.createResponse({
|
|
263
|
+
id: folder.id,
|
|
264
|
+
name: folder.name,
|
|
265
|
+
space: {
|
|
266
|
+
id: folder.space.id,
|
|
267
|
+
name: folder.space.name
|
|
268
|
+
}
|
|
269
|
+
}, true);
|
|
231
270
|
}
|
|
232
271
|
catch (error) {
|
|
233
|
-
|
|
272
|
+
return sponsorService.createErrorResponse(`Failed to retrieve folder: ${error.message}`);
|
|
234
273
|
}
|
|
235
274
|
}
|
|
236
275
|
/**
|
|
@@ -276,23 +315,18 @@ export async function handleUpdateFolder(parameters) {
|
|
|
276
315
|
try {
|
|
277
316
|
// Update the folder
|
|
278
317
|
const updatedFolder = await folderService.updateFolder(targetFolderId, updateData);
|
|
279
|
-
return {
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
},
|
|
289
|
-
message: `Folder "${updatedFolder.name}" updated successfully`
|
|
290
|
-
}, null, 2)
|
|
291
|
-
}]
|
|
292
|
-
};
|
|
318
|
+
return sponsorService.createResponse({
|
|
319
|
+
id: updatedFolder.id,
|
|
320
|
+
name: updatedFolder.name,
|
|
321
|
+
space: {
|
|
322
|
+
id: updatedFolder.space.id,
|
|
323
|
+
name: updatedFolder.space.name
|
|
324
|
+
},
|
|
325
|
+
message: `Folder "${updatedFolder.name}" updated successfully`
|
|
326
|
+
}, true);
|
|
293
327
|
}
|
|
294
328
|
catch (error) {
|
|
295
|
-
|
|
329
|
+
return sponsorService.createErrorResponse(`Failed to update folder: ${error.message}`);
|
|
296
330
|
}
|
|
297
331
|
}
|
|
298
332
|
/**
|
|
@@ -331,17 +365,12 @@ export async function handleDeleteFolder(parameters) {
|
|
|
331
365
|
const folderName = folder.name;
|
|
332
366
|
// Delete the folder
|
|
333
367
|
await folderService.deleteFolder(targetFolderId);
|
|
334
|
-
return {
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
success: true,
|
|
339
|
-
message: `Folder "${folderName || targetFolderId}" deleted successfully`
|
|
340
|
-
}, null, 2)
|
|
341
|
-
}]
|
|
342
|
-
};
|
|
368
|
+
return sponsorService.createResponse({
|
|
369
|
+
success: true,
|
|
370
|
+
message: `Folder "${folderName || targetFolderId}" deleted successfully`
|
|
371
|
+
}, true);
|
|
343
372
|
}
|
|
344
373
|
catch (error) {
|
|
345
|
-
|
|
374
|
+
return sponsorService.createErrorResponse(`Failed to delete folder: ${error.message}`);
|
|
346
375
|
}
|
|
347
376
|
}
|
package/build/tools/list.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { clickUpServices } from '../services/shared.js';
|
|
9
9
|
import config from '../config.js';
|
|
10
|
+
import { sponsorService } from '../utils/sponsor-service.js';
|
|
10
11
|
// Use shared services instance
|
|
11
12
|
const { list: listService, workspace: workspaceService } = clickUpServices;
|
|
12
13
|
/**
|
|
@@ -14,7 +15,19 @@ const { list: listService, workspace: workspaceService } = clickUpServices;
|
|
|
14
15
|
*/
|
|
15
16
|
export const createListTool = {
|
|
16
17
|
name: "create_list",
|
|
17
|
-
description:
|
|
18
|
+
description: `Purpose: Create a new list directly in a ClickUp space (not in a folder).
|
|
19
|
+
|
|
20
|
+
Valid Usage:
|
|
21
|
+
1. Provide spaceId + list name (preferred)
|
|
22
|
+
2. Provide spaceName + list name
|
|
23
|
+
|
|
24
|
+
Requirements:
|
|
25
|
+
- name: REQUIRED
|
|
26
|
+
- EITHER spaceId OR spaceName: REQUIRED
|
|
27
|
+
|
|
28
|
+
Notes:
|
|
29
|
+
- For creating lists inside folders, use create_list_in_folder instead
|
|
30
|
+
- Optional fields include content, dueDate, priority, assignee, and status`,
|
|
18
31
|
inputSchema: {
|
|
19
32
|
type: "object",
|
|
20
33
|
properties: {
|
|
@@ -59,7 +72,21 @@ export const createListTool = {
|
|
|
59
72
|
*/
|
|
60
73
|
export const createListInFolderTool = {
|
|
61
74
|
name: "create_list_in_folder",
|
|
62
|
-
description:
|
|
75
|
+
description: `Purpose: Create a new list within a ClickUp folder.
|
|
76
|
+
|
|
77
|
+
Valid Usage:
|
|
78
|
+
1. Provide folderId + list name (preferred)
|
|
79
|
+
2. Provide folderName + (spaceId OR spaceName) + list name
|
|
80
|
+
|
|
81
|
+
Requirements:
|
|
82
|
+
- name: REQUIRED
|
|
83
|
+
- EITHER folderId OR (folderName + space information): REQUIRED
|
|
84
|
+
- When using folderName, EITHER spaceId OR spaceName is REQUIRED
|
|
85
|
+
|
|
86
|
+
Notes:
|
|
87
|
+
- Folder names may not be unique across spaces, which is why space information
|
|
88
|
+
is required when using folderName
|
|
89
|
+
- Optional fields include content and status`,
|
|
63
90
|
inputSchema: {
|
|
64
91
|
type: "object",
|
|
65
92
|
properties: {
|
|
@@ -100,7 +127,18 @@ export const createListInFolderTool = {
|
|
|
100
127
|
*/
|
|
101
128
|
export const getListTool = {
|
|
102
129
|
name: "get_list",
|
|
103
|
-
description:
|
|
130
|
+
description: `Purpose: Retrieve details about a specific ClickUp list.
|
|
131
|
+
|
|
132
|
+
Valid Usage:
|
|
133
|
+
1. Provide listId (preferred)
|
|
134
|
+
2. Provide listName
|
|
135
|
+
|
|
136
|
+
Requirements:
|
|
137
|
+
- EITHER listId OR listName: REQUIRED
|
|
138
|
+
|
|
139
|
+
Notes:
|
|
140
|
+
- Using listId is more reliable as list names might not be unique
|
|
141
|
+
- Returns list details including name, content, and space information`,
|
|
104
142
|
inputSchema: {
|
|
105
143
|
type: "object",
|
|
106
144
|
properties: {
|
|
@@ -121,7 +159,19 @@ export const getListTool = {
|
|
|
121
159
|
*/
|
|
122
160
|
export const updateListTool = {
|
|
123
161
|
name: "update_list",
|
|
124
|
-
description:
|
|
162
|
+
description: `Purpose: Update an existing ClickUp list's properties.
|
|
163
|
+
|
|
164
|
+
Valid Usage:
|
|
165
|
+
1. Provide listId + update fields (preferred)
|
|
166
|
+
2. Provide listName + update fields
|
|
167
|
+
|
|
168
|
+
Requirements:
|
|
169
|
+
- EITHER listId OR listName: REQUIRED
|
|
170
|
+
- At least one field to update (name, content, or status): REQUIRED
|
|
171
|
+
|
|
172
|
+
Notes:
|
|
173
|
+
- Using listId is more reliable as list names might not be unique
|
|
174
|
+
- Only specified fields will be updated`,
|
|
125
175
|
inputSchema: {
|
|
126
176
|
type: "object",
|
|
127
177
|
properties: {
|
|
@@ -154,7 +204,19 @@ export const updateListTool = {
|
|
|
154
204
|
*/
|
|
155
205
|
export const deleteListTool = {
|
|
156
206
|
name: "delete_list",
|
|
157
|
-
description:
|
|
207
|
+
description: `Purpose: Permanently delete a ClickUp list and all its tasks.
|
|
208
|
+
|
|
209
|
+
Valid Usage:
|
|
210
|
+
1. Provide listId (preferred and safest)
|
|
211
|
+
2. Provide listName
|
|
212
|
+
|
|
213
|
+
Requirements:
|
|
214
|
+
- EITHER listId OR listName: REQUIRED
|
|
215
|
+
|
|
216
|
+
⚠️ CRITICAL WARNING:
|
|
217
|
+
- This action CANNOT be undone
|
|
218
|
+
- All tasks within the list will also be permanently deleted
|
|
219
|
+
- Using listName is risky as names may not be unique`,
|
|
158
220
|
inputSchema: {
|
|
159
221
|
type: "object",
|
|
160
222
|
properties: {
|
|
@@ -222,25 +284,20 @@ export async function handleCreateList(parameters) {
|
|
|
222
284
|
try {
|
|
223
285
|
// Create the list
|
|
224
286
|
const newList = await listService.createList(targetSpaceId, listData);
|
|
225
|
-
return {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
url: `https://app.clickup.com/${config.clickupTeamId}/v/l/${newList.id}`,
|
|
237
|
-
message: `List "${name}" created successfully`
|
|
238
|
-
}, null, 2)
|
|
239
|
-
}]
|
|
240
|
-
};
|
|
287
|
+
return sponsorService.createResponse({
|
|
288
|
+
id: newList.id,
|
|
289
|
+
name: newList.name,
|
|
290
|
+
content: newList.content,
|
|
291
|
+
space: {
|
|
292
|
+
id: newList.space.id,
|
|
293
|
+
name: newList.space.name
|
|
294
|
+
},
|
|
295
|
+
url: `https://app.clickup.com/${config.clickupTeamId}/v/l/${newList.id}`,
|
|
296
|
+
message: `List "${name}" created successfully`
|
|
297
|
+
}, true);
|
|
241
298
|
}
|
|
242
299
|
catch (error) {
|
|
243
|
-
|
|
300
|
+
return sponsorService.createErrorResponse(`Failed to create list: ${error.message}`);
|
|
244
301
|
}
|
|
245
302
|
}
|
|
246
303
|
/**
|
|
@@ -291,29 +348,24 @@ export async function handleCreateListInFolder(parameters) {
|
|
|
291
348
|
try {
|
|
292
349
|
// Create the list in the folder
|
|
293
350
|
const newList = await listService.createListInFolder(targetFolderId, listData);
|
|
294
|
-
return {
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
url: `https://app.clickup.com/${config.clickupTeamId}/v/l/${newList.id}`,
|
|
310
|
-
message: `List "${name}" created successfully in folder "${newList.folder.name}"`
|
|
311
|
-
}, null, 2)
|
|
312
|
-
}]
|
|
313
|
-
};
|
|
351
|
+
return sponsorService.createResponse({
|
|
352
|
+
id: newList.id,
|
|
353
|
+
name: newList.name,
|
|
354
|
+
content: newList.content,
|
|
355
|
+
folder: {
|
|
356
|
+
id: newList.folder.id,
|
|
357
|
+
name: newList.folder.name
|
|
358
|
+
},
|
|
359
|
+
space: {
|
|
360
|
+
id: newList.space.id,
|
|
361
|
+
name: newList.space.name
|
|
362
|
+
},
|
|
363
|
+
url: `https://app.clickup.com/${config.clickupTeamId}/v/l/${newList.id}`,
|
|
364
|
+
message: `List "${name}" created successfully in folder "${newList.folder.name}"`
|
|
365
|
+
}, true);
|
|
314
366
|
}
|
|
315
367
|
catch (error) {
|
|
316
|
-
|
|
368
|
+
return sponsorService.createErrorResponse(`Failed to create list in folder: ${error.message}`);
|
|
317
369
|
}
|
|
318
370
|
}
|
|
319
371
|
/**
|
|
@@ -337,24 +389,19 @@ export async function handleGetList(parameters) {
|
|
|
337
389
|
try {
|
|
338
390
|
// Get the list
|
|
339
391
|
const list = await listService.getList(targetListId);
|
|
340
|
-
return {
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
},
|
|
351
|
-
url: `https://app.clickup.com/${config.clickupTeamId}/v/l/${list.id}`
|
|
352
|
-
}, null, 2)
|
|
353
|
-
}]
|
|
354
|
-
};
|
|
392
|
+
return sponsorService.createResponse({
|
|
393
|
+
id: list.id,
|
|
394
|
+
name: list.name,
|
|
395
|
+
content: list.content,
|
|
396
|
+
space: {
|
|
397
|
+
id: list.space.id,
|
|
398
|
+
name: list.space.name
|
|
399
|
+
},
|
|
400
|
+
url: `https://app.clickup.com/${config.clickupTeamId}/v/l/${list.id}`
|
|
401
|
+
}, true);
|
|
355
402
|
}
|
|
356
403
|
catch (error) {
|
|
357
|
-
|
|
404
|
+
return sponsorService.createErrorResponse(`Failed to retrieve list: ${error.message}`);
|
|
358
405
|
}
|
|
359
406
|
}
|
|
360
407
|
/**
|
|
@@ -390,25 +437,20 @@ export async function handleUpdateList(parameters) {
|
|
|
390
437
|
try {
|
|
391
438
|
// Update the list
|
|
392
439
|
const updatedList = await listService.updateList(targetListId, updateData);
|
|
393
|
-
return {
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
url: `https://app.clickup.com/${config.clickupTeamId}/v/l/${updatedList.id}`,
|
|
405
|
-
message: `List "${updatedList.name}" updated successfully`
|
|
406
|
-
}, null, 2)
|
|
407
|
-
}]
|
|
408
|
-
};
|
|
440
|
+
return sponsorService.createResponse({
|
|
441
|
+
id: updatedList.id,
|
|
442
|
+
name: updatedList.name,
|
|
443
|
+
content: updatedList.content,
|
|
444
|
+
space: {
|
|
445
|
+
id: updatedList.space.id,
|
|
446
|
+
name: updatedList.space.name
|
|
447
|
+
},
|
|
448
|
+
url: `https://app.clickup.com/${config.clickupTeamId}/v/l/${updatedList.id}`,
|
|
449
|
+
message: `List "${updatedList.name}" updated successfully`
|
|
450
|
+
}, true);
|
|
409
451
|
}
|
|
410
452
|
catch (error) {
|
|
411
|
-
|
|
453
|
+
return sponsorService.createErrorResponse(`Failed to update list: ${error.message}`);
|
|
412
454
|
}
|
|
413
455
|
}
|
|
414
456
|
/**
|
|
@@ -435,17 +477,12 @@ export async function handleDeleteList(parameters) {
|
|
|
435
477
|
const listName = list.name;
|
|
436
478
|
// Delete the list
|
|
437
479
|
await listService.deleteList(targetListId);
|
|
438
|
-
return {
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
success: true,
|
|
443
|
-
message: `List "${listName || targetListId}" deleted successfully`
|
|
444
|
-
}, null, 2)
|
|
445
|
-
}]
|
|
446
|
-
};
|
|
480
|
+
return sponsorService.createResponse({
|
|
481
|
+
success: true,
|
|
482
|
+
message: `List "${listName || targetListId}" deleted successfully`
|
|
483
|
+
}, true);
|
|
447
484
|
}
|
|
448
485
|
catch (error) {
|
|
449
|
-
|
|
486
|
+
return sponsorService.createErrorResponse(`Failed to delete list: ${error.message}`);
|
|
450
487
|
}
|
|
451
488
|
}
|
|
@@ -66,7 +66,20 @@ const taskIdentifierSchema = {
|
|
|
66
66
|
*/
|
|
67
67
|
export const createBulkTasksTool = {
|
|
68
68
|
name: "create_bulk_tasks",
|
|
69
|
-
description:
|
|
69
|
+
description: `Purpose: Create multiple tasks in a list efficiently.
|
|
70
|
+
|
|
71
|
+
Valid Usage:
|
|
72
|
+
1. An array of tasks with required properties + listId (preferred)
|
|
73
|
+
2. An array of tasks with required properties + listName
|
|
74
|
+
|
|
75
|
+
Requirements:
|
|
76
|
+
- tasks: REQUIRED (array of tasks, each with at least a name)
|
|
77
|
+
- EITHER listId OR listName: REQUIRED
|
|
78
|
+
|
|
79
|
+
Notes:
|
|
80
|
+
- Configure batch size and concurrency via options for performance
|
|
81
|
+
- Each task should have a name with emoji prefix
|
|
82
|
+
- All tasks will be created in the same list`,
|
|
70
83
|
inputSchema: {
|
|
71
84
|
type: "object",
|
|
72
85
|
properties: {
|
|
@@ -122,7 +135,21 @@ export const createBulkTasksTool = {
|
|
|
122
135
|
*/
|
|
123
136
|
export const updateBulkTasksTool = {
|
|
124
137
|
name: "update_bulk_tasks",
|
|
125
|
-
description:
|
|
138
|
+
description: `Purpose: Update multiple tasks efficiently in a single operation.
|
|
139
|
+
|
|
140
|
+
Valid Usage:
|
|
141
|
+
1. For each task, provide taskId (preferred)
|
|
142
|
+
2. For each task, provide taskName + listName
|
|
143
|
+
|
|
144
|
+
Requirements:
|
|
145
|
+
- tasks: REQUIRED (array of tasks to update)
|
|
146
|
+
- For each task entry, EITHER taskId OR (taskName + listName) is REQUIRED
|
|
147
|
+
- At least one update field per task (name, description, status, priority, dueDate)
|
|
148
|
+
|
|
149
|
+
Notes:
|
|
150
|
+
- Only specified fields will be updated for each task
|
|
151
|
+
- Configure batch size and concurrency via options for performance
|
|
152
|
+
- Each task can have different fields to update`,
|
|
126
153
|
inputSchema: {
|
|
127
154
|
type: "object",
|
|
128
155
|
properties: {
|
|
@@ -171,7 +198,24 @@ export const updateBulkTasksTool = {
|
|
|
171
198
|
*/
|
|
172
199
|
export const moveBulkTasksTool = {
|
|
173
200
|
name: "move_bulk_tasks",
|
|
174
|
-
description:
|
|
201
|
+
description: `Purpose: Move multiple tasks to a different list efficiently.
|
|
202
|
+
|
|
203
|
+
Valid Usage:
|
|
204
|
+
1. For each task, provide taskId + target list (preferred)
|
|
205
|
+
2. For each task, provide taskName + listName + target list
|
|
206
|
+
|
|
207
|
+
Requirements:
|
|
208
|
+
- tasks: REQUIRED (array of tasks to move)
|
|
209
|
+
- EITHER targetListId OR targetListName: REQUIRED
|
|
210
|
+
- For each task entry, EITHER taskId OR (taskName + listName) is REQUIRED
|
|
211
|
+
|
|
212
|
+
Notes:
|
|
213
|
+
- Configure batch size and concurrency via options for performance
|
|
214
|
+
- All tasks will be moved to the same destination list
|
|
215
|
+
|
|
216
|
+
⚠️ Warning:
|
|
217
|
+
- Task statuses may reset if destination list has different status options
|
|
218
|
+
- Using taskName without listName will fail as tasks may have identical names across lists`,
|
|
175
219
|
inputSchema: {
|
|
176
220
|
type: "object",
|
|
177
221
|
properties: {
|
|
@@ -203,7 +247,23 @@ export const moveBulkTasksTool = {
|
|
|
203
247
|
*/
|
|
204
248
|
export const deleteBulkTasksTool = {
|
|
205
249
|
name: "delete_bulk_tasks",
|
|
206
|
-
description:
|
|
250
|
+
description: `Purpose: PERMANENTLY DELETE multiple tasks at once.
|
|
251
|
+
|
|
252
|
+
Valid Usage:
|
|
253
|
+
1. For each task, provide taskId (preferred and safest)
|
|
254
|
+
2. For each task, provide taskName + listName
|
|
255
|
+
|
|
256
|
+
Requirements:
|
|
257
|
+
- tasks: REQUIRED (array of tasks to delete)
|
|
258
|
+
- For each task entry, EITHER taskId OR (taskName + listName) is REQUIRED
|
|
259
|
+
|
|
260
|
+
Notes:
|
|
261
|
+
- Configure batch size and concurrency via options for performance
|
|
262
|
+
|
|
263
|
+
⚠️ CRITICAL WARNING:
|
|
264
|
+
- This action CANNOT be undone for any of the tasks
|
|
265
|
+
- Using taskName without listName is dangerous as names may not be unique
|
|
266
|
+
- Always provide listName when using taskName for safer targeting`,
|
|
207
267
|
inputSchema: {
|
|
208
268
|
type: "object",
|
|
209
269
|
properties: {
|