@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/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
+ }