@taazkareem/clickup-mcp-server 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -4
- package/build/server.js +1 -1
- package/build/utils/date-utils.js +18 -7
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
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
2
|
|
|
3
3
|
# MCP Server
|
|
4
|
+
|
|
5
|
+
[](https://github.com/TaazKareem/clickup-mcp-server/stargazers)
|
|
6
|
+
[](https://github.com/TaazKareem/clickup-mcp-server/graphs/commit-activity)
|
|
7
|
+
|
|
4
8
|
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.
|
|
5
9
|
|
|
6
|
-
> 🚧 **Status Update:** -Added attach_task_file tool with support for local files, URLs, and base64 data, and create_task_comment tool
|
|
7
10
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
> 🚧 **Status Update:** -v0.5.1 beta release with new Attach Task Files tool, Create Task Comments tool, Get Task Comments tool, and Custom ID support across all tools.
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
11
16
|
|
|
12
17
|
## Setup
|
|
13
18
|
|
|
@@ -26,6 +31,10 @@ The server is hosted on Smithery. There, you can preview the available tools or
|
|
|
26
31
|
|
|
27
32
|
## NPX Installation
|
|
28
33
|
|
|
34
|
+
[](https://www.npmjs.com/package/@taazkareem/clickup-mcp-server)
|
|
35
|
+
[](https://libraries.io/github/TaazKareem/clickup-mcp-server)
|
|
36
|
+
[](https://npmcharts.com/compare/@taazkareem/clickup-mcp-server?minimal=true)
|
|
37
|
+
|
|
29
38
|
Add this entry to your client's MCP settings JSON file:
|
|
30
39
|
|
|
31
40
|
```json
|
|
@@ -129,6 +138,10 @@ If you find this project useful, please consider supporting:
|
|
|
129
138
|
|
|
130
139
|
[](https://github.com/sponsors/TaazKareem)
|
|
131
140
|
|
|
141
|
+
<a href="https://buymeacoffee.com/taazkareem">
|
|
142
|
+
<img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" width="200" alt="Buy Me A Coffee">
|
|
143
|
+
</a>
|
|
144
|
+
|
|
132
145
|
## Acknowledgements
|
|
133
146
|
|
|
134
147
|
Special thanks to [ClickUp](https://clickup.com) for their excellent API and services that make this integration possible.
|
|
@@ -139,6 +152,8 @@ Contributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md)
|
|
|
139
152
|
|
|
140
153
|
## License
|
|
141
154
|
|
|
155
|
+
[](https://opensource.org/licenses/MIT)
|
|
156
|
+
|
|
142
157
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
143
158
|
|
|
144
159
|
## Disclaimer
|
package/build/server.js
CHANGED
|
@@ -6,14 +6,17 @@
|
|
|
6
6
|
/**
|
|
7
7
|
* Get a timestamp for a relative time
|
|
8
8
|
*
|
|
9
|
+
* @param minutes Minutes from now
|
|
9
10
|
* @param hours Hours from now
|
|
10
11
|
* @param days Days from now
|
|
11
12
|
* @param weeks Weeks from now
|
|
12
13
|
* @param months Months from now
|
|
13
14
|
* @returns Timestamp in milliseconds
|
|
14
15
|
*/
|
|
15
|
-
export function getRelativeTimestamp(hours = 0, days = 0, weeks = 0, months = 0) {
|
|
16
|
+
export function getRelativeTimestamp(minutes = 0, hours = 0, days = 0, weeks = 0, months = 0) {
|
|
16
17
|
const now = new Date();
|
|
18
|
+
if (minutes)
|
|
19
|
+
now.setMinutes(now.getMinutes() + minutes);
|
|
17
20
|
if (hours)
|
|
18
21
|
now.setHours(now.getHours() + hours);
|
|
19
22
|
if (days)
|
|
@@ -44,7 +47,7 @@ export function parseDueDate(dateString) {
|
|
|
44
47
|
return today.getTime();
|
|
45
48
|
}
|
|
46
49
|
// Handle relative dates with specific times
|
|
47
|
-
const relativeTimeRegex = /(?:(\d+)\s*(days?|weeks?|months?)\s*from\s*now|tomorrow|next\s+(?:week|month))\s*(?:at\s+(\d+)(?::(\d+))?\s*(am|pm)?)?/i;
|
|
50
|
+
const relativeTimeRegex = /(?:(\d+)\s*(minutes?|days?|weeks?|months?)\s*from\s*now|tomorrow|next\s+(?:week|month))\s*(?:at\s+(\d+)(?::(\d+))?\s*(am|pm)?)?/i;
|
|
48
51
|
const match = lowerDate.match(relativeTimeRegex);
|
|
49
52
|
if (match) {
|
|
50
53
|
const date = new Date();
|
|
@@ -52,7 +55,10 @@ export function parseDueDate(dateString) {
|
|
|
52
55
|
// Calculate the future date
|
|
53
56
|
if (amount && unit) {
|
|
54
57
|
const value = parseInt(amount);
|
|
55
|
-
if (unit.startsWith('
|
|
58
|
+
if (unit.startsWith('minute')) {
|
|
59
|
+
date.setMinutes(date.getMinutes() + value);
|
|
60
|
+
}
|
|
61
|
+
else if (unit.startsWith('day')) {
|
|
56
62
|
date.setDate(date.getDate() + value);
|
|
57
63
|
}
|
|
58
64
|
else if (unit.startsWith('week')) {
|
|
@@ -89,25 +95,30 @@ export function parseDueDate(dateString) {
|
|
|
89
95
|
return date.getTime();
|
|
90
96
|
}
|
|
91
97
|
// Handle hours from now
|
|
98
|
+
const minutesRegex = /(\d+)\s*minutes?\s*from\s*now/i;
|
|
92
99
|
const hoursRegex = /(\d+)\s*hours?\s*from\s*now/i;
|
|
93
100
|
const daysRegex = /(\d+)\s*days?\s*from\s*now/i;
|
|
94
101
|
const weeksRegex = /(\d+)\s*weeks?\s*from\s*now/i;
|
|
95
102
|
const monthsRegex = /(\d+)\s*months?\s*from\s*now/i;
|
|
103
|
+
if (minutesRegex.test(lowerDate)) {
|
|
104
|
+
const minutes = parseInt(lowerDate.match(minutesRegex)[1]);
|
|
105
|
+
return getRelativeTimestamp(minutes);
|
|
106
|
+
}
|
|
96
107
|
if (hoursRegex.test(lowerDate)) {
|
|
97
108
|
const hours = parseInt(lowerDate.match(hoursRegex)[1]);
|
|
98
|
-
return getRelativeTimestamp(hours);
|
|
109
|
+
return getRelativeTimestamp(0, hours);
|
|
99
110
|
}
|
|
100
111
|
if (daysRegex.test(lowerDate)) {
|
|
101
112
|
const days = parseInt(lowerDate.match(daysRegex)[1]);
|
|
102
|
-
return getRelativeTimestamp(0, days);
|
|
113
|
+
return getRelativeTimestamp(0, 0, days);
|
|
103
114
|
}
|
|
104
115
|
if (weeksRegex.test(lowerDate)) {
|
|
105
116
|
const weeks = parseInt(lowerDate.match(weeksRegex)[1]);
|
|
106
|
-
return getRelativeTimestamp(0, 0, weeks);
|
|
117
|
+
return getRelativeTimestamp(0, 0, 0, weeks);
|
|
107
118
|
}
|
|
108
119
|
if (monthsRegex.test(lowerDate)) {
|
|
109
120
|
const months = parseInt(lowerDate.match(monthsRegex)[1]);
|
|
110
|
-
return getRelativeTimestamp(0, 0, 0, months);
|
|
121
|
+
return getRelativeTimestamp(0, 0, 0, 0, months);
|
|
111
122
|
}
|
|
112
123
|
// Try to parse as a date string
|
|
113
124
|
const date = new Date(dateString);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@taazkareem/clickup-mcp-server",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "ClickUp MCP Server - Integrate ClickUp tasks with AI through Model Context Protocol",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "build/index.js",
|
|
@@ -55,9 +55,9 @@
|
|
|
55
55
|
},
|
|
56
56
|
"homepage": "https://github.com/taazkareem/clickup-mcp-server#readme",
|
|
57
57
|
"dependencies": {
|
|
58
|
-
"@modelcontextprotocol/sdk": "0.6.0",
|
|
59
|
-
"axios": "1.6.7",
|
|
60
|
-
"dotenv": "16.4.1"
|
|
58
|
+
"@modelcontextprotocol/sdk": "^0.6.0",
|
|
59
|
+
"axios": "^1.6.7",
|
|
60
|
+
"dotenv": "^16.4.1"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
63
|
"@types/node": "^20.11.16",
|