@taazkareem/clickup-mcp-server 0.2.0 → 0.2.2
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 +91 -188
- package/build/config.js +4 -9
- package/build/index.js +488 -171
- package/build/services/clickup.js +643 -49
- 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
|
@@ -2,223 +2,125 @@
|
|
|
2
2
|
|
|
3
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
|
-
##
|
|
5
|
+
## Quick Start
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
- List and read ClickUp tasks as resources
|
|
9
|
-
- View task details, status, and assignments
|
|
10
|
-
- Access task history and relationships
|
|
7
|
+
Directions for use with Cursor Composer Agent:
|
|
11
8
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
- ✨ **Task Operations**
|
|
19
|
-
- Create and update tasks
|
|
20
|
-
- Move tasks between lists
|
|
21
|
-
- Duplicate tasks
|
|
22
|
-
- Set priorities and due dates
|
|
23
|
-
- Assign team members
|
|
24
|
-
|
|
25
|
-
- 📊 **Information Retrieval**
|
|
26
|
-
- Get spaces and lists with their IDs
|
|
27
|
-
- List available statuses
|
|
28
|
-
- Find items by name (case-insensitive)
|
|
29
|
-
- View task relationships
|
|
30
|
-
|
|
31
|
-
- 📝 **AI Integration**
|
|
32
|
-
- Generate task descriptions with AI
|
|
33
|
-
- Summarize tasks and analyze priorities
|
|
34
|
-
- Get AI-powered task recommendations
|
|
35
|
-
|
|
36
|
-
- 🔒 **Security**
|
|
37
|
-
- Secure API key management
|
|
38
|
-
- Environment-based configuration
|
|
39
|
-
|
|
40
|
-
## Installation
|
|
41
|
-
|
|
42
|
-
### Using npx (Recommended)
|
|
9
|
+
1. Get your credentials:
|
|
10
|
+
- ClickUp API key from [ClickUp Settings](https://app.clickup.com/settings/apps)
|
|
11
|
+
- Team ID from your ClickUp workspace URL
|
|
12
|
+
2. Go to Features in settings
|
|
13
|
+
3. Add under MCP Servers:
|
|
43
14
|
```bash
|
|
44
|
-
npx @taazkareem/clickup-mcp-server
|
|
15
|
+
npx -y @taazkareem/clickup-mcp-server --env CLICKUP_API_KEY=your_api_key_here --env CLICKUP_TEAM_ID=your_team_id_here
|
|
45
16
|
```
|
|
17
|
+
4. Replace the credentials and click Save
|
|
18
|
+
5. Use Natural Language to interact with your ClickUp Workspace!
|
|
46
19
|
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
npm install -g @taazkareem/clickup-mcp-server
|
|
50
|
-
```
|
|
20
|
+
## Features
|
|
51
21
|
|
|
52
|
-
|
|
22
|
+
- 🎯 **Task Management**
|
|
23
|
+
- Create, update, and delete tasks
|
|
24
|
+
- Move and duplicate tasks between lists, spaces, and folders
|
|
25
|
+
- Bulk task operations
|
|
26
|
+
- Task details
|
|
53
27
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
28
|
+
- 📂 **Workspace Organization**
|
|
29
|
+
- Hierarchical tree structure with clear relationships
|
|
30
|
+
- Efficient navigation with path tracking
|
|
31
|
+
- List and folder management in spaces
|
|
32
|
+
- Smart caching to reduce API calls
|
|
33
|
+
- Name/ID-based item lookup
|
|
34
|
+
- Optimized task organization
|
|
60
35
|
|
|
61
|
-
|
|
36
|
+
- 🔄 **Smart Integration**
|
|
37
|
+
- Case-insensitive name lookups
|
|
38
|
+
- Markdown support
|
|
39
|
+
- Automatic rate limiting
|
|
40
|
+
- Error handling
|
|
62
41
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
42
|
+
- 🤖 **AI Assistance**
|
|
43
|
+
- Task analysis and insights
|
|
44
|
+
- Status summaries and priorities
|
|
45
|
+
- Description assistance
|
|
46
|
+
- Relationship mapping
|
|
47
|
+
|
|
48
|
+
## Available Tools
|
|
49
|
+
|
|
50
|
+
### Workspace Tools
|
|
51
|
+
**get_workspace_hierarchy**
|
|
52
|
+
Returns complete workspace structure (spaces, folders, lists). No parameters required.
|
|
53
|
+
|
|
54
|
+
### Task Tools
|
|
55
|
+
**get_tasks** `(listId|listName)`
|
|
56
|
+
Get tasks from list with optional filters (archived, page, order_by, reverse, subtasks, statuses, include_closed, assignees, due_date_gt/lt, custom_fields).
|
|
57
|
+
|
|
58
|
+
**get_task** `(taskId|taskName, ?listName)`
|
|
59
|
+
Get detailed task info including attachments and custom fields.
|
|
60
|
+
|
|
61
|
+
**create_task** `(listId|listName, taskName)`
|
|
62
|
+
Create task with optional description (markdown), status, priority (1-4), dueDate.
|
|
63
|
+
|
|
64
|
+
**create_bulk_tasks** `(listId|listName, tasks[])`
|
|
65
|
+
Bulk create tasks with automatic rate limiting. Each task: name (required), description, status, priority, dueDate (optional).
|
|
66
|
+
|
|
67
|
+
**update_task** `(taskId|taskName, ?listName)`
|
|
68
|
+
Update task name, description, status, priority (1-4), dueDate.
|
|
69
|
+
|
|
70
|
+
**delete_task** `(taskId|taskName, ?listName)`
|
|
71
|
+
Permanently delete a task.
|
|
72
|
+
|
|
73
|
+
**move_task** `(taskId|taskName, destinationListId|destinationListName, ?sourceListName)`
|
|
74
|
+
Move task to different list, preserving task data.
|
|
75
|
+
|
|
76
|
+
**duplicate_task** `(taskId|taskName, destinationListId|destinationListName, ?sourceListName)`
|
|
77
|
+
Create copy of task in specified list.
|
|
78
|
+
|
|
79
|
+
### List & Folder Tools
|
|
80
|
+
**create_list** `(spaceId|spaceName, listName)`
|
|
81
|
+
Create list with optional content, dueDate, priority (1-4), assignee.
|
|
67
82
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
2. **create_task**
|
|
76
|
-
- Creates a new task in ClickUp
|
|
77
|
-
- Required parameters:
|
|
78
|
-
- `listId`: ID of the list to create the task in
|
|
79
|
-
- `name`: Name of the task
|
|
80
|
-
- Optional parameters:
|
|
81
|
-
- `description`: Task description
|
|
82
|
-
- `status`: Task status
|
|
83
|
-
- `priority`: Priority level (1-4)
|
|
84
|
-
- `dueDate`: Due date (ISO string)
|
|
85
|
-
- `assignees`: Array of user IDs
|
|
86
|
-
|
|
87
|
-
3. **create_list**
|
|
88
|
-
- Creates a new list in a space
|
|
89
|
-
- Required parameters:
|
|
90
|
-
- `name`: Name of the list
|
|
91
|
-
- Optional parameters:
|
|
92
|
-
- `spaceId`: ID of the space (optional if spaceName provided)
|
|
93
|
-
- `spaceName`: Name of the space (optional if spaceId provided)
|
|
94
|
-
- `content`: List description
|
|
95
|
-
- `status`: List status
|
|
96
|
-
- `priority`: Priority level (1-4)
|
|
97
|
-
- `dueDate`: Due date (ISO string)
|
|
98
|
-
|
|
99
|
-
4. **create_folder**
|
|
100
|
-
- Creates a new folder in a space
|
|
101
|
-
- Required parameters:
|
|
102
|
-
- `name`: Name of the folder
|
|
103
|
-
- Optional parameters:
|
|
104
|
-
- `spaceId`: ID of the space (optional if spaceName provided)
|
|
105
|
-
- `spaceName`: Name of the space (optional if spaceId provided)
|
|
106
|
-
- `override_statuses`: Whether to override space statuses
|
|
107
|
-
|
|
108
|
-
5. **create_list_in_folder**
|
|
109
|
-
- Creates a new list within a folder
|
|
110
|
-
- Required parameters:
|
|
111
|
-
- `name`: Name of the list
|
|
112
|
-
- Optional parameters:
|
|
113
|
-
- `folderId`: ID of the folder (optional if using folderName)
|
|
114
|
-
- `folderName`: Name of the folder
|
|
115
|
-
- `spaceId`: ID of the space (required if using folderName)
|
|
116
|
-
- `spaceName`: Name of the space (alternative to spaceId)
|
|
117
|
-
- `content`: List description
|
|
118
|
-
- `status`: List status
|
|
119
|
-
|
|
120
|
-
6. **move_task**
|
|
121
|
-
- Moves a task to a different list
|
|
122
|
-
- Required parameters:
|
|
123
|
-
- `taskId`: ID of the task to move
|
|
124
|
-
- `listId`: ID of the destination list
|
|
125
|
-
|
|
126
|
-
7. **duplicate_task**
|
|
127
|
-
- Creates a copy of a task in a specified list
|
|
128
|
-
- Required parameters:
|
|
129
|
-
- `taskId`: ID of the task to duplicate
|
|
130
|
-
- `listId`: ID of the destination list
|
|
131
|
-
|
|
132
|
-
8. **update_task**
|
|
133
|
-
- Updates an existing task
|
|
134
|
-
- Required parameters:
|
|
135
|
-
- `taskId`: ID of the task to update
|
|
136
|
-
- Optional parameters:
|
|
137
|
-
- `name`: New task name
|
|
138
|
-
- `description`: New description
|
|
139
|
-
- `status`: New status
|
|
140
|
-
- `priority`: New priority level (1-4)
|
|
141
|
-
- `dueDate`: New due date (ISO string)
|
|
142
|
-
|
|
143
|
-
### Available Prompts
|
|
83
|
+
**create_folder** `(spaceId|spaceName, folderName, ?overrideStatuses)`
|
|
84
|
+
Create folder in space.
|
|
85
|
+
|
|
86
|
+
**create_list_in_folder** `(folderId|folderName, listName)`
|
|
87
|
+
Create list in folder with optional content and status.
|
|
88
|
+
|
|
89
|
+
## Available Prompts
|
|
144
90
|
|
|
145
91
|
1. **summarize_tasks**
|
|
146
|
-
-
|
|
147
|
-
-
|
|
148
|
-
-
|
|
149
|
-
- Suggests task relationships
|
|
92
|
+
- Basic task summary by status
|
|
93
|
+
- Lists tasks with their current states
|
|
94
|
+
- Shows task relationships within lists
|
|
150
95
|
|
|
151
96
|
2. **analyze_priorities**
|
|
152
|
-
-
|
|
153
|
-
- Identifies misaligned priorities
|
|
97
|
+
- Reviews current task priorities
|
|
154
98
|
- Suggests priority adjustments
|
|
155
99
|
- Recommends task sequencing
|
|
156
100
|
|
|
157
101
|
3. **generate_description**
|
|
158
|
-
-
|
|
159
|
-
-
|
|
160
|
-
|
|
161
|
-
- Success criteria
|
|
162
|
-
- Required resources
|
|
163
|
-
- Dependencies
|
|
164
|
-
- Potential risks
|
|
165
|
-
|
|
166
|
-
## Name Resolution
|
|
167
|
-
|
|
168
|
-
Most tools support finding items by either ID or name:
|
|
169
|
-
- Spaces can be referenced by `spaceId` or `spaceName`
|
|
170
|
-
- Folders can be referenced by `folderId` or `folderName` (with space information)
|
|
171
|
-
- Lists can be referenced by `listId` or found within spaces/folders
|
|
172
|
-
|
|
173
|
-
Name matching is case-insensitive for convenience.
|
|
102
|
+
- Interactive prompt for creating task descriptions
|
|
103
|
+
- Helps structure task information
|
|
104
|
+
- Includes objectives, criteria, and dependencies
|
|
174
105
|
|
|
175
106
|
## Error Handling
|
|
176
107
|
|
|
177
|
-
The server provides clear error messages for
|
|
108
|
+
The server provides clear error messages for:
|
|
178
109
|
- Missing required parameters
|
|
179
110
|
- Invalid IDs or names
|
|
180
111
|
- Items not found
|
|
181
112
|
- Permission issues
|
|
182
113
|
- API errors
|
|
114
|
+
- Rate limiting
|
|
183
115
|
|
|
184
|
-
##
|
|
185
|
-
|
|
186
|
-
To add this server to Cursor AI Composer, follow these steps:
|
|
187
|
-
|
|
188
|
-
1. Go to the Features section in the settings.
|
|
189
|
-
2. Add the following command under MCP Servers:
|
|
190
|
-
|
|
191
|
-
```bash
|
|
192
|
-
npx -y @taazkareem/clickup-mcp-server \
|
|
193
|
-
--env CLICKUP_API_KEY=your_api_key_here \
|
|
194
|
-
--env TEAM_ID=your_team_id_here
|
|
195
|
-
```
|
|
196
|
-
3. Replace `your_api_key_here` and `your_team_id_here` with your actual ClickUp credentials.
|
|
197
|
-
4. Click on 'Save' to add the server.
|
|
198
|
-
|
|
199
|
-
You can get these values from:
|
|
200
|
-
- `CLICKUP_API_KEY`: Get from [ClickUp Settings > Apps](https://app.clickup.com/settings/apps)
|
|
201
|
-
- `TEAM_ID`: Your ClickUp Team ID (found in the URL when viewing your workspace or via API)
|
|
202
|
-
|
|
203
|
-
> **Security Note**: Your API key will be stored securely and will not be exposed to AI models.
|
|
204
|
-
|
|
205
|
-
## Development
|
|
116
|
+
## Support the Developer
|
|
206
117
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
git clone https://github.com/taazkareem/clickup-mcp-server.git
|
|
210
|
-
cd clickup-mcp-server
|
|
211
|
-
```
|
|
118
|
+
If you find this project useful, please consider supporting the developer:
|
|
119
|
+
Talib Kareem (taazkareem@icloud.com)
|
|
212
120
|
|
|
213
|
-
|
|
214
|
-
```bash
|
|
215
|
-
npm install
|
|
216
|
-
```
|
|
121
|
+
[](https://www.buymeacoffee.com/taazkareem)
|
|
217
122
|
|
|
218
|
-
|
|
219
|
-
```bash
|
|
220
|
-
npm run dev
|
|
221
|
-
```
|
|
123
|
+
<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>
|
|
222
124
|
|
|
223
125
|
## Contributing
|
|
224
126
|
|
|
@@ -226,4 +128,5 @@ Contributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md)
|
|
|
226
128
|
|
|
227
129
|
## License
|
|
228
130
|
|
|
229
|
-
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
131
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
132
|
+
|
package/build/config.js
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
import dotenv from 'dotenv';
|
|
2
|
-
// Load environment variables from .env file
|
|
3
|
-
dotenv.config();
|
|
4
|
-
// Parse command line arguments for --env flags
|
|
5
1
|
const args = process.argv.slice(2);
|
|
6
2
|
const envArgs = {};
|
|
7
3
|
for (let i = 0; i < args.length; i++) {
|
|
@@ -9,16 +5,15 @@ for (let i = 0; i < args.length; i++) {
|
|
|
9
5
|
const [key, value] = args[i + 1].split('=');
|
|
10
6
|
if (key === 'CLICKUP_API_KEY')
|
|
11
7
|
envArgs.clickupApiKey = value;
|
|
12
|
-
if (key === '
|
|
13
|
-
envArgs.
|
|
14
|
-
i++;
|
|
8
|
+
if (key === 'CLICKUP_TEAM_ID')
|
|
9
|
+
envArgs.clickupTeamId = value;
|
|
10
|
+
i++;
|
|
15
11
|
}
|
|
16
12
|
}
|
|
17
13
|
const configuration = {
|
|
18
14
|
clickupApiKey: envArgs.clickupApiKey || process.env.CLICKUP_API_KEY || '',
|
|
19
|
-
|
|
15
|
+
clickupTeamId: envArgs.clickupTeamId || process.env.CLICKUP_TEAM_ID || '',
|
|
20
16
|
};
|
|
21
|
-
// Check for missing environment variables
|
|
22
17
|
const missingEnvVars = Object.entries(configuration)
|
|
23
18
|
.filter(([_, value]) => !value)
|
|
24
19
|
.map(([key]) => key);
|