@alanse/clickup-multi-mcp-server 1.0.0

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 (56) hide show
  1. package/Dockerfile +38 -0
  2. package/LICENSE +21 -0
  3. package/README.md +470 -0
  4. package/build/config.js +237 -0
  5. package/build/index.js +87 -0
  6. package/build/logger.js +163 -0
  7. package/build/middleware/security.js +231 -0
  8. package/build/server.js +288 -0
  9. package/build/services/clickup/base.js +432 -0
  10. package/build/services/clickup/bulk.js +180 -0
  11. package/build/services/clickup/document.js +159 -0
  12. package/build/services/clickup/folder.js +136 -0
  13. package/build/services/clickup/index.js +76 -0
  14. package/build/services/clickup/list.js +191 -0
  15. package/build/services/clickup/tag.js +239 -0
  16. package/build/services/clickup/task/index.js +32 -0
  17. package/build/services/clickup/task/task-attachments.js +105 -0
  18. package/build/services/clickup/task/task-comments.js +114 -0
  19. package/build/services/clickup/task/task-core.js +604 -0
  20. package/build/services/clickup/task/task-custom-fields.js +107 -0
  21. package/build/services/clickup/task/task-search.js +986 -0
  22. package/build/services/clickup/task/task-service.js +104 -0
  23. package/build/services/clickup/task/task-tags.js +113 -0
  24. package/build/services/clickup/time.js +244 -0
  25. package/build/services/clickup/types.js +33 -0
  26. package/build/services/clickup/workspace.js +397 -0
  27. package/build/services/shared.js +61 -0
  28. package/build/sse_server.js +277 -0
  29. package/build/tools/documents.js +489 -0
  30. package/build/tools/folder.js +331 -0
  31. package/build/tools/index.js +16 -0
  32. package/build/tools/list.js +428 -0
  33. package/build/tools/member.js +106 -0
  34. package/build/tools/tag.js +833 -0
  35. package/build/tools/task/attachments.js +357 -0
  36. package/build/tools/task/attachments.types.js +9 -0
  37. package/build/tools/task/bulk-operations.js +338 -0
  38. package/build/tools/task/handlers.js +919 -0
  39. package/build/tools/task/index.js +30 -0
  40. package/build/tools/task/main.js +233 -0
  41. package/build/tools/task/single-operations.js +469 -0
  42. package/build/tools/task/time-tracking.js +575 -0
  43. package/build/tools/task/utilities.js +310 -0
  44. package/build/tools/task/workspace-operations.js +258 -0
  45. package/build/tools/tool-enhancer.js +37 -0
  46. package/build/tools/utils.js +12 -0
  47. package/build/tools/workspace-helper.js +44 -0
  48. package/build/tools/workspace.js +73 -0
  49. package/build/utils/color-processor.js +183 -0
  50. package/build/utils/concurrency-utils.js +248 -0
  51. package/build/utils/date-utils.js +542 -0
  52. package/build/utils/resolver-utils.js +135 -0
  53. package/build/utils/sponsor-service.js +93 -0
  54. package/build/utils/token-utils.js +49 -0
  55. package/package.json +77 -0
  56. package/smithery.yaml +23 -0
