@taazkareem/clickup-mcp-server 0.1.7 → 0.2.1
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/LICENSE +21 -0
- package/README.md +289 -81
- package/build/config.js +2 -5
- package/build/index.js +692 -121
- package/build/services/clickup.js +675 -25
- package/package.json +4 -2
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Talib Kareem
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,117 +1,324 @@
|
|
|
1
1
|
# ClickUp MCP Server
|
|
2
2
|
|
|
3
|
-
A Model Context Protocol (MCP) server for integrating ClickUp tasks with AI applications. This server allows AI agents to interact with ClickUp tasks, spaces, and
|
|
3
|
+
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.
|
|
4
4
|
|
|
5
|
-
##
|
|
6
|
-
|
|
7
|
-
- 🔄 List and read ClickUp tasks as resources
|
|
8
|
-
- ✨ Create and update tasks through tools
|
|
9
|
-
- 📊 Get spaces and lists with their IDs
|
|
10
|
-
- 📝 Generate task descriptions with AI
|
|
11
|
-
- 📋 Summarize tasks and analyze priorities
|
|
12
|
-
- 🔒 Secure API key management
|
|
5
|
+
## Quick Start (Recommended)
|
|
13
6
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
### Using npx (Recommended)
|
|
7
|
+
1. Install the server:
|
|
17
8
|
```bash
|
|
18
|
-
|
|
9
|
+
npm install -g @taazkareem/clickup-mcp-server
|
|
19
10
|
```
|
|
20
11
|
|
|
21
|
-
|
|
12
|
+
2. Get your credentials:
|
|
13
|
+
- ClickUp API key from [ClickUp Settings](https://app.clickup.com/settings/apps)
|
|
14
|
+
- Team ID from your ClickUp workspace URL
|
|
15
|
+
|
|
16
|
+
3. Start the server:
|
|
22
17
|
```bash
|
|
23
|
-
|
|
18
|
+
clickup-mcp-server --env CLICKUP_API_KEY=your_api_key_here --env TEAM_ID=your_team_id_here
|
|
24
19
|
```
|
|
25
20
|
|
|
26
|
-
|
|
21
|
+
> **Security Note**: Your API key will be stored securely and not exposed to AI models.
|
|
27
22
|
|
|
28
|
-
|
|
29
|
-
2. Create a `.env` file:
|
|
30
|
-
```env
|
|
31
|
-
CLICKUP_API_KEY=your_api_key_here
|
|
32
|
-
TEAM_ID=your_team_id_here
|
|
33
|
-
```
|
|
23
|
+
## Using with Cursor AI Composer
|
|
34
24
|
|
|
35
|
-
|
|
25
|
+
1. Go to Features in settings
|
|
26
|
+
2. Add under MCP Servers:
|
|
27
|
+
```bash
|
|
28
|
+
clickup-mcp-server --env CLICKUP_API_KEY=your_api_key_here --env TEAM_ID=your_team_id_here
|
|
29
|
+
```
|
|
30
|
+
3. Replace the credentials and click Save
|
|
36
31
|
|
|
37
|
-
|
|
32
|
+
## Alternative Installation
|
|
33
|
+
Run directly without installing:
|
|
38
34
|
```bash
|
|
39
|
-
clickup-mcp-server
|
|
35
|
+
npx @taazkareem/clickup-mcp-server --env CLICKUP_API_KEY=your_api_key_here --env TEAM_ID=your_team_id_here
|
|
40
36
|
```
|
|
41
37
|
|
|
42
|
-
|
|
38
|
+
## Features
|
|
43
39
|
|
|
44
|
-
|
|
45
|
-
|
|
40
|
+
- 🎯 **Task Management**
|
|
41
|
+
- Create, update, and delete tasks
|
|
42
|
+
- Move and duplicate tasks between lists, spaces, and folders
|
|
43
|
+
- Bulk task operations
|
|
44
|
+
- Task details
|
|
45
|
+
|
|
46
|
+
- 📂 **Workspace Organization**
|
|
47
|
+
- Hierarchical tree structure with clear relationships
|
|
48
|
+
- Efficient navigation with path tracking
|
|
49
|
+
- List and folder management in spaces
|
|
50
|
+
- Smart caching to reduce API calls
|
|
51
|
+
- Name/ID-based item lookup
|
|
52
|
+
- Optimized task organization
|
|
53
|
+
|
|
54
|
+
- 🔄 **Smart Integration**
|
|
55
|
+
- Case-insensitive name lookups
|
|
56
|
+
- Markdown support
|
|
57
|
+
- Automatic rate limiting
|
|
58
|
+
- Error handling
|
|
59
|
+
|
|
60
|
+
- 🤖 **AI Assistance**
|
|
61
|
+
- Task analysis and insights
|
|
62
|
+
- Status summaries and priorities
|
|
63
|
+
- Description assistance
|
|
64
|
+
- Relationship mapping
|
|
65
|
+
|
|
66
|
+
## Available Tools
|
|
67
|
+
|
|
68
|
+
1. **get_workspace_hierarchy**
|
|
69
|
+
- Gets complete hierarchy of spaces, folders, and lists
|
|
46
70
|
- No parameters required
|
|
47
|
-
|
|
48
|
-
|
|
71
|
+
- Returns tree structure showing:
|
|
72
|
+
```
|
|
73
|
+
Workspace (root)
|
|
74
|
+
├── Space A
|
|
75
|
+
│ ├── List 1
|
|
76
|
+
│ └── Folder 1
|
|
77
|
+
│ ├── List 2
|
|
78
|
+
│ └── List 3
|
|
79
|
+
└── Space B
|
|
80
|
+
└── List 4
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
2. **get_tasks**
|
|
84
|
+
- Gets tasks from a ClickUp list with optional filters
|
|
85
|
+
- List Identification (required):
|
|
86
|
+
```
|
|
87
|
+
listId: "123" # List ID from ClickUp
|
|
88
|
+
-- OR --
|
|
89
|
+
listName: "My List" # List name (case insensitive)
|
|
90
|
+
```
|
|
91
|
+
- Optional Filters:
|
|
92
|
+
```
|
|
93
|
+
archived: true/false # Include archived tasks
|
|
94
|
+
page: number # Page number for pagination
|
|
95
|
+
order_by: string # Field to sort by
|
|
96
|
+
reverse: true/false # Reverse sort order
|
|
97
|
+
subtasks: true/false # Include subtasks
|
|
98
|
+
statuses: ["status1",..] # Filter by status
|
|
99
|
+
include_closed: true/false # Include closed tasks
|
|
100
|
+
assignees: ["user1",..] # Filter by assignee
|
|
101
|
+
due_date_gt: timestamp # Due after date
|
|
102
|
+
due_date_lt: timestamp # Due before date
|
|
103
|
+
custom_fields: {...} # Filter by custom fields
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
3. **get_task**
|
|
107
|
+
- Gets detailed information about a specific task
|
|
108
|
+
- Task Identification (required):
|
|
109
|
+
```
|
|
110
|
+
taskId: "123" # Task ID from ClickUp
|
|
111
|
+
-- OR --
|
|
112
|
+
taskName: "My Task" # Task name (case insensitive)
|
|
113
|
+
```
|
|
114
|
+
- Optional:
|
|
115
|
+
```
|
|
116
|
+
listName: "My List" # Narrow search to specific list
|
|
117
|
+
```
|
|
118
|
+
- Returns full task details including attachments and custom fields
|
|
119
|
+
|
|
120
|
+
4. **create_task**
|
|
49
121
|
- Creates a new task in ClickUp
|
|
50
|
-
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
122
|
+
- List Identification (required):
|
|
123
|
+
```
|
|
124
|
+
listId: "123" # List ID from ClickUp
|
|
125
|
+
-- OR --
|
|
126
|
+
listName: "My List" # List name (case insensitive)
|
|
127
|
+
```
|
|
128
|
+
- Task Details:
|
|
129
|
+
```
|
|
130
|
+
# Required
|
|
131
|
+
taskName: "New Task" # Name of the task to create
|
|
132
|
+
|
|
133
|
+
# Optional
|
|
134
|
+
description: "..." # Task description (markdown supported)
|
|
135
|
+
status: "In Progress" # Task status
|
|
136
|
+
priority: 1-4 # Priority level (1=Urgent, 4=Low)
|
|
137
|
+
dueDate: timestamp # Due date
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
5. **create_bulk_tasks**
|
|
141
|
+
- Creates multiple tasks in a list
|
|
142
|
+
- List Identification (required):
|
|
143
|
+
```
|
|
144
|
+
listId: "123" # List ID from ClickUp
|
|
145
|
+
-- OR --
|
|
146
|
+
listName: "My List" # List name (case insensitive)
|
|
147
|
+
```
|
|
148
|
+
- Tasks Array (required):
|
|
149
|
+
```
|
|
150
|
+
tasks: [
|
|
151
|
+
{
|
|
152
|
+
taskName: "Task 1", # Required
|
|
153
|
+
description: "...", # Optional
|
|
154
|
+
status: "In Progress", # Optional
|
|
155
|
+
priority: 1-4, # Optional
|
|
156
|
+
dueDate: timestamp # Optional
|
|
157
|
+
},
|
|
158
|
+
// ... more tasks
|
|
159
|
+
]
|
|
160
|
+
```
|
|
161
|
+
- Handles rate limiting automatically
|
|
162
|
+
|
|
163
|
+
6. **update_task**
|
|
60
164
|
- Updates an existing task
|
|
61
|
-
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
165
|
+
- Task Identification (required):
|
|
166
|
+
```
|
|
167
|
+
taskId: "123" # Task ID from ClickUp
|
|
168
|
+
-- OR --
|
|
169
|
+
taskName: "My Task" # Task name (case insensitive)
|
|
170
|
+
```
|
|
171
|
+
- Optional Updates:
|
|
172
|
+
```
|
|
173
|
+
listName: "My List" # Narrow search to specific list
|
|
174
|
+
newName: "Updated Task" # New task name
|
|
175
|
+
description: "..." # New description
|
|
176
|
+
status: "Done" # New status
|
|
177
|
+
priority: 1-4 # New priority
|
|
178
|
+
dueDate: timestamp # New due date
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
7. **delete_task**
|
|
182
|
+
- Permanently deletes a task
|
|
183
|
+
- Task Identification (required):
|
|
184
|
+
```
|
|
185
|
+
taskId: "123" # Task ID from ClickUp
|
|
186
|
+
-- OR --
|
|
187
|
+
taskName: "My Task" # Task name (case insensitive)
|
|
188
|
+
```
|
|
189
|
+
- Optional:
|
|
190
|
+
```
|
|
191
|
+
listName: "My List" # Narrow search to specific list
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
8. **move_task**
|
|
195
|
+
- Moves a task to a different list
|
|
196
|
+
- Source Task (required):
|
|
197
|
+
```
|
|
198
|
+
taskId: "123" # Task ID from ClickUp
|
|
199
|
+
-- OR --
|
|
200
|
+
taskName: "My Task" # Task name (case insensitive)
|
|
201
|
+
```
|
|
202
|
+
- Destination List (required):
|
|
203
|
+
```
|
|
204
|
+
destinationListId: "456" # Target list ID
|
|
205
|
+
-- OR --
|
|
206
|
+
destinationListName: "My List" # Target list name
|
|
207
|
+
```
|
|
208
|
+
- Optional:
|
|
209
|
+
```
|
|
210
|
+
sourceListName: "Old List" # Narrow task search to specific list
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
9. **duplicate_task**
|
|
214
|
+
- Creates a copy of a task in specified list
|
|
215
|
+
- Source Task (required):
|
|
216
|
+
```
|
|
217
|
+
taskId: "123" # Task ID from ClickUp
|
|
218
|
+
-- OR --
|
|
219
|
+
taskName: "My Task" # Task name (case insensitive)
|
|
220
|
+
```
|
|
221
|
+
- Destination List (required):
|
|
222
|
+
```
|
|
223
|
+
destinationListId: "456" # Target list ID
|
|
224
|
+
-- OR --
|
|
225
|
+
destinationListName: "My List" # Target list name
|
|
226
|
+
```
|
|
227
|
+
- Optional:
|
|
228
|
+
```
|
|
229
|
+
sourceListName: "Current List" # Narrow task search to specific list
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
10. **create_list**
|
|
233
|
+
- Creates a new list in a space
|
|
234
|
+
- Space Identification (required):
|
|
235
|
+
```
|
|
236
|
+
spaceId: "123" # Space ID from ClickUp
|
|
237
|
+
-- OR --
|
|
238
|
+
spaceName: "My Space" # Space name (case insensitive)
|
|
239
|
+
```
|
|
240
|
+
- List Details:
|
|
241
|
+
```
|
|
242
|
+
# Required
|
|
243
|
+
listName: "New List" # Name for the new list
|
|
244
|
+
|
|
245
|
+
# Optional
|
|
246
|
+
content: "..." # List description
|
|
247
|
+
dueDate: timestamp # List due date
|
|
248
|
+
priority: 1-4 # List priority
|
|
249
|
+
assignee: "user_id" # Assign to user
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
11. **create_folder**
|
|
253
|
+
- Creates a new folder in a space
|
|
254
|
+
- Space Identification (required):
|
|
255
|
+
```
|
|
256
|
+
spaceId: "123" # Space ID from ClickUp
|
|
257
|
+
-- OR --
|
|
258
|
+
spaceName: "My Space" # Space name (case insensitive)
|
|
259
|
+
```
|
|
260
|
+
- Folder Details:
|
|
261
|
+
```
|
|
262
|
+
# Required
|
|
263
|
+
folderName: "New Folder" # Name for the new folder
|
|
264
|
+
|
|
265
|
+
# Optional
|
|
266
|
+
overrideStatuses: true/false # Override space statuses
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
12. **create_list_in_folder**
|
|
270
|
+
- Creates a new list within a folder
|
|
271
|
+
- Folder Identification (required):
|
|
272
|
+
```
|
|
273
|
+
folderId: "123" # Folder ID from ClickUp
|
|
274
|
+
-- OR --
|
|
275
|
+
folderName: "My Folder" # Folder name (case insensitive)
|
|
276
|
+
```
|
|
277
|
+
- List Details:
|
|
278
|
+
```
|
|
279
|
+
# Required
|
|
280
|
+
listName: "New List" # Name for the new list
|
|
281
|
+
|
|
282
|
+
# Optional
|
|
283
|
+
content: "..." # List description
|
|
284
|
+
status: "Active" # Initial list status
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
## Available Prompts
|
|
67
288
|
|
|
68
289
|
1. **summarize_tasks**
|
|
69
|
-
-
|
|
70
|
-
-
|
|
290
|
+
- Basic task summary by status
|
|
291
|
+
- Lists tasks with their current states
|
|
292
|
+
- Shows task relationships within lists
|
|
71
293
|
|
|
72
294
|
2. **analyze_priorities**
|
|
73
|
-
-
|
|
74
|
-
- Suggests
|
|
295
|
+
- Reviews current task priorities
|
|
296
|
+
- Suggests priority adjustments
|
|
297
|
+
- Recommends task sequencing
|
|
75
298
|
|
|
76
299
|
3. **generate_description**
|
|
77
|
-
-
|
|
300
|
+
- Interactive prompt for creating task descriptions
|
|
301
|
+
- Helps structure task information
|
|
78
302
|
- Includes objectives, criteria, and dependencies
|
|
79
303
|
|
|
80
|
-
##
|
|
304
|
+
## Error Handling
|
|
81
305
|
|
|
82
|
-
|
|
306
|
+
The server provides clear error messages for:
|
|
307
|
+
- Missing required parameters
|
|
308
|
+
- Invalid IDs or names
|
|
309
|
+
- Items not found
|
|
310
|
+
- Permission issues
|
|
311
|
+
- API errors
|
|
312
|
+
- Rate limiting
|
|
83
313
|
|
|
84
|
-
|
|
85
|
-
npx -y @taazkareem/clickup-mcp-server \
|
|
86
|
-
--env CLICKUP_API_KEY=your_api_key_here \
|
|
87
|
-
--env TEAM_ID=your_team_id_here
|
|
88
|
-
```
|
|
314
|
+
## Support the Developer
|
|
89
315
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
- `TEAM_ID`: Your ClickUp Team ID (found in the URL when viewing your workspace or via API)
|
|
316
|
+
If you find this project useful, please consider supporting the developer:
|
|
317
|
+
Talib Kareem (taazkareem@icloud.com)
|
|
93
318
|
|
|
94
|
-
|
|
319
|
+
[](https://www.buymeacoffee.com/taazkareem)
|
|
95
320
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
## Development
|
|
99
|
-
|
|
100
|
-
1. Clone the repository:
|
|
101
|
-
```bash
|
|
102
|
-
git clone https://github.com/yourusername/clickup-mcp-server.git
|
|
103
|
-
cd clickup-mcp-server
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
2. Install dependencies:
|
|
107
|
-
```bash
|
|
108
|
-
npm install
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
3. Start in development mode:
|
|
112
|
-
```bash
|
|
113
|
-
npm run dev
|
|
114
|
-
```
|
|
321
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="vertical-align: middle; margin-right: 4px;"><path d="M4 18h12l4-4h-12z" /><path d="M8 14l-4-4h12l4 4" /><path d="M16 10l4-4h-12l-4 4" /></svg><span style="vertical-align: middle;">**Solana Wallet:** `GjtRksihd7SWQw7hJSCDMcTxPHbgpNs7xPW3nFubNjVM`</span>
|
|
115
322
|
|
|
116
323
|
## Contributing
|
|
117
324
|
|
|
@@ -120,3 +327,4 @@ Contributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md)
|
|
|
120
327
|
## License
|
|
121
328
|
|
|
122
329
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
330
|
+
|
package/build/config.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import dotenv from 'dotenv';
|
|
2
|
-
// Load environment variables from .env file
|
|
3
|
-
dotenv.config();
|
|
4
1
|
// Parse command line arguments for --env flags
|
|
5
2
|
const args = process.argv.slice(2);
|
|
6
3
|
const envArgs = {};
|
|
@@ -15,8 +12,8 @@ for (let i = 0; i < args.length; i++) {
|
|
|
15
12
|
}
|
|
16
13
|
}
|
|
17
14
|
const configuration = {
|
|
18
|
-
clickupApiKey: envArgs.clickupApiKey ||
|
|
19
|
-
teamId: envArgs.teamId ||
|
|
15
|
+
clickupApiKey: envArgs.clickupApiKey || '',
|
|
16
|
+
teamId: envArgs.teamId || '',
|
|
20
17
|
};
|
|
21
18
|
// Check for missing environment variables
|
|
22
19
|
const missingEnvVars = Object.entries(configuration)
|