@taazkareem/clickup-mcp-server 0.6.6 → 0.6.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/README.md CHANGED
@@ -1,12 +1,12 @@
1
1
  <img src="assets/images/clickup_mcp_server_social_image.png" alt="ClickUp MCP Server" width="100%">
2
2
 
3
- ![Total Supporters](https://img.shields.io/badge/🏆%20Total%20Supporters-2-gold)
3
+ ![Total Supporters](https://img.shields.io/badge/🏆%20Total%20Supporters-3-gold)
4
4
  [![GitHub Stars](https://img.shields.io/github/stars/TaazKareem/clickup-mcp-server?style=flat&logo=github)](https://github.com/TaazKareem/clickup-mcp-server/stargazers)
5
5
  [![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-brightgreen.svg)](https://github.com/TaazKareem/clickup-mcp-server/graphs/commit-activity)
6
6
 
7
7
  A Model Context Protocol (MCP) server for integrating ClickUp tasks with AI applications. This server allows AI agents to interact with ClickUp tasks, spaces, lists, and folders through a standardized protocol.
8
8
 
9
- > 🚧 **Status Update:** Rolling out v0.6.5 will add Global Task Lookup with smart disambiguation, Start Date Support for tasks with natural language expressions, Complete Tag Support including natural language tag color commands, Subtasks Support, Custom ID Support, and Logging Fixes
9
+ > 🚧 **Status Update:** Rolling out v0.6.6 will add Global Task Lookup with smart disambiguation, Start Date Support for tasks with natural language expressions, Complete Tag Support including natural language tag color commands, Subtasks Support, Custom ID Support, and Logging Fixes
10
10
 
11
11
  ## Setup
12
12
 
@@ -20,7 +20,7 @@ A Model Context Protocol (MCP) server for integrating ClickUp tasks with AI appl
20
20
 
21
21
  [![smithery badge](https://smithery.ai/badge/@taazkareem/clickup-mcp-server)](https://smithery.ai/server/@TaazKareem/clickup-mcp-server)
22
22
 
23
- The server is hosted on [Smithery](https://smithery.ai/server/@TaazKareem/clickup-mcp-server). There, you can preview the available tools or copy the commands to run on your specific client app.
23
+ The server is hosted on [Smithery](https://smithery.ai/server/@taazkareem/clickup-mcp-server). There, you can preview the available tools or copy the commands to run on your specific client app.
24
24
 
25
25
  ## NPX Installation
26
26
 
@@ -16,19 +16,7 @@ const { folder: folderService, workspace: workspaceService } = clickUpServices;
16
16
  */
17
17
  export const createFolderTool = {
18
18
  name: "create_folder",
19
- description: `Purpose: Create a new folder in a ClickUp space for organizing related lists.
20
-
21
- Valid Usage:
22
- 1. Provide spaceId (preferred) + folder name
23
- 2. Provide spaceName + folder name
24
-
25
- Requirements:
26
- - name: REQUIRED
27
- - EITHER spaceId OR spaceName: REQUIRED
28
-
29
- Notes:
30
- - After creating a folder, you can add lists to it using create_list_in_folder
31
- - Use override_statuses to set folder-specific statuses`,
19
+ description: `Creates folder in ClickUp space. Use spaceId (preferred) or spaceName + folder name. Optional: override_statuses for folder-specific statuses. Use create_list_in_folder to add lists after creation.`,
32
20
  inputSchema: {
33
21
  type: "object",
34
22
  properties: {
@@ -53,22 +41,11 @@ Notes:
53
41
  }
54
42
  };
55
43
  /**
56
- * Tool definition for getting folder details
44
+ * Tool definition for retrieving folder details
57
45
  */
58
46
  export const getFolderTool = {
59
47
  name: "get_folder",
60
- description: `Purpose: Retrieve details about a specific folder including name, status, and metadata.
61
-
62
- Valid Usage:
63
- 1. Use folderId alone (preferred)
64
- 2. Use folderName + (spaceId or spaceName)
65
-
66
- Requirements:
67
- - EITHER folderId OR (folderName + space information) is REQUIRED
68
- - When using folderName, you MUST provide EITHER spaceId OR spaceName
69
-
70
- Notes:
71
- - Helps you understand folder structure before creating or updating lists`,
48
+ description: `Gets folder details. Use folderId (preferred) or folderName + (spaceId/spaceName). Helps understand folder structure before creating/updating lists.`,
72
49
  inputSchema: {
73
50
  type: "object",
74
51
  properties: {
@@ -97,19 +74,7 @@ Notes:
97
74
  */
98
75
  export const updateFolderTool = {
99
76
  name: "update_folder",
100
- description: `Purpose: Modify an existing folder's properties.
101
-
102
- Valid Usage:
103
- 1. Use folderId alone (preferred)
104
- 2. Use folderName + (spaceId or spaceName)
105
-
106
- Requirements:
107
- - At least one update field (name or override_statuses) must be provided
108
- - EITHER folderId OR (folderName + space information) is REQUIRED
109
- - When using folderName, you MUST provide EITHER spaceId OR spaceName
110
-
111
- Notes:
112
- - Changes apply immediately to all lists within the folder`,
77
+ description: `Updates folder properties. Use folderId (preferred) or folderName + (spaceId/spaceName). At least one update field (name/override_statuses) required. Changes apply to all lists in folder.`,
113
78
  inputSchema: {
114
79
  type: "object",
115
80
  properties: {
@@ -146,20 +111,7 @@ Notes:
146
111
  */
147
112
  export const deleteFolderTool = {
148
113
  name: "delete_folder",
149
- description: `Purpose: PERMANENTLY DELETE a folder and all its contents.
150
-
151
- Valid Usage:
152
- 1. Use folderId alone (preferred and safest)
153
- 2. Use folderName + (spaceId or spaceName)
154
-
155
- Requirements:
156
- - EITHER folderId OR (folderName + space information) is REQUIRED
157
- - When using folderName, you MUST provide EITHER spaceId OR spaceName
158
-
159
- Warning:
160
- - This action CANNOT be undone
161
- - All lists and tasks within the folder will also be permanently deleted
162
- - Using folderName is risky as names may not be unique across different spaces`,
114
+ description: `PERMANENTLY deletes folder and all contents. Use folderId (preferred/safest) or folderName + (spaceId/spaceName). WARNING: Cannot be undone, all lists/tasks deleted, folderName risky if not unique.`,
163
115
  inputSchema: {
164
116
  type: "object",
165
117
  properties: {
@@ -16,19 +16,7 @@ import { sponsorService } from '../utils/sponsor-service.js';
16
16
  */
17
17
  export const createListTool = {
18
18
  name: "create_list",
19
- description: `Purpose: Create a new list directly in a ClickUp space (not in a folder).
20
-
21
- Valid Usage:
22
- 1. Provide spaceId + list name (preferred)
23
- 2. Provide spaceName + list name
24
-
25
- Requirements:
26
- - name: REQUIRED
27
- - EITHER spaceId OR spaceName: REQUIRED
28
-
29
- Notes:
30
- - For creating lists inside folders, use create_list_in_folder instead
31
- - Optional fields include content, dueDate, priority, assignee, and status`,
19
+ description: `Creates a list in a ClickUp space. Use spaceId (preferred) or spaceName + list name. Name is required. For lists in folders, use create_list_in_folder. Optional: content, dueDate, priority, assignee, status.`,
32
20
  inputSchema: {
33
21
  type: "object",
34
22
  properties: {
@@ -73,21 +61,7 @@ Notes:
73
61
  */
74
62
  export const createListInFolderTool = {
75
63
  name: "create_list_in_folder",
76
- description: `Purpose: Create a new list within a ClickUp folder.
77
-
78
- Valid Usage:
79
- 1. Provide folderId + list name (preferred)
80
- 2. Provide folderName + (spaceId OR spaceName) + list name
81
-
82
- Requirements:
83
- - name: REQUIRED
84
- - EITHER folderId OR (folderName + space information): REQUIRED
85
- - When using folderName, EITHER spaceId OR spaceName is REQUIRED
86
-
87
- Notes:
88
- - Folder names may not be unique across spaces, which is why space information
89
- is required when using folderName
90
- - Optional fields include content and status`,
64
+ description: `Creates a list in a ClickUp folder. Use folderId (preferred) or folderName + space info + list name. Name is required. When using folderName, spaceId/spaceName required as folder names may not be unique. Optional: content, status.`,
91
65
  inputSchema: {
92
66
  type: "object",
93
67
  properties: {
@@ -128,18 +102,7 @@ Notes:
128
102
  */
129
103
  export const getListTool = {
130
104
  name: "get_list",
131
- description: `Purpose: Retrieve details about a specific ClickUp list.
132
-
133
- Valid Usage:
134
- 1. Provide listId (preferred)
135
- 2. Provide listName
136
-
137
- Requirements:
138
- - EITHER listId OR listName: REQUIRED
139
-
140
- Notes:
141
- - Using listId is more reliable as list names might not be unique
142
- - Returns list details including name, content, and space information`,
105
+ description: `Gets details of a ClickUp list. Use listId (preferred) or listName. Returns list details including name, content, and space info. ListId more reliable as names may not be unique.`,
143
106
  inputSchema: {
144
107
  type: "object",
145
108
  properties: {
@@ -160,19 +123,7 @@ Notes:
160
123
  */
161
124
  export const updateListTool = {
162
125
  name: "update_list",
163
- description: `Purpose: Update an existing ClickUp list's properties.
164
-
165
- Valid Usage:
166
- 1. Provide listId + update fields (preferred)
167
- 2. Provide listName + update fields
168
-
169
- Requirements:
170
- - EITHER listId OR listName: REQUIRED
171
- - At least one field to update (name, content, or status): REQUIRED
172
-
173
- Notes:
174
- - Using listId is more reliable as list names might not be unique
175
- - Only specified fields will be updated`,
126
+ description: `Updates a ClickUp list. Use listId (preferred) or listName + at least one update field (name/content/status). ListId more reliable as names may not be unique. Only specified fields updated.`,
176
127
  inputSchema: {
177
128
  type: "object",
178
129
  properties: {
@@ -205,19 +156,7 @@ Notes:
205
156
  */
206
157
  export const deleteListTool = {
207
158
  name: "delete_list",
208
- description: `Purpose: Permanently delete a ClickUp list and all its tasks.
209
-
210
- Valid Usage:
211
- 1. Provide listId (preferred and safest)
212
- 2. Provide listName
213
-
214
- Requirements:
215
- - EITHER listId OR listName: REQUIRED
216
-
217
- Warning:
218
- - This action CANNOT be undone
219
- - All tasks within the list will also be permanently deleted
220
- - Using listName is risky as names may not be unique`,
159
+ description: `PERMANENTLY deletes a ClickUp list and all its tasks. Use listId (preferred/safest) or listName. WARNING: Cannot be undone, all tasks will be deleted, listName risky if not unique.`,
221
160
  inputSchema: {
222
161
  type: "object",
223
162
  properties: {
@@ -22,22 +22,11 @@ const { task: taskService } = clickUpServices;
22
22
  // TOOL DEFINITIONS
23
23
  //=============================================================================
24
24
  /**
25
- * Tool definition for getting tags in a space
25
+ * Tool definition for getting space tags
26
26
  */
27
27
  export const getSpaceTagsTool = {
28
28
  name: "get_space_tags",
29
- description: `Purpose: Get all tags available in a ClickUp space.
30
-
31
- Valid Usage:
32
- 1. Provide spaceId (preferred if available)
33
- 2. Provide spaceName (will be resolved to a space ID)
34
-
35
- Requirements:
36
- - EITHER spaceId OR spaceName is REQUIRED
37
-
38
- Notes:
39
- - Tags are defined at the space level in ClickUp
40
- - You need to know the available tags before adding them to tasks`,
29
+ description: `Gets all tags in a ClickUp space. Use spaceId (preferred) or spaceName. Tags are defined at space level - check available tags before adding to tasks.`,
41
30
  inputSchema: {
42
31
  type: "object",
43
32
  properties: {
@@ -200,26 +189,7 @@ Warning:
200
189
  */
201
190
  export const addTagToTaskTool = {
202
191
  name: "add_tag_to_task",
203
- description: `Purpose: Add an existing tag to a ClickUp task.
204
-
205
- Valid Usage:
206
- 1. Provide taskId (preferred if available)
207
- 2. Provide taskName (optionally with listName for disambiguation)
208
-
209
- Requirements:
210
- - tagName: REQUIRED
211
- - EITHER taskId OR customTaskId OR taskName: REQUIRED
212
- - The tag MUST exist in the space containing the task before calling this tool
213
-
214
- Warning:
215
- - The operation will fail if the tag does not exist in the space
216
- - Always use get_space_tags first to verify the tag exists
217
- - If the tag doesn't exist, create it using create_space_tag before adding it to the task
218
- - If multiple tasks have the same name, provide listName to disambiguate
219
-
220
- Notes:
221
- - Use get_space_tags to see available tags
222
- - Use create_space_tag to create a new tag if needed`,
192
+ description: `Adds existing tag to task. Use taskId (preferred) or taskName + optional listName. Tag must exist in space (use get_space_tags to verify, create_space_tag if needed). WARNING: Will fail if tag doesn't exist.`,
223
193
  inputSchema: {
224
194
  type: "object",
225
195
  properties: {
@@ -252,20 +222,7 @@ Notes:
252
222
  */
253
223
  export const removeTagFromTaskTool = {
254
224
  name: "remove_tag_from_task",
255
- description: `Purpose: Remove a tag from a ClickUp task.
256
-
257
- Valid Usage:
258
- 1. Provide taskId (preferred if available)
259
- 2. Provide taskName (optionally with listName for disambiguation)
260
-
261
- Requirements:
262
- - tagName: REQUIRED
263
- - EITHER taskId OR customTaskId OR taskName: REQUIRED
264
-
265
- Notes:
266
- - This only removes the association between the tag and task
267
- - The tag will still exist in the space
268
- - If multiple tasks have the same name, provide listName to disambiguate`,
225
+ description: `Removes tag from task. Use taskId (preferred) or taskName + optional listName. Only removes tag-task association, tag remains in space. For multiple tasks, provide listName to disambiguate.`,
269
226
  inputSchema: {
270
227
  type: "object",
271
228
  properties: {
@@ -33,42 +33,7 @@ setInterval(() => {
33
33
  */
34
34
  export const attachTaskFileTool = {
35
35
  name: "attach_task_file",
36
- description: `Purpose: Attaches a file to a ClickUp task.
37
-
38
- Valid Usage:
39
- 1. Use taskId alone (preferred) - works with both regular and custom IDs
40
- 2. Use taskName alone (will search across all lists)
41
- 3. Use taskName + listName (for faster, targeted search)
42
-
43
- File Source Options:
44
- 1. Upload from base64: Provide file_data + file_name
45
- 2. Upload from URL: Provide file_url starting with http:// or https://
46
- 3. Upload from local file: Provide file_url as absolute path (starting with / or drive letter)
47
- 4. For large files: Use chunk_* parameters for advanced chunked uploading
48
-
49
- Requirements:
50
- - EITHER taskId OR taskName: REQUIRED
51
- - listName: Optional, but recommended when using taskName
52
- - File Source: ONE of the following is REQUIRED:
53
- - file_data + file_name
54
- - file_url (web URL or local path)
55
- - chunk_session (for continuing chunked upload)
56
-
57
- Notes:
58
- - The tool automatically searches for tasks using smart name matching
59
- - When only taskName is provided, it searches across all lists
60
- - Adding listName narrows the search to a specific list for better performance
61
- - The system automatically selects the best upload method based on file size and source:
62
- - Base64 method: Limited to 10MB due to encoding overhead
63
- - URL method: Works for files hosted online
64
- - Local file method: Works with absolute paths only
65
- - Large files: Automatically uses chunked uploading
66
-
67
- Warning:
68
- - Using taskName without listName may match multiple tasks
69
- - If multiple matches are found, the operation will fail with a disambiguation error
70
- - For local files, relative paths are not supported
71
- - Base64 uploads over 10MB will automatically switch to chunked upload mode`,
36
+ description: `Attaches file to task. Use taskId (preferred) or taskName + optional listName. File sources: 1) base64 + filename (≤10MB), 2) URL (http/https), 3) local path (absolute), 4) chunked for large files. WARNING: taskName without listName may match multiple tasks.`,
72
37
  inputSchema: {
73
38
  type: "object",
74
39
  properties: {
@@ -73,21 +73,7 @@ const taskIdentifierSchema = {
73
73
  */
74
74
  export const createBulkTasksTool = {
75
75
  name: "create_bulk_tasks",
76
- description: `Purpose: Create multiple tasks in a list efficiently.
77
-
78
- Valid Usage:
79
- 1. Provide listId + array of tasks (preferred)
80
- 2. Provide listName + array of tasks
81
-
82
- Requirements:
83
- - tasks: REQUIRED (array of tasks, each with at least a name)
84
- - EITHER listId OR listName: REQUIRED
85
- - All tasks will be created in the specified list
86
-
87
- Notes:
88
- - Configure batch size and concurrency via options for performance
89
- - Each task should have a name with emoji prefix
90
- - Custom fields can be set for each task using the custom_fields property (array of {id, value} objects)`,
76
+ description: `Creates multiple tasks in one list. Use listId (preferred) or listName + array of tasks (each needs name). Configure batch size/concurrency via options. Tasks can have custom fields as {id, value} array.`,
91
77
  inputSchema: {
92
78
  type: "object",
93
79
  properties: {
@@ -163,29 +149,11 @@ Notes:
163
149
  }
164
150
  };
165
151
  /**
166
- * Tool definition for updating multiple tasks efficiently
152
+ * Tool definition for updating multiple tasks
167
153
  */
168
154
  export const updateBulkTasksTool = {
169
155
  name: "update_bulk_tasks",
170
- description: `Purpose: Update multiple tasks efficiently in a single operation.
171
-
172
- Valid Usage:
173
- 1. For each task, provide taskId (preferred)
174
- 2. For each task, provide taskName + listName
175
-
176
- Requirements:
177
- - tasks: REQUIRED (array of tasks to update)
178
- - For each task entry, EITHER taskId OR (taskName + listName) is REQUIRED
179
- - At least one update field per task (name, description, status, priority, dueDate)
180
-
181
- Notes:
182
- - Only specified fields will be updated for each task
183
- - Configure batch size and concurrency via options for performance
184
- - Each task can have different fields to update
185
- - Custom fields can be updated using the custom_fields property (array of {id, value} objects)
186
-
187
- Warning:
188
- - Using taskName without listName will fail as tasks may have identical names across lists`,
156
+ description: `Updates multiple tasks efficiently. For each task: use taskId (preferred) or taskName + listName. At least one update field per task. Configure batch size/concurrency via options. WARNING: taskName without listName will fail.`,
189
157
  inputSchema: {
190
158
  type: "object",
191
159
  properties: {
@@ -262,28 +230,11 @@ Warning:
262
230
  }
263
231
  };
264
232
  /**
265
- * Tool definition for moving multiple tasks at once
233
+ * Tool definition for moving multiple tasks
266
234
  */
267
235
  export const moveBulkTasksTool = {
268
236
  name: "move_bulk_tasks",
269
- description: `Purpose: Move multiple tasks to a different list efficiently.
270
-
271
- Valid Usage:
272
- 1. For each task, provide taskId + target list (preferred)
273
- 2. For each task, provide taskName + listName + target list
274
-
275
- Requirements:
276
- - tasks: REQUIRED (array of tasks to move)
277
- - EITHER targetListId OR targetListName: REQUIRED
278
- - For each task entry, EITHER taskId OR (taskName + listName) is REQUIRED
279
-
280
- Notes:
281
- - Configure batch size and concurrency via options for performance
282
- - All tasks will be moved to the same destination list
283
-
284
- Warning:
285
- - Task statuses may reset if destination list has different status options
286
- - Using taskName without listName will fail as tasks may have identical names across lists`,
237
+ description: `Moves multiple tasks to one list. For each task: use taskId (preferred) or taskName + listName. Target list: use targetListId/Name. Configure batch size/concurrency via options. WARNING: Task statuses may reset, taskName needs listName.`,
287
238
  inputSchema: {
288
239
  type: "object",
289
240
  properties: {
@@ -326,27 +277,11 @@ Warning:
326
277
  }
327
278
  };
328
279
  /**
329
- * Tool definition for deleting multiple tasks at once
280
+ * Tool definition for deleting multiple tasks
330
281
  */
331
282
  export const deleteBulkTasksTool = {
332
283
  name: "delete_bulk_tasks",
333
- description: `Purpose: PERMANENTLY DELETE multiple tasks at once.
334
-
335
- Valid Usage:
336
- 1. For each task, provide taskId (preferred and safest)
337
- 2. For each task, provide taskName + listName
338
-
339
- Requirements:
340
- - tasks: REQUIRED (array of tasks to delete)
341
- - For each task entry, EITHER taskId OR (taskName + listName) is REQUIRED
342
-
343
- Notes:
344
- - Configure batch size and concurrency via options for performance
345
-
346
- Warning:
347
- - This action CANNOT be undone for any of the tasks
348
- - Using taskName without listName is dangerous as names may not be unique
349
- - Always provide listName when using taskName for safer targeting`,
284
+ description: `PERMANENTLY deletes multiple tasks. For each task: use taskId (preferred/safest) or taskName + listName. Configure batch size/concurrency via options. WARNING: Cannot be undone, taskName without listName is dangerous.`,
350
285
  inputSchema: {
351
286
  type: "object",
352
287
  properties: {
@@ -48,21 +48,7 @@ const handleOperationError = (operation, error) => {
48
48
  */
49
49
  export const createTaskTool = {
50
50
  name: "create_task",
51
- description: `Purpose: Create a single task in a ClickUp list.
52
-
53
- Valid Usage:
54
- 1. Provide listId (preferred if available)
55
- 2. Provide listName (system will look up the list ID)
56
-
57
- Requirements:
58
- - name: REQUIRED
59
- - EITHER listId OR listName: REQUIRED
60
-
61
- Notes:
62
- - For multiple tasks, use create_bulk_tasks instead
63
- - Reuse list IDs from previous responses when possible to avoid redundant lookups
64
- - To create a subtask, set the parent parameter to the ID of the parent task
65
- - Custom fields can be set using the custom_fields parameter (array of {id, value} objects)`,
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}.`,
66
52
  inputSchema: {
67
53
  type: "object",
68
54
  properties: {
@@ -142,28 +128,7 @@ Notes:
142
128
  */
143
129
  export const updateTaskTool = {
144
130
  name: "update_task",
145
- description: `Purpose: Modify properties of an existing task.
146
-
147
- Valid Usage:
148
- 1. Use taskId alone (preferred) - works with both regular and custom IDs
149
- 2. Use taskName alone (will search across all lists)
150
- 3. Use taskName + listName (for faster, targeted search)
151
-
152
- Requirements:
153
- - At least one update field (name, description, status, priority, dueDate) must be provided
154
- - EITHER taskId OR taskName: REQUIRED
155
- - listName: Optional, but recommended when using taskName
156
-
157
- Notes:
158
- - The tool automatically searches for tasks using smart name matching
159
- - When only taskName is provided, it searches across all lists
160
- - Adding listName narrows the search to a specific list for better performance
161
- - Only specified fields will be updated
162
- - Custom fields can be set using the custom_fields parameter (array of {id, value} objects)
163
-
164
- Warning:
165
- - Using taskName without listName may match multiple tasks
166
- - If multiple matches are found, the operation will fail with a disambiguation error`,
131
+ 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}. WARNING: Using taskName without listName may match multiple tasks.`,
167
132
  inputSchema: {
168
133
  type: "object",
169
134
  properties: {
@@ -233,19 +198,7 @@ Warning:
233
198
  */
234
199
  export const moveTaskTool = {
235
200
  name: "move_task",
236
- description: `Purpose: Move a task to a different list.
237
-
238
- Valid Usage:
239
- 1. Use taskId + (listId OR listName) - preferred
240
- 2. Use taskName + sourceListName + (listId OR listName)
241
-
242
- Requirements:
243
- - Destination list: EITHER listId OR listName REQUIRED
244
- - When using taskName, sourceListName is REQUIRED
245
-
246
- Warning:
247
- - Task statuses may reset if destination list has different status options
248
- - System cannot find a task by name without knowing which list to search in`,
201
+ 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.`,
249
202
  inputSchema: {
250
203
  type: "object",
251
204
  properties: {
@@ -278,21 +231,7 @@ Warning:
278
231
  */
279
232
  export const duplicateTaskTool = {
280
233
  name: "duplicate_task",
281
- description: `Purpose: Create a copy of a task in the same or different list.
282
-
283
- Valid Usage:
284
- 1. Use taskId + optional (listId OR listName) - preferred
285
- 2. Use taskName + sourceListName + optional (listId OR listName)
286
-
287
- Requirements:
288
- - When using taskName, sourceListName is REQUIRED
289
-
290
- Notes:
291
- - The duplicate preserves the original task's properties
292
- - If no destination list specified, uses same list as original task
293
-
294
- Warning:
295
- - System cannot find a task by name without knowing which list to search in`,
234
+ 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.`,
296
235
  inputSchema: {
297
236
  type: "object",
298
237
  properties: {
@@ -321,28 +260,11 @@ Warning:
321
260
  }
322
261
  };
323
262
  /**
324
- * Tool definition for retrieving a task
263
+ * Tool definition for retrieving task details
325
264
  */
326
265
  export const getTaskTool = {
327
266
  name: "get_task",
328
- description: `Purpose: Retrieve detailed information about a specific task.
329
-
330
- Valid Usage:
331
- 1. Use taskId alone (preferred) - works with both regular and custom IDs (like "DEV-1234")
332
- 2. Use taskName alone (will search across all lists in the workspace)
333
- 3. Use taskName + listName (for faster, targeted search)
334
- 4. Use customTaskId for explicit custom ID lookup
335
-
336
- Requirements:
337
- - EITHER taskId OR taskName OR customTaskId: REQUIRED
338
- - listName: Optional, but recommended when using taskName for faster and more precise lookup
339
-
340
- Note:
341
- - When using just taskName, the system performs a global search across all lists
342
- - Task names are most unique within a specific list, so providing listName increases reliability
343
- - Regular task IDs are always 9 characters long (e.g., "86b394eqa")
344
- - Custom IDs have an uppercase prefix followed by a hyphen and number (e.g., "DEV-1234")
345
- - Set subtasks=true to include all subtasks in the response`,
267
+ description: `Gets task details by taskId (works with regular/custom IDs) or taskName. For taskName search, provide listName for faster lookup. Set subtasks=true to include all subtask details.`,
346
268
  inputSchema: {
347
269
  type: "object",
348
270
  properties: {
@@ -432,16 +354,7 @@ Notes:
432
354
  */
433
355
  export const getTaskCommentsTool = {
434
356
  name: "get_task_comments",
435
- description: `Purpose: Retrieve comments for a ClickUp task.
436
-
437
- Valid Usage:
438
- 1. Use taskId (preferred)
439
- 2. Use taskName + optional listName
440
-
441
- Notes:
442
- - If using taskName, providing listName helps locate the correct task
443
- - Task names may not be unique across different lists
444
- - Use start and startId parameters for pagination through comments`,
357
+ 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.`,
445
358
  inputSchema: {
446
359
  type: "object",
447
360
  properties: {
@@ -473,20 +386,7 @@ Notes:
473
386
  */
474
387
  export const createTaskCommentTool = {
475
388
  name: "create_task_comment",
476
- description: `Purpose: Create a comment on a ClickUp task.
477
-
478
- Valid Usage:
479
- 1. Use taskId (preferred)
480
- 2. Use taskName + listName
481
-
482
- Requirements:
483
- - EITHER taskId OR (taskName + listName) is REQUIRED
484
- - commentText is REQUIRED
485
-
486
- Notes:
487
- - When using taskName, providing listName helps locate the correct task
488
- - Set notifyAll to true to send notifications to all task assignees
489
- - Use assignee to assign the comment to a specific user (optional)`,
389
+ description: `Creates task comment. Use taskId (preferred) or taskName + listName. Required: commentText. Optional: notifyAll to notify assignees, assignee to assign comment.`,
490
390
  inputSchema: {
491
391
  type: "object",
492
392
  properties: {
@@ -523,27 +423,7 @@ Notes:
523
423
  */
524
424
  export const deleteTaskTool = {
525
425
  name: "delete_task",
526
- description: `Purpose: PERMANENTLY DELETE a task.
527
-
528
- Valid Usage:
529
- 1. Use taskId alone (preferred and safest)
530
- 2. Use taskName alone (will search across all lists)
531
- 3. Use taskName + listName (for faster, targeted search)
532
-
533
- Requirements:
534
- - EITHER taskId OR taskName: REQUIRED
535
- - listName: Optional, but recommended when using taskName
536
-
537
- Notes:
538
- - The tool automatically searches for tasks using smart name matching
539
- - When only taskName is provided, it searches across all lists
540
- - Adding listName narrows the search to a specific list for better performance
541
- - Supports both regular task IDs and custom IDs (like 'DEV-1234')
542
-
543
- Warning:
544
- - This action CANNOT be undone
545
- - Using taskName without listName may match multiple tasks
546
- - If multiple matches are found, the operation will fail with a disambiguation error`,
426
+ description: `PERMANENTLY deletes task. Use taskId (preferred/safest) or taskName + optional listName. WARNING: Cannot be undone. Using taskName without listName may match multiple tasks.`,
547
427
  inputSchema: {
548
428
  type: "object",
549
429
  properties: {
@@ -19,18 +19,7 @@ const { workspace: workspaceService } = clickUpServices;
19
19
  */
20
20
  export const workspaceHierarchyTool = {
21
21
  name: 'get_workspace_hierarchy',
22
- description: `Purpose: Retrieve the complete workspace hierarchy including spaces, folders, and lists.
23
-
24
- Valid Usage:
25
- 1. Call without parameters to get the full hierarchy
26
-
27
- Requirements:
28
- - No parameters required
29
-
30
- Notes:
31
- - Returns a tree structure showing all spaces, folders, and lists
32
- - Each item includes its name and ID
33
- - Use this to navigate the workspace and understand its organization`,
22
+ description: `Gets complete workspace hierarchy (spaces, folders, lists). No parameters needed. Returns tree structure with names and IDs for navigation.`,
34
23
  inputSchema: {
35
24
  type: 'object',
36
25
  properties: {}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taazkareem/clickup-mcp-server",
3
- "version": "0.6.6",
3
+ "version": "0.6.7",
4
4
  "description": "ClickUp MCP Server - Integrate ClickUp tasks with AI through Model Context Protocol",
5
5
  "type": "module",
6
6
  "main": "build/index.js",