@taazkareem/clickup-mcp-server 0.2.0 → 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 +282 -181
- package/build/config.js +2 -5
- package/build/index.js +486 -169
- package/build/services/clickup.js +639 -45
- 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,323 @@
|
|
|
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
|
-
##
|
|
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
|
|
5
|
+
## Quick Start (Recommended)
|
|
11
6
|
|
|
12
|
-
|
|
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)
|
|
7
|
+
1. Install the server:
|
|
43
8
|
```bash
|
|
44
|
-
|
|
9
|
+
npm install -g @taazkareem/clickup-mcp-server
|
|
45
10
|
```
|
|
46
11
|
|
|
47
|
-
|
|
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:
|
|
48
17
|
```bash
|
|
49
|
-
|
|
18
|
+
clickup-mcp-server --env CLICKUP_API_KEY=your_api_key_here --env TEAM_ID=your_team_id_here
|
|
50
19
|
```
|
|
51
20
|
|
|
52
|
-
|
|
21
|
+
> **Security Note**: Your API key will be stored securely and not exposed to AI models.
|
|
53
22
|
|
|
54
|
-
|
|
55
|
-
2. Create a `.env` file:
|
|
56
|
-
```env
|
|
57
|
-
CLICKUP_API_KEY=your_api_key_here
|
|
58
|
-
TEAM_ID=your_team_id_here
|
|
59
|
-
```
|
|
23
|
+
## Using with Cursor AI Composer
|
|
60
24
|
|
|
61
|
-
|
|
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
|
|
62
31
|
|
|
63
|
-
|
|
32
|
+
## Alternative Installation
|
|
33
|
+
Run directly without installing:
|
|
64
34
|
```bash
|
|
65
|
-
clickup-mcp-server
|
|
35
|
+
npx @taazkareem/clickup-mcp-server --env CLICKUP_API_KEY=your_api_key_here --env TEAM_ID=your_team_id_here
|
|
66
36
|
```
|
|
67
37
|
|
|
68
|
-
|
|
38
|
+
## Features
|
|
69
39
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
|
74
45
|
|
|
75
|
-
|
|
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
|
|
70
|
+
- No parameters required
|
|
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**
|
|
76
121
|
- Creates a new task in ClickUp
|
|
77
|
-
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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**
|
|
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**
|
|
133
164
|
- Updates an existing task
|
|
134
|
-
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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
|
|
144
288
|
|
|
145
289
|
1. **summarize_tasks**
|
|
146
|
-
-
|
|
147
|
-
-
|
|
148
|
-
-
|
|
149
|
-
- Suggests task relationships
|
|
290
|
+
- Basic task summary by status
|
|
291
|
+
- Lists tasks with their current states
|
|
292
|
+
- Shows task relationships within lists
|
|
150
293
|
|
|
151
294
|
2. **analyze_priorities**
|
|
152
|
-
-
|
|
153
|
-
- Identifies misaligned priorities
|
|
295
|
+
- Reviews current task priorities
|
|
154
296
|
- Suggests priority adjustments
|
|
155
297
|
- Recommends task sequencing
|
|
156
298
|
|
|
157
299
|
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.
|
|
300
|
+
- Interactive prompt for creating task descriptions
|
|
301
|
+
- Helps structure task information
|
|
302
|
+
- Includes objectives, criteria, and dependencies
|
|
174
303
|
|
|
175
304
|
## Error Handling
|
|
176
305
|
|
|
177
|
-
The server provides clear error messages for
|
|
306
|
+
The server provides clear error messages for:
|
|
178
307
|
- Missing required parameters
|
|
179
308
|
- Invalid IDs or names
|
|
180
309
|
- Items not found
|
|
181
310
|
- Permission issues
|
|
182
311
|
- API errors
|
|
312
|
+
- Rate limiting
|
|
183
313
|
|
|
184
|
-
##
|
|
185
|
-
|
|
186
|
-
To add this server to Cursor AI Composer, follow these steps:
|
|
314
|
+
## Support the Developer
|
|
187
315
|
|
|
188
|
-
|
|
189
|
-
|
|
316
|
+
If you find this project useful, please consider supporting the developer:
|
|
317
|
+
Talib Kareem (taazkareem@icloud.com)
|
|
190
318
|
|
|
191
|
-
|
|
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)
|
|
319
|
+
[](https://www.buymeacoffee.com/taazkareem)
|
|
202
320
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
## Development
|
|
206
|
-
|
|
207
|
-
1. Clone the repository:
|
|
208
|
-
```bash
|
|
209
|
-
git clone https://github.com/taazkareem/clickup-mcp-server.git
|
|
210
|
-
cd clickup-mcp-server
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
2. Install dependencies:
|
|
214
|
-
```bash
|
|
215
|
-
npm install
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
3. Start in development mode:
|
|
219
|
-
```bash
|
|
220
|
-
npm run dev
|
|
221
|
-
```
|
|
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>
|
|
222
322
|
|
|
223
323
|
## Contributing
|
|
224
324
|
|
|
@@ -226,4 +326,5 @@ Contributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md)
|
|
|
226
326
|
|
|
227
327
|
## License
|
|
228
328
|
|
|
229
|
-
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
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)
|