@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 +3 -3
- package/build/tools/folder.js +5 -53
- package/build/tools/list.js +5 -66
- package/build/tools/tag.js +4 -47
- package/build/tools/task/attachments.js +1 -36
- package/build/tools/task/bulk-operations.js +7 -72
- package/build/tools/task/single-operations.js +9 -129
- package/build/tools/workspace.js +1 -12
- package/package.json +1 -1
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
|
-

|
|
4
4
|
[](https://github.com/TaazKareem/clickup-mcp-server/stargazers)
|
|
5
5
|
[](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.
|
|
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
|
[](https://smithery.ai/server/@TaazKareem/clickup-mcp-server)
|
|
22
22
|
|
|
23
|
-
The server is hosted on [Smithery](https://smithery.ai/server/@
|
|
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
|
|
package/build/tools/folder.js
CHANGED
|
@@ -16,19 +16,7 @@ const { folder: folderService, workspace: workspaceService } = clickUpServices;
|
|
|
16
16
|
*/
|
|
17
17
|
export const createFolderTool = {
|
|
18
18
|
name: "create_folder",
|
|
19
|
-
description: `
|
|
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
|
|
44
|
+
* Tool definition for retrieving folder details
|
|
57
45
|
*/
|
|
58
46
|
export const getFolderTool = {
|
|
59
47
|
name: "get_folder",
|
|
60
|
-
description: `
|
|
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: `
|
|
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: `
|
|
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: {
|
package/build/tools/list.js
CHANGED
|
@@ -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: `
|
|
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: `
|
|
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: `
|
|
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: `
|
|
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: `
|
|
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: {
|
package/build/tools/tag.js
CHANGED
|
@@ -22,22 +22,11 @@ const { task: taskService } = clickUpServices;
|
|
|
22
22
|
// TOOL DEFINITIONS
|
|
23
23
|
//=============================================================================
|
|
24
24
|
/**
|
|
25
|
-
* Tool definition for getting tags
|
|
25
|
+
* Tool definition for getting space tags
|
|
26
26
|
*/
|
|
27
27
|
export const getSpaceTagsTool = {
|
|
28
28
|
name: "get_space_tags",
|
|
29
|
-
description: `
|
|
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: `
|
|
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: `
|
|
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: `
|
|
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: `
|
|
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
|
|
152
|
+
* Tool definition for updating multiple tasks
|
|
167
153
|
*/
|
|
168
154
|
export const updateBulkTasksTool = {
|
|
169
155
|
name: "update_bulk_tasks",
|
|
170
|
-
description: `
|
|
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
|
|
233
|
+
* Tool definition for moving multiple tasks
|
|
266
234
|
*/
|
|
267
235
|
export const moveBulkTasksTool = {
|
|
268
236
|
name: "move_bulk_tasks",
|
|
269
|
-
description: `
|
|
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
|
|
280
|
+
* Tool definition for deleting multiple tasks
|
|
330
281
|
*/
|
|
331
282
|
export const deleteBulkTasksTool = {
|
|
332
283
|
name: "delete_bulk_tasks",
|
|
333
|
-
description: `
|
|
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: `
|
|
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: `
|
|
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: `
|
|
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: `
|
|
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
|
|
263
|
+
* Tool definition for retrieving task details
|
|
325
264
|
*/
|
|
326
265
|
export const getTaskTool = {
|
|
327
266
|
name: "get_task",
|
|
328
|
-
description: `
|
|
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: `
|
|
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: `
|
|
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: `
|
|
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: {
|
package/build/tools/workspace.js
CHANGED
|
@@ -19,18 +19,7 @@ const { workspace: workspaceService } = clickUpServices;
|
|
|
19
19
|
*/
|
|
20
20
|
export const workspaceHierarchyTool = {
|
|
21
21
|
name: 'get_workspace_hierarchy',
|
|
22
|
-
description: `
|
|
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