@alanse/clickup-multi-mcp-server 1.0.0
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/Dockerfile +38 -0
- package/LICENSE +21 -0
- package/README.md +470 -0
- package/build/config.js +237 -0
- package/build/index.js +87 -0
- package/build/logger.js +163 -0
- package/build/middleware/security.js +231 -0
- package/build/server.js +288 -0
- package/build/services/clickup/base.js +432 -0
- package/build/services/clickup/bulk.js +180 -0
- package/build/services/clickup/document.js +159 -0
- package/build/services/clickup/folder.js +136 -0
- package/build/services/clickup/index.js +76 -0
- package/build/services/clickup/list.js +191 -0
- package/build/services/clickup/tag.js +239 -0
- package/build/services/clickup/task/index.js +32 -0
- package/build/services/clickup/task/task-attachments.js +105 -0
- package/build/services/clickup/task/task-comments.js +114 -0
- package/build/services/clickup/task/task-core.js +604 -0
- package/build/services/clickup/task/task-custom-fields.js +107 -0
- package/build/services/clickup/task/task-search.js +986 -0
- package/build/services/clickup/task/task-service.js +104 -0
- package/build/services/clickup/task/task-tags.js +113 -0
- package/build/services/clickup/time.js +244 -0
- package/build/services/clickup/types.js +33 -0
- package/build/services/clickup/workspace.js +397 -0
- package/build/services/shared.js +61 -0
- package/build/sse_server.js +277 -0
- package/build/tools/documents.js +489 -0
- package/build/tools/folder.js +331 -0
- package/build/tools/index.js +16 -0
- package/build/tools/list.js +428 -0
- package/build/tools/member.js +106 -0
- package/build/tools/tag.js +833 -0
- package/build/tools/task/attachments.js +357 -0
- package/build/tools/task/attachments.types.js +9 -0
- package/build/tools/task/bulk-operations.js +338 -0
- package/build/tools/task/handlers.js +919 -0
- package/build/tools/task/index.js +30 -0
- package/build/tools/task/main.js +233 -0
- package/build/tools/task/single-operations.js +469 -0
- package/build/tools/task/time-tracking.js +575 -0
- package/build/tools/task/utilities.js +310 -0
- package/build/tools/task/workspace-operations.js +258 -0
- package/build/tools/tool-enhancer.js +37 -0
- package/build/tools/utils.js +12 -0
- package/build/tools/workspace-helper.js +44 -0
- package/build/tools/workspace.js +73 -0
- package/build/utils/color-processor.js +183 -0
- package/build/utils/concurrency-utils.js +248 -0
- package/build/utils/date-utils.js +542 -0
- package/build/utils/resolver-utils.js +135 -0
- package/build/utils/sponsor-service.js +93 -0
- package/build/utils/token-utils.js +49 -0
- package/package.json +77 -0
- package/smithery.yaml +23 -0
|
@@ -0,0 +1,469 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SPDX-FileCopyrightText: © 2025 Talib Kareem <taazkareem@icloud.com>
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* ClickUp MCP Single Task Operations
|
|
6
|
+
*
|
|
7
|
+
* This module defines tools for single task operations including creating,
|
|
8
|
+
* updating, moving, duplicating, and deleting tasks, as well as retrieving
|
|
9
|
+
* task details and comments.
|
|
10
|
+
*/
|
|
11
|
+
import { clickUpServices } from '../../services/shared.js';
|
|
12
|
+
// Use shared services instance
|
|
13
|
+
const { task: taskService } = clickUpServices;
|
|
14
|
+
//=============================================================================
|
|
15
|
+
// COMMON VALIDATION UTILITIES
|
|
16
|
+
//=============================================================================
|
|
17
|
+
// Common validation functions
|
|
18
|
+
const validateTaskName = (name) => {
|
|
19
|
+
if (!name || typeof name !== 'string') {
|
|
20
|
+
throw new Error("A task name is required");
|
|
21
|
+
}
|
|
22
|
+
const trimmedName = name.trim();
|
|
23
|
+
if (trimmedName.length === 0) {
|
|
24
|
+
throw new Error("Task name cannot be empty or only whitespace");
|
|
25
|
+
}
|
|
26
|
+
return trimmedName;
|
|
27
|
+
};
|
|
28
|
+
const validatePriority = (priority) => {
|
|
29
|
+
if (priority !== undefined && (typeof priority !== 'number' || priority < 1 || priority > 4)) {
|
|
30
|
+
throw new Error("Priority must be a number between 1 and 4");
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const validateDueDate = (dueDate) => {
|
|
34
|
+
if (dueDate && typeof dueDate !== 'string') {
|
|
35
|
+
throw new Error("Due date must be a string in timestamp format or natural language");
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
// Common error handler
|
|
39
|
+
const handleOperationError = (operation, error) => {
|
|
40
|
+
console.error(`Error ${operation}:`, error);
|
|
41
|
+
throw error;
|
|
42
|
+
};
|
|
43
|
+
//=============================================================================
|
|
44
|
+
// SINGLE TASK OPERATION TOOLS
|
|
45
|
+
//=============================================================================
|
|
46
|
+
/**
|
|
47
|
+
* Tool definition for creating a single task
|
|
48
|
+
*/
|
|
49
|
+
export const createTaskTool = {
|
|
50
|
+
name: "create_task",
|
|
51
|
+
description: `Creates a single task in a ClickUp list. Use listId (preferred) or listName. Required: name + list info. For multiple tasks use create_bulk_tasks. Can create subtasks via parent param. Supports custom fields as array of {id, value}. Supports assignees as array of user IDs, emails, or usernames.`,
|
|
52
|
+
inputSchema: {
|
|
53
|
+
type: "object",
|
|
54
|
+
properties: {
|
|
55
|
+
name: {
|
|
56
|
+
type: "string",
|
|
57
|
+
description: "REQUIRED: Name of the task. Put a relevant emoji followed by a blank space before the name."
|
|
58
|
+
},
|
|
59
|
+
listId: {
|
|
60
|
+
type: "string",
|
|
61
|
+
description: "REQUIRED (unless listName provided): ID of the list to create the task in. If you have this ID from a previous response, use it directly rather than looking up by name."
|
|
62
|
+
},
|
|
63
|
+
listName: {
|
|
64
|
+
type: "string",
|
|
65
|
+
description: "REQUIRED (unless listId provided): Name of the list to create the task in - will automatically find the list by name."
|
|
66
|
+
},
|
|
67
|
+
description: {
|
|
68
|
+
type: "string",
|
|
69
|
+
description: "Optional plain text description for the task"
|
|
70
|
+
},
|
|
71
|
+
markdown_description: {
|
|
72
|
+
type: "string",
|
|
73
|
+
description: "Optional markdown formatted description for the task. If provided, this takes precedence over description"
|
|
74
|
+
},
|
|
75
|
+
status: {
|
|
76
|
+
type: "string",
|
|
77
|
+
description: "Optional: Override the default ClickUp status. In most cases, you should omit this to use ClickUp defaults"
|
|
78
|
+
},
|
|
79
|
+
priority: {
|
|
80
|
+
type: "number",
|
|
81
|
+
description: "Optional priority of the task (1-4), where 1 is urgent/highest priority and 4 is lowest priority. Only set this when explicitly requested."
|
|
82
|
+
},
|
|
83
|
+
dueDate: {
|
|
84
|
+
type: "string",
|
|
85
|
+
description: "Optional due date. Supports Unix timestamps (ms) or natural language like '1 hour from now', 'tomorrow', 'next week', etc."
|
|
86
|
+
},
|
|
87
|
+
startDate: {
|
|
88
|
+
type: "string",
|
|
89
|
+
description: "Optional start date. Supports Unix timestamps (ms) or natural language like 'now', 'start of today', etc."
|
|
90
|
+
},
|
|
91
|
+
parent: {
|
|
92
|
+
type: "string",
|
|
93
|
+
description: "Optional ID of the parent task. When specified, this task will be created as a subtask of the specified parent task."
|
|
94
|
+
},
|
|
95
|
+
tags: {
|
|
96
|
+
type: "array",
|
|
97
|
+
items: {
|
|
98
|
+
type: "string"
|
|
99
|
+
},
|
|
100
|
+
description: "Optional array of tag names to assign to the task. The tags must already exist in the space."
|
|
101
|
+
},
|
|
102
|
+
custom_fields: {
|
|
103
|
+
type: "array",
|
|
104
|
+
items: {
|
|
105
|
+
type: "object",
|
|
106
|
+
properties: {
|
|
107
|
+
id: {
|
|
108
|
+
type: "string",
|
|
109
|
+
description: "ID of the custom field"
|
|
110
|
+
},
|
|
111
|
+
value: {
|
|
112
|
+
description: "Value for the custom field. Type depends on the field type."
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
required: ["id", "value"]
|
|
116
|
+
},
|
|
117
|
+
description: "Optional array of custom field values to set on the task. Each object must have an 'id' and 'value' property."
|
|
118
|
+
},
|
|
119
|
+
check_required_custom_fields: {
|
|
120
|
+
type: "boolean",
|
|
121
|
+
description: "Optional flag to check if all required custom fields are set before saving the task."
|
|
122
|
+
},
|
|
123
|
+
assignees: {
|
|
124
|
+
type: "array",
|
|
125
|
+
items: {
|
|
126
|
+
oneOf: [
|
|
127
|
+
{ type: "number" },
|
|
128
|
+
{ type: "string" }
|
|
129
|
+
]
|
|
130
|
+
},
|
|
131
|
+
description: "Optional array of assignee user IDs (numbers), emails, or usernames to assign to the task."
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Tool definition for updating a task
|
|
138
|
+
*/
|
|
139
|
+
export const updateTaskTool = {
|
|
140
|
+
name: "update_task",
|
|
141
|
+
description: `Updates task properties. Use taskId (preferred) or taskName + optional listName. At least one update field required. Custom fields supported as array of {id, value}. Supports assignees as array of user IDs, emails, or usernames. WARNING: Using taskName without listName may match multiple tasks.`,
|
|
142
|
+
inputSchema: {
|
|
143
|
+
type: "object",
|
|
144
|
+
properties: {
|
|
145
|
+
taskId: {
|
|
146
|
+
type: "string",
|
|
147
|
+
description: "ID of task to update (preferred). Automatically detects and handles both regular task IDs (9 characters) and custom IDs (like 'DEV-1234', 'PROJ-456')."
|
|
148
|
+
},
|
|
149
|
+
taskName: {
|
|
150
|
+
type: "string",
|
|
151
|
+
description: "Name of task to update. The tool will search for tasks with this name across all lists unless listName is specified."
|
|
152
|
+
},
|
|
153
|
+
listName: {
|
|
154
|
+
type: "string",
|
|
155
|
+
description: "Optional: Name of list containing the task. Providing this narrows the search to a specific list, improving performance and reducing ambiguity."
|
|
156
|
+
},
|
|
157
|
+
name: {
|
|
158
|
+
type: "string",
|
|
159
|
+
description: "New name for the task. Include emoji prefix if appropriate."
|
|
160
|
+
},
|
|
161
|
+
description: {
|
|
162
|
+
type: "string",
|
|
163
|
+
description: "New plain text description. Will be ignored if markdown_description is provided."
|
|
164
|
+
},
|
|
165
|
+
markdown_description: {
|
|
166
|
+
type: "string",
|
|
167
|
+
description: "New markdown description. Takes precedence over plain text description."
|
|
168
|
+
},
|
|
169
|
+
status: {
|
|
170
|
+
type: "string",
|
|
171
|
+
description: "New status. Must be valid for the task's current list."
|
|
172
|
+
},
|
|
173
|
+
priority: {
|
|
174
|
+
type: "string",
|
|
175
|
+
nullable: true,
|
|
176
|
+
enum: ["1", "2", "3", "4", null],
|
|
177
|
+
description: "New priority: 1 (urgent) to 4 (low). Set null to clear priority."
|
|
178
|
+
},
|
|
179
|
+
dueDate: {
|
|
180
|
+
type: "string",
|
|
181
|
+
description: "New due date. Supports both Unix timestamps (in milliseconds) and natural language expressions like '1 hour from now', 'tomorrow', 'next week', or '3 days from now'."
|
|
182
|
+
},
|
|
183
|
+
startDate: {
|
|
184
|
+
type: "string",
|
|
185
|
+
description: "New start date. Supports both Unix timestamps (in milliseconds) and natural language expressions."
|
|
186
|
+
},
|
|
187
|
+
time_estimate: {
|
|
188
|
+
type: "string",
|
|
189
|
+
description: "Time estimate for the task. For best compatibility with the ClickUp API, use a numeric value in minutes (e.g., '150' for 2h 30m)"
|
|
190
|
+
},
|
|
191
|
+
custom_fields: {
|
|
192
|
+
type: "array",
|
|
193
|
+
items: {
|
|
194
|
+
type: "object",
|
|
195
|
+
properties: {
|
|
196
|
+
id: {
|
|
197
|
+
type: "string",
|
|
198
|
+
description: "ID of the custom field"
|
|
199
|
+
},
|
|
200
|
+
value: {
|
|
201
|
+
description: "Value for the custom field. Type depends on the field type."
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
required: ["id", "value"]
|
|
205
|
+
},
|
|
206
|
+
description: "Optional array of custom field values to set on the task. Each object must have an 'id' and 'value' property."
|
|
207
|
+
},
|
|
208
|
+
assignees: {
|
|
209
|
+
type: "array",
|
|
210
|
+
items: {
|
|
211
|
+
oneOf: [
|
|
212
|
+
{ type: "number" },
|
|
213
|
+
{ type: "string" }
|
|
214
|
+
]
|
|
215
|
+
},
|
|
216
|
+
description: "Optional array of assignee user IDs (numbers), emails, or usernames to assign to the task."
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
/**
|
|
222
|
+
* Tool definition for moving a task
|
|
223
|
+
*/
|
|
224
|
+
export const moveTaskTool = {
|
|
225
|
+
name: "move_task",
|
|
226
|
+
description: `Moves task to different list. Use taskId + (listId/listName) preferred, or taskName + sourceListName + (listId/listName). WARNING: Task statuses may reset if destination list has different status options.`,
|
|
227
|
+
inputSchema: {
|
|
228
|
+
type: "object",
|
|
229
|
+
properties: {
|
|
230
|
+
taskId: {
|
|
231
|
+
type: "string",
|
|
232
|
+
description: "ID of the task to move (preferred). Automatically detects and handles both regular task IDs (9 characters) and custom IDs (like 'DEV-1234', 'PROJ-456')."
|
|
233
|
+
},
|
|
234
|
+
taskName: {
|
|
235
|
+
type: "string",
|
|
236
|
+
description: "Name of the task to move. When using this, you MUST also provide sourceListName."
|
|
237
|
+
},
|
|
238
|
+
sourceListName: {
|
|
239
|
+
type: "string",
|
|
240
|
+
description: "REQUIRED with taskName: Current list containing the task."
|
|
241
|
+
},
|
|
242
|
+
listId: {
|
|
243
|
+
type: "string",
|
|
244
|
+
description: "ID of destination list (preferred). Use this instead of listName if you have it."
|
|
245
|
+
},
|
|
246
|
+
listName: {
|
|
247
|
+
type: "string",
|
|
248
|
+
description: "Name of destination list. Only use if you don't have listId."
|
|
249
|
+
}
|
|
250
|
+
},
|
|
251
|
+
required: []
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
/**
|
|
255
|
+
* Tool definition for duplicating a task
|
|
256
|
+
*/
|
|
257
|
+
export const duplicateTaskTool = {
|
|
258
|
+
name: "duplicate_task",
|
|
259
|
+
description: `Creates copy of task in same/different list. Use taskId + optional (listId/listName), or taskName + sourceListName + optional (listId/listName). Preserves original properties. Default: same list as original.`,
|
|
260
|
+
inputSchema: {
|
|
261
|
+
type: "object",
|
|
262
|
+
properties: {
|
|
263
|
+
taskId: {
|
|
264
|
+
type: "string",
|
|
265
|
+
description: "ID of task to duplicate (preferred). Automatically detects and handles both regular task IDs (9 characters) and custom IDs (like 'DEV-1234', 'PROJ-456')."
|
|
266
|
+
},
|
|
267
|
+
taskName: {
|
|
268
|
+
type: "string",
|
|
269
|
+
description: "Name of task to duplicate. When using this, you MUST provide sourceListName."
|
|
270
|
+
},
|
|
271
|
+
sourceListName: {
|
|
272
|
+
type: "string",
|
|
273
|
+
description: "REQUIRED with taskName: List containing the original task."
|
|
274
|
+
},
|
|
275
|
+
listId: {
|
|
276
|
+
type: "string",
|
|
277
|
+
description: "ID of list for the duplicate (optional). Defaults to same list as original."
|
|
278
|
+
},
|
|
279
|
+
listName: {
|
|
280
|
+
type: "string",
|
|
281
|
+
description: "Name of list for the duplicate. Only use if you don't have listId."
|
|
282
|
+
}
|
|
283
|
+
},
|
|
284
|
+
required: []
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
/**
|
|
288
|
+
* Tool definition for retrieving task details
|
|
289
|
+
*/
|
|
290
|
+
export const getTaskTool = {
|
|
291
|
+
name: "get_task",
|
|
292
|
+
description: `Gets task details by taskId (automatically handles both regular and custom IDs) or taskName. For taskName search, provide listName for faster lookup. Set subtasks=true to include all subtask details.`,
|
|
293
|
+
inputSchema: {
|
|
294
|
+
type: "object",
|
|
295
|
+
properties: {
|
|
296
|
+
taskId: {
|
|
297
|
+
type: "string",
|
|
298
|
+
description: "ID of task to retrieve (preferred). Automatically detects and handles both regular task IDs (9 characters) and custom IDs (like 'DEV-1234', 'PROJ-456'). Simply provide any task ID format here."
|
|
299
|
+
},
|
|
300
|
+
taskName: {
|
|
301
|
+
type: "string",
|
|
302
|
+
description: "Name of task to retrieve. Can be used alone for a global search, or with listName for faster lookup."
|
|
303
|
+
},
|
|
304
|
+
listName: {
|
|
305
|
+
type: "string",
|
|
306
|
+
description: "Name of list containing the task. Optional but recommended when using taskName."
|
|
307
|
+
},
|
|
308
|
+
customTaskId: {
|
|
309
|
+
type: "string",
|
|
310
|
+
description: "Custom task ID (e.g., 'DEV-1234'). This parameter is now optional since taskId automatically handles custom IDs. Use only for explicit custom ID lookup or backward compatibility."
|
|
311
|
+
},
|
|
312
|
+
subtasks: {
|
|
313
|
+
type: "boolean",
|
|
314
|
+
description: "Whether to include subtasks in the response. Set to true to retrieve full details of all subtasks."
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
};
|
|
319
|
+
/**
|
|
320
|
+
* Tool definition for retrieving tasks from a list
|
|
321
|
+
*/
|
|
322
|
+
export const getTasksTool = {
|
|
323
|
+
name: "get_tasks",
|
|
324
|
+
description: `Purpose: Retrieve tasks from a list with optional filtering.
|
|
325
|
+
|
|
326
|
+
Valid Usage:
|
|
327
|
+
1. Use listId (preferred)
|
|
328
|
+
2. Use listName
|
|
329
|
+
|
|
330
|
+
Requirements:
|
|
331
|
+
- EITHER listId OR listName is REQUIRED
|
|
332
|
+
|
|
333
|
+
Notes:
|
|
334
|
+
- Use filters (archived, statuses, etc.) to narrow down results
|
|
335
|
+
- Pagination available through page parameter
|
|
336
|
+
- Sorting available through order_by and reverse parameters`,
|
|
337
|
+
inputSchema: {
|
|
338
|
+
type: "object",
|
|
339
|
+
properties: {
|
|
340
|
+
listId: {
|
|
341
|
+
type: "string",
|
|
342
|
+
description: "ID of list to get tasks from (preferred). Use this instead of listName if you have it."
|
|
343
|
+
},
|
|
344
|
+
listName: {
|
|
345
|
+
type: "string",
|
|
346
|
+
description: "Name of list to get tasks from. Only use if you don't have listId."
|
|
347
|
+
},
|
|
348
|
+
subtasks: {
|
|
349
|
+
type: "boolean",
|
|
350
|
+
description: "Include subtasks"
|
|
351
|
+
},
|
|
352
|
+
statuses: {
|
|
353
|
+
type: "array",
|
|
354
|
+
items: { type: "string" },
|
|
355
|
+
description: "Filter by status names (e.g. ['To Do', 'In Progress'])"
|
|
356
|
+
},
|
|
357
|
+
archived: {
|
|
358
|
+
type: "boolean",
|
|
359
|
+
description: "Include archived tasks"
|
|
360
|
+
},
|
|
361
|
+
page: {
|
|
362
|
+
type: "number",
|
|
363
|
+
description: "Page number for pagination (starts at 0)"
|
|
364
|
+
},
|
|
365
|
+
order_by: {
|
|
366
|
+
type: "string",
|
|
367
|
+
description: "Sort field: due_date, created, updated"
|
|
368
|
+
},
|
|
369
|
+
reverse: {
|
|
370
|
+
type: "boolean",
|
|
371
|
+
description: "Reverse sort order (descending)"
|
|
372
|
+
}
|
|
373
|
+
},
|
|
374
|
+
required: []
|
|
375
|
+
}
|
|
376
|
+
};
|
|
377
|
+
/**
|
|
378
|
+
* Tool definition for retrieving task comments
|
|
379
|
+
*/
|
|
380
|
+
export const getTaskCommentsTool = {
|
|
381
|
+
name: "get_task_comments",
|
|
382
|
+
description: `Gets task comments. Use taskId (preferred) or taskName + optional listName. Use start/startId params for pagination. Task names may not be unique across lists.`,
|
|
383
|
+
inputSchema: {
|
|
384
|
+
type: "object",
|
|
385
|
+
properties: {
|
|
386
|
+
taskId: {
|
|
387
|
+
type: "string",
|
|
388
|
+
description: "ID of task to retrieve comments for (preferred). Automatically detects and handles both regular task IDs (9 characters) and custom IDs (like 'DEV-1234', 'PROJ-456')."
|
|
389
|
+
},
|
|
390
|
+
taskName: {
|
|
391
|
+
type: "string",
|
|
392
|
+
description: "Name of task to retrieve comments for. Warning: Task names may not be unique."
|
|
393
|
+
},
|
|
394
|
+
listName: {
|
|
395
|
+
type: "string",
|
|
396
|
+
description: "Name of list containing the task. Helps find the right task when using taskName."
|
|
397
|
+
},
|
|
398
|
+
start: {
|
|
399
|
+
type: "number",
|
|
400
|
+
description: "Timestamp (in milliseconds) to start retrieving comments from. Used for pagination."
|
|
401
|
+
},
|
|
402
|
+
startId: {
|
|
403
|
+
type: "string",
|
|
404
|
+
description: "Comment ID to start from. Used together with start for pagination."
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
};
|
|
409
|
+
/**
|
|
410
|
+
* Tool definition for creating a comment on a task
|
|
411
|
+
*/
|
|
412
|
+
export const createTaskCommentTool = {
|
|
413
|
+
name: "create_task_comment",
|
|
414
|
+
description: `Creates task comment. Use taskId (preferred) or taskName + listName. Required: commentText. Optional: notifyAll to notify assignees, assignee to assign comment.`,
|
|
415
|
+
inputSchema: {
|
|
416
|
+
type: "object",
|
|
417
|
+
properties: {
|
|
418
|
+
taskId: {
|
|
419
|
+
type: "string",
|
|
420
|
+
description: "ID of task to comment on (preferred). Automatically detects and handles both regular task IDs (9 characters) and custom IDs (like 'DEV-1234', 'PROJ-456')."
|
|
421
|
+
},
|
|
422
|
+
taskName: {
|
|
423
|
+
type: "string",
|
|
424
|
+
description: "Name of task to comment on. When using this parameter, you MUST also provide listName."
|
|
425
|
+
},
|
|
426
|
+
listName: {
|
|
427
|
+
type: "string",
|
|
428
|
+
description: "Name of list containing the task. REQUIRED when using taskName."
|
|
429
|
+
},
|
|
430
|
+
commentText: {
|
|
431
|
+
type: "string",
|
|
432
|
+
description: "REQUIRED: Text content of the comment to create."
|
|
433
|
+
},
|
|
434
|
+
notifyAll: {
|
|
435
|
+
type: "boolean",
|
|
436
|
+
description: "Whether to notify all assignees. Default is false."
|
|
437
|
+
},
|
|
438
|
+
assignee: {
|
|
439
|
+
type: "number",
|
|
440
|
+
description: "Optional user ID to assign the comment to."
|
|
441
|
+
}
|
|
442
|
+
},
|
|
443
|
+
required: ["commentText"]
|
|
444
|
+
}
|
|
445
|
+
};
|
|
446
|
+
/**
|
|
447
|
+
* Tool definition for deleting a task
|
|
448
|
+
*/
|
|
449
|
+
export const deleteTaskTool = {
|
|
450
|
+
name: "delete_task",
|
|
451
|
+
description: `PERMANENTLY deletes task. Use taskId (preferred/safest) or taskName + optional listName. WARNING: Cannot be undone. Using taskName without listName may match multiple tasks.`,
|
|
452
|
+
inputSchema: {
|
|
453
|
+
type: "object",
|
|
454
|
+
properties: {
|
|
455
|
+
taskId: {
|
|
456
|
+
type: "string",
|
|
457
|
+
description: "ID of task to delete (preferred). Automatically detects and handles both regular task IDs (9 characters) and custom IDs (like 'DEV-1234', 'PROJ-456')."
|
|
458
|
+
},
|
|
459
|
+
taskName: {
|
|
460
|
+
type: "string",
|
|
461
|
+
description: "Name of task to delete. The tool will search for tasks with this name across all lists unless listName is specified."
|
|
462
|
+
},
|
|
463
|
+
listName: {
|
|
464
|
+
type: "string",
|
|
465
|
+
description: "Optional: Name of list containing the task. Providing this narrows the search to a specific list, improving performance and reducing ambiguity."
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
};
|