@sebastienheyd/clickup-mcp 1.7.0 → 1.7.2

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.
@@ -42,7 +42,7 @@ export declare function getSpaceDetails(spaceId: string): Promise<any>;
42
42
  * Get or create a task search index with specified filters
43
43
  * Caches promises to prevent race conditions on concurrent calls
44
44
  */
45
- export declare function getTaskSearchIndex(space_ids?: string[], list_ids?: string[], assignees?: string[]): Promise<Fuse<any> | null>;
45
+ export declare function getTaskSearchIndex(space_ids?: string[], list_ids?: string[], assignees?: string[], include_closed?: boolean, archived?: boolean): Promise<Fuse<any> | null>;
46
46
  /**
47
47
  * Generate a ClickUp task URL from a task ID
48
48
  */
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/shared/utils.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,SAAS,CAAC;AAI3B;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAG7C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiB3E;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ/D;AAKD;;;GAGG;AACH,wBAAsB,cAAc,iBA6BnC;AAGD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIpD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CA8C/D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CA+CpD;AAID;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CA0B7D;AAKD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,CAAC,EAAE,MAAM,EAAE,EACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,EACnB,SAAS,CAAC,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CA+B3B;AAkED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAK1E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,MAAM,CA4ElG;AAKD;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CA+CrE;AAKD;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAAC,OAAO,EAAE,GAAG,EAAE,CAAC;IAAC,SAAS,EAAE,GAAG,EAAE,CAAA;CAAE,CAAC,CAgFlH;AAKD;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CA+C3D;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,EACpB,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,CAAC,EAAE,CAAC,CA8Dd"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/shared/utils.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,SAAS,CAAC;AAI3B;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAG7C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiB3E;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ/D;AAKD;;;GAGG;AACH,wBAAsB,cAAc,iBA6BnC;AAGD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIpD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CA8C/D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CA+CpD;AAID;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CA0B7D;AAKD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,CAAC,EAAE,MAAM,EAAE,EACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,EACnB,SAAS,CAAC,EAAE,MAAM,EAAE,EACpB,cAAc,CAAC,EAAE,OAAO,EACxB,QAAQ,CAAC,EAAE,OAAO,GACjB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAiC3B;AA2ED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAK1E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,MAAM,CA4ElG;AAKD;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CA+CrE;AAKD;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAAC,OAAO,EAAE,GAAG,EAAE,CAAC;IAAC,SAAS,EAAE,GAAG,EAAE,CAAA;CAAE,CAAC,CAgFlH;AAKD;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CA+C3D;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,EACpB,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,CAAC,EAAE,CAAC,CA8Dd"}
@@ -216,12 +216,14 @@ const taskIndices = new Map();
216
216
  * Get or create a task search index with specified filters
217
217
  * Caches promises to prevent race conditions on concurrent calls
218
218
  */