package/Dockerfile ADDED
@@ -0,0 +1,38 @@
1
+ # Generated by https://smithery.ai. See: https://smithery.ai/docs/config#dockerfile
2
+ # Use a Node.js base image
3
+ FROM node:18-alpine AS builder
4
+
5
+ # Set the working directory
6
+ WORKDIR /app
7
+
8
+ # Copy package files
9
+ COPY package.json package-lock.json ./
10
+
11
+ # Copy the source files and tsconfig BEFORE npm install
12
+ COPY src ./src
13
+ COPY tsconfig.json ./
14
+
15
+ # Install dependencies
16
+ RUN npm install
17
+
18
+ # Compile TypeScript to JavaScript
19
+ RUN npm run build
20
+
21
+ # Use a smaller image for the runtime
22
+ FROM node:18-alpine AS runtime
23
+
24
+ # Set the working directory
25
+ WORKDIR /app
26
+
27
+ # Copy the build output and node_modules from the builder stage
28
+ COPY --from=builder /app/build ./build
29
+ COPY --from=builder /app/node_modules ./node_modules
30
+
31
+ # Copy the entrypoint script if necessary
32
+ COPY --from=builder /app/package.json ./
33
+
34
+ # Expose the desired port (if the server binds to a port)
35
+ EXPOSE 8080
36
+
37
+ # Define the command to run the application
38
+ CMD ["node", "build/index.js"]
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 ADDED
@@ -0,0 +1,470 @@
1
+ # ClickUp Multi-Workspace MCP Server
2
+
3
+ [![GitHub Stars](https://img.shields.io/github/stars/da-okazaki/clickup-multi-mcp-server?style=flat&logo=github)](https://github.com/da-okazaki/clickup-multi-mcp-server/stargazers)
4
+ [![NPM Version](https://img.shields.io/npm/v/@alanse/clickup-multi-mcp-server.svg?style=flat&logo=npm)](https://www.npmjs.com/package/@alanse/clickup-multi-mcp-server)
5
+
6
+ A Model Context Protocol (MCP) server for integrating **multiple ClickUp workspaces** with AI applications. This server allows AI agents to interact with tasks, spaces, lists, and folders across different ClickUp workspaces through a standardized protocol.
7
+
8
+ ## 🎯 Key Feature: Multi-Workspace Support
9
+
10
+ This fork adds support for managing multiple ClickUp workspaces simultaneously, allowing you to:
11
+ - Work with multiple ClickUp accounts/teams
12
+ - Switch between workspaces seamlessly
13
+ - Maintain separate configurations for each workspace
14
+ - Full backwards compatibility with single workspace setup
15
+
16
+ Based on the excellent [clickup-mcp-server](https://github.com/taazkareem/clickup-mcp-server) by Talib Kareem.
17
+
18
+ ## Requirements
19
+
20
+ - **Node.js v18.0.0 or higher** (required for MCP SDK compatibility)
21
+ - ClickUp API key and Team ID for each workspace you want to integrate
22
+
23
+ ## Quick Start
24
+
25
+ ### Single Workspace (Backwards Compatible)
26
+
27
+ The traditional single workspace setup still works exactly as before:
28
+
29
+ ```json
30
+ {
31
+ "mcpServers": {
32
+ "ClickUp": {
33
+ "command": "npx",
34
+ "args": ["-y", "@alanse/clickup-multi-mcp-server@latest"],
35
+ "env": {
36
+ "CLICKUP_API_KEY": "your-api-key",
37
+ "CLICKUP_TEAM_ID": "your-team-id"
38
+ }
39
+ }
40
+ }
41
+ }
42
+ ```
43
+
44
+ ### Multiple Workspaces (New Feature)
45
+
46
+ Configure multiple workspaces using the `CLICKUP_WORKSPACES` environment variable.
47
+
48
+ **Step 1: Create your workspace configuration**
49
+
50
+ Create a JSON structure like this:
51
+
52
+ ```json
53
+ {
54
+ "default": "work",
55
+ "workspaces": {
56
+ "work": {
57
+ "token": "pk_xxx_work",
58
+ "teamId": "123456",
59
+ "description": "Work workspace"
60
+ },
61
+ "personal": {
62
+ "token": "pk_xxx_personal",
63
+ "teamId": "789012",
64
+ "description": "Personal projects"
65
+ }
66
+ }
67
+ }
68
+ ```
69
+
70
+ **Step 2: Use in your MCP settings**
71
+
72
+ You can specify the configuration in a more readable multi-line format:
73
+
74
+ ```jsonc
75
+ {
76
+ "mcpServers": {
77
+ "ClickUp": {
78
+ "command": "npx",
79
+ "args": ["-y", "@alanse/clickup-multi-mcp-server@latest"],
80
+ "env": {
81
+ // Multi-line format (most readable)
82
+ "CLICKUP_WORKSPACES": {
83
+ "default": "work",
84
+ "workspaces": {
85
+ "work": {
86
+ "token": "pk_xxx_work",
87
+ "teamId": "123456",
88
+ "description": "Work workspace"
89
+ },
90
+ "personal": {
91
+ "token": "pk_xxx_personal",
92
+ "teamId": "789012",
93
+ "description": "Personal projects"
94
+ }
95
+ }
96
+ }
97
+ }
98
+ }
99
+ }
100
+ }
101
+ ```
102
+
103
+ Or as a JSON string (if your MCP client requires string format):
104
+
105
+ ```json
106
+ {
107
+ "mcpServers": {
108
+ "ClickUp": {
109
+ "command": "npx",
110
+ "args": ["-y", "@alanse/clickup-multi-mcp-server@latest"],
111
+ "env": {
112
+ "CLICKUP_WORKSPACES": "{\"default\":\"work\",\"workspaces\":{\"work\":{\"token\":\"pk_xxx_work\",\"teamId\":\"123456\"},\"personal\":{\"token\":\"pk_xxx_personal\",\"teamId\":\"789012\"}}}"
113
+ }
114
+ }
115
+ }
116
+ }
117
+ ```
118
+
119
+ **💡 Tip:** Use an online JSON minifier and then escape the quotes, or use a script to generate the escaped string:
120
+
121
+ ```javascript
122
+ const config = {
123
+ default: "work",
124
+ workspaces: {
125
+ work: { token: "pk_xxx_work", teamId: "123456", description: "Work workspace" },
126
+ personal: { token: "pk_xxx_personal", teamId: "789012", description: "Personal projects" }
127
+ }
128
+ };
129
+ console.log(JSON.stringify(config));
130
+ // Copy the output and use it as CLICKUP_WORKSPACES value
131
+ ```
132
+
133
+ ### Using Workspace Parameter
134
+
135
+ All tools now support an optional `workspace` parameter:
136
+
137
+ ```typescript
138
+ // Get tasks from default workspace
139
+ await getTasks({ list_id: "123456789" });
140
+
141
+ // Get tasks from specific workspace
142
+ await getTasks({ workspace: "personal", list_id: "987654321" });
143
+
144
+ // Get workspace hierarchy for a specific workspace
145
+ await getWorkspaceHierarchy({ workspace: "work" });
146
+ ```
147
+
148
+ ## Smithery Installation (Quick Start)
149
+
150
+ [![smithery badge](https://smithery.ai/badge/@taazkareem/clickup-mcp-server)](https://smithery.ai/server/@TaazKareem/clickup-mcp-server)
151
+
152
+ The server is hosted on [Smithery](https://smithery.ai/server/@taazkareem/clickup-mcp-server). There, you can preview the available tools or copy the commands to run on your specific client app.
153
+
154
+ ## NPX Installation
155
+
156
+ [![NPM Version](https://img.shields.io/npm/v/@taazkareem/clickup-mcp-server.svg?style=flat&logo=npm)](https://www.npmjs.com/package/@taazkareem/clickup-mcp-server)
157
+ [![Dependency Status](https://img.shields.io/badge/dependencies-up%20to%20date-brightgreen)](https://github.com/TaazKareem/clickup-mcp-server/blob/main/package.json)
158
+ [![NPM Downloads](https://img.shields.io/npm/dm/@taazkareem/clickup-mcp-server.svg?style=flat&logo=npm)](https://npmcharts.com/compare/@taazkareem/clickup-mcp-server?minimal=true)
159
+
160
+ Add this entry to your client's MCP settings JSON file:
161
+
162
+ ```json
163
+ {
164
+ "mcpServers": {
165
+ "ClickUp": {
166
+ "command": "npx",
167
+ "args": [
168
+ "-y",
169
+ "@taazkareem/clickup-mcp-server@latest"
170
+ ],
171
+ "env": {
172
+ "CLICKUP_API_KEY": "your-api-key",
173
+ "CLICKUP_TEAM_ID": "your-team-id",
174
+ "DOCUMENT_SUPPORT": "true"
175
+ }
176
+ }
177
+ }
178
+ }
179
+ ```
180
+
181
+ Or use this npx command:
182
+
183
+ `npx -y @taazkareem/clickup-mcp-server@latest --env CLICKUP_API_KEY=your-api-key --env CLICKUP_TEAM_ID=your-team-id`
184
+
185
+ **Obs: if you don't pass "DOCUMENT_SUPPORT": "true", the default is false and document support will not be active.**
186
+
187
+ ### Tool Filtering
188
+
189
+ You can control which tools are available using two complementary environment variables:
190
+
191
+ #### ENABLED_TOOLS (Recommended)
192
+ Use `ENABLED_TOOLS` to specify exactly which tools should be available:
193
+ ```bash
194
+ # Environment variable
195
+ export ENABLED_TOOLS="create_task,get_task,update_task,get_workspace_hierarchy"
196
+
197
+ # Command line argument
198
+ --env ENABLED_TOOLS=create_task,get_task,update_task,get_workspace_hierarchy
199
+ ```
200
+
201
+ #### DISABLED_TOOLS (Legacy)
202
+ Use `DISABLED_TOOLS` to disable specific tools while keeping all others enabled:
203
+ ```bash
204
+ # Environment variable
205
+ export DISABLED_TOOLS="delete_task,delete_bulk_tasks"
206
+
207
+ # Command line argument
208
+ --env DISABLED_TOOLS=delete_task,delete_bulk_tasks
209
+ ```
210
+
211
+ #### Precedence Rules
212
+ - If `ENABLED_TOOLS` is specified, only those tools will be available (takes precedence over `DISABLED_TOOLS`)
213
+ - If only `DISABLED_TOOLS` is specified, all tools except those listed will be available
214
+ - If neither is specified, all tools are available (default behavior)
215
+
216
+ **Example:**
217
+ ```bash
218
+ # Only enable task creation and reading tools
219
+ npx -y @taazkareem/clickup-mcp-server@latest \
220
+ --env CLICKUP_API_KEY=your-api-key \
221
+ --env CLICKUP_TEAM_ID=your-team-id \
222
+ --env ENABLED_TOOLS=create_task,get_task,get_workspace_hierarchy
223
+ ```
224
+
225
+ Please filter tools you don't need if you are having issues with the number of tools or any context limitations.
226
+
227
+ ## Running with HTTP Transport Support
228
+
229
+ The server supports both modern **HTTP Streamable** transport (MCP Inspector compatible) and legacy **SSE (Server-Sent Events)** transport for backwards compatibility.
230
+
231
+ ```json
232
+ {
233
+ "mcpServers": {
234
+ "ClickUp": {
235
+ "command": "npx",
236
+ "args": [
237
+ "-y",
238
+ "@taazkareem/clickup-mcp-server@latest"
239
+ ],
240
+ "env": {
241
+ "CLICKUP_API_KEY": "your-api-key",
242
+ "CLICKUP_TEAM_ID": "your-team-id",
243
+ "ENABLE_SSE": "true",
244
+ "PORT": "3231"
245
+ }
246
+ }
247
+ }
248
+ }
249
+ ```
250
+
251
+ **Endpoints:**
252
+ - **Primary**: `http://127.0.0.1:3231/mcp` (Streamable HTTP)
253
+ - **Legacy**: `http://127.0.0.1:3231/sse` (SSE for backwards compatibility)
254
+
255
+ ### Command Line Usage
256
+
257
+ ```bash
258
+ npx -y @taazkareem/clickup-mcp-server@latest --env CLICKUP_API_KEY=your-api-key --env CLICKUP_TEAM_ID=your-team-id --env ENABLE_SSE=true --env PORT=3231
259
+ ```
260
+
261
+ Available configuration options:
262
+
263
+ | Option | Description | Default |
264
+ | ------ | ----------- | ------- |
265
+ | `ENABLED_TOOLS` | Comma-separated list of tools to enable (takes precedence) | All tools |
266
+ | `DISABLED_TOOLS` | Comma-separated list of tools to disable | None |
267
+ | `ENABLE_SSE` | Enable the HTTP/SSE transport | `false` |
268
+ | `PORT` | Port for the HTTP server | `3231` |
269
+ | `ENABLE_STDIO` | Enable the STDIO transport | `true` |
270
+ | `ENABLE_SECURITY_FEATURES` | Enable security headers and logging | `false` |
271
+ | `ENABLE_HTTPS` | Enable HTTPS/TLS encryption | `false` |
272
+ | `ENABLE_ORIGIN_VALIDATION` | Validate Origin header against whitelist | `false` |
273
+ | `ENABLE_RATE_LIMIT` | Enable rate limiting protection | `false` |
274
+
275
+ ### 🔒 Security Features
276
+
277
+ The server includes optional security enhancements for production deployments. All security features are **opt-in** and **disabled by default** to maintain backwards compatibility.
278
+
279
+ **Quick security setup:**
280
+ ```bash
281
+ # Generate SSL certificates for HTTPS
282
+ ./scripts/generate-ssl-cert.sh
283
+
284
+ # Start with full security
285
+ ENABLE_SECURITY_FEATURES=true \
286
+ ENABLE_HTTPS=true \
287
+ ENABLE_ORIGIN_VALIDATION=true \
288
+ ENABLE_RATE_LIMIT=true \
289
+ SSL_KEY_PATH=./ssl/server.key \
290
+ SSL_CERT_PATH=./ssl/server.crt \
291
+ npx @taazkareem/clickup-mcp-server@latest --env CLICKUP_API_KEY=your-key --env CLICKUP_TEAM_ID=your-team --env ENABLE_SSE=true
292
+ ```
293
+
294
+ **HTTPS Endpoints:**
295
+ - **Primary**: `https://127.0.0.1:3443/mcp` (Streamable HTTPS)
296
+ - **Legacy**: `https://127.0.0.1:3443/sse` (SSE HTTPS for backwards compatibility)
297
+ - **Health**: `https://127.0.0.1:3443/health` (Health check)
298
+
299
+ For detailed security configuration, see [Security Features Documentation](docs/security-features.md).
300
+
301
+ #### n8n Integration
302
+
303
+ To integrate with n8n:
304
+
305
+ 1. Start the clickup-mcp-server with SSE enabled
306
+ 2. In n8n, add a new "MCP AI Tool" node
307
+ 3. Configure the node with:
308
+ - Transport: SSE
309
+ - Server URL: `http://localhost:3231` (or your server address)
310
+ - Tools: Select the ClickUp tools you want to use
311
+
312
+ #### Example Client
313
+
314
+ An example SSE client is provided in the `examples` directory. To run it:
315
+
316
+ ```bash
317
+ # Start the server with SSE enabled
318
+ ENABLE_SSE=true PORT=3231 npx -y @taazkareem/clickup-mcp-server@latest --env CLICKUP_API_KEY=your-api-key --env CLICKUP_TEAM_ID=your-team-id
319
+
320
+ # In another terminal, run the example client
321
+ cd examples
322
+ npm install
323
+ npm run sse-client
324
+ ```
325
+
326
+ ## Features
327
+
328
+ | 📝 Task Management | 🏷️ Tag Management |
329
+ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
330
+ | • Create, update, and delete tasks<br>• Move and duplicate tasks anywhere<br>• Support for single and bulk operations<br>• Set start/due dates with natural language<br>• Create and manage subtasks<br>• Add comments and attachments | • Create, update, and delete space tags<br>• Add and remove tags from tasks<br>• Use natural language color commands<br>• Automatic contrasting foreground colors<br>• View all space tags<br>• Tag-based task organization across workspace |
331
+ | ⏱️ **Time Tracking** | 🌳 **Workspace Organization** |
332
+ | • View time entries for tasks<br>• Start/stop time tracking on tasks<br>• Add manual time entries<br>• Delete time entries<br>• View currently running timer<br>• Track billable and non-billable time | • Navigate spaces, folders, and lists<br>• Create and manage folders<br>• Organize lists within spaces<br>• Create lists in folders<br>• View workspace hierarchy<br>• Efficient path navigation |
333
+ | 📄 **Document Management** | 👥 **Member Management** |
334
+ | • Document Listing through all workspace<br>• Document Page listing<br>• Document Page Details<br>• Document Creation<br>• Document page update (append & prepend) | • Find workspace members by name or email<br>• Resolve assignees for tasks<br>• View member details and permissions<br>• Assign tasks to users during creation and updates<br>• Support for user IDs, emails, or usernames<br>• Team-wide user management |
335
+ | ⚡ **Integration Features** | 🏗️ **Architecture & Performance** |
336
+ | • Global name or ID-based lookups<br>• Case-insensitive matching<br>• Markdown formatting support<br>• Built-in rate limiting<br>• Error handling and validation<br>• Comprehensive API coverage | • **70% codebase reduction** for improved performance<br>• **Unified architecture** across all transport types<br>• **Zero code duplication**<br>• **HTTP Streamable transport** (MCP Inspector compatible)<br>• **Legacy SSE support** for backwards compatibility |
337
+
338
+ ## Available Tools (36 Total)
339
+
340
+ | Tool | Description | Required Parameters |
341
+ | ------------------------------------------------------------------ | ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
342
+ | [get_workspace_hierarchy](docs/user-guide.md#workspace-navigation) | Get workspace structure | None |
343
+ | [create_task](docs/user-guide.md#task-management) | Create a task | `name`, (`listId`/`listName`) |
344
+ | [create_bulk_tasks](docs/user-guide.md#task-management) | Create multiple tasks | `tasks[]` |
345
+ | [update_task](docs/user-guide.md#task-management) | Modify task | `taskId`/`taskName` |
346
+ | [update_bulk_tasks](docs/user-guide.md#task-management) | Update multiple tasks | `tasks[]` with IDs or names |
347
+ | [get_tasks](docs/user-guide.md#task-management) | Get tasks from list | `listId`/`listName` |
348
+ | [get_task](docs/user-guide.md#task-management) | Get single task details | `taskId`/`taskName` (with smart disambiguation) |
349
+ | [get_workspace_tasks](docs/user-guide.md#task-management) | Get tasks with filtering | At least one filter (tags, list_ids, space_ids, etc.) |
350
+ | [get_task_comments](docs/user-guide.md#task-management) | Get comments on a task | `taskId`/`taskName` |
351
+ | [create_task_comment](docs/user-guide.md#task-management) | Add a comment to a task | `commentText`, (`taskId`/(`taskName`+`listName`)) |
352
+ | [attach_task_file](docs/user-guide.md#task-management) | Attach file to a task | `taskId`/`taskName`, (`file_data` or `file_url`) |
353
+ | [delete_task](docs/user-guide.md#task-management) | Remove task | `taskId`/`taskName` |
354
+ | [delete_bulk_tasks](docs/user-guide.md#task-management) | Remove multiple tasks | `tasks[]` with IDs or names |
355
+ | [move_task](docs/user-guide.md#task-management) | Move task | `taskId`/`taskName`, `listId`/`listName` |
356
+ | [move_bulk_tasks](docs/user-guide.md#task-management) | Move multiple tasks | `tasks[]` with IDs or names, target list |
357
+ | [duplicate_task](docs/user-guide.md#task-management) | Copy task | `taskId`/`taskName`, `listId`/`listName` |
358
+ | [create_list](docs/user-guide.md#list-management) | Create list in space | `name`, `spaceId`/`spaceName` |
359
+ | [create_folder](docs/user-guide.md#folder-management) | Create folder | `name`, `spaceId`/`spaceName` |
360
+ | [create_list_in_folder](docs/user-guide.md#list-management) | Create list in folder | `name`, `folderId`/`folderName` |
361
+ | [get_folder](docs/user-guide.md#folder-management) | Get folder details | `folderId`/`folderName` |
362
+ | [update_folder](docs/user-guide.md#folder-management) | Update folder properties | `folderId`/`folderName` |
363
+ | [delete_folder](docs/user-guide.md#folder-management) | Delete folder | `folderId`/`folderName` |
364
+ | [get_list](docs/user-guide.md#list-management) | Get list details | `listId`/`listName` |
365
+ | [update_list](docs/user-guide.md#list-management) | Update list properties | `listId`/`listName` |
366
+ | [delete_list](docs/user-guide.md#list-management) | Delete list | `listId`/`listName` |
367
+ | [get_space_tags](docs/user-guide.md#tag-management) | Get space tags | `spaceId`/`spaceName` |
368
+ | [create_space_tag](docs/user-guide.md#tag-management) | Create tag | `tagName`, `spaceId`/`spaceName` |
369
+ | [update_space_tag](docs/user-guide.md#tag-management) | Update tag | `tagName`, `spaceId`/`spaceName` |
370
+ | [delete_space_tag](docs/user-guide.md#tag-management) | Delete tag | `tagName`, `spaceId`/`spaceName` |
371
+ | [add_tag_to_task](docs/user-guide.md#tag-management) | Add tag to task | `tagName`, `taskId`/(`taskName`+`listName`) |
372
+ | [remove_tag_from_task](docs/user-guide.md#tag-management) | Remove tag from task | `tagName`, `taskId`/(`taskName`+`listName`) |
373
+ | [get_task_time_entries](docs/user-guide.md#time-tracking) | Get time entries for a task | `taskId`/`taskName` |
374
+ | [start_time_tracking](docs/user-guide.md#time-tracking) | Start time tracking on a task | `taskId`/`taskName` |
375
+ | [stop_time_tracking](docs/user-guide.md#time-tracking) | Stop current time tracking | None |
376
+ | [add_time_entry](docs/user-guide.md#time-tracking) | Add manual time entry to a task | `taskId`/`taskName`, `start`, `duration` |
377
+ | [delete_time_entry](docs/user-guide.md#time-tracking) | Delete a time entry | `timeEntryId` |
378
+ | [get_current_time_entry](docs/user-guide.md#time-tracking) | Get currently running timer | None |
379
+ | [get_workspace_members](docs/user-guide.md#member-management) | Get all workspace members | None |
380
+ | [find_member_by_name](docs/user-guide.md#member-management) | Find member by name or email | `nameOrEmail` |
381
+ | [resolve_assignees](docs/user-guide.md#member-management) | Resolve member names to IDs | `assignees[]` |
382
+ | [create_document](docs/user-guide.md#document-management) | Create a document | `workspaceId`, `name`, `parentId`/`parentType`, `visibility`, `create_pages` |
383
+ | [get_document](docs/user-guide.md#document-management) | Get a document | `workspaceId`/`documentId` |
384
+ | [list_documents](docs/user-guide.md#document-management) | List documents | `workspaceId`, `documentId`/`creator`/`deleted`/`archived`/`parent_id`/`parent_type`/`limit`/`next_cursor` |
385
+ | [list_document_pages](docs/user-guide.md#document-management) | List document pages | `documentId`/`documentName` |
386
+ | [get_document_pages](docs/user-guide.md#document-management) | Get document pages | `documentId`/`documentName`, `pageIds` |
387
+ | [create_document_pages](docs/user-guide.md#document-management) | Create a document page | `workspaceId`/`documentId`, `parent_page_id`/`name`/`sub_title`,`content`/`content_format` |
388
+ | [update_document_page](docs/user-guide.md#document-management) | Update a document page | `workspaceId`/`documentId`, `name`/`sub_title`,`content`/`content_edit_mode`/`content_format` |
389
+
390
+ See [full documentation](docs/user-guide.md) for optional parameters and advanced usage.
391
+
392
+ ## Member Management Tools
393
+
394
+ When creating or updating tasks, you can assign users using the `assignees` parameter. The parameter accepts an array of user IDs, emails, or usernames:
395
+
396
+ **Creating tasks with assignees:**
397
+ ```json
398
+ {
399
+ "name": "New Task",
400
+ "description": "This is a new task.",
401
+ "assignees": ["jdoe@example.com", "Jane Smith"] // Emails, usernames, or user IDs
402
+ }
403
+ ```
404
+
405
+ **Updating task assignees:**
406
+ ```json
407
+ {
408
+ "taskId": "abc123",
409
+ "assignees": ["newuser@example.com"] // Replace existing assignees
410
+ }
411
+ ```
412
+
413
+ The member management tools help resolve user references when needed.
414
+
415
+ ## Prompts
416
+
417
+ Not yet implemented and not supported by all client apps. Request a feature for a Prompt implementation that would be most beneficial for your workflow (without it being too specific). Examples:
418
+
419
+ | Prompt | Purpose | Features |
420
+ | -------------------------------------------------- | ------------------------- | ----------------------------------------- |
421
+ | [summarize_tasks](docs/user-guide.md#prompts) | Task overview | Status summary, priorities, relationships |
422
+ | [analyze_priorities](docs/user-guide.md#prompts) | Priority optimization | Distribution analysis, sequencing |
423
+ | [generate_description](docs/user-guide.md#prompts) | Task description creation | Objectives, criteria, dependencies |
424
+
425
+ ## Error Handling
426
+
427
+ The server provides clear error messages for:
428
+
429
+ - Missing required parameters
430
+ - Invalid IDs or names
431
+ - Items not found
432
+ - Permission issues
433
+ - API errors
434
+ - Rate limiting
435
+
436
+ The `LOG_LEVEL` environment variable can be specified to control the verbosity of server logs. Valid values are `trace`, `debug`, `info`, `warn`, and `error` (default).
437
+ This can be also be specified on the command line as, e.g. `--env LOG_LEVEL=info`.
438
+
439
+ ## Support the Developer
440
+
441
+ When using this server, you may occasionally see a small sponsor message with a link to this repository included in tool responses. I hope you can support the project!
442
+ If you find this project useful, please consider supporting:
443
+
444
+ [![Sponsor TaazKareem](https://img.shields.io/badge/Sponsor-TaazKareem-orange?logo=github)](https://github.com/sponsors/TaazKareem)
445
+
446
+ <a href="https://buymeacoffee.com/taazkareem">
447
+ <img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" width="200" alt="Buy Me A Coffee">
448
+ </a>
449
+
450
+ ## Acknowledgements
451
+
452
+ Special thanks to [ClickUp](https://clickup.com) for their excellent API and services that make this integration possible.
453
+
454
+ ## Contributing
455
+
456
+ Contributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md) for details.
457
+
458
+ ## License
459
+
460
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
461
+
462
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
463
+
464
+ ## Disclaimer
465
+
466
+ This software makes use of third-party APIs and may reference trademarks
467
+ or brands owned by third parties. The use of such APIs or references does not imply
468
+ any affiliation with or endorsement by the respective companies. All trademarks and
469
+ brand names are the property of their respective owners. This project is an independent
470
+ work and is not officially associated with or sponsored by any third-party company mentioned.