@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 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
- ## Features
5
+ ## Quick Start
6
6
 
7
- - 🔄 **Resource Management**
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
- - 📂 **Workspace Organization**
13
- - Create and manage spaces
14
- - Create, update, and delete folders
15
- - Create and manage lists (in spaces or folders)
16
- - Flexible identification using IDs or names
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
- ### Global Installation
48
- ```bash
49
- npm install -g @taazkareem/clickup-mcp-server
50
- ```
20
+ ## Features
51
21
 
52
- ## Configuration
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
- 1. Get your ClickUp API key from [ClickUp Settings](https://app.clickup.com/settings/apps)
55
- 2. Create a `.env` file:
56
- ```env
57
- CLICKUP_API_KEY=your_api_key_here
58
- TEAM_ID=your_team_id_here
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
- ## Usage
36
+ - 🔄 **Smart Integration**
37
+ - Case-insensitive name lookups
38
+ - Markdown support
39
+ - Automatic rate limiting
40
+ - Error handling
62
41
 
63
- ### Starting the Server
64
- ```bash
65
- clickup-mcp-server
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
- ### Available Tools
69
-
70
- 1. **list_spaces**
71
- - Lists all spaces and their lists with IDs
72
- - Shows available statuses for each list
73
- - No parameters required
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
- - Provides a comprehensive summary of tasks
147
- - Groups tasks by status
148
- - Highlights priorities and deadlines
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
- - Analyzes task priority distribution
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
- - Helps generate detailed task descriptions
159
- - Includes:
160
- - Clear objectives
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 common scenarios:
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
- ## Using with Cursor AI Composer
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
- 1. Clone the repository:
208
- ```bash
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
- 2. Install dependencies:
214
- ```bash
215
- npm install
216
- ```
121
+ [![Buy me a coffee](https://img.shields.io/badge/Buy%20me%20a%20coffee-Support-orange)](https://www.buymeacoffee.com/taazkareem)
217
122
 
218
- 3. Start in development mode:
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 === 'TEAM_ID')
13
- envArgs.teamId = value;
14
- i++; // Skip the next argument since we used it
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
- teamId: envArgs.teamId || process.env.TEAM_ID || '',
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);