219
- async function getTaskSearchIndex(space_ids, list_ids, assignees) {
219
+ async function getTaskSearchIndex(space_ids, list_ids, assignees, include_closed, archived) {
220
220
  // Create cache key from sorted filter arrays
221
221
  const key = JSON.stringify({
222
222
  space_ids: space_ids?.sort(),
223
223
  list_ids: list_ids?.sort(),
224
- assignees: assignees?.sort()
224
+ assignees: assignees?.sort(),
225
+ include_closed,
226
+ archived
225
227
  });
226
228
  // Check for existing valid index promise
227
229
  const cachedPromise = taskIndices.get(key);
@@ -231,7 +233,7 @@ async function getTaskSearchIndex(space_ids, list_ids, assignees) {
231
233
  // Create the fetch promise
232
234
  const fetchPromise = (async () => {
233
235
  console.error(`Refreshing task index for filters: ${key}`);
234
- const tasks = await fetchTasks(space_ids, list_ids, assignees);
236
+ const tasks = await fetchTasks(space_ids, list_ids, assignees, include_closed, archived);
235
237
  const index = createFuseIndex(tasks);
236
238
  console.error(`Task index created with ${tasks.length} tasks`);
237
239
  return index;
@@ -247,8 +249,14 @@ async function getTaskSearchIndex(space_ids, list_ids, assignees) {
247
249
  /**
248
250
  * Fetch tasks using team endpoint with dynamic filters
249
251
  */
250
- async function fetchTasks(space_ids, list_ids, assignees) {
252
+ async function fetchTasks(space_ids, list_ids, assignees, include_closed, archived) {
251
253
  const queryParams = ['order_by=updated', 'subtasks=true'];
254
+ if (include_closed) {
255
+ queryParams.push('include_closed=true');
256
+ }
257
+ if (archived) {
258
+ queryParams.push('archived=true');
259
+ }
252
260
  // Add filter parameters
253
261
  if (space_ids?.length) {
254
262
  space_ids.forEach(id => queryParams.push(`space_ids[]=${id}`));
@@ -1 +1 @@
1
- {"version":3,"file":"search-tools.d.ts","sourceRoot":"","sources":["../../src/tools/search-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAQlE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,QAoNnE"}
1
+ {"version":3,"file":"search-tools.d.ts","sourceRoot":"","sources":["../../src/tools/search-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAQlE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,QA4NnE"}
@@ -46,12 +46,20 @@ function registerSearchTools(server, userData) {
46
46
  .boolean()
47
47
  .optional()
48
48
  .describe(`Filter for tasks assigned to the current user (${userData.user.username} (${userData.user.id}))`),
49
+ include_closed: zod_1.z
50
+ .boolean()
51
+ .optional()
52
+ .describe("Include closed tasks in results (default: false)"),
53
+ archived: zod_1.z
54
+ .boolean()
55
+ .optional()
56
+ .describe("Include archived tasks in results (default: false). Note: only returns individually archived tasks, not tasks in archived spaces/folders/lists."),
49
57
  }, {
50
58
  readOnlyHint: true
51
- }, async ({ terms, list_ids, space_ids, only_todo, status, assigned_to_me }) => {
59
+ }, async ({ terms, list_ids, space_ids, only_todo, status, assigned_to_me, include_closed, archived }) => {
52
60
  // Get current user ID if filtering by assigned_to_me
53
61
  const assignees = assigned_to_me ? [userData.user.id] : [];
54
- const searchIndex = await (0, utils_1.getTaskSearchIndex)(space_ids, list_ids, assignees);
62
+ const searchIndex = await (0, utils_1.getTaskSearchIndex)(space_ids, list_ids, assignees, include_closed, archived);
55
63
  if (!searchIndex) {
56
64
  return {
57
65
  content: [
@@ -1 +1 @@
1
- {"version":3,"file":"task-write-tools.d.ts","sourceRoot":"","sources":["../../src/tools/task-write-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAcpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,QAmatE"}
1
+ {"version":3,"file":"task-write-tools.d.ts","sourceRoot":"","sources":["../../src/tools/task-write-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAcpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,QA2btE"}
@@ -334,7 +334,30 @@ function registerTaskToolsWrite(server, userData) {
334
334
  const errorData = await response.json().catch(() => ({}));
335
335
  throw new Error(`Error creating task: ${response.status} ${response.statusText} - ${JSON.stringify(errorData)}`);
336
336
  }
337
- const createdTask = await response.json();
337
+ let createdTask = await response.json();
338
+ // Handle tags separately via dedicated API endpoints
339
+ if (tags && tags.length > 0) {
340
+ for (const tagName of tags) {
341
+ const encodedTag = encodeURIComponent(tagName);
342
+ const tagResponse = await fetch(`https://api.clickup.com/api/v2/task/${createdTask.id}/tag/${encodedTag}`, {
343
+ method: 'POST',
344
+ headers: {
345
+ Authorization: config_1.CONFIG.apiKey,
346
+ 'Content-Type': 'application/json'
347
+ }
348
+ });
349
+ if (!tagResponse.ok) {
350
+ console.error(`Error adding tag "${tagName}" to task ${createdTask.id}: ${tagResponse.status}`);
351
+ }
352
+ }
353
+ // Re-fetch task to get updated tags
354
+ const refreshResponse = await fetch(`https://api.clickup.com/api/v2/task/${createdTask.id}`, {
355
+ headers: { Authorization: config_1.CONFIG.apiKey }
356
+ });
357
+ if (refreshResponse.ok) {
358
+ createdTask = await refreshResponse.json();
359
+ }
360
+ }
338
361
  const responseLines = formatTaskResponse(createdTask, 'created', {
339
362
  list_id, name, description, status, priority, due_date, start_date, time_estimate, tags, parent_task_id, assignees
340
363
  }, userData);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sebastienheyd/clickup-mcp",
3
- "version": "1.7.0",
3
+ "version": "1.7.2",
4
4
  "description": "Search, create, and retrieve tasks, add comments, and track time through natural language commands.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",