@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.
Files changed (2) hide show
  1. package/README.md +583 -71
  2. package/package.json +5 -5
package/README.md CHANGED
@@ -1,6 +1,31 @@
1
1
  # ClickUp MCP Server
2
2
 
3
- A Model Context Protocol (MCP) server that provides comprehensive integration with the ClickUp API. This server enables LLMs to manage tasks, projects, teams, and workflows programmatically.
3
+ [![npm version](https://badge.fury.io/js/%40griffinwork40%2Fclickup-mcp-server.svg)](https://www.npmjs.com/package/@griffinwork40/clickup-mcp-server)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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
- Set your ClickUp API token as an environment variable:
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
- To obtain an API token:
42
- 1. Go to https://app.clickup.com/settings/apps
43
- 2. Click "Generate" under "API Token"
44
- 3. Copy the token (starts with `pk_`)
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
- ### Run the server
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
- ### Development mode with auto-reload
55
-
116
+ **Development mode with auto-reload:**
56
117
  ```bash
57
118
  npm run dev
58
119
  ```
59
120
 
60
- ### With Claude Desktop
121
+ ### Claude Desktop Integration
122
+
123
+ Add the following to your Claude Desktop configuration file:
61
124
 
62
- Add to your Claude Desktop configuration (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
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
- ## Available Tools
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
- - `clickup_get_teams` - List all teams/workspaces
82
- - `clickup_get_spaces` - Get spaces in a team
83
- - `clickup_get_folders` - Get folders in a space
84
- - `clickup_get_lists` - Get lists in folder/space
85
- - `clickup_get_list_details` - Get list details with statuses and custom fields
86
-
87
- ### Task Tools
88
- - `clickup_get_tasks` - Get tasks in a list (paginated, with status filtering)
89
- - `clickup_get_task` - Get detailed task information
90
- - `clickup_create_task` - Create a new task
91
- - `clickup_update_task` - Update task properties
92
- - `clickup_delete_task` - Delete a task
93
- - `clickup_count_tasks_by_status` - Count tasks by status (handles pagination internally)
94
- - `clickup_export_tasks_to_csv` - Export tasks to CSV format (handles pagination, filtering, and custom fields)
95
-
96
- ### Search & Comments
97
- - `clickup_search_tasks` - Search for tasks across a team
98
- - `clickup_add_comment` - Add a comment to a task
99
- - `clickup_get_comments` - Get comments on a task
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
- ## Status Filtering
477
+ #### `clickup_set_custom_field`
478
+ Set a custom field value on a task.
108
479
 
109
- Status filtering has been improved with automatic client-side fallback:
110
- - `clickup_get_tasks` and `clickup_search_tasks` now automatically fall back to client-side filtering if API filtering fails
111
- - `clickup_count_tasks_by_status` is a dedicated tool optimized for counting tasks by status
112
- - `clickup_export_tasks_to_csv` exports tasks to CSV with automatic status filtering and custom field extraction
113
- - All tools handle pagination correctly with status filtering
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
- ## CSV Export
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
- The `clickup_export_tasks_to_csv` tool makes it easy to export tasks:
118
- - Automatically handles pagination for large lists
119
- - Fetches detailed task information to include custom fields
120
- - Supports status filtering
121
- - Returns CSV content that can be saved to a file
122
- - Includes all standard fields (ID, name, status, dates, etc.) and custom fields
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
- ## Response Formats
506
+ #### `clickup_start_time_entry`
507
+ Start tracking time on a task.
125
508
 
126
- All tools support two response formats:
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
- - **JSON** (`response_format: "json"`): Structured data for programmatic processing
129
- - **Markdown** (`response_format: "markdown"`): Human-readable formatted text (default)
516
+ #### `clickup_stop_time_entry`
517
+ Stop the currently running time entry.
130
518
 
131
- ## Rate Limits
519
+ **Parameters:**
520
+ | Name | Type | Required | Description |
521
+ |------|------|----------|-------------|
522
+ | `team_id` | string | Yes | Team ID |
132
523
 
133
- ClickUp API rate limits:
134
- - 100 requests/minute (Business plan)
135
- - 1000 requests/minute (Business Plus and above)
524
+ #### `clickup_get_time_entries`
525
+ Get time tracking entries for a team.
136
526
 
137
- The server implements automatic error handling for rate limit responses.
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
- ### Create a task
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
- ```typescript
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": "Implement new feature",
149
- "description": "Add user authentication to the app",
150
- "priority": 2,
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 tasks
564
+ ### Search for Tasks
158
565
 
159
- ```typescript
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", "to do"]
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
- ### Build
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
- ### Clean
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
- - [MCP Protocol](https://modelcontextprotocol.io)
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.5",
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/server.js",
6
+ "main": "dist/index.js",
7
7
  "bin": {
8
- "clickup-mcp": "dist/server.js"
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/server.js",
23
- "dev": "tsx watch src/server.ts",
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",