@griffinwork40/clickup-mcp-server 1.1.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.
- package/LICENSE +22 -0
- package/README.md +173 -0
- package/dist/constants.d.ts +36 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +39 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1352 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +258 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +75 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +343 -0
- package/dist/utils.js.map +1 -0
- package/package.json +54 -0
package/dist/utils.js
ADDED
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utility functions for ClickUp MCP server.
|
|
3
|
+
*/
|
|
4
|
+
import axios, { AxiosError } from "axios";
|
|
5
|
+
import { API_BASE_URL, CHARACTER_LIMIT, DEFAULT_TIMEOUT } from "./constants.js";
|
|
6
|
+
/**
|
|
7
|
+
* Get ClickUp API token from environment
|
|
8
|
+
*/
|
|
9
|
+
export function getApiToken() {
|
|
10
|
+
const token = process.env.CLICKUP_API_TOKEN;
|
|
11
|
+
if (!token) {
|
|
12
|
+
throw new Error("CLICKUP_API_TOKEN environment variable is required");
|
|
13
|
+
}
|
|
14
|
+
return token;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Make an authenticated request to the ClickUp API
|
|
18
|
+
*/
|
|
19
|
+
export async function makeApiRequest(endpoint, method = "GET", data, params) {
|
|
20
|
+
try {
|
|
21
|
+
const token = getApiToken();
|
|
22
|
+
const response = await axios({
|
|
23
|
+
method,
|
|
24
|
+
url: `${API_BASE_URL}/${endpoint}`,
|
|
25
|
+
data,
|
|
26
|
+
params,
|
|
27
|
+
timeout: DEFAULT_TIMEOUT,
|
|
28
|
+
headers: {
|
|
29
|
+
"Authorization": token,
|
|
30
|
+
"Content-Type": "application/json",
|
|
31
|
+
"Accept": "application/json"
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
return response.data;
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Convert API errors to user-friendly messages
|
|
42
|
+
*/
|
|
43
|
+
export function handleApiError(error) {
|
|
44
|
+
if (error instanceof AxiosError) {
|
|
45
|
+
if (error.response) {
|
|
46
|
+
const status = error.response.status;
|
|
47
|
+
const data = error.response.data;
|
|
48
|
+
switch (status) {
|
|
49
|
+
case 400:
|
|
50
|
+
return `Error: Bad request. ${data?.err || "Check your parameters and try again."}`;
|
|
51
|
+
case 401:
|
|
52
|
+
return "Error: Invalid or missing API token. Please check your CLICKUP_API_TOKEN environment variable.";
|
|
53
|
+
case 403:
|
|
54
|
+
return "Error: Permission denied. You don't have access to this resource.";
|
|
55
|
+
case 404:
|
|
56
|
+
return `Error: Resource not found. ${data?.err || "Please check the ID is correct."}`;
|
|
57
|
+
case 429:
|
|
58
|
+
return "Error: Rate limit exceeded. Please wait before making more requests. ClickUp allows 100 requests/minute (Business) or 1000/minute (Business Plus+).";
|
|
59
|
+
case 500:
|
|
60
|
+
case 502:
|
|
61
|
+
case 503:
|
|
62
|
+
return "Error: ClickUp server error. Please try again later or check https://status.clickup.com";
|
|
63
|
+
default:
|
|
64
|
+
return `Error: API request failed with status ${status}. ${data?.err || ""}`;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else if (error.code === "ECONNABORTED") {
|
|
68
|
+
return "Error: Request timed out. Please try again.";
|
|
69
|
+
}
|
|
70
|
+
else if (error.code === "ENOTFOUND" || error.code === "ECONNREFUSED") {
|
|
71
|
+
return "Error: Cannot connect to ClickUp API. Please check your internet connection.";
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return `Error: Unexpected error occurred: ${error instanceof Error ? error.message : String(error)}`;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Format a timestamp as human-readable date
|
|
78
|
+
*/
|
|
79
|
+
export function formatDate(timestamp) {
|
|
80
|
+
if (!timestamp)
|
|
81
|
+
return "Not set";
|
|
82
|
+
const date = new Date(typeof timestamp === "string" ? parseInt(timestamp) : timestamp);
|
|
83
|
+
return date.toISOString().replace("T", " ").substring(0, 19) + " UTC";
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Format priority value as human-readable string
|
|
87
|
+
*/
|
|
88
|
+
export function formatPriority(priority) {
|
|
89
|
+
if (!priority)
|
|
90
|
+
return "None";
|
|
91
|
+
return priority.priority;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Format a task as markdown (full detail)
|
|
95
|
+
*/
|
|
96
|
+
export function formatTaskMarkdown(task) {
|
|
97
|
+
const lines = [];
|
|
98
|
+
lines.push(`# ${task.name} (${task.id})`);
|
|
99
|
+
lines.push("");
|
|
100
|
+
lines.push(`**Status**: ${task.status.status}`);
|
|
101
|
+
lines.push(`**Priority**: ${formatPriority(task.priority)}`);
|
|
102
|
+
lines.push(`**Created**: ${formatDate(task.date_created)}`);
|
|
103
|
+
lines.push(`**Updated**: ${formatDate(task.date_updated)}`);
|
|
104
|
+
if (task.due_date) {
|
|
105
|
+
lines.push(`**Due Date**: ${formatDate(task.due_date)}`);
|
|
106
|
+
}
|
|
107
|
+
if (task.assignees && task.assignees.length > 0) {
|
|
108
|
+
const assigneeNames = task.assignees.map(a => `@${a.username} (${a.id})`).join(", ");
|
|
109
|
+
lines.push(`**Assignees**: ${assigneeNames}`);
|
|
110
|
+
}
|
|
111
|
+
if (task.tags && task.tags.length > 0) {
|
|
112
|
+
const tagNames = task.tags.map(t => t.name).join(", ");
|
|
113
|
+
lines.push(`**Tags**: ${tagNames}`);
|
|
114
|
+
}
|
|
115
|
+
if (task.description) {
|
|
116
|
+
lines.push("");
|
|
117
|
+
lines.push("## Description");
|
|
118
|
+
lines.push(task.description);
|
|
119
|
+
}
|
|
120
|
+
lines.push("");
|
|
121
|
+
lines.push(`**URL**: ${task.url}`);
|
|
122
|
+
return lines.join("\n");
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Format a task as compact markdown (essential fields only)
|
|
126
|
+
*/
|
|
127
|
+
export function formatTaskCompact(task) {
|
|
128
|
+
const assignees = task.assignees && task.assignees.length > 0
|
|
129
|
+
? task.assignees.map(a => a.username).join(", ")
|
|
130
|
+
: "Unassigned";
|
|
131
|
+
return `- **${task.name}** (${task.id}) | Status: ${task.status.status} | Assignees: ${assignees} | URL: ${task.url}`;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Format a list as markdown
|
|
135
|
+
*/
|
|
136
|
+
export function formatListMarkdown(list) {
|
|
137
|
+
const lines = [];
|
|
138
|
+
lines.push(`# ${list.name} (${list.id})`);
|
|
139
|
+
lines.push("");
|
|
140
|
+
lines.push(`**Tasks**: ${list.task_count}`);
|
|
141
|
+
if (list.folder) {
|
|
142
|
+
lines.push(`**Folder**: ${list.folder.name}`);
|
|
143
|
+
}
|
|
144
|
+
if (list.space) {
|
|
145
|
+
lines.push(`**Space**: ${list.space.name}`);
|
|
146
|
+
}
|
|
147
|
+
if (list.statuses && list.statuses.length > 0) {
|
|
148
|
+
lines.push("");
|
|
149
|
+
lines.push("## Statuses");
|
|
150
|
+
for (const status of list.statuses) {
|
|
151
|
+
lines.push(`- ${status.status} (${status.type})`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return lines.join("\n");
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Format a space as markdown
|
|
158
|
+
*/
|
|
159
|
+
export function formatSpaceMarkdown(space) {
|
|
160
|
+
const lines = [];
|
|
161
|
+
lines.push(`# ${space.name} (${space.id})`);
|
|
162
|
+
lines.push("");
|
|
163
|
+
lines.push(`**Private**: ${space.private ? "Yes" : "No"}`);
|
|
164
|
+
lines.push(`**Multiple Assignees**: ${space.multiple_assignees ? "Yes" : "No"}`);
|
|
165
|
+
if (space.features) {
|
|
166
|
+
lines.push("");
|
|
167
|
+
lines.push("## Features");
|
|
168
|
+
lines.push(`- Due Dates: ${space.features.due_dates?.enabled ? "Enabled" : "Disabled"}`);
|
|
169
|
+
lines.push(`- Time Tracking: ${space.features.time_tracking?.enabled ? "Enabled" : "Disabled"}`);
|
|
170
|
+
lines.push(`- Tags: ${space.features.tags?.enabled ? "Enabled" : "Disabled"}`);
|
|
171
|
+
lines.push(`- Custom Fields: ${space.features.custom_fields?.enabled ? "Enabled" : "Disabled"}`);
|
|
172
|
+
}
|
|
173
|
+
return lines.join("\n");
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Format a folder as markdown
|
|
177
|
+
*/
|
|
178
|
+
export function formatFolderMarkdown(folder) {
|
|
179
|
+
const lines = [];
|
|
180
|
+
lines.push(`# ${folder.name} (${folder.id})`);
|
|
181
|
+
lines.push("");
|
|
182
|
+
lines.push(`**Tasks**: ${folder.task_count}`);
|
|
183
|
+
lines.push(`**Hidden**: ${folder.hidden ? "Yes" : "No"}`);
|
|
184
|
+
if (folder.space) {
|
|
185
|
+
lines.push(`**Space**: ${folder.space.name}`);
|
|
186
|
+
}
|
|
187
|
+
if (folder.lists && folder.lists.length > 0) {
|
|
188
|
+
lines.push("");
|
|
189
|
+
lines.push("## Lists");
|
|
190
|
+
for (const list of folder.lists) {
|
|
191
|
+
lines.push(`- ${list.name} (${list.id}) - ${list.task_count} tasks`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return lines.join("\n");
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Format a comment as markdown
|
|
198
|
+
*/
|
|
199
|
+
export function formatCommentMarkdown(comment) {
|
|
200
|
+
const lines = [];
|
|
201
|
+
lines.push(`**@${comment.user.username}** (${formatDate(comment.date)})`);
|
|
202
|
+
lines.push(comment.comment_text);
|
|
203
|
+
if (comment.resolved) {
|
|
204
|
+
lines.push("*(Resolved)*");
|
|
205
|
+
}
|
|
206
|
+
return lines.join("\n");
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Format a time entry as markdown
|
|
210
|
+
*/
|
|
211
|
+
export function formatTimeEntryMarkdown(entry) {
|
|
212
|
+
const lines = [];
|
|
213
|
+
const hours = Math.floor(parseInt(entry.duration) / 3600000);
|
|
214
|
+
const minutes = Math.floor((parseInt(entry.duration) % 3600000) / 60000);
|
|
215
|
+
const durationStr = `${hours}h ${minutes}m`;
|
|
216
|
+
lines.push(`**@${entry.user.username}** - ${durationStr}`);
|
|
217
|
+
lines.push(`- Start: ${formatDate(entry.start)}`);
|
|
218
|
+
if (entry.end) {
|
|
219
|
+
lines.push(`- End: ${formatDate(entry.end)}`);
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
lines.push("- End: *(Still running)*");
|
|
223
|
+
}
|
|
224
|
+
if (entry.task) {
|
|
225
|
+
lines.push(`- Task: ${entry.task.name} (${entry.task.id})`);
|
|
226
|
+
}
|
|
227
|
+
if (entry.description) {
|
|
228
|
+
lines.push(`- Description: ${entry.description}`);
|
|
229
|
+
}
|
|
230
|
+
lines.push(`- Billable: ${entry.billable ? "Yes" : "No"}`);
|
|
231
|
+
return lines.join("\n");
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Extract pagination information from response
|
|
235
|
+
*/
|
|
236
|
+
export function getPagination(total, count, offset, limit) {
|
|
237
|
+
const hasMore = total ? (offset + count < total) : count === limit;
|
|
238
|
+
return {
|
|
239
|
+
total,
|
|
240
|
+
count,
|
|
241
|
+
offset,
|
|
242
|
+
has_more: hasMore,
|
|
243
|
+
next_offset: hasMore ? offset + count : undefined
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Generate summary statistics for a list of tasks
|
|
248
|
+
*/
|
|
249
|
+
export function generateTaskSummary(tasks) {
|
|
250
|
+
const lines = [];
|
|
251
|
+
lines.push("# Task Summary");
|
|
252
|
+
lines.push("");
|
|
253
|
+
lines.push(`**Total Tasks**: ${tasks.length}`);
|
|
254
|
+
lines.push("");
|
|
255
|
+
// Group by status
|
|
256
|
+
const statusCounts = {};
|
|
257
|
+
const assigneeCounts = {};
|
|
258
|
+
const priorityCounts = {};
|
|
259
|
+
for (const task of tasks) {
|
|
260
|
+
// Count statuses
|
|
261
|
+
const status = task.status.status;
|
|
262
|
+
statusCounts[status] = (statusCounts[status] || 0) + 1;
|
|
263
|
+
// Count assignees
|
|
264
|
+
if (task.assignees && task.assignees.length > 0) {
|
|
265
|
+
for (const assignee of task.assignees) {
|
|
266
|
+
assigneeCounts[assignee.username] = (assigneeCounts[assignee.username] || 0) + 1;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
assigneeCounts["Unassigned"] = (assigneeCounts["Unassigned"] || 0) + 1;
|
|
271
|
+
}
|
|
272
|
+
// Count priorities
|
|
273
|
+
const priority = formatPriority(task.priority);
|
|
274
|
+
priorityCounts[priority] = (priorityCounts[priority] || 0) + 1;
|
|
275
|
+
}
|
|
276
|
+
// Format status breakdown
|
|
277
|
+
lines.push("## By Status");
|
|
278
|
+
for (const [status, count] of Object.entries(statusCounts).sort((a, b) => b[1] - a[1])) {
|
|
279
|
+
lines.push(`- ${status}: ${count}`);
|
|
280
|
+
}
|
|
281
|
+
// Format assignee breakdown
|
|
282
|
+
lines.push("");
|
|
283
|
+
lines.push("## By Assignee");
|
|
284
|
+
for (const [assignee, count] of Object.entries(assigneeCounts).sort((a, b) => b[1] - a[1])) {
|
|
285
|
+
lines.push(`- ${assignee}: ${count}`);
|
|
286
|
+
}
|
|
287
|
+
// Format priority breakdown
|
|
288
|
+
lines.push("");
|
|
289
|
+
lines.push("## By Priority");
|
|
290
|
+
for (const [priority, count] of Object.entries(priorityCounts).sort((a, b) => b[1] - a[1])) {
|
|
291
|
+
lines.push(`- ${priority}: ${count}`);
|
|
292
|
+
}
|
|
293
|
+
return lines.join("\n");
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Truncate response if it exceeds character limit with smart boundary detection
|
|
297
|
+
*/
|
|
298
|
+
export function truncateResponse(content, itemCount, itemType = "items") {
|
|
299
|
+
if (content.length <= CHARACTER_LIMIT) {
|
|
300
|
+
return { content, truncation: null };
|
|
301
|
+
}
|
|
302
|
+
// Find a good boundary to truncate at (look for task separators or major section breaks)
|
|
303
|
+
let truncateAt = CHARACTER_LIMIT;
|
|
304
|
+
const searchStart = Math.max(0, CHARACTER_LIMIT - 1000); // Look back up to 1000 chars
|
|
305
|
+
// Look for markdown headers or horizontal rules as good break points
|
|
306
|
+
const potentialBreaks = [
|
|
307
|
+
content.lastIndexOf("\n# ", truncateAt),
|
|
308
|
+
content.lastIndexOf("\n## ", truncateAt),
|
|
309
|
+
content.lastIndexOf("\n---\n", truncateAt),
|
|
310
|
+
content.lastIndexOf("\n\n", truncateAt)
|
|
311
|
+
].filter(pos => pos >= searchStart);
|
|
312
|
+
if (potentialBreaks.length > 0) {
|
|
313
|
+
truncateAt = Math.max(...potentialBreaks);
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
// Fallback to last newline
|
|
317
|
+
const lastNewline = content.lastIndexOf("\n", CHARACTER_LIMIT);
|
|
318
|
+
if (lastNewline > searchStart) {
|
|
319
|
+
truncateAt = lastNewline;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
const finalContent = content.substring(0, truncateAt);
|
|
323
|
+
// Count how many complete items we kept by counting separators/headers
|
|
324
|
+
const headerPattern = /^# .+ \(/gm;
|
|
325
|
+
const keptItems = (finalContent.match(headerPattern) || []).length ||
|
|
326
|
+
Math.max(1, Math.floor(itemCount * (truncateAt / content.length)));
|
|
327
|
+
const truncation = {
|
|
328
|
+
truncated: true,
|
|
329
|
+
original_count: itemCount,
|
|
330
|
+
returned_count: keptItems,
|
|
331
|
+
truncation_message: `Response truncated from ${itemCount} to ${keptItems} ${itemType} due to size limits (${CHARACTER_LIMIT.toLocaleString()} chars). Use pagination (offset/limit), add filters, or use response_mode='compact' to see more results.`
|
|
332
|
+
};
|
|
333
|
+
return { content: finalContent, truncation };
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Format truncation information as text
|
|
337
|
+
*/
|
|
338
|
+
export function formatTruncationInfo(truncation) {
|
|
339
|
+
if (!truncation)
|
|
340
|
+
return "";
|
|
341
|
+
return `\n\n---\n⚠️ ${truncation.truncation_message}`;
|
|
342
|
+
}
|
|
343
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@griffinwork40/clickup-mcp-server",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "MCP server for ClickUp API integration - manage tasks, projects, and workflows",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"clickup-mcp": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"README.md",
|
|
13
|
+
"LICENSE"
|
|
14
|
+
],
|
|
15
|
+
"author": "griffinwork40",
|
|
16
|
+
"license": "MIT",
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "https://github.com/griffinwork40/clickup-mcp.git"
|
|
20
|
+
},
|
|
21
|
+
"scripts": {
|
|
22
|
+
"start": "node dist/index.js",
|
|
23
|
+
"dev": "tsx watch src/index.ts",
|
|
24
|
+
"build": "tsc",
|
|
25
|
+
"clean": "rm -rf dist",
|
|
26
|
+
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
|
|
27
|
+
"test:watch": "node --experimental-vm-modules node_modules/jest/bin/jest.js --watch",
|
|
28
|
+
"test:coverage": "node --experimental-vm-modules node_modules/jest/bin/jest.js --coverage"
|
|
29
|
+
},
|
|
30
|
+
"engines": {
|
|
31
|
+
"node": ">=18"
|
|
32
|
+
},
|
|
33
|
+
"keywords": [
|
|
34
|
+
"mcp",
|
|
35
|
+
"clickup",
|
|
36
|
+
"model-context-protocol",
|
|
37
|
+
"task-management",
|
|
38
|
+
"project-management"
|
|
39
|
+
],
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@modelcontextprotocol/sdk": "^1.6.1",
|
|
42
|
+
"axios": "^1.7.9",
|
|
43
|
+
"zod": "^3.23.8"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@jest/globals": "^29.7.0",
|
|
47
|
+
"@types/jest": "^29.5.14",
|
|
48
|
+
"@types/node": "^22.10.0",
|
|
49
|
+
"jest": "^29.7.0",
|
|
50
|
+
"ts-jest": "^29.2.5",
|
|
51
|
+
"tsx": "^4.19.2",
|
|
52
|
+
"typescript": "^5.7.2"
|
|
53
|
+
}
|
|
54
|
+
}
|