@griffinwork40/clickup-mcp-server 1.1.5 → 1.1.6
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 +583 -71
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -1,6 +1,31 @@
|
|
|
1
1
|
# ClickUp MCP Server
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/@griffinwork40/clickup-mcp-server)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
|
|
6
|
+
A Model Context Protocol (MCP) server that provides comprehensive integration with the ClickUp API. This server enables LLMs like Claude to manage tasks, projects, teams, and workflows programmatically.
|
|
7
|
+
|
|
8
|
+
## Table of Contents
|
|
9
|
+
|
|
10
|
+
- [Features](#features)
|
|
11
|
+
- [Installation](#installation)
|
|
12
|
+
- [Configuration](#configuration)
|
|
13
|
+
- [Usage](#usage)
|
|
14
|
+
- [Running the Server](#running-the-server)
|
|
15
|
+
- [Claude Desktop Integration](#claude-desktop-integration)
|
|
16
|
+
- [Cursor IDE Integration](#cursor-ide-integration)
|
|
17
|
+
- [API Reference](#api-reference)
|
|
18
|
+
- [Organization Tools](#organization-tools)
|
|
19
|
+
- [Task Management Tools](#task-management-tools)
|
|
20
|
+
- [Search & Comments Tools](#search--comments-tools)
|
|
21
|
+
- [Advanced Tools](#advanced-tools)
|
|
22
|
+
- [Examples](#examples)
|
|
23
|
+
- [Response Formats](#response-formats)
|
|
24
|
+
- [Rate Limits](#rate-limits)
|
|
25
|
+
- [Development](#development)
|
|
26
|
+
- [Contributing](#contributing)
|
|
27
|
+
- [License](#license)
|
|
28
|
+
- [Links](#links)
|
|
4
29
|
|
|
5
30
|
## Features
|
|
6
31
|
|
|
@@ -13,6 +38,8 @@ A Model Context Protocol (MCP) server that provides comprehensive integration wi
|
|
|
13
38
|
- Create, read, update, and delete tasks
|
|
14
39
|
- Set task status, priority, assignees, and due dates
|
|
15
40
|
- Manage task descriptions and details
|
|
41
|
+
- Count tasks by status with pagination handling
|
|
42
|
+
- Export tasks to CSV format
|
|
16
43
|
|
|
17
44
|
### Search & Collaboration
|
|
18
45
|
- Search tasks across teams with filters
|
|
@@ -22,44 +49,82 @@ A Model Context Protocol (MCP) server that provides comprehensive integration wi
|
|
|
22
49
|
- Set custom field values
|
|
23
50
|
- Track time on tasks
|
|
24
51
|
- Get time entries
|
|
52
|
+
- Export to CSV with E.164 phone number normalization
|
|
25
53
|
|
|
26
54
|
## Installation
|
|
27
55
|
|
|
56
|
+
### From npm
|
|
57
|
+
|
|
28
58
|
```bash
|
|
59
|
+
npm install -g @griffinwork40/clickup-mcp-server
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### From source
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
git clone https://github.com/griffinwork40/clickup-mcp.git
|
|
66
|
+
cd clickup-mcp
|
|
29
67
|
npm install
|
|
30
68
|
npm run build
|
|
31
69
|
```
|
|
32
70
|
|
|
33
71
|
## Configuration
|
|
34
72
|
|
|
35
|
-
|
|
73
|
+
### Environment Variables
|
|
74
|
+
|
|
75
|
+
| Variable | Required | Description |
|
|
76
|
+
|----------|----------|-------------|
|
|
77
|
+
| `CLICKUP_API_TOKEN` | Yes | Your ClickUp API token (starts with `pk_`) |
|
|
78
|
+
|
|
79
|
+
### Getting Your API Token
|
|
36
80
|
|
|
81
|
+
1. Go to [https://app.clickup.com/settings/apps](https://app.clickup.com/settings/apps)
|
|
82
|
+
2. Under "API Token", click "Generate"
|
|
83
|
+
3. Copy the token (it starts with `pk_`)
|
|
84
|
+
4. Store it securely - you won't be able to see it again!
|
|
85
|
+
|
|
86
|
+
### Setting the Environment Variable
|
|
87
|
+
|
|
88
|
+
**Linux/macOS:**
|
|
37
89
|
```bash
|
|
38
90
|
export CLICKUP_API_TOKEN="pk_your_token_here"
|
|
39
91
|
```
|
|
40
92
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
93
|
+
**Windows (Command Prompt):**
|
|
94
|
+
```cmd
|
|
95
|
+
set CLICKUP_API_TOKEN=pk_your_token_here
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**Windows (PowerShell):**
|
|
99
|
+
```powershell
|
|
100
|
+
$env:CLICKUP_API_TOKEN="pk_your_token_here"
|
|
101
|
+
```
|
|
45
102
|
|
|
46
103
|
## Usage
|
|
47
104
|
|
|
48
|
-
###
|
|
105
|
+
### Running the Server
|
|
49
106
|
|
|
107
|
+
**Standalone mode:**
|
|
50
108
|
```bash
|
|
109
|
+
# If installed globally
|
|
110
|
+
clickup-mcp
|
|
111
|
+
|
|
112
|
+
# If installed from source
|
|
51
113
|
npm start
|
|
52
114
|
```
|
|
53
115
|
|
|
54
|
-
|
|
55
|
-
|
|
116
|
+
**Development mode with auto-reload:**
|
|
56
117
|
```bash
|
|
57
118
|
npm run dev
|
|
58
119
|
```
|
|
59
120
|
|
|
60
|
-
###
|
|
121
|
+
### Claude Desktop Integration
|
|
122
|
+
|
|
123
|
+
Add the following to your Claude Desktop configuration file:
|
|
61
124
|
|
|
62
|
-
|
|
125
|
+
**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
126
|
+
**Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
|
|
127
|
+
**Linux:** `~/.config/Claude/claude_desktop_config.json`
|
|
63
128
|
|
|
64
129
|
```json
|
|
65
130
|
{
|
|
@@ -75,118 +140,565 @@ Add to your Claude Desktop configuration (`~/Library/Application Support/Claude/
|
|
|
75
140
|
}
|
|
76
141
|
```
|
|
77
142
|
|
|
78
|
-
|
|
143
|
+
**Using npx (no installation required):**
|
|
144
|
+
```json
|
|
145
|
+
{
|
|
146
|
+
"mcpServers": {
|
|
147
|
+
"clickup": {
|
|
148
|
+
"command": "npx",
|
|
149
|
+
"args": ["-y", "@griffinwork40/clickup-mcp-server"],
|
|
150
|
+
"env": {
|
|
151
|
+
"CLICKUP_API_TOKEN": "pk_your_token_here"
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Cursor IDE Integration
|
|
159
|
+
|
|
160
|
+
Add to your Cursor MCP settings (`.cursor/mcp.json` in your project or global settings):
|
|
161
|
+
|
|
162
|
+
```json
|
|
163
|
+
{
|
|
164
|
+
"mcpServers": {
|
|
165
|
+
"clickup": {
|
|
166
|
+
"command": "npx",
|
|
167
|
+
"args": ["-y", "@griffinwork40/clickup-mcp-server"],
|
|
168
|
+
"env": {
|
|
169
|
+
"CLICKUP_API_TOKEN": "pk_your_token_here"
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## API Reference
|
|
79
177
|
|
|
80
178
|
### Organization Tools
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
179
|
+
|
|
180
|
+
#### `clickup_get_teams`
|
|
181
|
+
List all teams/workspaces accessible to the authenticated user.
|
|
182
|
+
|
|
183
|
+
**Parameters:**
|
|
184
|
+
| Name | Type | Required | Description |
|
|
185
|
+
|------|------|----------|-------------|
|
|
186
|
+
| `response_format` | `"markdown"` \| `"json"` | No | Output format (default: `"markdown"`) |
|
|
187
|
+
|
|
188
|
+
**Example:**
|
|
189
|
+
```json
|
|
190
|
+
{
|
|
191
|
+
"tool": "clickup_get_teams",
|
|
192
|
+
"arguments": {
|
|
193
|
+
"response_format": "json"
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
#### `clickup_get_spaces`
|
|
199
|
+
Get all spaces in a team/workspace.
|
|
200
|
+
|
|
201
|
+
**Parameters:**
|
|
202
|
+
| Name | Type | Required | Description |
|
|
203
|
+
|------|------|----------|-------------|
|
|
204
|
+
| `team_id` | string | Yes | Team/workspace ID |
|
|
205
|
+
| `archived` | boolean | No | Include archived spaces (default: `false`) |
|
|
206
|
+
| `response_format` | `"markdown"` \| `"json"` | No | Output format (default: `"markdown"`) |
|
|
207
|
+
|
|
208
|
+
**Example:**
|
|
209
|
+
```json
|
|
210
|
+
{
|
|
211
|
+
"tool": "clickup_get_spaces",
|
|
212
|
+
"arguments": {
|
|
213
|
+
"team_id": "123456",
|
|
214
|
+
"archived": false
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
#### `clickup_get_folders`
|
|
220
|
+
Get all folders in a space.
|
|
221
|
+
|
|
222
|
+
**Parameters:**
|
|
223
|
+
| Name | Type | Required | Description |
|
|
224
|
+
|------|------|----------|-------------|
|
|
225
|
+
| `space_id` | string | Yes | Space ID |
|
|
226
|
+
| `archived` | boolean | No | Include archived folders (default: `false`) |
|
|
227
|
+
| `response_format` | `"markdown"` \| `"json"` | No | Output format (default: `"markdown"`) |
|
|
228
|
+
|
|
229
|
+
#### `clickup_get_lists`
|
|
230
|
+
Get all lists in a folder or space.
|
|
231
|
+
|
|
232
|
+
**Parameters:**
|
|
233
|
+
| Name | Type | Required | Description |
|
|
234
|
+
|------|------|----------|-------------|
|
|
235
|
+
| `folder_id` | string | No* | Folder ID |
|
|
236
|
+
| `space_id` | string | No* | Space ID (for folderless lists) |
|
|
237
|
+
| `archived` | boolean | No | Include archived lists (default: `false`) |
|
|
238
|
+
| `response_format` | `"markdown"` \| `"json"` | No | Output format (default: `"markdown"`) |
|
|
239
|
+
|
|
240
|
+
*Must provide either `folder_id` OR `space_id`, but not both.
|
|
241
|
+
|
|
242
|
+
#### `clickup_get_list_details`
|
|
243
|
+
Get detailed information about a specific list, including available statuses and custom fields.
|
|
244
|
+
|
|
245
|
+
**Parameters:**
|
|
246
|
+
| Name | Type | Required | Description |
|
|
247
|
+
|------|------|----------|-------------|
|
|
248
|
+
| `list_id` | string | Yes | List ID |
|
|
249
|
+
| `response_format` | `"markdown"` \| `"json"` | No | Output format (default: `"markdown"`) |
|
|
250
|
+
|
|
251
|
+
### Task Management Tools
|
|
252
|
+
|
|
253
|
+
#### `clickup_get_tasks`
|
|
254
|
+
Get tasks in a specific list with filtering and pagination.
|
|
255
|
+
|
|
256
|
+
**Parameters:**
|
|
257
|
+
| Name | Type | Required | Description |
|
|
258
|
+
|------|------|----------|-------------|
|
|
259
|
+
| `list_id` | string | Yes | List ID |
|
|
260
|
+
| `archived` | boolean | No | Include archived tasks (default: `false`) |
|
|
261
|
+
| `include_closed` | boolean | No | Include closed tasks (default: `false`) |
|
|
262
|
+
| `statuses` | string[] | No | Filter by status names |
|
|
263
|
+
| `assignees` | number[] | No | Filter by assignee IDs |
|
|
264
|
+
| `limit` | number | No | Max results 1-100 (default: `20`) |
|
|
265
|
+
| `offset` | number | No | Pagination offset (default: `0`) |
|
|
266
|
+
| `response_format` | `"markdown"` \| `"json"` | No | Output format (default: `"markdown"`) |
|
|
267
|
+
| `response_mode` | `"full"` \| `"compact"` \| `"summary"` | No | Detail level (default: `"full"`) |
|
|
268
|
+
|
|
269
|
+
**Example:**
|
|
270
|
+
```json
|
|
271
|
+
{
|
|
272
|
+
"tool": "clickup_get_tasks",
|
|
273
|
+
"arguments": {
|
|
274
|
+
"list_id": "123456",
|
|
275
|
+
"statuses": ["in progress", "review"],
|
|
276
|
+
"response_mode": "compact",
|
|
277
|
+
"limit": 50
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
#### `clickup_get_task`
|
|
283
|
+
Get detailed information about a specific task.
|
|
284
|
+
|
|
285
|
+
**Parameters:**
|
|
286
|
+
| Name | Type | Required | Description |
|
|
287
|
+
|------|------|----------|-------------|
|
|
288
|
+
| `task_id` | string | Yes | Task ID |
|
|
289
|
+
| `response_format` | `"markdown"` \| `"json"` | No | Output format (default: `"markdown"`) |
|
|
290
|
+
|
|
291
|
+
#### `clickup_create_task`
|
|
292
|
+
Create a new task in a list.
|
|
293
|
+
|
|
294
|
+
**Parameters:**
|
|
295
|
+
| Name | Type | Required | Description |
|
|
296
|
+
|------|------|----------|-------------|
|
|
297
|
+
| `list_id` | string | Yes | List ID |
|
|
298
|
+
| `name` | string | Yes | Task name |
|
|
299
|
+
| `description` | string | No | Task description (markdown supported) |
|
|
300
|
+
| `status` | string | No | Task status (must match list statuses) |
|
|
301
|
+
| `priority` | 1-4 | No | Priority: 1=Urgent, 2=High, 3=Normal, 4=Low |
|
|
302
|
+
| `assignees` | number[] | No | Assignee user IDs |
|
|
303
|
+
| `due_date` | number | No | Due date (Unix timestamp in milliseconds) |
|
|
304
|
+
| `start_date` | number | No | Start date (Unix timestamp in milliseconds) |
|
|
305
|
+
| `tags` | string[] | No | Tag names |
|
|
306
|
+
| `response_format` | `"markdown"` \| `"json"` | No | Output format (default: `"markdown"`) |
|
|
307
|
+
|
|
308
|
+
**Example:**
|
|
309
|
+
```json
|
|
310
|
+
{
|
|
311
|
+
"tool": "clickup_create_task",
|
|
312
|
+
"arguments": {
|
|
313
|
+
"list_id": "123456",
|
|
314
|
+
"name": "Implement user authentication",
|
|
315
|
+
"description": "Add OAuth2 login support for Google and GitHub",
|
|
316
|
+
"priority": 2,
|
|
317
|
+
"status": "to do",
|
|
318
|
+
"assignees": [12345678],
|
|
319
|
+
"tags": ["feature", "security"]
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
#### `clickup_update_task`
|
|
325
|
+
Update an existing task's properties.
|
|
326
|
+
|
|
327
|
+
**Parameters:**
|
|
328
|
+
| Name | Type | Required | Description |
|
|
329
|
+
|------|------|----------|-------------|
|
|
330
|
+
| `task_id` | string | Yes | Task ID |
|
|
331
|
+
| `name` | string | No | New task name |
|
|
332
|
+
| `description` | string | No | New description |
|
|
333
|
+
| `status` | string | No | New status |
|
|
334
|
+
| `priority` | 1-4 | No | New priority |
|
|
335
|
+
| `assignees_add` | number[] | No | User IDs to add as assignees |
|
|
336
|
+
| `assignees_rem` | number[] | No | User IDs to remove from assignees |
|
|
337
|
+
| `due_date` | number | No | New due date (Unix timestamp) |
|
|
338
|
+
| `response_format` | `"markdown"` \| `"json"` | No | Output format (default: `"markdown"`) |
|
|
339
|
+
|
|
340
|
+
**Example:**
|
|
341
|
+
```json
|
|
342
|
+
{
|
|
343
|
+
"tool": "clickup_update_task",
|
|
344
|
+
"arguments": {
|
|
345
|
+
"task_id": "abc123",
|
|
346
|
+
"status": "in progress",
|
|
347
|
+
"priority": 1,
|
|
348
|
+
"assignees_add": [12345678]
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
#### `clickup_delete_task`
|
|
354
|
+
Delete a task permanently. ⚠️ This action cannot be undone.
|
|
355
|
+
|
|
356
|
+
**Parameters:**
|
|
357
|
+
| Name | Type | Required | Description |
|
|
358
|
+
|------|------|----------|-------------|
|
|
359
|
+
| `task_id` | string | Yes | Task ID to delete |
|
|
360
|
+
|
|
361
|
+
#### `clickup_count_tasks_by_status`
|
|
362
|
+
Count tasks in a list by status. Handles pagination internally for accurate counts.
|
|
363
|
+
|
|
364
|
+
**Parameters:**
|
|
365
|
+
| Name | Type | Required | Description |
|
|
366
|
+
|------|------|----------|-------------|
|
|
367
|
+
| `list_id` | string | Yes | List ID |
|
|
368
|
+
| `statuses` | string[] | No | Filter by specific status names |
|
|
369
|
+
| `archived` | boolean | No | Include archived tasks (default: `false`) |
|
|
370
|
+
| `include_closed` | boolean | No | Include closed tasks (default: `false`) |
|
|
371
|
+
| `response_format` | `"markdown"` \| `"json"` | No | Output format (default: `"markdown"`) |
|
|
372
|
+
|
|
373
|
+
**Example:**
|
|
374
|
+
```json
|
|
375
|
+
{
|
|
376
|
+
"tool": "clickup_count_tasks_by_status",
|
|
377
|
+
"arguments": {
|
|
378
|
+
"list_id": "123456",
|
|
379
|
+
"statuses": ["#1 - phone call", "#2 - follow up"]
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
#### `clickup_export_tasks_to_csv`
|
|
385
|
+
Export tasks from a list to CSV format with custom field support.
|
|
386
|
+
|
|
387
|
+
**Parameters:**
|
|
388
|
+
| Name | Type | Required | Description |
|
|
389
|
+
|------|------|----------|-------------|
|
|
390
|
+
| `list_id` | string | Yes | List ID |
|
|
391
|
+
| `statuses` | string[] | No | Filter by status names |
|
|
392
|
+
| `archived` | boolean | No | Include archived tasks (default: `false`) |
|
|
393
|
+
| `include_closed` | boolean | No | Include closed tasks (default: `false`) |
|
|
394
|
+
| `custom_fields` | string[] | No | Specific custom field names to include |
|
|
395
|
+
| `include_standard_fields` | boolean | No | Include standard fields (default: `true`) |
|
|
396
|
+
| `add_phone_number_column` | boolean | No | Add E.164 formatted phone column (default: `false`) |
|
|
397
|
+
|
|
398
|
+
**Example:**
|
|
399
|
+
```json
|
|
400
|
+
{
|
|
401
|
+
"tool": "clickup_export_tasks_to_csv",
|
|
402
|
+
"arguments": {
|
|
403
|
+
"list_id": "123456",
|
|
404
|
+
"statuses": ["#1 - phone call"],
|
|
405
|
+
"custom_fields": ["Email", "Company", "Phone"],
|
|
406
|
+
"add_phone_number_column": true
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
### Search & Comments Tools
|
|
412
|
+
|
|
413
|
+
#### `clickup_search_tasks`
|
|
414
|
+
Search for tasks across a team with advanced filtering.
|
|
415
|
+
|
|
416
|
+
**Parameters:**
|
|
417
|
+
| Name | Type | Required | Description |
|
|
418
|
+
|------|------|----------|-------------|
|
|
419
|
+
| `team_id` | string | Yes | Team ID to search in |
|
|
420
|
+
| `query` | string | No | Search query string |
|
|
421
|
+
| `statuses` | string[] | No | Filter by status names |
|
|
422
|
+
| `assignees` | number[] | No | Filter by assignee IDs |
|
|
423
|
+
| `tags` | string[] | No | Filter by tag names |
|
|
424
|
+
| `date_created_gt` | number | No | Created after (Unix timestamp) |
|
|
425
|
+
| `date_updated_gt` | number | No | Updated after (Unix timestamp) |
|
|
426
|
+
| `limit` | number | No | Max results 1-100 (default: `20`) |
|
|
427
|
+
| `offset` | number | No | Pagination offset (default: `0`) |
|
|
428
|
+
| `response_format` | `"markdown"` \| `"json"` | No | Output format (default: `"markdown"`) |
|
|
429
|
+
| `response_mode` | `"full"` \| `"compact"` \| `"summary"` | No | Detail level (default: `"full"`) |
|
|
430
|
+
|
|
431
|
+
**Example:**
|
|
432
|
+
```json
|
|
433
|
+
{
|
|
434
|
+
"tool": "clickup_search_tasks",
|
|
435
|
+
"arguments": {
|
|
436
|
+
"team_id": "123456",
|
|
437
|
+
"query": "authentication",
|
|
438
|
+
"statuses": ["in progress", "to do"],
|
|
439
|
+
"response_mode": "compact"
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
#### `clickup_add_comment`
|
|
445
|
+
Add a comment to a task.
|
|
446
|
+
|
|
447
|
+
**Parameters:**
|
|
448
|
+
| Name | Type | Required | Description |
|
|
449
|
+
|------|------|----------|-------------|
|
|
450
|
+
| `task_id` | string | Yes | Task ID |
|
|
451
|
+
| `comment_text` | string | Yes | Comment text (markdown supported) |
|
|
452
|
+
| `notify_all` | boolean | No | Notify all task watchers (default: `false`) |
|
|
453
|
+
|
|
454
|
+
**Example:**
|
|
455
|
+
```json
|
|
456
|
+
{
|
|
457
|
+
"tool": "clickup_add_comment",
|
|
458
|
+
"arguments": {
|
|
459
|
+
"task_id": "abc123",
|
|
460
|
+
"comment_text": "Great progress! Ready for review.",
|
|
461
|
+
"notify_all": true
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
#### `clickup_get_comments`
|
|
467
|
+
Get all comments on a task.
|
|
468
|
+
|
|
469
|
+
**Parameters:**
|
|
470
|
+
| Name | Type | Required | Description |
|
|
471
|
+
|------|------|----------|-------------|
|
|
472
|
+
| `task_id` | string | Yes | Task ID |
|
|
473
|
+
| `response_format` | `"markdown"` \| `"json"` | No | Output format (default: `"markdown"`) |
|
|
100
474
|
|
|
101
475
|
### Advanced Tools
|
|
102
|
-
- `clickup_set_custom_field` - Set custom field values
|
|
103
|
-
- `clickup_start_time_entry` - Start time tracking
|
|
104
|
-
- `clickup_stop_time_entry` - Stop time tracking
|
|
105
|
-
- `clickup_get_time_entries` - Get time tracking entries
|
|
106
476
|
|
|
107
|
-
|
|
477
|
+
#### `clickup_set_custom_field`
|
|
478
|
+
Set a custom field value on a task.
|
|
108
479
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
480
|
+
**Parameters:**
|
|
481
|
+
| Name | Type | Required | Description |
|
|
482
|
+
|------|------|----------|-------------|
|
|
483
|
+
| `task_id` | string | Yes | Task ID |
|
|
484
|
+
| `field_id` | string | Yes | Custom field ID |
|
|
485
|
+
| `value` | any | Yes | Value to set (format depends on field type) |
|
|
114
486
|
|
|
115
|
-
|
|
487
|
+
**Value formats by field type:**
|
|
488
|
+
- **Text/URL/Email:** `"string value"`
|
|
489
|
+
- **Number/Currency:** `123`
|
|
490
|
+
- **Date:** Unix timestamp in milliseconds
|
|
491
|
+
- **Dropdown:** `"option_uuid"`
|
|
492
|
+
- **Checkbox:** `true` or `false`
|
|
116
493
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
494
|
+
**Example:**
|
|
495
|
+
```json
|
|
496
|
+
{
|
|
497
|
+
"tool": "clickup_set_custom_field",
|
|
498
|
+
"arguments": {
|
|
499
|
+
"task_id": "abc123",
|
|
500
|
+
"field_id": "cf_123456",
|
|
501
|
+
"value": "completed"
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
```
|
|
123
505
|
|
|
124
|
-
|
|
506
|
+
#### `clickup_start_time_entry`
|
|
507
|
+
Start tracking time on a task.
|
|
125
508
|
|
|
126
|
-
|
|
509
|
+
**Parameters:**
|
|
510
|
+
| Name | Type | Required | Description |
|
|
511
|
+
|------|------|----------|-------------|
|
|
512
|
+
| `team_id` | string | Yes | Team ID |
|
|
513
|
+
| `task_id` | string | Yes | Task ID |
|
|
514
|
+
| `description` | string | No | Description of work |
|
|
127
515
|
|
|
128
|
-
|
|
129
|
-
|
|
516
|
+
#### `clickup_stop_time_entry`
|
|
517
|
+
Stop the currently running time entry.
|
|
130
518
|
|
|
131
|
-
|
|
519
|
+
**Parameters:**
|
|
520
|
+
| Name | Type | Required | Description |
|
|
521
|
+
|------|------|----------|-------------|
|
|
522
|
+
| `team_id` | string | Yes | Team ID |
|
|
132
523
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
- 1000 requests/minute (Business Plus and above)
|
|
524
|
+
#### `clickup_get_time_entries`
|
|
525
|
+
Get time tracking entries for a team.
|
|
136
526
|
|
|
137
|
-
|
|
527
|
+
**Parameters:**
|
|
528
|
+
| Name | Type | Required | Description |
|
|
529
|
+
|------|------|----------|-------------|
|
|
530
|
+
| `team_id` | string | Yes | Team ID |
|
|
531
|
+
| `assignee` | number | No | Filter by assignee user ID |
|
|
532
|
+
| `start_date` | number | No | Filter after date (Unix timestamp) |
|
|
533
|
+
| `end_date` | number | No | Filter before date (Unix timestamp) |
|
|
534
|
+
| `response_format` | `"markdown"` \| `"json"` | No | Output format (default: `"markdown"`) |
|
|
138
535
|
|
|
139
536
|
## Examples
|
|
140
537
|
|
|
141
|
-
###
|
|
538
|
+
### Get Team Structure
|
|
539
|
+
|
|
540
|
+
```
|
|
541
|
+
"List all my ClickUp teams and their spaces"
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
The assistant will call `clickup_get_teams` followed by `clickup_get_spaces` for each team.
|
|
545
|
+
|
|
546
|
+
### Create and Assign a Task
|
|
142
547
|
|
|
143
|
-
```
|
|
548
|
+
```
|
|
549
|
+
"Create a task called 'Fix login bug' in list 123456, assign it to user 789, and set it as urgent"
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
```json
|
|
144
553
|
{
|
|
145
554
|
"tool": "clickup_create_task",
|
|
146
555
|
"arguments": {
|
|
147
556
|
"list_id": "123456",
|
|
148
|
-
"name": "
|
|
149
|
-
"
|
|
150
|
-
"
|
|
151
|
-
"status": "to do",
|
|
152
|
-
"assignees": [123456]
|
|
557
|
+
"name": "Fix login bug",
|
|
558
|
+
"priority": 1,
|
|
559
|
+
"assignees": [789]
|
|
153
560
|
}
|
|
154
561
|
}
|
|
155
562
|
```
|
|
156
563
|
|
|
157
|
-
### Search for
|
|
564
|
+
### Search for Tasks
|
|
158
565
|
|
|
159
|
-
```
|
|
566
|
+
```
|
|
567
|
+
"Find all in-progress tasks about authentication in team 123456"
|
|
568
|
+
```
|
|
569
|
+
|
|
570
|
+
```json
|
|
160
571
|
{
|
|
161
572
|
"tool": "clickup_search_tasks",
|
|
162
573
|
"arguments": {
|
|
163
574
|
"team_id": "123456",
|
|
164
575
|
"query": "authentication",
|
|
165
|
-
"statuses": ["in progress"
|
|
576
|
+
"statuses": ["in progress"]
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
### Export Leads to CSV
|
|
582
|
+
|
|
583
|
+
```
|
|
584
|
+
"Export all leads with status '#1 - phone call' from list 123456 to CSV with phone numbers"
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
```json
|
|
588
|
+
{
|
|
589
|
+
"tool": "clickup_export_tasks_to_csv",
|
|
590
|
+
"arguments": {
|
|
591
|
+
"list_id": "123456",
|
|
592
|
+
"statuses": ["#1 - phone call"],
|
|
593
|
+
"add_phone_number_column": true
|
|
166
594
|
}
|
|
167
595
|
}
|
|
168
596
|
```
|
|
169
597
|
|
|
598
|
+
## Response Formats
|
|
599
|
+
|
|
600
|
+
All tools support two response formats:
|
|
601
|
+
|
|
602
|
+
| Format | Description | Use Case |
|
|
603
|
+
|--------|-------------|----------|
|
|
604
|
+
| `markdown` | Human-readable formatted text | Default, best for conversational AI |
|
|
605
|
+
| `json` | Structured JSON data | Programmatic processing |
|
|
606
|
+
|
|
607
|
+
### Response Modes (Task Tools)
|
|
608
|
+
|
|
609
|
+
Task-related tools also support response modes:
|
|
610
|
+
|
|
611
|
+
| Mode | Description | Use Case |
|
|
612
|
+
|------|-------------|----------|
|
|
613
|
+
| `full` | Complete task details with all fields | Individual task inspection |
|
|
614
|
+
| `compact` | Essential fields only (id, name, status, assignees) | Large result sets |
|
|
615
|
+
| `summary` | Statistical overview by status/assignee | Quick status reports |
|
|
616
|
+
|
|
617
|
+
## Rate Limits
|
|
618
|
+
|
|
619
|
+
ClickUp API rate limits vary by plan:
|
|
620
|
+
|
|
621
|
+
| Plan | Requests/Minute |
|
|
622
|
+
|------|-----------------|
|
|
623
|
+
| Free/Unlimited | 100 |
|
|
624
|
+
| Business | 100 |
|
|
625
|
+
| Business Plus | 1,000 |
|
|
626
|
+
| Enterprise | 10,000 |
|
|
627
|
+
|
|
628
|
+
The server includes automatic error handling for rate limit responses (HTTP 429).
|
|
629
|
+
|
|
170
630
|
## Development
|
|
171
631
|
|
|
172
|
-
###
|
|
632
|
+
### Prerequisites
|
|
633
|
+
|
|
634
|
+
- Node.js 18 or higher
|
|
635
|
+
- npm or yarn
|
|
636
|
+
|
|
637
|
+
### Building
|
|
173
638
|
|
|
174
639
|
```bash
|
|
175
640
|
npm run build
|
|
176
641
|
```
|
|
177
642
|
|
|
178
|
-
###
|
|
643
|
+
### Running Tests
|
|
644
|
+
|
|
645
|
+
```bash
|
|
646
|
+
npm test
|
|
647
|
+
```
|
|
648
|
+
|
|
649
|
+
### Test with Coverage
|
|
650
|
+
|
|
651
|
+
```bash
|
|
652
|
+
npm run test:coverage
|
|
653
|
+
```
|
|
654
|
+
|
|
655
|
+
### Clean Build
|
|
179
656
|
|
|
180
657
|
```bash
|
|
181
658
|
npm run clean
|
|
659
|
+
npm run build
|
|
660
|
+
```
|
|
661
|
+
|
|
662
|
+
### Project Structure
|
|
663
|
+
|
|
664
|
+
```
|
|
665
|
+
clickup-mcp/
|
|
666
|
+
├── src/
|
|
667
|
+
│ ├── index.ts # MCP server entry point and tool definitions
|
|
668
|
+
│ ├── constants.ts # Configuration constants and enums
|
|
669
|
+
│ ├── types.ts # TypeScript type definitions
|
|
670
|
+
│ └── utils.ts # Utility functions for API and formatting
|
|
671
|
+
├── dist/ # Compiled JavaScript output
|
|
672
|
+
├── package.json
|
|
673
|
+
├── tsconfig.json
|
|
674
|
+
└── README.md
|
|
182
675
|
```
|
|
183
676
|
|
|
677
|
+
## Contributing
|
|
678
|
+
|
|
679
|
+
1. Fork the repository
|
|
680
|
+
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
|
|
681
|
+
3. Make your changes with appropriate tests
|
|
682
|
+
4. Run lint and tests (`npm test`)
|
|
683
|
+
5. Commit your changes (`git commit -m 'Add amazing feature'`)
|
|
684
|
+
6. Push to the branch (`git push origin feature/amazing-feature`)
|
|
685
|
+
7. Open a Pull Request
|
|
686
|
+
|
|
687
|
+
### Coding Standards
|
|
688
|
+
|
|
689
|
+
- Use TypeScript strict mode
|
|
690
|
+
- Include JSDoc comments for all public functions
|
|
691
|
+
- Follow existing code style and patterns
|
|
692
|
+
- Write tests for new functionality
|
|
693
|
+
|
|
184
694
|
## License
|
|
185
695
|
|
|
186
|
-
MIT
|
|
696
|
+
MIT License - see [LICENSE](LICENSE) file for details.
|
|
187
697
|
|
|
188
698
|
## Links
|
|
189
699
|
|
|
190
700
|
- [ClickUp API Documentation](https://clickup.com/api)
|
|
191
|
-
- [
|
|
701
|
+
- [Model Context Protocol](https://modelcontextprotocol.io)
|
|
192
702
|
- [MCP TypeScript SDK](https://github.com/modelcontextprotocol/typescript-sdk)
|
|
703
|
+
- [npm Package](https://www.npmjs.com/package/@griffinwork40/clickup-mcp-server)
|
|
704
|
+
- [GitHub Repository](https://github.com/griffinwork40/clickup-mcp)
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@griffinwork40/clickup-mcp-server",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.6",
|
|
4
4
|
"description": "MCP server for ClickUp API integration - manage tasks, projects, and workflows",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"main": "dist/
|
|
6
|
+
"main": "dist/index.js",
|
|
7
7
|
"bin": {
|
|
8
|
-
"clickup-mcp": "dist/
|
|
8
|
+
"clickup-mcp": "dist/index.js"
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"dist",
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"url": "git+https://github.com/griffinwork40/clickup-mcp.git"
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
|
-
"start": "node dist/
|
|
23
|
-
"dev": "tsx watch src/
|
|
22
|
+
"start": "node dist/index.js",
|
|
23
|
+
"dev": "tsx watch src/index.ts",
|
|
24
24
|
"build": "tsc",
|
|
25
25
|
"clean": "rm -rf dist",
|
|
26
26
|
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
|