@taazkareem/clickup-mcp-server 0.4.51 → 0.4.52
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 +18 -21
- package/build/index.js +104 -75
- package/package.json +1 -1
- package/Dockerfile.smithery +0 -36
package/README.md
CHANGED
|
@@ -30,7 +30,7 @@ npx -y @taazkareem/clickup-mcp-server \
|
|
|
30
30
|
- View and modify task details and properties
|
|
31
31
|
|
|
32
32
|
- 📂 **Workspace Organization**
|
|
33
|
-
-
|
|
33
|
+
- Complete workspace hierarchy (spaces, folders, lists)
|
|
34
34
|
- Tree structure with clear relationships
|
|
35
35
|
- Create and manage lists and folders
|
|
36
36
|
- Efficient path-based navigation
|
|
@@ -40,42 +40,39 @@ npx -y @taazkareem/clickup-mcp-server \
|
|
|
40
40
|
- Case-insensitive name matching
|
|
41
41
|
- Markdown formatting support
|
|
42
42
|
- Built-in API rate limiting
|
|
43
|
-
- Comprehensive error handling
|
|
44
|
-
- Clear parameter validation
|
|
45
43
|
|
|
46
44
|
- 🤖 **AI-Powered Analysis**
|
|
47
45
|
- Task status summaries and overviews
|
|
48
46
|
- Priority analysis and recommendations
|
|
49
47
|
- Structured description generation
|
|
50
48
|
- Task relationship mapping
|
|
51
|
-
- Workspace organization insights
|
|
52
49
|
|
|
53
50
|
## Available Tools
|
|
54
51
|
|
|
55
52
|
| Tool | Description | Required Parameters |
|
|
56
53
|
|------|-------------|-------------------|
|
|
57
|
-
| [get_workspace_hierarchy](docs/
|
|
58
|
-
| [
|
|
59
|
-
| [
|
|
60
|
-
| [
|
|
61
|
-
| [
|
|
62
|
-
| [
|
|
63
|
-
| [delete_task](docs/
|
|
64
|
-
| [move_task](docs/
|
|
65
|
-
| [duplicate_task](docs/
|
|
66
|
-
| [create_list](docs/
|
|
67
|
-
| [create_folder](docs/
|
|
68
|
-
| [create_list_in_folder](docs/
|
|
69
|
-
|
|
70
|
-
See [full documentation](docs/
|
|
54
|
+
| [get_workspace_hierarchy](docs/api-reference.md#workspace-navigation) | Get workspace structure | None |
|
|
55
|
+
| [create_task](docs/api-reference.md#task-management) | Create a task | `name`, (`listId`/`listName`) |
|
|
56
|
+
| [create_bulk_tasks](docs/api-reference.md#task-management) | Create multiple tasks | `tasks[]` |
|
|
57
|
+
| [update_task](docs/api-reference.md#task-management) | Modify task | `taskId`/`taskName` |
|
|
58
|
+
| [get_tasks](docs/api-reference.md#task-retrieval) | Get tasks from list | `listId`/`listName` |
|
|
59
|
+
| [get_task](docs/api-reference.md#task-retrieval) | Get task details | `taskId`/`taskName` |
|
|
60
|
+
| [delete_task](docs/api-reference.md#task-management) | Remove task | `taskId` |
|
|
61
|
+
| [move_task](docs/api-reference.md#task-management) | Move task | `taskId`/`taskName`, `listId`/`listName` |
|
|
62
|
+
| [duplicate_task](docs/api-reference.md#task-management) | Copy task | `taskId`/`taskName`, `listId`/`listName` |
|
|
63
|
+
| [create_list](docs/api-reference.md#list-management) | Create list in space | `name`, `spaceId`/`spaceName` |
|
|
64
|
+
| [create_folder](docs/api-reference.md#folder-management) | Create folder | `name`, `spaceId`/`spaceName` |
|
|
65
|
+
| [create_list_in_folder](docs/api-reference.md#list-management) | Create list in folder | `name`, `folderId`/`folderName` |
|
|
66
|
+
|
|
67
|
+
See [full documentation](docs/api-reference.md) for optional parameters and advanced usage.
|
|
71
68
|
|
|
72
69
|
## Available Prompts
|
|
73
70
|
|
|
74
71
|
| Prompt | Purpose | Features |
|
|
75
72
|
|--------|---------|----------|
|
|
76
|
-
| [summarize_tasks](docs/
|
|
77
|
-
| [analyze_priorities](docs/
|
|
78
|
-
| [generate_description](docs/
|
|
73
|
+
| [summarize_tasks](docs/api-reference.md#prompts) | Task overview | Status summary, priorities, relationships |
|
|
74
|
+
| [analyze_priorities](docs/api-reference.md#prompts) | Priority optimization | Distribution analysis, sequencing |
|
|
75
|
+
| [generate_description](docs/api-reference.md#prompts) | Task description creation | Objectives, criteria, dependencies |
|
|
79
76
|
|
|
80
77
|
## Error Handling
|
|
81
78
|
|
package/build/index.js
CHANGED
|
@@ -2,22 +2,37 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* ClickUp MCP Server - A Model Context Protocol server for ClickUp integration
|
|
4
4
|
*
|
|
5
|
-
* This server enables AI applications to interact with ClickUp through a standardized protocol
|
|
5
|
+
* This server enables AI applications to interact with ClickUp through a standardized protocol,
|
|
6
|
+
* allowing AI assistants to manage tasks, lists, and folders in ClickUp workspaces.
|
|
7
|
+
*
|
|
6
8
|
* Key capabilities include:
|
|
7
9
|
*
|
|
8
|
-
*
|
|
9
|
-
* -
|
|
10
|
-
* -
|
|
11
|
-
* -
|
|
12
|
-
* -
|
|
10
|
+
* Task Management:
|
|
11
|
+
* - Create, update, move and duplicate tasks with rich description support
|
|
12
|
+
* - Find tasks by name with smart disambiguation
|
|
13
|
+
* - Bulk task creation for efficient workflow setup
|
|
14
|
+
* - Comprehensive filtering and sorting options
|
|
15
|
+
*
|
|
16
|
+
* Workspace Organization:
|
|
17
|
+
* - Navigate and discover workspace structure with hierarchical views
|
|
18
|
+
* - Create and manage lists and folders with proper nesting
|
|
19
|
+
* - Smart name-based lookups that eliminate the need for IDs
|
|
20
|
+
* - Support for priorities, statuses, and due dates
|
|
21
|
+
*
|
|
22
|
+
* AI-Enhanced Capabilities:
|
|
23
|
+
* - Task summarization and status grouping for project overviews
|
|
24
|
+
* - Priority analysis and optimization for workload balancing
|
|
25
|
+
* - Detailed task description generation with structured content
|
|
26
|
+
* - Task relationship identification for dependency management
|
|
13
27
|
*
|
|
14
|
-
*
|
|
15
|
-
* -
|
|
16
|
-
* -
|
|
17
|
-
* -
|
|
18
|
-
* -
|
|
28
|
+
* Technical Features:
|
|
29
|
+
* - Full markdown support for rich text content
|
|
30
|
+
* - Secure credential handling through configuration
|
|
31
|
+
* - Comprehensive error reporting and validation
|
|
32
|
+
* - Name-based entity resolution with fuzzy matching
|
|
19
33
|
*
|
|
20
|
-
*
|
|
34
|
+
* This implementation follows the Model Context Protocol specification and
|
|
35
|
+
* is designed to be used with AI assistants that support MCP.
|
|
21
36
|
*/
|
|
22
37
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
23
38
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
@@ -32,7 +47,7 @@ const clickup = ClickUpService.initialize(config.clickupApiKey, config.clickupTe
|
|
|
32
47
|
*/
|
|
33
48
|
const server = new Server({
|
|
34
49
|
name: "clickup-mcp-server",
|
|
35
|
-
version: "0.
|
|
50
|
+
version: "0.4.50",
|
|
36
51
|
}, {
|
|
37
52
|
capabilities: {
|
|
38
53
|
tools: {},
|
|
@@ -48,7 +63,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
48
63
|
tools: [
|
|
49
64
|
{
|
|
50
65
|
name: "get_workspace_hierarchy",
|
|
51
|
-
description: "
|
|
66
|
+
description: "Retrieve the complete ClickUp workspace hierarchy, including all spaces, folders, and lists with their IDs, names, and hierarchical paths. Call this tool only when you need to discover the workspace structure and don't already have this information from recent context. Avoid using for repeated lookups of the same information.",
|
|
52
67
|
inputSchema: {
|
|
53
68
|
type: "object",
|
|
54
69
|
properties: {},
|
|
@@ -57,7 +72,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
57
72
|
},
|
|
58
73
|
{
|
|
59
74
|
name: "create_task",
|
|
60
|
-
description: "Create a
|
|
75
|
+
description: "Create a single task in a ClickUp list. Use this tool for individual task creation only. For multiple tasks, use create_bulk_tasks instead. The tool finds lists by name (case-insensitive) so explicit list IDs aren't required. When creating a task, you must provide either a listId or listName.",
|
|
61
76
|
inputSchema: {
|
|
62
77
|
type: "object",
|
|
63
78
|
properties: {
|
|
@@ -87,11 +102,11 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
87
102
|
},
|
|
88
103
|
priority: {
|
|
89
104
|
type: "number",
|
|
90
|
-
description: "Priority of the task (1-4), 1 is urgent/highest priority
|
|
105
|
+
description: "Priority of the task (1-4), where 1 is urgent/highest priority and 4 is lowest priority. Only set this when the user explicitly requests a priority level."
|
|
91
106
|
},
|
|
92
107
|
dueDate: {
|
|
93
108
|
type: "string",
|
|
94
|
-
description: "Due date of the task (Unix timestamp in milliseconds)"
|
|
109
|
+
description: "Due date of the task (Unix timestamp in milliseconds). Convert dates to this format before submitting."
|
|
95
110
|
}
|
|
96
111
|
},
|
|
97
112
|
required: ["name"]
|
|
@@ -99,7 +114,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
99
114
|
},
|
|
100
115
|
{
|
|
101
116
|
name: "create_bulk_tasks",
|
|
102
|
-
description: "Create multiple tasks in a ClickUp list.
|
|
117
|
+
description: "Create multiple tasks in a ClickUp list simultaneously. Use this tool when you need to add several related tasks in one operation. The tool finds lists by name (case-insensitive), so explicit list IDs aren't required. More efficient than creating tasks one by one for batch operations.",
|
|
103
118
|
inputSchema: {
|
|
104
119
|
type: "object",
|
|
105
120
|
properties: {
|
|
@@ -113,13 +128,13 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
113
128
|
},
|
|
114
129
|
tasks: {
|
|
115
130
|
type: "array",
|
|
116
|
-
description: "Array of tasks to create",
|
|
131
|
+
description: "Array of tasks to create (at least one task required)",
|
|
117
132
|
items: {
|
|
118
133
|
type: "object",
|
|
119
134
|
properties: {
|
|
120
135
|
name: {
|
|
121
136
|
type: "string",
|
|
122
|
-
description: "Name of the task"
|
|
137
|
+
description: "Name of the task. Consider adding a relevant emoji before the name."
|
|
123
138
|
},
|
|
124
139
|
description: {
|
|
125
140
|
type: "string",
|
|
@@ -135,11 +150,11 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
135
150
|
},
|
|
136
151
|
priority: {
|
|
137
152
|
type: "number",
|
|
138
|
-
description: "Priority level (1-4), 1 is urgent/highest priority
|
|
153
|
+
description: "Priority level (1-4), where 1 is urgent/highest priority and 4 is lowest priority. Only set when explicitly requested."
|
|
139
154
|
},
|
|
140
155
|
dueDate: {
|
|
141
156
|
type: "string",
|
|
142
|
-
description: "Due date (Unix timestamp in milliseconds)"
|
|
157
|
+
description: "Due date (Unix timestamp in milliseconds). Convert dates to this format before submitting."
|
|
143
158
|
},
|
|
144
159
|
assignees: {
|
|
145
160
|
type: "array",
|
|
@@ -153,12 +168,12 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
153
168
|
}
|
|
154
169
|
}
|
|
155
170
|
},
|
|
156
|
-
required: ["
|
|
171
|
+
required: ["tasks"]
|
|
157
172
|
}
|
|
158
173
|
},
|
|
159
174
|
{
|
|
160
175
|
name: "create_list",
|
|
161
|
-
description: "Create a new list in a ClickUp space.
|
|
176
|
+
description: "Create a new list directly in a ClickUp space. Use this tool when you need a top-level list not nested inside a folder. The tool can find spaces by name, so explicit space IDs aren't required. For creating lists inside folders, use create_list_in_folder instead.",
|
|
162
177
|
inputSchema: {
|
|
163
178
|
type: "object",
|
|
164
179
|
properties: {
|
|
@@ -180,11 +195,11 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
180
195
|
},
|
|
181
196
|
dueDate: {
|
|
182
197
|
type: "string",
|
|
183
|
-
description: "Due date for the list (
|
|
198
|
+
description: "Due date for the list (Unix timestamp in milliseconds). Convert dates to this format before submitting."
|
|
184
199
|
},
|
|
185
200
|
priority: {
|
|
186
201
|
type: "number",
|
|
187
|
-
description: "Priority of the list (1-4)
|
|
202
|
+
description: "Priority of the list (1-4), where 1 is urgent/highest priority and 4 is lowest priority. Only set when explicitly requested."
|
|
188
203
|
},
|
|
189
204
|
assignee: {
|
|
190
205
|
type: "number",
|
|
@@ -200,7 +215,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
200
215
|
},
|
|
201
216
|
{
|
|
202
217
|
name: "create_folder",
|
|
203
|
-
description: "Create a new folder in a ClickUp space
|
|
218
|
+
description: "Create a new folder in a ClickUp space for organizing related lists. Use this tool when you need to group multiple lists together. The tool can find spaces by name, so explicit space IDs aren't required. After creating a folder, you can add lists to it using create_list_in_folder.",
|
|
204
219
|
inputSchema: {
|
|
205
220
|
type: "object",
|
|
206
221
|
properties: {
|
|
@@ -218,7 +233,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
218
233
|
},
|
|
219
234
|
override_statuses: {
|
|
220
235
|
type: "boolean",
|
|
221
|
-
description: "Whether to override space statuses"
|
|
236
|
+
description: "Whether to override space statuses with folder-specific statuses"
|
|
222
237
|
}
|
|
223
238
|
},
|
|
224
239
|
required: ["name"]
|
|
@@ -226,7 +241,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
226
241
|
},
|
|
227
242
|
{
|
|
228
243
|
name: "create_list_in_folder",
|
|
229
|
-
description: "Create a new list
|
|
244
|
+
description: "Create a new list within a ClickUp folder. Use this tool when you need to add a list to an existing folder structure. The tool can find folders and spaces by name, so explicit IDs aren't required. For top-level lists not in folders, use create_list instead.",
|
|
230
245
|
inputSchema: {
|
|
231
246
|
type: "object",
|
|
232
247
|
properties: {
|
|
@@ -256,7 +271,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
256
271
|
},
|
|
257
272
|
status: {
|
|
258
273
|
type: "string",
|
|
259
|
-
description: "Status of the list"
|
|
274
|
+
description: "Status of the list (uses folder default if not specified)"
|
|
260
275
|
}
|
|
261
276
|
},
|
|
262
277
|
required: ["name"]
|
|
@@ -264,7 +279,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
264
279
|
},
|
|
265
280
|
{
|
|
266
281
|
name: "move_task",
|
|
267
|
-
description: "Move
|
|
282
|
+
description: "Move an existing task from its current list to a different list. Use this tool when you need to relocate a task within your workspace hierarchy. The tool can find tasks and lists by name, so explicit IDs aren't required. Task statuses may be reset if the destination list uses different status options.",
|
|
268
283
|
inputSchema: {
|
|
269
284
|
type: "object",
|
|
270
285
|
properties: {
|
|
@@ -278,7 +293,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
278
293
|
},
|
|
279
294
|
sourceListName: {
|
|
280
295
|
type: "string",
|
|
281
|
-
description: "Optional: Name of the list to narrow down task search"
|
|
296
|
+
description: "Optional: Name of the source list to narrow down task search when multiple tasks have the same name"
|
|
282
297
|
},
|
|
283
298
|
listId: {
|
|
284
299
|
type: "string",
|
|
@@ -294,7 +309,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
294
309
|
},
|
|
295
310
|
{
|
|
296
311
|
name: "duplicate_task",
|
|
297
|
-
description: "
|
|
312
|
+
description: "Create a copy of an existing task in the same or different list. Use this tool when you need to replicate a task's content and properties. The tool can find tasks and lists by name, so explicit IDs aren't required. The duplicate will preserve name, description, priority, and other attributes from the original task.",
|
|
298
313
|
inputSchema: {
|
|
299
314
|
type: "object",
|
|
300
315
|
properties: {
|
|
@@ -308,7 +323,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
308
323
|
},
|
|
309
324
|
sourceListName: {
|
|
310
325
|
type: "string",
|
|
311
|
-
description: "Optional: Name of the list to narrow down task search"
|
|
326
|
+
description: "Optional: Name of the source list to narrow down task search when multiple tasks have the same name"
|
|
312
327
|
},
|
|
313
328
|
listId: {
|
|
314
329
|
type: "string",
|
|
@@ -324,7 +339,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
324
339
|
},
|
|
325
340
|
{
|
|
326
341
|
name: "update_task",
|
|
327
|
-
description: "
|
|
342
|
+
description: "Modify the properties of an existing task. Use this tool when you need to change a task's name, description, status, priority, or due date. The tool can find tasks by name, so explicit task IDs aren't required. Only the fields you specify will be updated; other fields will remain unchanged.",
|
|
328
343
|
inputSchema: {
|
|
329
344
|
type: "object",
|
|
330
345
|
properties: {
|
|
@@ -338,27 +353,27 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
338
353
|
},
|
|
339
354
|
listName: {
|
|
340
355
|
type: "string",
|
|
341
|
-
description: "Optional: Name of the list to narrow down task search"
|
|
356
|
+
description: "Optional: Name of the list to narrow down task search when multiple tasks have the same name"
|
|
342
357
|
},
|
|
343
358
|
name: {
|
|
344
359
|
type: "string",
|
|
345
|
-
description: "New name
|
|
360
|
+
description: "New name for the task"
|
|
346
361
|
},
|
|
347
362
|
description: {
|
|
348
363
|
type: "string",
|
|
349
|
-
description: "New description
|
|
364
|
+
description: "New plain text description for the task"
|
|
350
365
|
},
|
|
351
366
|
status: {
|
|
352
367
|
type: "string",
|
|
353
|
-
description: "New status
|
|
368
|
+
description: "New status for the task (must be a valid status in the task's list)"
|
|
354
369
|
},
|
|
355
370
|
priority: {
|
|
356
371
|
type: "number",
|
|
357
|
-
description: "New priority
|
|
372
|
+
description: "New priority for the task (1-4), where 1 is urgent/highest priority and 4 is lowest priority"
|
|
358
373
|
},
|
|
359
374
|
dueDate: {
|
|
360
375
|
type: "string",
|
|
361
|
-
description: "New due date
|
|
376
|
+
description: "New due date for the task (Unix timestamp in milliseconds). Convert dates to this format before submitting."
|
|
362
377
|
}
|
|
363
378
|
},
|
|
364
379
|
required: []
|
|
@@ -366,7 +381,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
366
381
|
},
|
|
367
382
|
{
|
|
368
383
|
name: "get_tasks",
|
|
369
|
-
description: "
|
|
384
|
+
description: "Retrieve tasks from a ClickUp list with optional filtering capabilities. Use this tool when you need to see existing tasks or analyze your current workload. The tool can find lists by name, eliminating the need for explicit list IDs. Results can be filtered by status, assignees, dates, and more.",
|
|
370
385
|
inputSchema: {
|
|
371
386
|
type: "object",
|
|
372
387
|
properties: {
|
|
@@ -380,65 +395,65 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
380
395
|
},
|
|
381
396
|
archived: {
|
|
382
397
|
type: "boolean",
|
|
383
|
-
description: "
|
|
398
|
+
description: "Set to true to include archived tasks in the results"
|
|
384
399
|
},
|
|
385
400
|
page: {
|
|
386
401
|
type: "number",
|
|
387
|
-
description: "Page number for pagination"
|
|
402
|
+
description: "Page number for pagination when dealing with many tasks (starts at 0)"
|
|
388
403
|
},
|
|
389
404
|
order_by: {
|
|
390
405
|
type: "string",
|
|
391
|
-
description: "Field to order tasks by"
|
|
406
|
+
description: "Field to order tasks by (e.g., 'due_date', 'created', 'updated')"
|
|
392
407
|
},
|
|
393
408
|
reverse: {
|
|
394
409
|
type: "boolean",
|
|
395
|
-
description: "
|
|
410
|
+
description: "Set to true to reverse the sort order (descending instead of ascending)"
|
|
396
411
|
},
|
|
397
412
|
subtasks: {
|
|
398
413
|
type: "boolean",
|
|
399
|
-
description: "
|
|
414
|
+
description: "Set to true to include subtasks in the results"
|
|
400
415
|
},
|
|
401
416
|
statuses: {
|
|
402
417
|
type: "array",
|
|
403
418
|
items: { type: "string" },
|
|
404
|
-
description: "
|
|
419
|
+
description: "Array of status names to filter tasks by (e.g., ['To Do', 'In Progress'])"
|
|
405
420
|
},
|
|
406
421
|
include_closed: {
|
|
407
422
|
type: "boolean",
|
|
408
|
-
description: "
|
|
423
|
+
description: "Set to true to include tasks with 'Closed' status"
|
|
409
424
|
},
|
|
410
425
|
assignees: {
|
|
411
426
|
type: "array",
|
|
412
427
|
items: { type: "string" },
|
|
413
|
-
description: "
|
|
428
|
+
description: "Array of user IDs to filter tasks by assignee"
|
|
414
429
|
},
|
|
415
430
|
due_date_gt: {
|
|
416
431
|
type: "number",
|
|
417
|
-
description: "Filter tasks due after this timestamp"
|
|
432
|
+
description: "Filter tasks due after this timestamp (Unix milliseconds)"
|
|
418
433
|
},
|
|
419
434
|
due_date_lt: {
|
|
420
435
|
type: "number",
|
|
421
|
-
description: "Filter tasks due before this timestamp"
|
|
436
|
+
description: "Filter tasks due before this timestamp (Unix milliseconds)"
|
|
422
437
|
},
|
|
423
438
|
date_created_gt: {
|
|
424
439
|
type: "number",
|
|
425
|
-
description: "Filter tasks created after this timestamp"
|
|
440
|
+
description: "Filter tasks created after this timestamp (Unix milliseconds)"
|
|
426
441
|
},
|
|
427
442
|
date_created_lt: {
|
|
428
443
|
type: "number",
|
|
429
|
-
description: "Filter tasks created before this timestamp"
|
|
444
|
+
description: "Filter tasks created before this timestamp (Unix milliseconds)"
|
|
430
445
|
},
|
|
431
446
|
date_updated_gt: {
|
|
432
447
|
type: "number",
|
|
433
|
-
description: "Filter tasks updated after this timestamp"
|
|
448
|
+
description: "Filter tasks updated after this timestamp (Unix milliseconds)"
|
|
434
449
|
},
|
|
435
450
|
date_updated_lt: {
|
|
436
451
|
type: "number",
|
|
437
|
-
description: "Filter tasks updated before this timestamp"
|
|
452
|
+
description: "Filter tasks updated before this timestamp (Unix milliseconds)"
|
|
438
453
|
},
|
|
439
454
|
custom_fields: {
|
|
440
455
|
type: "object",
|
|
441
|
-
description: "
|
|
456
|
+
description: "Object with custom field IDs as keys and desired values for filtering"
|
|
442
457
|
}
|
|
443
458
|
},
|
|
444
459
|
required: []
|
|
@@ -446,7 +461,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
446
461
|
},
|
|
447
462
|
{
|
|
448
463
|
name: "get_task",
|
|
449
|
-
description: "
|
|
464
|
+
description: "Retrieve comprehensive details about a specific ClickUp task. Use this tool when you need in-depth information about a particular task, including its description, custom fields, attachments, and other metadata. The tool can find tasks by name, eliminating the need for explicit task IDs.",
|
|
450
465
|
inputSchema: {
|
|
451
466
|
type: "object",
|
|
452
467
|
properties: {
|
|
@@ -460,7 +475,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
460
475
|
},
|
|
461
476
|
listName: {
|
|
462
477
|
type: "string",
|
|
463
|
-
description: "Optional: Name of the list to narrow down task search"
|
|
478
|
+
description: "Optional: Name of the list to narrow down task search when multiple tasks have the same name"
|
|
464
479
|
}
|
|
465
480
|
},
|
|
466
481
|
required: []
|
|
@@ -468,13 +483,21 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
468
483
|
},
|
|
469
484
|
{
|
|
470
485
|
name: "delete_task",
|
|
471
|
-
description: "
|
|
486
|
+
description: "Permanently remove a task from your ClickUp workspace. Use this tool with caution as deletion cannot be undone. The tool requires an explicit task ID for safety reasons, which you can obtain by first using get_task or get_tasks to find the appropriate task ID.",
|
|
472
487
|
inputSchema: {
|
|
473
488
|
type: "object",
|
|
474
489
|
properties: {
|
|
475
490
|
taskId: {
|
|
476
491
|
type: "string",
|
|
477
|
-
description: "ID of the task to delete"
|
|
492
|
+
description: "ID of the task to delete - this is required for safety to prevent accidental deletions"
|
|
493
|
+
},
|
|
494
|
+
taskName: {
|
|
495
|
+
type: "string",
|
|
496
|
+
description: "Name of the task to delete - will automatically find the task by name (optional if using taskId instead)"
|
|
497
|
+
},
|
|
498
|
+
listName: {
|
|
499
|
+
type: "string",
|
|
500
|
+
description: "Optional: Name of the list to narrow down task search when multiple tasks have the same name"
|
|
478
501
|
}
|
|
479
502
|
},
|
|
480
503
|
required: ["taskId"]
|
|
@@ -749,6 +772,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
749
772
|
}
|
|
750
773
|
case "get_tasks": {
|
|
751
774
|
const args = request.params.arguments;
|
|
775
|
+
// Enforce required listName field as specified in the schema
|
|
752
776
|
if (!args.listId && !args.listName) {
|
|
753
777
|
throw new Error("Either listId or listName is required");
|
|
754
778
|
}
|
|
@@ -772,6 +796,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
772
796
|
}
|
|
773
797
|
case "get_task": {
|
|
774
798
|
const args = request.params.arguments;
|
|
799
|
+
// Enforce required taskName field as specified in the schema
|
|
775
800
|
if (!args.taskId && !args.taskName) {
|
|
776
801
|
throw new Error("Either taskId or taskName is required");
|
|
777
802
|
}
|
|
@@ -793,22 +818,26 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
793
818
|
}
|
|
794
819
|
case "delete_task": {
|
|
795
820
|
const args = request.params.arguments;
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
821
|
+
// Validate the required taskId parameter
|
|
822
|
+
if (!args.taskId) {
|
|
823
|
+
throw new Error("taskId is required for deletion operations");
|
|
824
|
+
}
|
|
825
|
+
// Store the task name before deletion for the response message
|
|
826
|
+
let taskName = args.taskName;
|
|
827
|
+
if (!taskName) {
|
|
828
|
+
try {
|
|
829
|
+
const task = await clickup.getTask(args.taskId);
|
|
830
|
+
taskName = task.name;
|
|
831
|
+
}
|
|
832
|
+
catch (error) {
|
|
833
|
+
// If we can't get the task details, just use the ID in the response
|
|
804
834
|
}
|
|
805
|
-
taskId = result.id;
|
|
806
835
|
}
|
|
807
|
-
await clickup.deleteTask(taskId);
|
|
836
|
+
await clickup.deleteTask(args.taskId);
|
|
808
837
|
return {
|
|
809
838
|
content: [{
|
|
810
839
|
type: "text",
|
|
811
|
-
text: `Successfully deleted task ${
|
|
840
|
+
text: `Successfully deleted task ${taskName || args.taskId}`
|
|
812
841
|
}]
|
|
813
842
|
};
|
|
814
843
|
}
|
|
@@ -835,15 +864,15 @@ server.setRequestHandler(ListPromptsRequestSchema, async () => {
|
|
|
835
864
|
prompts: [
|
|
836
865
|
{
|
|
837
866
|
name: "summarize_tasks",
|
|
838
|
-
description: "
|
|
867
|
+
description: "Generate a comprehensive summary of tasks in a ClickUp list or workspace. The summary includes a high-level overview, groups tasks by status, highlights priority items, and identifies potential task relationships or dependencies. Useful for project status reports and team updates.",
|
|
839
868
|
},
|
|
840
869
|
{
|
|
841
870
|
name: "analyze_priorities",
|
|
842
|
-
description: "
|
|
871
|
+
description: "Evaluate task priority distribution across your workspace and identify optimization opportunities. The analysis examines current priority assignments, identifies misaligned priorities, suggests adjustments, and recommends task sequencing based on priorities. Helpful for workload management and project planning.",
|
|
843
872
|
},
|
|
844
873
|
{
|
|
845
874
|
name: "generate_description",
|
|
846
|
-
description: "
|
|
875
|
+
description: "Create a detailed, well-structured task description with clearly defined objectives, success criteria, required resources, dependencies, and risk assessments. This prompt helps ensure tasks are comprehensively documented with all necessary information for successful execution.",
|
|
847
876
|
}
|
|
848
877
|
]
|
|
849
878
|
};
|
package/package.json
CHANGED
package/Dockerfile.smithery
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# Use a Node.js base image
|
|
2
|
-
FROM node:18-alpine AS builder
|
|
3
|
-
|
|
4
|
-
# Set the working directory
|
|
5
|
-
WORKDIR /app
|
|
6
|
-
|
|
7
|
-
# Copy package files and TypeScript config
|
|
8
|
-
COPY package.json package-lock.json tsconfig.json ./
|
|
9
|
-
|
|
10
|
-
# Copy the source files
|
|
11
|
-
COPY src/ ./src/
|
|
12
|
-
|
|
13
|
-
# Install dependencies and build
|
|
14
|
-
RUN npm install
|
|
15
|
-
RUN npm run build
|
|
16
|
-
|
|
17
|
-
# Use a smaller image for the runtime
|
|
18
|
-
FROM node:18-alpine AS runtime
|
|
19
|
-
|
|
20
|
-
# Set the working directory
|
|
21
|
-
WORKDIR /app
|
|
22
|
-
|
|
23
|
-
# Copy the build output and node_modules from the builder stage
|
|
24
|
-
COPY --from=builder /app/build ./build
|
|
25
|
-
COPY --from=builder /app/node_modules ./node_modules
|
|
26
|
-
COPY --from=builder /app/package.json ./
|
|
27
|
-
|
|
28
|
-
# Set environment variables (these will be overridden by Smithery)
|
|
29
|
-
ENV CLICKUP_API_KEY=placeholder
|
|
30
|
-
ENV CLICKUP_TEAM_ID=placeholder
|
|
31
|
-
|
|
32
|
-
# Expose the port if needed
|
|
33
|
-
EXPOSE 8080
|
|
34
|
-
|
|
35
|
-
# Define the command to run the application
|
|
36
|
-
CMD ["node", "build/index.js"]
|