@taazkareem/clickup-mcp-server 0.4.48 → 0.4.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Dockerfile.smithery +36 -0
- package/LICENSE +8 -2
- package/README.md +74 -211
- package/build/config.js +4 -16
- package/build/index.js +529 -302
- package/build/services/clickup.js +637 -80
- package/package.json +10 -10
- package/smithery.yaml +23 -0
- package/build/handlers/prompts.js +0 -88
- package/build/handlers/tools.js +0 -38
- package/build/utils/resolvers.js +0 -48
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Use a Node.js base image
|
|
2
|
+
FROM node:18-alpine AS builder
|
|
3
|
+
|
|
4
|
+
# Set the working directory
|
|
5
|
+
WORKDIR /app
|
|
6
|
+
|
|
7
|
+
# Copy package files and TypeScript config
|
|
8
|
+
COPY package.json package-lock.json tsconfig.json ./
|
|
9
|
+
|
|
10
|
+
# Copy the source files
|
|
11
|
+
COPY src/ ./src/
|
|
12
|
+
|
|
13
|
+
# Install dependencies and build
|
|
14
|
+
RUN npm install
|
|
15
|
+
RUN npm run build
|
|
16
|
+
|
|
17
|
+
# Use a smaller image for the runtime
|
|
18
|
+
FROM node:18-alpine AS runtime
|
|
19
|
+
|
|
20
|
+
# Set the working directory
|
|
21
|
+
WORKDIR /app
|
|
22
|
+
|
|
23
|
+
# Copy the build output and node_modules from the builder stage
|
|
24
|
+
COPY --from=builder /app/build ./build
|
|
25
|
+
COPY --from=builder /app/node_modules ./node_modules
|
|
26
|
+
COPY --from=builder /app/package.json ./
|
|
27
|
+
|
|
28
|
+
# Set environment variables (these will be overridden by Smithery)
|
|
29
|
+
ENV CLICKUP_API_KEY=placeholder
|
|
30
|
+
ENV CLICKUP_TEAM_ID=placeholder
|
|
31
|
+
|
|
32
|
+
# Expose the port if needed
|
|
33
|
+
EXPOSE 8080
|
|
34
|
+
|
|
35
|
+
# Define the command to run the application
|
|
36
|
+
CMD ["node", "build/index.js"]
|
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c)
|
|
3
|
+
Copyright (c) 2025 Talib Kareem
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -18,4 +18,10 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
18
18
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
19
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
20
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
|
23
|
+
Disclaimer: This software makes use of third-party APIs and may reference trademarks
|
|
24
|
+
or brands owned by third parties. The use of such APIs or references does not imply
|
|
25
|
+
any affiliation with or endorsement by the respective companies. All trademarks and
|
|
26
|
+
brand names are the property of their respective owners. This project is an independent
|
|
27
|
+
work and is not officially associated with or sponsored by any third-party company mentioned.
|
package/README.md
CHANGED
|
@@ -1,235 +1,97 @@
|
|
|
1
|
-
|
|
1
|
+
<img src="https://clickup.com/assets/brand/logo-v3-clickup-dark.svg" alt="ClickUp" height="40" style="vertical-align: middle; margin-top: -4px;">
|
|
2
|
+
|
|
3
|
+
# MCP Server
|
|
2
4
|
|
|
3
5
|
A Model Context Protocol (MCP) server for integrating ClickUp tasks with AI applications. This server allows AI agents to interact with ClickUp tasks, spaces, lists, and folders through a standardized protocol.
|
|
4
6
|
|
|
5
|
-
##
|
|
7
|
+
## Quick Start
|
|
6
8
|
|
|
7
|
-
|
|
8
|
-
- List and read ClickUp tasks as resources
|
|
9
|
-
- View task details, status, and assignments
|
|
10
|
-
- Access task history and relationships
|
|
9
|
+
Directions for use with Cursor Composer Agent:
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
- ✨ **Task Operations**
|
|
19
|
-
- Create single or bulk tasks
|
|
20
|
-
- Move tasks between lists
|
|
21
|
-
- Duplicate tasks
|
|
22
|
-
- Set priorities and due dates
|
|
23
|
-
- Assign team members
|
|
24
|
-
|
|
25
|
-
- 📊 **Information Retrieval**
|
|
26
|
-
- Get complete hierarchy of spaces, folders, and lists with IDs
|
|
27
|
-
- List available statuses
|
|
28
|
-
- Find items by name (case-insensitive)
|
|
29
|
-
- View task relationships
|
|
30
|
-
|
|
31
|
-
- 🔍 **Smart Name Resolution**
|
|
32
|
-
- Use names instead of IDs for lists and folders
|
|
33
|
-
- Global search across all spaces
|
|
34
|
-
- Case-insensitive matching
|
|
35
|
-
- Automatic location of items
|
|
36
|
-
|
|
37
|
-
- 📝 **AI Integration**
|
|
38
|
-
- Generate task descriptions with AI
|
|
39
|
-
- Summarize tasks and analyze priorities
|
|
40
|
-
- Get AI-powered task recommendations
|
|
41
|
-
|
|
42
|
-
- 🔒 **Security**
|
|
43
|
-
- Secure API key management
|
|
44
|
-
- Environment-based configuration
|
|
45
|
-
|
|
46
|
-
## Installation
|
|
47
|
-
|
|
48
|
-
### Using npx
|
|
11
|
+
1. Get your credentials:
|
|
12
|
+
- ClickUp API key from [ClickUp Settings](https://app.clickup.com/settings/apps)
|
|
13
|
+
- Team ID from your ClickUp workspace URL
|
|
14
|
+
2. Go to Features in settings
|
|
15
|
+
3. Add under MCP Servers:
|
|
49
16
|
```bash
|
|
50
|
-
npx @taazkareem/clickup-mcp-server
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
## Configuration
|
|
54
|
-
|
|
55
|
-
1. Get your ClickUp API key from [ClickUp Settings](https://app.clickup.com/settings/apps)
|
|
56
|
-
2. Create a `.env` file:
|
|
57
|
-
```env
|
|
58
|
-
CLICKUP_API_KEY=your_api_key_here
|
|
59
|
-
TEAM_ID=your_team_id_here
|
|
17
|
+
npx -y @taazkareem/clickup-mcp-server \
|
|
18
|
+
--env CLICKUP_API_KEY=your_api_key_here \
|
|
19
|
+
--env CLICKUP_TEAM_ID=your_team_id_here
|
|
60
20
|
```
|
|
21
|
+
4. Replace the credentials and click Save
|
|
22
|
+
5. Use Natural Language to interact with your ClickUp Workspace!
|
|
61
23
|
|
|
62
|
-
##
|
|
63
|
-
|
|
64
|
-
To add this server to Cursor AI Composer, follow these steps:
|
|
24
|
+
## Features
|
|
65
25
|
|
|
66
|
-
|
|
67
|
-
|
|
26
|
+
- 🎯 **Task Management**
|
|
27
|
+
- Create, update, and delete individual tasks
|
|
28
|
+
- Move and duplicate tasks between lists, spaces, and folders
|
|
29
|
+
- Create multiple tasks in bulk
|
|
30
|
+
- View and modify task details and properties
|
|
68
31
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
- Creates a new list in a space
|
|
117
|
-
- Required parameters:
|
|
118
|
-
- `name`: Name of the list
|
|
119
|
-
- Optional parameters:
|
|
120
|
-
- `spaceId`: ID of the space (optional if spaceName provided)
|
|
121
|
-
- `spaceName`: Name of the space (optional if spaceId provided)
|
|
122
|
-
- `content`: List description
|
|
123
|
-
- `status`: List status
|
|
124
|
-
- `priority`: Priority level (1-4)
|
|
125
|
-
- `dueDate`: Due date (ISO string)
|
|
126
|
-
|
|
127
|
-
5. **create_folder**
|
|
128
|
-
- Creates a new folder in a space
|
|
129
|
-
- Required parameters:
|
|
130
|
-
- `name`: Name of the folder
|
|
131
|
-
- Optional parameters:
|
|
132
|
-
- `spaceId`: ID of the space (optional if spaceName provided)
|
|
133
|
-
- `spaceName`: Name of the space (optional if spaceId provided)
|
|
134
|
-
- `override_statuses`: Whether to override space statuses
|
|
135
|
-
|
|
136
|
-
6. **create_list_in_folder**
|
|
137
|
-
- Creates a new list within a folder
|
|
138
|
-
- Required parameters:
|
|
139
|
-
- `name`: Name of the list
|
|
140
|
-
- Optional parameters:
|
|
141
|
-
- `folderId`: ID of the folder (optional if using folderName)
|
|
142
|
-
- `folderName`: Name of the folder
|
|
143
|
-
- `spaceId`: ID of the space (required if using folderName)
|
|
144
|
-
- `spaceName`: Name of the space (alternative to spaceId)
|
|
145
|
-
- `content`: List description
|
|
146
|
-
- `status`: List status
|
|
147
|
-
|
|
148
|
-
7. **move_task**
|
|
149
|
-
- Moves a task to a different list
|
|
150
|
-
- Required parameters:
|
|
151
|
-
- `taskId`: ID of the task to move
|
|
152
|
-
- Optional parameters:
|
|
153
|
-
- `listId`: ID of destination list (optional if listName provided)
|
|
154
|
-
- `listName`: Name of destination list (optional if listId provided)
|
|
155
|
-
|
|
156
|
-
8. **duplicate_task**
|
|
157
|
-
- Creates a copy of a task in a specified list
|
|
158
|
-
- Required parameters:
|
|
159
|
-
- `taskId`: ID of the task to duplicate
|
|
160
|
-
- Optional parameters:
|
|
161
|
-
- `listId`: ID of destination list (optional if listName provided)
|
|
162
|
-
- `listName`: Name of destination list (optional if listId provided)
|
|
163
|
-
|
|
164
|
-
9. **update_task**
|
|
165
|
-
- Updates an existing task
|
|
166
|
-
- Required parameters:
|
|
167
|
-
- `taskId`: ID of the task to update
|
|
168
|
-
- Optional parameters:
|
|
169
|
-
- `name`: New task name
|
|
170
|
-
- `description`: New description
|
|
171
|
-
- `status`: New status
|
|
172
|
-
- `priority`: New priority level (1-4)
|
|
173
|
-
- `dueDate`: New due date (ISO string)
|
|
174
|
-
|
|
175
|
-
### Available Prompts
|
|
176
|
-
|
|
177
|
-
1. **summarize_tasks**
|
|
178
|
-
- Provides a comprehensive summary of tasks
|
|
179
|
-
- Groups tasks by status
|
|
180
|
-
- Highlights priorities and deadlines
|
|
181
|
-
- Suggests task relationships
|
|
182
|
-
|
|
183
|
-
2. **analyze_priorities**
|
|
184
|
-
- Analyzes task priority distribution
|
|
185
|
-
- Identifies misaligned priorities
|
|
186
|
-
- Suggests priority adjustments
|
|
187
|
-
- Recommends task sequencing
|
|
188
|
-
|
|
189
|
-
3. **generate_description**
|
|
190
|
-
- Helps generate detailed task descriptions
|
|
191
|
-
- Includes:
|
|
192
|
-
- Clear objectives
|
|
193
|
-
- Success criteria
|
|
194
|
-
- Required resources
|
|
195
|
-
- Dependencies
|
|
196
|
-
- Potential risks
|
|
197
|
-
|
|
198
|
-
## Name Resolution
|
|
199
|
-
|
|
200
|
-
Most tools support finding items by either ID or name:
|
|
201
|
-
- Spaces can be referenced by `spaceId` or `spaceName`
|
|
202
|
-
- Folders can be referenced by `folderId` or `folderName` (with space information)
|
|
203
|
-
- Lists can be referenced by `listId` or found within spaces/folders
|
|
204
|
-
|
|
205
|
-
Name matching is case-insensitive for convenience.
|
|
32
|
+
- 📂 **Workspace Organization**
|
|
33
|
+
- Navigate complete workspace hierarchy (spaces, folders, lists)
|
|
34
|
+
- Tree structure with clear relationships
|
|
35
|
+
- Create and manage lists and folders
|
|
36
|
+
- Efficient path-based navigation
|
|
37
|
+
|
|
38
|
+
- 🔄 **Integration Features**
|
|
39
|
+
- Name or ID-based item lookup
|
|
40
|
+
- Case-insensitive name matching
|
|
41
|
+
- Markdown formatting support
|
|
42
|
+
- Built-in API rate limiting
|
|
43
|
+
- Comprehensive error handling
|
|
44
|
+
- Clear parameter validation
|
|
45
|
+
|
|
46
|
+
- 🤖 **AI-Powered Analysis**
|
|
47
|
+
- Task status summaries and overviews
|
|
48
|
+
- Priority analysis and recommendations
|
|
49
|
+
- Structured description generation
|
|
50
|
+
- Task relationship mapping
|
|
51
|
+
- Workspace organization insights
|
|
52
|
+
|
|
53
|
+
## Available Tools
|
|
54
|
+
|
|
55
|
+
| Tool | Description | Required Parameters |
|
|
56
|
+
|------|-------------|-------------------|
|
|
57
|
+
| [get_workspace_hierarchy](docs/tools.md#workspace-organization) | Get complete workspace structure | None |
|
|
58
|
+
| [get_tasks](docs/tools.md#task-management) | Retrieve tasks from a list | `listId` or `listName` |
|
|
59
|
+
| [get_task](docs/tools.md#task-management) | Get single task details | `taskId` or `taskName` |
|
|
60
|
+
| [create_task](docs/tools.md#task-management) | Create a new task | `listId`, `taskName` |
|
|
61
|
+
| [create_bulk_tasks](docs/tools.md#task-management) | Create multiple tasks | `listId`, `tasks[]` |
|
|
62
|
+
| [update_task](docs/tools.md#task-management) | Modify task properties | `taskId` or `taskName` |
|
|
63
|
+
| [delete_task](docs/tools.md#task-management) | Remove a task | `taskId` or `taskName` |
|
|
64
|
+
| [move_task](docs/tools.md#task-management) | Move task to another list | `taskId`, `destinationListId` |
|
|
65
|
+
| [duplicate_task](docs/tools.md#task-management) | Copy task to another list | `taskId`, `destinationListId` |
|
|
66
|
+
| [create_list](docs/tools.md#list-management) | Create a new list | `spaceId`, `listName` |
|
|
67
|
+
| [create_folder](docs/tools.md#folder-management) | Create a new folder | `spaceId`, `folderName` |
|
|
68
|
+
| [create_list_in_folder](docs/tools.md#list-management) | Create list in folder | `folderId`, `listName` |
|
|
69
|
+
|
|
70
|
+
See [full documentation](docs/tools.md) for optional parameters and advanced usage.
|
|
71
|
+
|
|
72
|
+
## Available Prompts
|
|
73
|
+
|
|
74
|
+
| Prompt | Purpose | Features |
|
|
75
|
+
|--------|---------|----------|
|
|
76
|
+
| [summarize_tasks](docs/tools.md#prompts) | Generate task overview | Status summary, relationships, current states |
|
|
77
|
+
| [analyze_priorities](docs/tools.md#prompts) | Review task priorities | Priority review, adjustments, sequencing |
|
|
78
|
+
| [generate_description](docs/tools.md#prompts) | Create task descriptions | Structure, objectives, dependencies |
|
|
206
79
|
|
|
207
80
|
## Error Handling
|
|
208
81
|
|
|
209
|
-
The server provides clear error messages for
|
|
82
|
+
The server provides clear error messages for:
|
|
210
83
|
- Missing required parameters
|
|
211
84
|
- Invalid IDs or names
|
|
212
85
|
- Items not found
|
|
213
86
|
- Permission issues
|
|
214
87
|
- API errors
|
|
88
|
+
- Rate limiting
|
|
215
89
|
|
|
216
|
-
##
|
|
217
|
-
|
|
218
|
-
1. Clone the repository:
|
|
219
|
-
```bash
|
|
220
|
-
git clone https://github.com/taazkareem/clickup-mcp-server.git
|
|
221
|
-
cd clickup-mcp-server
|
|
222
|
-
```
|
|
90
|
+
## Support the Developer
|
|
223
91
|
|
|
224
|
-
|
|
225
|
-
```bash
|
|
226
|
-
npm install
|
|
227
|
-
```
|
|
92
|
+
If you find this project useful, please consider supporting
|
|
228
93
|
|
|
229
|
-
|
|
230
|
-
```bash
|
|
231
|
-
npm run dev
|
|
232
|
-
```
|
|
94
|
+
[](https://github.com/sponsors/TaazKareem)
|
|
233
95
|
|
|
234
96
|
## Contributing
|
|
235
97
|
|
|
@@ -238,3 +100,4 @@ Contributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md)
|
|
|
238
100
|
## License
|
|
239
101
|
|
|
240
102
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
103
|
+
|
package/build/config.js
CHANGED
|
@@ -1,31 +1,19 @@
|
|
|
1
|
-
import dotenv from 'dotenv';
|
|
2
|
-
// Load environment variables from .env file
|
|
3
|
-
dotenv.config();
|
|
4
|
-
console.log('Environment variables received:', {
|
|
5
|
-
CLICKUP_API_KEY: process.env.CLICKUP_API_KEY,
|
|
6
|
-
TEAM_ID: process.env.TEAM_ID
|
|
7
|
-
});
|
|
8
|
-
// Parse command line arguments for --env flags
|
|
9
1
|
const args = process.argv.slice(2);
|
|
10
|
-
console.log('Command line arguments:', args);
|
|
11
2
|
const envArgs = {};
|
|
12
3
|
for (let i = 0; i < args.length; i++) {
|
|
13
4
|
if (args[i] === '--env' && i + 1 < args.length) {
|
|
14
5
|
const [key, value] = args[i + 1].split('=');
|
|
15
6
|
if (key === 'CLICKUP_API_KEY')
|
|
16
7
|
envArgs.clickupApiKey = value;
|
|
17
|
-
if (key === '
|
|
18
|
-
envArgs.
|
|
19
|
-
i++;
|
|
8
|
+
if (key === 'CLICKUP_TEAM_ID')
|
|
9
|
+
envArgs.clickupTeamId = value;
|
|
10
|
+
i++;
|
|
20
11
|
}
|
|
21
12
|
}
|
|
22
|
-
console.log('Parsed environment arguments:', envArgs);
|
|
23
13
|
const configuration = {
|
|
24
14
|
clickupApiKey: envArgs.clickupApiKey || process.env.CLICKUP_API_KEY || '',
|
|
25
|
-
|
|
15
|
+
clickupTeamId: envArgs.clickupTeamId || process.env.CLICKUP_TEAM_ID || '',
|
|
26
16
|
};
|
|
27
|
-
console.log('Final configuration:', configuration);
|
|
28
|
-
// Check for missing environment variables
|
|
29
17
|
const missingEnvVars = Object.entries(configuration)
|
|
30
18
|
.filter(([_, value]) => !value)
|
|
31
19
|
.map(([key]) => key);
|