@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.
- package/dist/shared/utils.d.ts +1 -1
- package/dist/shared/utils.d.ts.map +1 -1
- package/dist/shared/utils.js +12 -4
- package/dist/tools/search-tools.d.ts.map +1 -1
- package/dist/tools/search-tools.js +10 -2
- package/dist/tools/task-write-tools.d.ts.map +1 -1
- package/dist/tools/task-write-tools.js +24 -1
- package/package.json +1 -1
package/dist/shared/utils.d.ts
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/shared/utils.js
CHANGED
|
@@ -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,
|
|
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,
|
|
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
|
-
|
|
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