@taazkareem/clickup-mcp-server 0.12.5 → 0.12.7

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 (58) hide show
  1. package/README.md +156 -267
  2. package/build/config.js +1 -1
  3. package/build/index.js +1 -1
  4. package/build/license.js +1 -1
  5. package/build/logger.js +1 -1
  6. package/build/middleware/security.js +1 -1
  7. package/build/server.js +1 -1
  8. package/build/services/clickup/base.js +1 -1
  9. package/build/services/clickup/bulk.js +1 -1
  10. package/build/services/clickup/chat.js +1 -1
  11. package/build/services/clickup/document.js +1 -1
  12. package/build/services/clickup/folder.js +1 -1
  13. package/build/services/clickup/index.js +1 -1
  14. package/build/services/clickup/list.js +1 -1
  15. package/build/services/clickup/tag.js +1 -1
  16. package/build/services/clickup/task/index.js +1 -1
  17. package/build/services/clickup/task/task-attachments.js +1 -1
  18. package/build/services/clickup/task/task-comments.js +1 -1
  19. package/build/services/clickup/task/task-core.js +1 -1
  20. package/build/services/clickup/task/task-custom-fields.js +1 -1
  21. package/build/services/clickup/task/task-relationships.js +1 -1
  22. package/build/services/clickup/task/task-search.js +1 -1
  23. package/build/services/clickup/task/task-service.js +1 -1
  24. package/build/services/clickup/task/task-tags.js +1 -1
  25. package/build/services/clickup/time.js +1 -1
  26. package/build/services/clickup/types.js +1 -1
  27. package/build/services/clickup/workspace.js +1 -1
  28. package/build/services/shared.js +1 -1
  29. package/build/sse_server.js +1 -1
  30. package/build/tools/chat/handlers.js +1 -1
  31. package/build/tools/chat/index.js +1 -1
  32. package/build/tools/chat/utils.js +1 -1
  33. package/build/tools/documents.js +1 -1
  34. package/build/tools/feedback.js +1 -0
  35. package/build/tools/folder.js +1 -1
  36. package/build/tools/index.js +1 -1
  37. package/build/tools/list.js +1 -1
  38. package/build/tools/member.js +1 -1
  39. package/build/tools/tag.js +1 -1
  40. package/build/tools/task/attachments.js +1 -1
  41. package/build/tools/task/bulk-operations.js +1 -1
  42. package/build/tools/task/handlers.js +1 -1
  43. package/build/tools/task/index.js +1 -1
  44. package/build/tools/task/main.js +1 -1
  45. package/build/tools/task/relationships.js +1 -1
  46. package/build/tools/task/single-operations.js +1 -1
  47. package/build/tools/task/time-tracking.js +1 -1
  48. package/build/tools/task/utilities.js +1 -1
  49. package/build/tools/task/workspace-operations.js +1 -1
  50. package/build/tools/utils.js +1 -1
  51. package/build/tools/workspace.js +1 -1
  52. package/build/utils/color-processor.js +1 -1
  53. package/build/utils/concurrency-utils.js +1 -1
  54. package/build/utils/date-utils.js +1 -1
  55. package/build/utils/resolver-utils.js +1 -1
  56. package/build/utils/sponsor-service.js +1 -1
  57. package/build/utils/token-utils.js +1 -1
  58. package/package.json +4 -2
package/README.md CHANGED
@@ -1,28 +1,45 @@
1
- <img src="https://github.com/taazkareem/clickup-mcp-server/blob/b2d0c447be1e7cac474019da68005b87b4f929f9/assets/images/Gemini_Generated_Image_zii3a3zii3a3zii3.png" alt="ClickUp MCP Server" width="100%">
2
-
3
1
  # ClickUp MCP Server
4
-
5
- **A Model Context Protocol (MCP) server for integrating ClickUp with AI applications like Claude Desktop, Gemini CLI, n8n, Cursor IDE, and custom AI agents.** This server enables seamless interaction with ClickUp tasks, spaces, lists, documents, files, folders, and chat channels through a standardized protocol, using natural language.
6
-
7
- > **🔒 Premium Version** - Choice of [Subscription](https://buy.polar.sh/polar_cl_3xQojQLgzQXKCLzsxc49YfL6z8hzSBBqh9ivy1qZdwW) or [Lifetime](https://buy.polar.sh/polar_cl_whcMn4lbBFwZUoWU5p2qDSn0fs23ACC6IwK3e15hXV5) Access
2
+ ![ClickUp MCP Server Premium Image](https://raw.githubusercontent.com/taazkareem/clickup-mcp-server/main/assets/images/header_image.png)
8
3
 
9
4
  [![npm version](https://img.shields.io/npm/v/@taazkareem/clickup-mcp-server.svg)](https://www.npmjs.com/package/@taazkareem/clickup-mcp-server)
10
5
  [![npm downloads](https://img.shields.io/npm/dm/@taazkareem/clickup-mcp-server.svg)](https://www.npmjs.com/package/@taazkareem/clickup-mcp-server)
11
6
  [![License](https://img.shields.io/badge/License-Proprietary-red.svg)](LICENSE)
12
7
  [![Maintained](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/TaazKareem/clickup-mcp-server/graphs/commit-activity)
13
8
 
9
+ **Connect ClickUp to AI Agents including Claude Desktop, Cursor IDE, n8n, and Gemini CLI.**
10
+ *A high-performance Model Context Protocol (MCP) server for managing tasks, tags, lists, folders, files, docs, time, and chat using natural language.*
14
11
 
15
- ## 🚀 Quick Start
12
+ > **Status Update:** v0.12.7: Fixed a license validation race condition which resolved issues for CLI-based one-shot integrations (mcporter, etc.)
13
+
14
+ ⭐️ **Proven Performance:** 460+ Stars (from previous public repo) & thousands of weekly NPM downloads. The industry-standard ClickUp integration for AI.
15
+ <hr>
16
+
17
+
18
+ <a name="premium-access"></a>
19
+ ## 💎 Premium Access
16
20
 
17
- ### 1. Get Your License Key
21
+ **Stop building ClickUp integrations from scratch.** This high-performance MCP server is maintained daily to ensure compatibility with the latest AI agents and ClickUp API changes. A license grants **full access to all 50+ tools, priority bug fixes, and enterprise-grade feature development.**
18
22
 
19
- Purchase a license at:
20
- * **[Monthly Subscription ($9/mo)](https://buy.polar.sh/polar_cl_3xQojQLgzQXKCLzsxc49YfL6z8hzSBBqh9ivy1qZdwW)**
21
- * **[Lifetime Access ($59)](https://buy.polar.sh/polar_cl_whcMn4lbBFwZUoWU5p2qDSn0fs23ACC6IwK3e15hXV5)**
23
+ | [**Monthly Subscription ($9)**](https://buy.polar.sh/polar_cl_3xQojQLgzQXKCLzsxc49YfL6z8hzSBBqh9ivy1qZdwW) | [**Lifetime Access ($59)**](https://buy.polar.sh/polar_cl_whcMn4lbBFwZUoWU5p2qDSn0fs23ACC6IwK3e15hXV5) |
24
+ | :--- | :--- |
25
+ | Perfect for ongoing projects<br>• Cancel anytime | • One-time payment<br>• Best value for agencies |
22
26
 
23
- [![Get Access](https://img.shields.io/badge/Get_Access-Purchase_License-blue?style=for-the-badge&logo=github)](https://buy.polar.sh/polar_cl_3xQojQLgzQXKCLzsxc49YfL6z8hzSBBqh9ivy1qZdwW)
27
+ **⚡️ Instant Delivery:** Your license key is delivered immediately via **Polar.sh**. Total setup time is under 2 minutes.
24
28
 
25
- ### 2. Add to Your MCP Configuration
29
+ ---
30
+
31
+ ---
32
+
33
+ <a name="quick-start"></a>
34
+ ## 🚀 Quick Start
35
+
36
+ ### 1. Prerequisites
37
+ * **Node.js v18.0.0+**
38
+ * **ClickUp Credentials:** API Key & Team ID
39
+ * **License Key:** [Purchase here](https://buy.polar.sh/polar_cl_whcMn4lbBFwZUoWU5p2qDSn0fs23ACC6IwK3e15hXV5)
40
+
41
+ ### 2. Local Configuration
42
+ Add the following to your `claude_desktop_config.json` or similar MCP settings file to run locally via `npx`:
26
43
 
27
44
  ```json
28
45
  {
@@ -31,298 +48,170 @@ Purchase a license at:
31
48
  "command": "npx",
32
49
  "args": [
33
50
  "-y",
34
- "@taazkareem/clickup-mcp-server@latest"
51
+ "--package", "@taazkareem/clickup-mcp-server@latest",
52
+ "clickup-mcp-server"
35
53
  ],
36
54
  "env": {
37
- "CLICKUP_MCP_LICENSE_KEY": "your-license-key-here",
38
55
  "CLICKUP_API_KEY": "your-clickup-api-key",
39
56
  "CLICKUP_TEAM_ID": "your-team-id",
40
- "DOCUMENT_SUPPORT": "true"
57
+ "CLICKUP_MCP_LICENSE_KEY": "your-license-key-here"
41
58
  }
42
59
  }
43
60
  }
44
61
  }
45
62
  ```
46
63
 
47
- ### 3. Restart Your MCP Client
48
-
49
- That's it! The server will validate your license key and start automatically.
64
+ ### 3. Hosted / Remote Usage
65
+ -or- For zero-setup usage without local Node.js requirements, use the hosted version:
50
66
 
51
- **📖 [Full Installation Guide](INSTALLATION.md)** | **[Troubleshooting](docs/user-guide.md#error-handling)**
67
+ ```json
68
+ {
69
+ "mcpServers": {
70
+ "ClickUp": {
71
+ "serverUrl": "https://clickup-mcp.taazkareem.com/mcp",
72
+ "headers": {
73
+ "X-ClickUp-Key": "your-clickup-api-key",
74
+ "X-ClickUp-Team-Id": "your-team-id",
75
+ "X-License-Key": "your-license-key-here"
76
+ }
77
+ }
78
+ }
79
+ }
80
+ ```
52
81
 
53
- ## Requirements
82
+ ### 4. Restart
83
+ Restart your MCP Host (e.g., Cursor IDE). The server will validate your license and start automatically.
54
84
 
55
- - **Node.js v18.0.0 or higher** (required for MCP SDK compatibility)
56
- - Valid license key from [Polar.sh](https://buy.polar.sh/polar_cl_3xQojQLgzQXKCLzsxc49YfL6z8hzSBBqh9ivy1qZdwW)
57
- - ClickUp API key and Team ID
85
+ ---
58
86
 
59
- ## Configuration
87
+ ## ✨ Features
60
88
 
61
- ### Getting Your ClickUp Credentials
89
+ Integrate ClickUp seamlessly with Natural Language for customized workflows
62
90
 
63
- 1. **ClickUp API Key**:
64
- - Go to [ClickUp Settings Apps](https://app.clickup.com/settings/apps)
65
- - Generate a new API token under "API Token"
91
+ * **📝 Task Management:** Create, update, move, duplicate, and link tasks. Supports bulk operations and natural language dates.
92
+ * **⏱️ Time Tracking:** Start/stop timers, view entries, and manage billable time.
93
+ * **📄 Docs & Knowledge:** Create, read, and append to ClickUp Documents. Full workspace hierarchy traversal.
94
+ * **💬 Chat & Collaboration:** Send messages to channels, read history, and manage comments with Markdown support.
95
+ * **🌳 Workspace Control:** Navigate spaces, folders, and lists. Manage tags and member assignments.
66
96
 
67
- 2. **ClickUp Team ID**:
68
- - This is the **first UUID** in your ClickUp workspace URL when viewing it in your browser
69
- - **Example**: In `https://app.clickup.com/[TEAM_ID]/v/l/[PROJECT_ID]`, use the `[TEAM_ID]` portion
70
- - **Note**: ClickUp's API documentation refers to this as `team_id`, but it actually represents your Workspace ID (this naming is due to legacy API design)
71
- - For reference: In ClickUp's API, `team_id` = Workspace ID, and `group_id` = Team (group of users)
97
+ ---
72
98
 
99
+ ## ⚙️ Configuration
73
100
 
74
- ### Tool Filtering
101
+ ### Finding Your Credentials
75
102
 
76
- You can control which tools are available using two complementary environment variables:
103
+ 1. **ClickUp API Key:**
104
+ * Navigate to [ClickUp Settings → Apps](https://app.clickup.com/settings/apps).
105
+ * Generate a token under "API Token".
106
+ 2. **ClickUp Team ID:**
107
+ * Open ClickUp in your browser.
108
+ * Look at the URL: `https://app.clickup.com/[TEAM_ID]/v/...`
109
+ * The first number is your Team ID.
110
+ * *Note: ClickUp API calls this `team_id`, but it actually represents your Workspace ID.*
77
111
 
78
- #### Precedence Rules
79
- - If `ENABLED_TOOLS` is specified, only those tools will be available (takes precedence over `DISABLED_TOOLS`)
80
- - If only `DISABLED_TOOLS` is specified, all tools except those listed will be available
81
- - If neither is specified, all tools are available (default behavior)
112
+ ### Advanced Configuration
82
113
 
83
- **Example:**
84
- ```bash
85
- # Only enable task creation and reading tools
86
- npx -y @taazkareem/clickup-mcp-server@latest \
87
- --env CLICKUP_MCP_LICENSE_KEY=your-license-key-here \
88
- --env CLICKUP_API_KEY=your-api-key \
89
- --env CLICKUP_TEAM_ID=your-team-id \
90
- --env ENABLED_TOOLS=create_task,get_task,get_workspace_hierarchy
114
+ #### Filter Available Tools
115
+ Reduce context noise by limiting available tools in your `env`:
116
+ ```json
117
+ "ENABLED_TOOLS": "create_task,get_task,update_task,get_workspace_hierarchy"
91
118
  ```
92
119
 
93
- Please filter tools you don't need if you are having issues with the number of tools or any context limitations.
94
-
95
- ## Running with HTTP Transport Support
96
-
97
- The server supports both modern **HTTP Streamable** transport (MCP Inspector compatible) and legacy **SSE (Server-Sent Events)** transport for backwards compatibility.
120
+ #### Enable Document Support (Beta)
121
+ Enable creation and management of ClickUp Docs:
122
+ ```json
123
+ "DOCUMENT_SUPPORT": "true"
124
+ ```
98
125
 
126
+ ---
127
+
128
+ <a name="available-tools"></a>
129
+ ## 🛠️ Available Tools
130
+
131
+ <details>
132
+ <summary><strong>👇 Click to view all 50+ available tools</strong></summary>
133
+
134
+ | Category | Tool | Description |
135
+ | :--- | :--- | :--- |
136
+ | **Workspace** | `get_workspace_hierarchy` | Get workspace structure |
137
+ | | `get_workspace_members` | Get all workspace members |
138
+ | | `find_member_by_name` | Find member by name or email |
139
+ | **Tasks** | `create_task` | Create a task |
140
+ | | `create_bulk_tasks` | Create multiple tasks |
141
+ | | `update_task` | Modify task |
142
+ | | `update_bulk_tasks` | Update multiple tasks |
143
+ | | `get_tasks` | Get tasks from list |
144
+ | | `get_task` | Get single task details |
145
+ | | `get_workspace_tasks` | Get tasks with filtering |
146
+ | | `delete_task` | Remove task |
147
+ | | `move_task` | Move task to new list |
148
+ | | `duplicate_task` | Copy task |
149
+ | | `add_task_link` | Link two tasks together |
150
+ | **Comments** | `get_task_comments` | Get comments on a task |
151
+ | | `create_task_comment` | Add a comment to a task |
152
+ | | `attach_task_file` | Attach file to a task |
153
+ | **Lists/Folders** | `create_list` | Create list in space/folder |
154
+ | | `create_folder` | Create folder |
155
+ | | `get_folder` | Get folder details |
156
+ | | `update_folder` | Update folder properties |
157
+ | **Tags** | `get_space_tags` | Get space tags |
158
+ | | `create_space_tag` | Create tag |
159
+ | | `add_tag_to_task` | Add tag to task |
160
+ | **Time** | `start_time_tracking` | Start time tracking |
161
+ | | `stop_time_tracking` | Stop current time tracking |
162
+ | | `get_task_time_entries` | Get time entries for a task |
163
+ | **Docs** | `create_document` | Create a document |
164
+ | | `get_document` | Get a document |
165
+ | | `list_documents` | List documents |
166
+ | **Chat** | `create_chat_channel` | Create a chat channel |
167
+ | | `create_chat_message` | Send a message to a channel |
168
+ | | `get_chat_messages` | Get message history |
169
+
170
+ *See [full documentation](docs/user-guide.md) for parameters and advanced usage.*
171
+ </details>
172
+
173
+ ---
174
+
175
+ ## 🔌 Compatibility
176
+
177
+ This server supports **STDIO, HTTP Streamable, and SSE (Server-Sent Events)** for legacy integrations.
178
+
179
+ **Configuration:**
99
180
  ```json
100
181
  {
101
- "mcpServers": {
102
- "ClickUp": {
103
- "command": "npx",
104
- "args": [
105
- "-y",
106
- "@taazkareem/clickup-mcp-server@latest"
107
- ],
108
- "env": {
109
- "CLICKUP_MCP_LICENSE_KEY": "your-license-key-here",
110
- "CLICKUP_API_KEY": "your-api-key",
111
- "CLICKUP_TEAM_ID": "your-team-id",
112
- "ENABLE_SSE": "true",
113
- "PORT": "3231"
114
- }
115
- }
182
+ "env": {
183
+ "ENABLE_SSE": "true",
184
+ "PORT": "3231"
116
185
  }
117
186
  }
118
187
  ```
119
188
 
120
- **Endpoints:**
121
- - **Primary**: `http://127.0.0.1:3231/mcp` (Streamable HTTP)
122
- - **Legacy**: `http://127.0.0.1:3231/sse` (SSE for backwards compatibility)
189
+ **n8n Setup:**
190
+ 1. Set `ENABLE_SSE` to "true" and run the server.
191
+ 2. In n8n, add an **"MCP AI Tool"** node.
192
+ 3. Set Transport to `SSE` and URL to `http://localhost:3231/sse`.
123
193
 
124
- ### Command Line Usage
194
+ ---
125
195
 
126
- ```bash
127
- npx -y @taazkareem/clickup-mcp-server@latest --env CLICKUP_MCP_LICENSE_KEY=your-license-key-here --env CLICKUP_API_KEY=your-api-key --env CLICKUP_TEAM_ID=your-team-id --env ENABLE_SSE=true --env PORT=3231 --env HOST=0.0.0.0
128
- ```
129
-
130
- Available configuration options:
131
-
132
- | Option | Description | Default |
133
- | ------ | ----------- | ------- |
134
-
135
- | `ENABLED_TOOLS` | Comma-separated list of tools to enable (takes precedence) | All tools |
136
- | `DISABLED_TOOLS` | Comma-separated list of tools to disable | None |
137
- | `ENABLE_SSE` | Enable the HTTP/SSE transport | `false` |
138
- | `PORT` | Port for the HTTP server | `3231` |
139
- | `HOST` | Binding address (use 0.0.0.0 for Docker/external) | `127.0.0.1` |
140
- | `ENABLE_STDIO` | Enable the STDIO transport | `true` |
141
- | `ENABLE_SECURITY_FEATURES` | Enable security headers and logging | `false` |
142
- | `ENABLE_HTTPS` | Enable HTTPS/TLS encryption | `false` |
143
- | `ENABLE_ORIGIN_VALIDATION` | Validate Origin header against whitelist | `false` |
144
- | `ENABLE_RATE_LIMIT` | Enable rate limiting protection | `false` |
145
-
146
- ### 🔒 Security Features
147
-
148
- The server includes optional security enhancements for production deployments. All security features are **opt-in** and **disabled by default** to maintain backwards compatibility.
149
-
150
- **Quick security setup:**
151
- ```bash
152
- # Generate SSL certificates for HTTPS
153
- ./scripts/generate-ssl-cert.sh
154
-
155
- # Start with full security
156
- ENABLE_SECURITY_FEATURES=true \
157
- ENABLE_HTTPS=true \
158
- ENABLE_ORIGIN_VALIDATION=true \
159
- ENABLE_RATE_LIMIT=true \
160
- SSL_KEY_PATH=./ssl/server.key \
161
- SSL_CERT_PATH=./ssl/server.crt \
162
- npx @taazkareem/clickup-mcp-server@latest --env CLICKUP_API_KEY=your-key --env CLICKUP_TEAM_ID=your-team --env ENABLE_SSE=true
163
- ```
164
-
165
- **HTTPS Endpoints:**
166
- - **Primary**: `https://127.0.0.1:3443/mcp` (Streamable HTTPS)
167
- - **Legacy**: `https://127.0.0.1:3443/sse` (SSE HTTPS for backwards compatibility)
168
- - **Health**: `https://127.0.0.1:3443/health` (Health check)
169
-
170
- For detailed security configuration, see [Security Features Documentation](docs/security-features.md).
171
-
172
- #### n8n Integration
196
+ ## ❓ FAQ
173
197
 
174
- To integrate with n8n:
198
+ **Why isn't this free anymore?**
199
+ Building reliable MCP integrations requires significant maintenance. Moving to a paid model allows us to support this as a product rather than a hobby, ensuring compatibility with API changes.
175
200
 
176
- 1. Start the clickup-mcp-server with SSE enabled
177
- 2. In n8n, add a new "MCP AI Tool" node
178
- 3. Configure the node with:
179
- - Transport: SSE
180
- - Server URL: `http://localhost:3231` (or your server address)
181
- - Tools: Select the ClickUp tools you want to use
201
+ **I have an old version. Will it stop working?**
202
+ Existing local clones will continue to work, but you will not receive updates, bug fixes, or support without a license.
182
203
 
183
- #### Example Client
204
+ **How do I get support?**
205
+ Premium users get priority support. Please [open an issue](https://github.com/TaazKareem/clickup-mcp-server/issues) in this repository.
184
206
 
185
- An example SSE client is provided in the `examples` directory. To run it:
186
-
187
- ```bash
188
- # Start the server with SSE enabled
189
- 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
190
-
191
- # In another terminal, run the example client
192
- cd examples
193
- npm install
194
- npm run sse-client
195
- ```
196
-
197
- ## Features
198
-
199
- | 📝 Task Management | 🏷️ Tag Management |
200
- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
201
- | • 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<br>• Link tasks and manage dependencies | • 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 |
202
- | ⏱️ **Time Tracking** | 🌳 **Workspace Organization** |
203
- | • 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 |
204
- | 📄 **Document Management** | 👥 **Member Management** |
205
- | • 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 |
206
- | 💬 **Chat Management** | ⚡ **Integration Features** |
207
- | • Create and manage chat channels<br>• Send messages with markdown support<br>• Retrieve message history<br>• Smart channel name resolution<br>• Cross-workspace communication support | • 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 |
208
- | 🏗️ **Architecture & Performance** | |
209
- | • **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 | |
210
-
211
- ## Available Tools (50 Total)
212
-
213
- | Tool | Description | Required Parameters |
214
- | ------------------------------------------------------------------ | ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
215
- | [get_workspace_hierarchy](docs/user-guide.md#workspace-navigation) | Get workspace structure | None |
216
- | [create_task](docs/user-guide.md#task-management) | Create a task | `name`, (`listId`/`listName`) |
217
- | [create_bulk_tasks](docs/user-guide.md#task-management) | Create multiple tasks | `tasks[]` |
218
- | [update_task](docs/user-guide.md#task-management) | Modify task | `taskId`/`taskName` |
219
- | [update_bulk_tasks](docs/user-guide.md#task-management) | Update multiple tasks | `tasks[]` with IDs or names |
220
- | [get_tasks](docs/user-guide.md#task-management) | Get tasks from list | `listId`/`listName` |
221
- | [get_task](docs/user-guide.md#task-management) | Get single task details | `taskId`/`taskName` (with smart disambiguation), `include_markdown_description` |
222
- | [get_workspace_tasks](docs/user-guide.md#task-management) | Get tasks with filtering | At least one filter (tags, list_ids, space_ids, etc.) |
223
- | [get_task_comments](docs/user-guide.md#task-management) | Get comments on a task | `taskId`/`taskName`, `include_replies` |
224
- | [create_task_comment](docs/user-guide.md#task-management) | Add a comment to a task | `commentText`, (`taskId`/(`taskName`+`listName`)) |
225
- | [attach_task_file](docs/user-guide.md#task-management) | Attach file to a task | `taskId`/`taskName`, (`file_data` or `file_url`) |
226
- | [delete_task](docs/user-guide.md#task-management) | Remove task | `taskId`/`taskName` |
227
- | [delete_bulk_tasks](docs/user-guide.md#task-management) | Remove multiple tasks | `tasks[]` with IDs or names |
228
- | [move_task](docs/user-guide.md#task-management) | Move task | `taskId`/`taskName`, `listId`/`listName` |
229
- | [move_bulk_tasks](docs/user-guide.md#task-management) | Move multiple tasks | `tasks[]` with IDs or names, target list |
230
- | [duplicate_task](docs/user-guide.md#task-management) | Copy task | `taskId`/`taskName`, `listId`/`listName` |
231
- | [add_task_link](docs/user-guide.md#task-management) | Link two tasks together | `taskId`/`taskName`, `targetTaskId`/`targetTaskName` |
232
- | [get_task_links](docs/user-guide.md#task-management) | Get all links for a task | `taskId`/`taskName` |
233
- | [delete_task_link](docs/user-guide.md#task-management) | Remove a task link | `taskId`/`taskName`, `linkId`/`targetTaskName` |
234
- | [create_list](docs/user-guide.md#list-management) | Create list in space | `name`, `spaceId`/`spaceName` |
235
- | [create_folder](docs/user-guide.md#folder-management) | Create folder | `name`, `spaceId`/`spaceName` |
236
- | [create_list_in_folder](docs/user-guide.md#list-management) | Create list in folder | `name`, `folderId`/`folderName` |
237
- | [get_folder](docs/user-guide.md#folder-management) | Get folder details | `folderId`/`folderName` |
238
- | [update_folder](docs/user-guide.md#folder-management) | Update folder properties | `folderId`/`folderName` |
239
- | [delete_folder](docs/user-guide.md#folder-management) | Delete folder | `folderId`/`folderName` |
240
- | [get_list](docs/user-guide.md#list-management) | Get list details | `listId`/`listName` |
241
- | [update_list](docs/user-guide.md#list-management) | Update list properties | `listId`/`listName` |
242
- | [delete_list](docs/user-guide.md#list-management) | Delete list | `listId`/`listName` |
243
- | [get_space_tags](docs/user-guide.md#tag-management) | Get space tags | `spaceId`/`spaceName` |
244
- | [create_space_tag](docs/user-guide.md#tag-management) | Create tag | `tagName`, `spaceId`/`spaceName` |
245
- | [update_space_tag](docs/user-guide.md#tag-management) | Update tag | `tagName`, `spaceId`/`spaceName` |
246
- | [delete_space_tag](docs/user-guide.md#tag-management) | Delete tag | `tagName`, `spaceId`/`spaceName` |
247
- | [add_tag_to_task](docs/user-guide.md#tag-management) | Add tag to task | `tagName`, `taskId`/(`taskName`+`listName`) |
248
- | [remove_tag_from_task](docs/user-guide.md#tag-management) | Remove tag from task | `tagName`, `taskId`/(`taskName`+`listName`) |
249
- | [get_task_time_entries](docs/user-guide.md#time-tracking) | Get time entries for a task | `taskId`/`taskName` |
250
- | [start_time_tracking](docs/user-guide.md#time-tracking) | Start time tracking on a task | `taskId`/`taskName` |
251
- | [stop_time_tracking](docs/user-guide.md#time-tracking) | Stop current time tracking | None |
252
- | [add_time_entry](docs/user-guide.md#time-tracking) | Add manual time entry to a task | `taskId`/`taskName`, `start`, `duration` |
253
- | [delete_time_entry](docs/user-guide.md#time-tracking) | Delete a time entry | `timeEntryId` |
254
- | [get_current_time_entry](docs/user-guide.md#time-tracking) | Get currently running timer | None |
255
- | [get_workspace_members](docs/user-guide.md#member-management) | Get all workspace members | None |
256
- | [find_member_by_name](docs/user-guide.md#member-management) | Find member by name or email | `nameOrEmail` |
257
- | [resolve_assignees](docs/user-guide.md#member-management) | Resolve member names to IDs | `assignees[]` |
258
- | [create_document](docs/user-guide.md#document-management) | Create a document | `workspaceId`, `name`, `parentId`/`parentType`, `visibility`, `create_pages` |
259
- | [get_document](docs/user-guide.md#document-management) | Get a document | `workspaceId`/`documentId`/`documentName` |
260
- | [list_documents](docs/user-guide.md#document-management) | List documents | `workspaceId`, `documentId`/`creator`/`deleted`/`archived`/`parent_id`/`parent_type`/`limit`/`next_cursor` |
261
- | [list_document_pages](docs/user-guide.md#document-management) | List document pages | `documentId`/`documentName` |
262
- | [get_document_pages](docs/user-guide.md#document-management) | Get document pages | `documentId`/`documentName`, `pageIds` |
263
- | [create_document_pages](docs/user-guide.md#document-management) | Create a document page | `workspaceId`/`documentId`/`documentName`, `parent_page_id`/`name`/`sub_title`,`content`/`content_format` |
264
- | [update_document_page](docs/user-guide.md#document-management) | Update a document page | `workspaceId`/`documentId`/`documentName`, `name`/`sub_title`,`content`/`content_edit_mode`/`content_format` |
265
- | [create_chat_channel](docs/user-guide.md#chat-management) | Create a chat channel | `name` |
266
- | [get_chat_channels](docs/user-guide.md#chat-management) | List all chat channels | None |
267
- | [create_chat_message](docs/user-guide.md#chat-management) | Send a message to a channel | `comment_text`, (`channel_id`/`channel_name`) |
268
- | [get_chat_messages](docs/user-guide.md#chat-management) | Get message history | `channel_id`/`channel_name` |
269
-
270
- See [full documentation](docs/user-guide.md) for optional parameters and advanced usage.
271
-
272
-
273
- ## Prompts
274
-
275
- 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:
276
-
277
- | Prompt | Purpose | Features |
278
- | -------------------------------------------------- | ------------------------- | ----------------------------------------- |
279
- | [summarize_tasks](docs/user-guide.md#prompts) | Task overview | Status summary, priorities, relationships |
280
- | [analyze_priorities](docs/user-guide.md#prompts) | Priority optimization | Distribution analysis, sequencing |
281
- | [generate_description](docs/user-guide.md#prompts) | Task description creation | Objectives, criteria, dependencies |
282
-
283
- ## Error Handling
284
-
285
- The server provides clear error messages for:
286
-
287
- - Missing required parameters
288
- - Invalid IDs or names
289
- - Items not found
290
- - Permission issues
291
- - API errors
292
- - Rate limiting
293
-
294
- 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).
295
- This can be also be specified on the command line as, e.g. `--env LOG_LEVEL=info`.
296
-
297
- ## Premium Support
298
-
299
- As a premium user, you have access to:
300
-
301
- - **Priority Support**: Open issues directly in this private repository
302
- - **Feature Requests**: Request new features and capabilities
303
- - **Automatic Updates**: Pull the latest features and bug fixes
304
- - **Direct Communication**: Get help from the maintainer
305
-
306
- To get support, [open an issue](https://github.com/TaazKareem/clickup-mcp-server/issues) in this repository.
307
-
308
- ## Acknowledgements
309
-
310
- Special thanks to [ClickUp](https://clickup.com) for their excellent API and services that make this integration possible.
311
-
312
- Thank you to all supporters who make continued development possible! 🙏
313
-
314
- ## License
315
-
316
- [![License](https://img.shields.io/badge/License-Proprietary-red.svg)](LICENSE)
207
+ ---
317
208
 
318
- This project is licensed under a proprietary license - see the [LICENSE](LICENSE) file for details.
209
+ ## ⚖️ Disclaimer
319
210
 
320
- **All Rights Reserved** - Unauthorized copying, modification, distribution, or use is strictly prohibited.
211
+ Originally developed as open source and refined during a consultancy with ClickUp, this project is now independently maintained.
321
212
 
322
- ## Disclaimer
213
+ This software makes use of third-party APIs and may reference trademarks or brands owned by third parties. The use of such APIs or references does not imply any affiliation with or endorsement by the respective companies. All trademarks and brand names are the property of their respective owners. This project is an independent work and is not officially associated with or sponsored by any third-party company mentioned.
323
214
 
324
- This software makes use of third-party APIs and may reference trademarks
325
- or brands owned by third parties. The use of such APIs or references does not imply
326
- any affiliation with or endorsement by the respective companies. All trademarks and
327
- brand names are the property of their respective owners. This project is an independent
328
- work and is not officially associated with or sponsored by any third-party company mentioned.
215
+ <div align="center">
216
+ <sub>Created by <a href="https://github.com/taazkareem">taazkareem</a></sub>
217
+ </div>
package/build/config.js CHANGED
@@ -1 +1 @@
1
- function a0_0xca6e(){const _0x299e28=['mtq5mdu4m0XQtuDQCa','CxvPCMu','CePUveC','zw5HyMW','ruXWC0C','v0fstG','vf9tsvO','rv9trum','rurFt1i','vvjjvfK','r0Lox1y','Fdr8mG','zMfSC2u','qu1Fsuq','lY9SB2m','x1DjtKq','mZa2ow1oBxjwrW','t0Xt','zvntrq','zvn0zgK','veLptG','qv9qqvq','tevex0m','Ag9ZDa','Bg9Ntgu','ywXOB3m','se9tva','ls1LBNy','vvbFveu','vvbqt1i','u1nmx0S','mZG0z1HprNzj','DhjPBq','ChbVCNq','twLZC2K','uKfurv8','AM9PBG','rv9ivfq','zxjdyxm','vvbFqva','t01nqu4','ndK3mtC4ouLAv0DkCq','Ahr0Chm','DdOZmJm','B2XZ','u1nmx0m','BuLK','Dg9vCha','ru5bqKW','zw52','revcvuC','q0Xjq0S','y2fSAg8','mhWXFdm','zMLSDgu','t1ju','Dg9mB3C','C3q6mZq','mZy0muHov2THva','oI8Vmti','reLtqui','AuDyAxq','lJe6mZq','mZiZmq','ru5ux00','rv9dt1i','su5gtW','BwfW','rvzfta','Dxbuzwe','AxjVBM0','Cg9YDa','oePeuNnJDW','vvjfuW','rv9tu0u','BgvUz3q','t1DFtvm','teLnsvq','zwruB28','x1bpuLq','mZq0mW','DxbbCgK','tevex1q','rurFve8','x01bwa','rvjux1a','mtq3otC2ohHbsuniDW','ntaXntK2oxbfy2zhra','sfruufm','zgLZywi','zg9JDw0','t09muW','vfjbq0u','rvLFuee','BgvKvg8','ru5ux1m','y2XPy2S','otbjzNLxv3u','wMTcsNe','C2XPy2u','rvfvrvm','BgvZoIa','lY8XmJC','quXmt1C','qMf6vui','re9dvu0','t0rvteu','oI8VBg8','vNHuze0','rv9tveq','yxjNDG','BMCGCMu','lJaUmq','mZeZmhLQsMfyBG','mtbTyG','tufyx1i','sv9lrvK','C3bSAxq','rv9sqvq','lJaUmc4','mJq0otvluMPVAfi','lJe6mZi','s2v5','qvri','u1nfx1a','te9hx0W','C3nLug8','rvjst1i','Ahr0CdO','x0zfqvq','DdOZmda','rgTXr1a'];a0_0xca6e=function(){return _0x299e28;};return a0_0xca6e();}function a0_0x19f5(_0x56c194,_0x4c4283){_0x56c194=_0x56c194-0x14e;const _0xca6e=a0_0xca6e();let _0x19f576=_0xca6e[_0x56c194];if(a0_0x19f5['Nreicm']===undefined){var _0x1cc477=function(_0x451c52){const _0x1721cd='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x972016='',_0x3972b5='';for(let _0x5b192b=0x0,_0x48747f,_0x3be496,_0x46b7a9=0x0;_0x3be496=_0x451c52['charAt'](_0x46b7a9++);~_0x3be496&&(_0x48747f=_0x5b192b%0x4?_0x48747f*0x40+_0x3be496:_0x3be496,_0x5b192b++%0x4)?_0x972016+=String['fromCharCode'](0xff&_0x48747f>>(-0x2*_0x5b192b&0x6)):0x0){_0x3be496=_0x1721cd['indexOf'](_0x3be496);}for(let _0x3cef00=0x0,_0x540145=_0x972016['length'];_0x3cef00<_0x540145;_0x3cef00++){_0x3972b5+='%'+('00'+_0x972016['charCodeAt'](_0x3cef00)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3972b5);};a0_0x19f5['xyWGWj']=_0x1cc477,a0_0x19f5['jFckmA']={},a0_0x19f5['Nreicm']=!![];}const _0x2dded4=_0xca6e[0x0],_0x25f4a8=_0x56c194+_0x2dded4,_0x5f0701=a0_0x19f5['jFckmA'][_0x25f4a8];return!_0x5f0701?(_0x19f576=a0_0x19f5['xyWGWj'](_0x19f576),a0_0x19f5['jFckmA'][_0x25f4a8]=_0x19f576):_0x19f576=_0x5f0701,_0x19f576;}const a0_0x1c108d=a0_0x19f5;(function(_0xd91c6a,_0x2c9b6b){const _0x4e8ffc=a0_0x19f5,_0x437f00=_0xd91c6a();while(!![]){try{const _0x27de50=parseInt(_0x4e8ffc(0x1c0))/0x1*(-parseInt(_0x4e8ffc(0x18d))/0x2)+parseInt(_0x4e8ffc(0x1b0))/0x3+parseInt(_0x4e8ffc(0x182))/0x4+parseInt(_0x4e8ffc(0x1a4))/0x5*(parseInt(_0x4e8ffc(0x1cf))/0x6)+parseInt(_0x4e8ffc(0x183))/0x7*(-parseInt(_0x4e8ffc(0x174))/0x8)+parseInt(_0x4e8ffc(0x155))/0x9+parseInt(_0x4e8ffc(0x19d))/0xa*(-parseInt(_0x4e8ffc(0x166))/0xb);if(_0x27de50===_0x2c9b6b)break;else _0x437f00['push'](_0x437f00['shift']());}catch(_0x16281d){_0x437f00['push'](_0x437f00['shift']());}}}(a0_0xca6e,0xbd155));const args=process[a0_0x1c108d(0x19a)][a0_0x1c108d(0x18f)](0x2),envArgs={};for(let i=0x0;i<args[a0_0x1c108d(0x177)+'h'];i++){if(args[i]===a0_0x1c108d(0x1cb)&&i+0x1<args[a0_0x1c108d(0x177)+'h']){const [key,value]=args[i+0x1][a0_0x1c108d(0x1a1)]('=');if(key===a0_0x1c108d(0x15f)+a0_0x1c108d(0x153)+a0_0x1c108d(0x1a0))envArgs[a0_0x1c108d(0x18c)+a0_0x1c108d(0x17d)+a0_0x1c108d(0x1a6)]=value;if(key==='CLICK'+a0_0x1c108d(0x1cc)+a0_0x1c108d(0x1bd))envArgs[a0_0x1c108d(0x18c)+a0_0x1c108d(0x171)+a0_0x1c108d(0x15a)]=value;if(key===a0_0x1c108d(0x195)+a0_0x1c108d(0x18b)+a0_0x1c108d(0x1cd)+'T')envArgs[a0_0x1c108d(0x186)+'entSu'+a0_0x1c108d(0x1d1)]=value;if(key===a0_0x1c108d(0x1a9)+a0_0x1c108d(0x170))envArgs[a0_0x1c108d(0x1c8)+'vel']=value;if(key===a0_0x1c108d(0x168)+a0_0x1c108d(0x17e)+a0_0x1c108d(0x187))envArgs['disab'+a0_0x1c108d(0x18a)+a0_0x1c108d(0x158)]=value;if(key==='ENABL'+'ED_TO'+a0_0x1c108d(0x1c1))envArgs[a0_0x1c108d(0x1b3)+a0_0x1c108d(0x17a)+'ls']=value;if(key===a0_0x1c108d(0x15c)+a0_0x1c108d(0x176))envArgs[a0_0x1c108d(0x1b3)+'eSSE']=value;if(key==='SSE_P'+a0_0x1c108d(0x163))envArgs[a0_0x1c108d(0x1aa)+'rt']=value;if(key===a0_0x1c108d(0x15c)+'E_STD'+'IO')envArgs['enabl'+a0_0x1c108d(0x1c3)+'o']=value;if(key==='PORT')envArgs[a0_0x1c108d(0x173)]=value;if(key===a0_0x1c108d(0x1ca))envArgs[a0_0x1c108d(0x1c7)]=value;i++;}}export var LogLevel;(function(_0x54e711){const _0x3bada1=a0_0x1c108d,_0x44ce9f={'BazUB':_0x3bada1(0x15e),'iGXit':_0x3bada1(0x1ab),'VxTdM':_0x3bada1(0x16e),'ELpsG':_0x3bada1(0x1b5)},_0x45636b=(_0x3bada1(0x161)+_0x3bada1(0x1bb))[_0x3bada1(0x1a1)]('|');let _0x448b45=0x0;while(!![]){switch(_0x45636b[_0x448b45++]){case'0':_0x54e711[_0x54e711[_0x3bada1(0x188)]=0x0]=_0x3bada1(0x188);continue;case'1':_0x54e711[_0x54e711[_0x44ce9f[_0x3bada1(0x194)]]=0x1]=_0x3bada1(0x15e);continue;case'2':_0x54e711[_0x54e711[_0x3bada1(0x1ab)]=0x4]=_0x44ce9f[_0x3bada1(0x169)];continue;case'3':_0x54e711[_0x54e711[_0x3bada1(0x16e)]=0x2]=_0x44ce9f[_0x3bada1(0x198)];continue;case'4':_0x54e711[_0x54e711[_0x44ce9f[_0x3bada1(0x1b4)]]=0x3]='WARN';continue;}break;}}(LogLevel||(LogLevel={})));const parseLogLevel=_0x39664c=>{const _0x43dac1=a0_0x1c108d,_0x486d22={'DkqGP':_0x43dac1(0x188),'ZkBJq':_0x43dac1(0x15e),'IwMNo':'WARN'};if(!_0x39664c)return LogLevel[_0x43dac1(0x1ab)];switch(_0x39664c[_0x43dac1(0x15b)+_0x43dac1(0x152)+'e']()){case _0x486d22[_0x43dac1(0x1af)]:return LogLevel[_0x43dac1(0x188)];case _0x486d22[_0x43dac1(0x18e)]:return LogLevel['DEBUG'];case _0x43dac1(0x16e):return LogLevel[_0x43dac1(0x16e)];case _0x486d22['IwMNo']:return LogLevel[_0x43dac1(0x1b5)];case _0x43dac1(0x1ab):return LogLevel[_0x43dac1(0x1ab)];default:return LogLevel[_0x43dac1(0x1ab)];}},parseBoolean=(_0x1ba5bd,_0x4b6cc8)=>{const _0x31cb5e=a0_0x1c108d;if(_0x1ba5bd===undefined)return _0x4b6cc8;return _0x1ba5bd[_0x31cb5e(0x164)+'erCas'+'e']()==='true';},parseInteger=(_0x6b2f72,_0x3d360e)=>{const _0xee6654=a0_0x1c108d,_0xaca154={'pJnTG':function(_0x5b7972,_0x21845a){return _0x5b7972(_0x21845a);}};if(_0x6b2f72===undefined)return _0x3d360e;const _0x22df20=parseInt(_0x6b2f72,0xa);return _0xaca154[_0xee6654(0x1b2)](isNaN,_0x22df20)?_0x3d360e:_0x22df20;},parseOrigins=(_0x4b1588,_0x132fca)=>{const _0x8f4254=a0_0x1c108d;if(!_0x4b1588)return _0x132fca;return _0x4b1588[_0x8f4254(0x1a1)](',')[_0x8f4254(0x16f)](_0x38c066=>_0x38c066[_0x8f4254(0x1d0)]())[_0x8f4254(0x162)+'r'](_0x507422=>_0x507422!=='');},configuration={'clickupApiKey':envArgs['click'+'upApi'+a0_0x1c108d(0x1a6)]||process[a0_0x1c108d(0x15d)][a0_0x1c108d(0x15f)+a0_0x1c108d(0x153)+a0_0x1c108d(0x1a0)]||'','clickupTeamId':envArgs['click'+a0_0x1c108d(0x171)+a0_0x1c108d(0x15a)]||process[a0_0x1c108d(0x15d)][a0_0x1c108d(0x15f)+'UP_TE'+'AM_ID']||'','documentSupport':envArgs[a0_0x1c108d(0x186)+'entSu'+a0_0x1c108d(0x1d1)]||process['env'][a0_0x1c108d(0x195)+a0_0x1c108d(0x18b)+'UPPOR'+'T']||process[a0_0x1c108d(0x15d)][a0_0x1c108d(0x195)+'ENT_M'+a0_0x1c108d(0x196)]||process[a0_0x1c108d(0x15d)][a0_0x1c108d(0x195)+a0_0x1c108d(0x16c)+'ODEL']||a0_0x1c108d(0x1bc),'logLevel':parseLogLevel(envArgs['logLe'+'vel']||process['env'][a0_0x1c108d(0x1a9)+a0_0x1c108d(0x170)]),'disabledTools':(envArgs[a0_0x1c108d(0x185)+a0_0x1c108d(0x18a)+a0_0x1c108d(0x158)]||process[a0_0x1c108d(0x15d)][a0_0x1c108d(0x168)+a0_0x1c108d(0x17e)+'OOLS']||process[a0_0x1c108d(0x15d)][a0_0x1c108d(0x168)+a0_0x1c108d(0x1c6)+a0_0x1c108d(0x154)+'DS'])?.[a0_0x1c108d(0x1a1)](',')[a0_0x1c108d(0x16f)](_0x13f1d6=>_0x13f1d6[a0_0x1c108d(0x1d0)]())['filte'+'r'](_0x41017d=>_0x41017d!=='')||[],'enabledTools':(envArgs['enabl'+a0_0x1c108d(0x17a)+'ls']||process['env'][a0_0x1c108d(0x15c)+a0_0x1c108d(0x17f)+a0_0x1c108d(0x1c1)])?.[a0_0x1c108d(0x1a1)](',')['map'](_0xe49b5e=>_0xe49b5e[a0_0x1c108d(0x1d0)]())[a0_0x1c108d(0x162)+'r'](_0x290fed=>_0x290fed!=='')||[],'enableSSE':parseBoolean(envArgs[a0_0x1c108d(0x1b3)+a0_0x1c108d(0x1c2)]||process['env'][a0_0x1c108d(0x15c)+a0_0x1c108d(0x176)],![]),'ssePort':parseInteger(envArgs[a0_0x1c108d(0x1aa)+'rt']||process[a0_0x1c108d(0x15d)][a0_0x1c108d(0x1a8)+a0_0x1c108d(0x163)],0xbb8),'enableStdio':parseBoolean(envArgs[a0_0x1c108d(0x1b3)+a0_0x1c108d(0x1c3)+'o']||process[a0_0x1c108d(0x15d)][a0_0x1c108d(0x15c)+a0_0x1c108d(0x199)+'IO'],!![]),'port':envArgs[a0_0x1c108d(0x173)]||process['env']['PORT']||a0_0x1c108d(0x16b),'enableSecurityFeatures':parseBoolean(process[a0_0x1c108d(0x15d)][a0_0x1c108d(0x15c)+a0_0x1c108d(0x1b7)+a0_0x1c108d(0x1b9)+a0_0x1c108d(0x1ad)+a0_0x1c108d(0x175)],![]),'enableOriginValidation':parseBoolean(process['env'][a0_0x1c108d(0x15c)+'E_ORI'+a0_0x1c108d(0x1ba)+'ALIDA'+a0_0x1c108d(0x1c4)],![]),'enableRateLimit':parseBoolean(process[a0_0x1c108d(0x15d)][a0_0x1c108d(0x15c)+a0_0x1c108d(0x1a2)+'E_LIM'+'IT'],![]),'enableCors':parseBoolean(process[a0_0x1c108d(0x15d)][a0_0x1c108d(0x15c)+a0_0x1c108d(0x16d)+'S'],![]),'allowedOrigins':parseOrigins(process[a0_0x1c108d(0x15d)][a0_0x1c108d(0x193)+a0_0x1c108d(0x1b8)+'IGINS'],[a0_0x1c108d(0x1ac)+a0_0x1c108d(0x192)+'.0.0.'+'1:323'+'1','http:'+a0_0x1c108d(0x1be)+a0_0x1c108d(0x1c9)+a0_0x1c108d(0x157)+'1',a0_0x1c108d(0x1ac)+'//127'+a0_0x1c108d(0x1a3)+'1:300'+'0',a0_0x1c108d(0x1ac)+a0_0x1c108d(0x1be)+a0_0x1c108d(0x1c9)+a0_0x1c108d(0x1ae)+'0',a0_0x1c108d(0x156)+'://12'+'7.0.0'+a0_0x1c108d(0x16a)+'43',a0_0x1c108d(0x156)+a0_0x1c108d(0x197)+a0_0x1c108d(0x160)+a0_0x1c108d(0x165)+'43',a0_0x1c108d(0x156)+a0_0x1c108d(0x167)+'7.0.0'+a0_0x1c108d(0x1a5)+'31',a0_0x1c108d(0x156)+a0_0x1c108d(0x197)+a0_0x1c108d(0x160)+'st:32'+'31']),'rateLimitMax':parseInteger(process[a0_0x1c108d(0x15d)][a0_0x1c108d(0x14f)+'LIMIT'+a0_0x1c108d(0x180)],0x64),'rateLimitWindowMs':parseInteger(process[a0_0x1c108d(0x15d)][a0_0x1c108d(0x14f)+a0_0x1c108d(0x179)+a0_0x1c108d(0x1bf)+a0_0x1c108d(0x178)],0xea60),'maxRequestSize':process[a0_0x1c108d(0x15d)][a0_0x1c108d(0x19f)+a0_0x1c108d(0x190)+a0_0x1c108d(0x1b6)+'E']||a0_0x1c108d(0x19e),'enableHttps':parseBoolean(process[a0_0x1c108d(0x15d)]['ENABL'+a0_0x1c108d(0x151)+'PS'],![]),'httpsPort':process[a0_0x1c108d(0x15d)][a0_0x1c108d(0x184)+a0_0x1c108d(0x17b)]||a0_0x1c108d(0x17c),'sslKeyPath':process[a0_0x1c108d(0x15d)][a0_0x1c108d(0x1ce)+a0_0x1c108d(0x189)+'TH'],'sslCertPath':process['env'][a0_0x1c108d(0x159)+a0_0x1c108d(0x181)+a0_0x1c108d(0x1a7)],'sslCaPath':process[a0_0x1c108d(0x15d)][a0_0x1c108d(0x159)+a0_0x1c108d(0x1c5)+'H'],'host':envArgs[a0_0x1c108d(0x1c7)]||process['env']['HOST']||'127.0'+a0_0x1c108d(0x19c)};export const validateConfiguration=()=>{const _0x496889=a0_0x1c108d,_0x21de0f=[_0x496889(0x18c)+_0x496889(0x17d)+_0x496889(0x1a6),_0x496889(0x18c)+_0x496889(0x171)+_0x496889(0x15a)],_0x395c1a=_0x21de0f[_0x496889(0x162)+'r'](_0x1a7ced=>!configuration[_0x1a7ced]);if(_0x395c1a[_0x496889(0x177)+'h']>0x0)throw new Error(_0x496889(0x14e)+_0x496889(0x19b)+_0x496889(0x1b1)+'d\x20env'+_0x496889(0x172)+'ent\x20v'+'ariab'+_0x496889(0x191)+_0x395c1a[_0x496889(0x150)](',\x20'));};export default configuration;
1
+ const a0_0x3cf99f=a0_0x59a8;(function(_0x3e7cd1,_0x34302d){const _0x21b979=a0_0x59a8,_0x48121e=_0x3e7cd1();while(!![]){try{const _0x54698f=-parseInt(_0x21b979(0x10e))/0x1*(-parseInt(_0x21b979(0x10b))/0x2)+parseInt(_0x21b979(0xe7))/0x3*(parseInt(_0x21b979(0xb9))/0x4)+parseInt(_0x21b979(0xc5))/0x5+-parseInt(_0x21b979(0xde))/0x6*(-parseInt(_0x21b979(0xfe))/0x7)+-parseInt(_0x21b979(0xe8))/0x8*(-parseInt(_0x21b979(0x108))/0x9)+-parseInt(_0x21b979(0xd3))/0xa+parseInt(_0x21b979(0xc4))/0xb*(-parseInt(_0x21b979(0xf0))/0xc);if(_0x54698f===_0x34302d)break;else _0x48121e['push'](_0x48121e['shift']());}catch(_0x4e7370){_0x48121e['push'](_0x48121e['shift']());}}}(a0_0x439b,0xa91ef));function a0_0x59a8(_0x14f58b,_0x34271b){_0x14f58b=_0x14f58b-0xb4;const _0x439b15=a0_0x439b();let _0x59a806=_0x439b15[_0x14f58b];if(a0_0x59a8['Rfzznt']===undefined){var _0x3ab29d=function(_0xcc1d7c){const _0x227f4b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x56d187='',_0x2c6e0a='';for(let _0x2843f5=0x0,_0x2b6b88,_0x319dc1,_0x555393=0x0;_0x319dc1=_0xcc1d7c['charAt'](_0x555393++);~_0x319dc1&&(_0x2b6b88=_0x2843f5%0x4?_0x2b6b88*0x40+_0x319dc1:_0x319dc1,_0x2843f5++%0x4)?_0x56d187+=String['fromCharCode'](0xff&_0x2b6b88>>(-0x2*_0x2843f5&0x6)):0x0){_0x319dc1=_0x227f4b['indexOf'](_0x319dc1);}for(let _0x1ce48a=0x0,_0x3c17a9=_0x56d187['length'];_0x1ce48a<_0x3c17a9;_0x1ce48a++){_0x2c6e0a+='%'+('00'+_0x56d187['charCodeAt'](_0x1ce48a)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2c6e0a);};a0_0x59a8['vJMqsC']=_0x3ab29d,a0_0x59a8['BVVBYa']={},a0_0x59a8['Rfzznt']=!![];}const _0x24b037=_0x439b15[0x0],_0x5cef0e=_0x14f58b+_0x24b037,_0x45809d=a0_0x59a8['BVVBYa'][_0x5cef0e];return!_0x45809d?(_0x59a806=a0_0x59a8['vJMqsC'](_0x59a806),a0_0x59a8['BVVBYa'][_0x5cef0e]=_0x59a806):_0x59a806=_0x45809d,_0x59a806;}const args=process[a0_0x3cf99f(0xf4)][a0_0x3cf99f(0xd1)](0x2),envArgs={};for(let i=0x0;i<args[a0_0x3cf99f(0xbc)+'h'];i++){if(args[i]==='--env'&&i+0x1<args[a0_0x3cf99f(0xbc)+'h']){const [key,value]=args[i+0x1][a0_0x3cf99f(0xda)]('=');if(key==='CLICK'+a0_0x3cf99f(0xec)+a0_0x3cf99f(0xe1))envArgs[a0_0x3cf99f(0xf2)+a0_0x3cf99f(0xf5)+a0_0x3cf99f(0xc9)]=value;if(key===a0_0x3cf99f(0x10c)+a0_0x3cf99f(0xfd)+a0_0x3cf99f(0xcd))envArgs[a0_0x3cf99f(0xf2)+'upTea'+a0_0x3cf99f(0x10a)]=value;if(key===a0_0x3cf99f(0xe0)+a0_0x3cf99f(0xee)+a0_0x3cf99f(0xd4)+'T')envArgs[a0_0x3cf99f(0xe3)+a0_0x3cf99f(0xd7)+a0_0x3cf99f(0xf6)]=value;if(key===a0_0x3cf99f(0xd6)+a0_0x3cf99f(0x102))envArgs[a0_0x3cf99f(0xc0)+'vel']=value;if(key===a0_0x3cf99f(0xc2)+a0_0x3cf99f(0xf8)+a0_0x3cf99f(0x10f))envArgs[a0_0x3cf99f(0xca)+'ledTo'+a0_0x3cf99f(0xd9)]=value;if(key==='ENABL'+'ED_TO'+a0_0x3cf99f(0xc7))envArgs['enabl'+a0_0x3cf99f(0xd5)+'ls']=value;if(key==='ENABL'+'E_SSE')envArgs[a0_0x3cf99f(0xe5)+a0_0x3cf99f(0xe9)]=value;if(key==='SSE_P'+a0_0x3cf99f(0xe2))envArgs[a0_0x3cf99f(0xb6)+'rt']=value;if(key===a0_0x3cf99f(0x112)+a0_0x3cf99f(0xfa)+'IO')envArgs[a0_0x3cf99f(0xe5)+'eStdi'+'o']=value;if(key===a0_0x3cf99f(0xff))envArgs[a0_0x3cf99f(0x101)]=value;if(key===a0_0x3cf99f(0xc1))envArgs['host']=value;i++;}}function a0_0x439b(){const _0x151a41=['ru5bqKW','DMvS','mtOZmJm','oI8VBg8','oI8Vmti','zMLSDgu','C3nLug8','Fdj8mW','C3q6mZi','ne1HDwPQBG','CeL5Cg8','mxWWFdq','BgvUz3q','t0j5D0q','yKDpAMW','lJe6mZi','Bg9Ntgu','se9tva','reLtqui','lY8XmJC','mJjKAMDmr2u','mJu5oteXmhH3D3b5va','DdOZmda','t0Xt','zMfSC2u','s2v5','zgLZywi','mZiZmq','yxjPywi','qu1Fsuq','lJaUmc4','zcbLBNy','CxvPCMu','C2XPy2u','mtOZmda','mJmZmZy2mejUy1PWza','vvbqt1i','zwruB28','te9hx0W','zw50u3u','rvjst1i','B2XZ','C3bSAxq','BwfW','De1Jrxq','AM9PBG','ndjmq2X6uwO','vfjbq0u','re9dvu0','sv9lrvK','t1ju','zg9JDw0','Ag9ZDa','zw5HyMW','v0fstG','mJiZmZqXCLvKvKTi','mJK4ngHtqKfxCG','zvntrq','BgvKvg8','ywXOB3m','vvbFqva','DhjPBq','ru5ux1m','Ahr0Chm','mte4mtKZmJHyrgHsvxu','nY4WlJa','y2XPy2S','s2rSz28','yxjNDG','DxbbCgK','ChbVCNq','lY9SB2m','tevex1q','Ahr0CdO','rv9tveq','revcvuC','zxjdyxm','vvbFveu','otq0nJqZq1r0uvP3','ue9sva','mti3lJa','Cg9YDa','rvzfta','z25LBvi','mZq0mW','su5gtW','y2fSAg8','Dxbuzwe','mZaZm3zIwMz2Aq','zw50ihy','BuLK','mtaYnhvsEM5rrG','q0Xjq0S','qMnqwuS','mJqWnvzkufD4qq','t09muW','BgvZoIa','lJe6mZq'];a0_0x439b=function(){return _0x151a41;};return a0_0x439b();}export var LogLevel;(function(_0x238873){const _0xdc06b1=a0_0x3cf99f,_0x2f0881={'bGOjl':_0xdc06b1(0xdf),'BcPYK':_0xdc06b1(0xd8),'vgGvX':_0xdc06b1(0x105)},_0x4e14fc=(_0xdc06b1(0xbb)+_0xdc06b1(0xb7))['split']('|');let _0x2d4319=0x0;while(!![]){switch(_0x4e14fc[_0x2d4319++]){case'0':_0x238873[_0x238873[_0xdc06b1(0xfb)]=0x1]='DEBUG';continue;case'1':_0x238873[_0x238873[_0x2f0881[_0xdc06b1(0xbe)]]=0x0]=_0x2f0881[_0xdc06b1(0xbe)];continue;case'2':_0x238873[_0x238873[_0xdc06b1(0xe6)]=0x3]=_0xdc06b1(0xe6);continue;case'3':_0x238873[_0x238873[_0xdc06b1(0xd8)]=0x4]=_0x2f0881[_0xdc06b1(0x10d)];continue;case'4':_0x238873[_0x238873[_0x2f0881['vgGvX']]=0x2]=_0xdc06b1(0x105);continue;}break;}}(LogLevel||(LogLevel={})));const parseLogLevel=_0x43e460=>{const _0x5751cc=a0_0x3cf99f,_0x178a30={'FTEFm':_0x5751cc(0x105),'OBywD':_0x5751cc(0xe6)};if(!_0x43e460)return LogLevel['ERROR'];switch(_0x43e460['toUpp'+_0x5751cc(0xfc)+'e']()){case'TRACE':return LogLevel['TRACE'];case _0x5751cc(0xfb):return LogLevel[_0x5751cc(0xfb)];case _0x178a30['FTEFm']:return LogLevel['INFO'];case _0x178a30[_0x5751cc(0xbd)]:return LogLevel['WARN'];case'ERROR':return LogLevel['ERROR'];default:return LogLevel[_0x5751cc(0xd8)];}},parseBoolean=(_0x4edc51,_0x484ec8)=>{const _0x4ae65f=a0_0x3cf99f,_0x1fef6d={'ywpvL':function(_0x512bcb,_0x3c2cd6){return _0x512bcb===_0x3c2cd6;},'Kdlgo':function(_0x519ee1,_0x3138ff){return _0x519ee1===_0x3138ff;},'tMcEt':'true'};if(_0x1fef6d['ywpvL'](_0x4edc51,undefined))return _0x484ec8;return _0x1fef6d[_0x4ae65f(0xf3)](_0x4edc51['toLow'+_0x4ae65f(0xfc)+'e'](),_0x1fef6d[_0x4ae65f(0xdc)]);},parseInteger=(_0x2f51a3,_0x14997c)=>{const _0x981c15=a0_0x3cf99f,_0x3bfe85={'qiamR':function(_0x4fe38c,_0x3cae7e){return _0x4fe38c===_0x3cae7e;},'pIypo':function(_0x41ba39,_0x465cd4,_0x5c95be){return _0x41ba39(_0x465cd4,_0x5c95be);},'gnemR':function(_0x1a54e6,_0x6bd7b2){return _0x1a54e6(_0x6bd7b2);}};if(_0x3bfe85['qiamR'](_0x2f51a3,undefined))return _0x14997c;const _0x3a8e3f=_0x3bfe85[_0x981c15(0xba)](parseInt,_0x2f51a3,0xa);return _0x3bfe85[_0x981c15(0x103)](isNaN,_0x3a8e3f)?_0x14997c:_0x3a8e3f;},parseOrigins=(_0x264c7b,_0x53e92e)=>{const _0xe06dd6=a0_0x3cf99f;if(!_0x264c7b)return _0x53e92e;return _0x264c7b['split'](',')['map'](_0xa844aa=>_0xa844aa[_0xe06dd6(0xed)]())['filte'+'r'](_0x3b866f=>_0x3b866f!=='');},configuration={'clickupApiKey':envArgs['click'+a0_0x3cf99f(0xf5)+'Key']||process.env.CLICKUP_API_KEY||'','clickupTeamId':envArgs['click'+'upTea'+a0_0x3cf99f(0x10a)]||process.env.CLICKUP_TEAM_ID||'','documentSupport':envArgs[a0_0x3cf99f(0xe3)+'entSu'+a0_0x3cf99f(0xf6)]||process.env.DOCUMENT_SUPPORT||process.env.DOCUMENT_MODULE||process.env.DOCUMENT_MODEL||a0_0x3cf99f(0xc8),'logLevel':parseLogLevel(envArgs[a0_0x3cf99f(0xc0)+a0_0x3cf99f(0x113)]||process.env.LOG_LEVEL),'disabledTools':(envArgs[a0_0x3cf99f(0xca)+a0_0x3cf99f(0xea)+'ols']||process.env.DISABLED_TOOLS||process.env.DISABLED_COMMANDS)?.[a0_0x3cf99f(0xda)](',')[a0_0x3cf99f(0xdb)](_0x5ce80=>_0x5ce80['trim']())[a0_0x3cf99f(0xb5)+'r'](_0x2629b9=>_0x2629b9!=='')||[],'enabledTools':(envArgs[a0_0x3cf99f(0xe5)+'edToo'+'ls']||process.env.ENABLED_TOOLS)?.[a0_0x3cf99f(0xda)](',')[a0_0x3cf99f(0xdb)](_0x4872c1=>_0x4872c1[a0_0x3cf99f(0xed)]())[a0_0x3cf99f(0xb5)+'r'](_0x27a5b2=>_0x27a5b2!=='')||[],'enableSSE':parseBoolean(envArgs[a0_0x3cf99f(0xe5)+a0_0x3cf99f(0xe9)]||process.env.ENABLE_SSE,![]),'ssePort':parseInteger(envArgs[a0_0x3cf99f(0xb6)+'rt']||process.env.SSE_PORT,0xbb8),'enableStdio':parseBoolean(envArgs['enabl'+'eStdi'+'o']||process.env.ENABLE_STDIO,!![]),'port':envArgs[a0_0x3cf99f(0x101)]||process.env.PORT||a0_0x3cf99f(0xcb),'enableSecurityFeatures':parseBoolean(process.env.ENABLE_SECURITY_FEATURES,![]),'enableOriginValidation':parseBoolean(process.env.ENABLE_ORIGIN_VALIDATION,![]),'enableRateLimit':parseBoolean(process.env.ENABLE_RATE_LIMIT,![]),'enableCors':parseBoolean(process.env.ENABLE_CORS,![]),'allowedOrigins':parseOrigins(process.env.ALLOWED_ORIGINS,['http:'+a0_0x3cf99f(0xc3)+a0_0x3cf99f(0xce)+a0_0x3cf99f(0x114)+'1',a0_0x3cf99f(0xf9)+a0_0x3cf99f(0xf7)+a0_0x3cf99f(0xeb)+'t:323'+'1',a0_0x3cf99f(0xf9)+a0_0x3cf99f(0xc3)+a0_0x3cf99f(0xce)+a0_0x3cf99f(0xd2)+'0',a0_0x3cf99f(0xf9)+a0_0x3cf99f(0xf7)+'alhos'+a0_0x3cf99f(0xc6)+'0',a0_0x3cf99f(0xef)+'://12'+a0_0x3cf99f(0xf1)+a0_0x3cf99f(0x111)+'43',a0_0x3cf99f(0xef)+a0_0x3cf99f(0x115)+a0_0x3cf99f(0x106)+'st:34'+'43',a0_0x3cf99f(0xef)+a0_0x3cf99f(0xb4)+a0_0x3cf99f(0xf1)+a0_0x3cf99f(0xbf)+'31',a0_0x3cf99f(0xef)+a0_0x3cf99f(0x115)+'calho'+a0_0x3cf99f(0xb8)+'31']),'rateLimitMax':parseInteger(process.env.RATE_LIMIT_MAX,0x64),'rateLimitWindowMs':parseInteger(process.env.RATE_LIMIT_WINDOW_MS,0xea60),'maxRequestSize':process.env.MAX_REQUEST_SIZE||'10mb','enableHttps':parseBoolean(process.env.ENABLE_HTTPS,![]),'httpsPort':process.env.HTTPS_PORT||a0_0x3cf99f(0x104),'sslKeyPath':process.env.SSL_KEY_PATH,'sslCertPath':process.env.SSL_CERT_PATH,'sslCaPath':process.env.SSL_CA_PATH,'host':envArgs[a0_0x3cf99f(0xe4)]||process.env.HOST||a0_0x3cf99f(0x100)+'.0.1'};export const validateConfiguration=()=>{const _0x32b795=a0_0x3cf99f,_0x44406f=[_0x32b795(0xf2)+_0x32b795(0xf5)+_0x32b795(0xc9),_0x32b795(0xf2)+_0x32b795(0x107)+_0x32b795(0x10a)],_0x8b794f=_0x44406f[_0x32b795(0xb5)+'r'](_0x1e5b88=>!configuration[_0x1e5b88]);if(_0x8b794f[_0x32b795(0xbc)+'h']>0x0)throw new Error('Missi'+'ng\x20re'+_0x32b795(0xd0)+_0x32b795(0xcf)+'ironm'+_0x32b795(0x109)+_0x32b795(0xcc)+_0x32b795(0x110)+_0x8b794f[_0x32b795(0xdd)](',\x20'));};export default configuration;