@griffinwork40/clickup-mcp-server 1.1.4 → 1.1.5

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.
Files changed (97) hide show
  1. package/dist/schemas.d.ts +33 -0
  2. package/dist/schemas.d.ts.map +1 -0
  3. package/dist/schemas.js +34 -0
  4. package/dist/schemas.js.map +1 -0
  5. package/dist/server.d.ts +10 -0
  6. package/dist/server.d.ts.map +1 -0
  7. package/dist/server.js +56 -0
  8. package/dist/server.js.map +1 -0
  9. package/dist/tools/comments.d.ts +10 -0
  10. package/dist/tools/comments.d.ts.map +1 -0
  11. package/dist/tools/comments.js +123 -0
  12. package/dist/tools/comments.js.map +1 -0
  13. package/dist/tools/custom-fields.d.ts +10 -0
  14. package/dist/tools/custom-fields.d.ts.map +1 -0
  15. package/dist/tools/custom-fields.js +68 -0
  16. package/dist/tools/custom-fields.js.map +1 -0
  17. package/dist/tools/hierarchy.d.ts +10 -0
  18. package/dist/tools/hierarchy.d.ts.map +1 -0
  19. package/dist/tools/hierarchy.js +188 -0
  20. package/dist/tools/hierarchy.js.map +1 -0
  21. package/dist/tools/index.d.ts +13 -0
  22. package/dist/tools/index.d.ts.map +1 -0
  23. package/dist/tools/index.js +13 -0
  24. package/dist/tools/index.js.map +1 -0
  25. package/dist/tools/lists.d.ts +10 -0
  26. package/dist/tools/lists.d.ts.map +1 -0
  27. package/dist/tools/lists.js +148 -0
  28. package/dist/tools/lists.js.map +1 -0
  29. package/dist/tools/tasks-analytics.d.ts +10 -0
  30. package/dist/tools/tasks-analytics.d.ts.map +1 -0
  31. package/dist/tools/tasks-analytics.js +160 -0
  32. package/dist/tools/tasks-analytics.js.map +1 -0
  33. package/dist/tools/tasks-get.d.ts +10 -0
  34. package/dist/tools/tasks-get.d.ts.map +1 -0
  35. package/dist/tools/tasks-get.js +209 -0
  36. package/dist/tools/tasks-get.js.map +1 -0
  37. package/dist/tools/tasks-read.d.ts +10 -0
  38. package/dist/tools/tasks-read.d.ts.map +1 -0
  39. package/dist/tools/tasks-read.js +379 -0
  40. package/dist/tools/tasks-read.js.map +1 -0
  41. package/dist/tools/tasks-search.d.ts +10 -0
  42. package/dist/tools/tasks-search.d.ts.map +1 -0
  43. package/dist/tools/tasks-search.js +176 -0
  44. package/dist/tools/tasks-search.js.map +1 -0
  45. package/dist/tools/tasks-write.d.ts +10 -0
  46. package/dist/tools/tasks-write.d.ts.map +1 -0
  47. package/dist/tools/tasks-write.js +232 -0
  48. package/dist/tools/tasks-write.js.map +1 -0
  49. package/dist/tools/time-tracking.d.ts +10 -0
  50. package/dist/tools/time-tracking.d.ts.map +1 -0
  51. package/dist/tools/time-tracking.js +180 -0
  52. package/dist/tools/time-tracking.js.map +1 -0
  53. package/dist/utils/api-client.d.ts +17 -0
  54. package/dist/utils/api-client.d.ts.map +1 -0
  55. package/dist/utils/api-client.js +77 -0
  56. package/dist/utils/api-client.js.map +1 -0
  57. package/dist/utils/csv-export.d.ts +29 -0
  58. package/dist/utils/csv-export.d.ts.map +1 -0
  59. package/dist/utils/csv-export.js +204 -0
  60. package/dist/utils/csv-export.js.map +1 -0
  61. package/dist/utils/custom-fields.d.ts +25 -0
  62. package/dist/utils/custom-fields.d.ts.map +1 -0
  63. package/dist/utils/custom-fields.js +132 -0
  64. package/dist/utils/custom-fields.js.map +1 -0
  65. package/dist/utils/data-processing.d.ts +10 -0
  66. package/dist/utils/data-processing.d.ts.map +1 -0
  67. package/dist/utils/data-processing.js +18 -0
  68. package/dist/utils/data-processing.js.map +1 -0
  69. package/dist/utils/formatters/base.d.ts +21 -0
  70. package/dist/utils/formatters/base.d.ts.map +1 -0
  71. package/dist/utils/formatters/base.js +30 -0
  72. package/dist/utils/formatters/base.js.map +1 -0
  73. package/dist/utils/formatters/entities.d.ts +34 -0
  74. package/dist/utils/formatters/entities.d.ts.map +1 -0
  75. package/dist/utils/formatters/entities.js +146 -0
  76. package/dist/utils/formatters/entities.js.map +1 -0
  77. package/dist/utils/formatters/index.d.ts +6 -0
  78. package/dist/utils/formatters/index.d.ts.map +1 -0
  79. package/dist/utils/formatters/index.js +6 -0
  80. package/dist/utils/formatters/index.js.map +1 -0
  81. package/dist/utils/index.d.ts +13 -0
  82. package/dist/utils/index.d.ts.map +1 -0
  83. package/dist/utils/index.js +21 -0
  84. package/dist/utils/index.js.map +1 -0
  85. package/dist/utils/task-analytics.d.ts +14 -0
  86. package/dist/utils/task-analytics.d.ts.map +1 -0
  87. package/dist/utils/task-analytics.js +67 -0
  88. package/dist/utils/task-analytics.js.map +1 -0
  89. package/dist/utils/task-counter.d.ts +24 -0
  90. package/dist/utils/task-counter.d.ts.map +1 -0
  91. package/dist/utils/task-counter.js +52 -0
  92. package/dist/utils/task-counter.js.map +1 -0
  93. package/dist/utils/truncation.d.ts +14 -0
  94. package/dist/utils/truncation.d.ts.map +1 -0
  95. package/dist/utils/truncation.js +124 -0
  96. package/dist/utils/truncation.js.map +1 -0
  97. package/package.json +5 -5
@@ -0,0 +1,379 @@
1
+ /**
2
+ * Task read tools for ClickUp MCP server.
3
+ * Tools for reading and searching tasks.
4
+ */
5
+ import { z } from "zod";
6
+ import { ResponseFormat, ResponseMode, DEFAULT_LIMIT, MAX_LIMIT } from "../constants.js";
7
+ import { ResponseFormatSchema, ResponseModeSchema, PaginationSchema } from "../schemas.js";
8
+ import { makeApiRequest, handleApiError, formatTaskMarkdown, formatTaskCompact, generateTaskSummary, getPagination, truncateResponse, formatTruncationInfo, filterTasksByStatus } from "../utils/index.js";
9
+ /**
10
+ * Register task read tools with the MCP server
11
+ */
12
+ export function registerTaskReadTools(server) {
13
+ // Tool 6: Get Tasks
14
+ server.registerTool("clickup_get_tasks", {
15
+ title: "Get Tasks in List",
16
+ description: `Get tasks in a specific list with filtering and pagination.
17
+
18
+ Args:
19
+ - list_id (string): The list ID
20
+ - archived (boolean): Include archived tasks (default: false)
21
+ - include_closed (boolean): Include closed tasks (default: false)
22
+ - statuses (string[], optional): Filter by status names. MUST be array, e.g., ["to do", "in progress"]
23
+ - assignees (number[], optional): Filter by assignee IDs. MUST be array, e.g., [123, 456]
24
+ - limit (number): Maximum results (1-100, default: 20)
25
+ - offset (number): Pagination offset (default: 0). MUST be a multiple of limit
26
+ - response_format ('markdown' | 'json'): Output format (default: 'markdown')
27
+ - response_mode ('full' | 'compact' | 'summary'): Detail level (default: 'full')
28
+
29
+ Pagination:
30
+ Use the next_offset value from the response to get the next page.
31
+
32
+ Examples:
33
+ - Use when: "Show me tasks in list 123456"
34
+ - Use with: response_mode='compact' for large lists (100+ tasks)
35
+ - Use with: response_mode='summary' for quick status overview
36
+
37
+ Error Handling:
38
+ - Returns "Error: Resource not found" if list_id is invalid (404)`,
39
+ inputSchema: z.object({
40
+ list_id: z.string().min(1).describe("List ID"),
41
+ archived: z.boolean().default(false).describe("Include archived tasks"),
42
+ include_closed: z.boolean().default(false).describe("Include closed tasks"),
43
+ statuses: z.array(z.string()).optional().describe("Filter by status names - MUST be array"),
44
+ assignees: z.array(z.number()).optional().describe("Filter by assignee IDs - MUST be array"),
45
+ ...PaginationSchema.shape,
46
+ response_format: ResponseFormatSchema,
47
+ response_mode: ResponseModeSchema
48
+ }).strict(),
49
+ annotations: {
50
+ readOnlyHint: true,
51
+ destructiveHint: false,
52
+ idempotentHint: true,
53
+ openWorldHint: true
54
+ }
55
+ }, async (params) => {
56
+ try {
57
+ const limit = params.limit ?? DEFAULT_LIMIT;
58
+ const offset = params.offset ?? 0;
59
+ // Validate pagination alignment
60
+ if (offset % limit !== 0) {
61
+ return {
62
+ content: [{
63
+ type: "text",
64
+ text: `Error: offset (${offset}) must be a multiple of limit (${limit}) for proper pagination.`
65
+ }]
66
+ };
67
+ }
68
+ const queryParams = {
69
+ archived: params.archived,
70
+ include_closed: params.include_closed,
71
+ page: Math.floor(offset / limit),
72
+ limit: limit // FIX: Send limit to API
73
+ };
74
+ let useClientSideFiltering = false;
75
+ let allTasks = [];
76
+ // Try API filtering first if statuses are specified
77
+ if (params.statuses && params.statuses.length > 0) {
78
+ queryParams.statuses = JSON.stringify(params.statuses);
79
+ }
80
+ if (params.assignees && params.assignees.length > 0) {
81
+ queryParams.assignees = params.assignees;
82
+ }
83
+ try {
84
+ const data = await makeApiRequest(`list/${params.list_id}/task`, "GET", undefined, queryParams);
85
+ allTasks = data.tasks || [];
86
+ }
87
+ catch (error) {
88
+ // If API filtering fails with 400 error, fall back to client-side filtering
89
+ if (error instanceof Error && 'response' in error && error.response?.status === 400 && params.statuses && params.statuses.length > 0) {
90
+ useClientSideFiltering = true;
91
+ // Fetch all tasks with pagination
92
+ let currentOffset = 0;
93
+ let hasMore = true;
94
+ const fetchLimit = MAX_LIMIT;
95
+ while (hasMore) {
96
+ const fetchParams = {
97
+ archived: params.archived,
98
+ include_closed: params.include_closed,
99
+ page: Math.floor(currentOffset / fetchLimit),
100
+ limit: fetchLimit // FIX: Send limit to API
101
+ };
102
+ if (params.assignees && params.assignees.length > 0) {
103
+ fetchParams.assignees = params.assignees;
104
+ }
105
+ const fetchData = await makeApiRequest(`list/${params.list_id}/task`, "GET", undefined, fetchParams);
106
+ const fetchedTasks = fetchData.tasks || [];
107
+ allTasks.push(...fetchedTasks);
108
+ hasMore = fetchedTasks.length === fetchLimit;
109
+ currentOffset += fetchLimit;
110
+ }
111
+ // Apply client-side status filtering
112
+ allTasks = filterTasksByStatus(allTasks, params.statuses);
113
+ }
114
+ else {
115
+ throw error;
116
+ }
117
+ }
118
+ // Apply pagination to results
119
+ const paginatedTasks = useClientSideFiltering
120
+ ? allTasks.slice(offset, offset + limit)
121
+ : allTasks;
122
+ const pagination = getPagination(useClientSideFiltering ? allTasks.length : undefined, paginatedTasks.length, offset, limit);
123
+ let result;
124
+ if (params.response_format === ResponseFormat.MARKDOWN) {
125
+ const lines = [`# Tasks in List ${params.list_id}`, ""];
126
+ if (params.response_mode === ResponseMode.SUMMARY) {
127
+ result = generateTaskSummary(useClientSideFiltering ? allTasks : paginatedTasks);
128
+ }
129
+ else {
130
+ const totalCount = useClientSideFiltering ? allTasks.length : paginatedTasks.length;
131
+ lines.push(`Found ${totalCount} task(s) (offset: ${offset})`, "");
132
+ for (const task of paginatedTasks) {
133
+ if (params.response_mode === ResponseMode.COMPACT) {
134
+ lines.push(formatTaskCompact(task));
135
+ }
136
+ else {
137
+ lines.push(formatTaskMarkdown(task));
138
+ lines.push("");
139
+ lines.push("---");
140
+ lines.push("");
141
+ }
142
+ }
143
+ if (pagination.has_more) {
144
+ lines.push("");
145
+ lines.push(`More results available. Use offset=${pagination.next_offset} to get next page.`);
146
+ }
147
+ result = lines.join("\n");
148
+ }
149
+ }
150
+ else {
151
+ result = JSON.stringify({ tasks: paginatedTasks, pagination }, null, 2);
152
+ }
153
+ const { content: finalContent, truncation } = truncateResponse(result, paginatedTasks.length, "tasks");
154
+ result = finalContent + formatTruncationInfo(truncation);
155
+ return {
156
+ content: [{ type: "text", text: result }]
157
+ };
158
+ }
159
+ catch (error) {
160
+ return {
161
+ content: [{ type: "text", text: handleApiError(error) }]
162
+ };
163
+ }
164
+ });
165
+ // Tool 7: Get Task
166
+ server.registerTool("clickup_get_task", {
167
+ title: "Get Task Details",
168
+ description: `Get detailed information about a specific task.
169
+
170
+ Args:
171
+ - task_id (string): The task ID
172
+ - response_format ('markdown' | 'json'): Output format (default: 'markdown')
173
+
174
+ Returns:
175
+ Complete task information including name, description, status, priority, assignees, custom fields, etc.
176
+
177
+ Examples:
178
+ - Use when: "Show me details for task abc123"
179
+ - Use when: "What's the status of task xyz?"
180
+
181
+ Error Handling:
182
+ - Returns "Error: Resource not found" if task_id is invalid (404)`,
183
+ inputSchema: z.object({
184
+ task_id: z.string().min(1).describe("Task ID"),
185
+ response_format: ResponseFormatSchema
186
+ }).strict(),
187
+ annotations: {
188
+ readOnlyHint: true,
189
+ destructiveHint: false,
190
+ idempotentHint: true,
191
+ openWorldHint: true
192
+ }
193
+ }, async (params) => {
194
+ try {
195
+ const task = await makeApiRequest(`task/${params.task_id}`);
196
+ let result;
197
+ if (params.response_format === ResponseFormat.MARKDOWN) {
198
+ result = formatTaskMarkdown(task);
199
+ }
200
+ else {
201
+ result = JSON.stringify(task, null, 2);
202
+ }
203
+ return {
204
+ content: [{ type: "text", text: result }]
205
+ };
206
+ }
207
+ catch (error) {
208
+ return {
209
+ content: [{ type: "text", text: handleApiError(error) }]
210
+ };
211
+ }
212
+ });
213
+ // Tool 11: Search Tasks
214
+ server.registerTool("clickup_search_tasks", {
215
+ title: "Search ClickUp Tasks",
216
+ description: `Search for tasks across a team with advanced filtering.
217
+
218
+ Args:
219
+ - team_id (string): The team ID to search in
220
+ - query (string, optional): Search query string
221
+ - statuses (string[], optional): Filter by status names. MUST be array
222
+ - assignees (number[], optional): Filter by assignee IDs. MUST be array
223
+ - tags (string[], optional): Filter by tag names. MUST be array
224
+ - date_created_gt (number, optional): Created after (Unix timestamp)
225
+ - date_updated_gt (number, optional): Updated after (Unix timestamp)
226
+ - limit (number): Maximum results (1-100, default: 20)
227
+ - offset (number): Pagination offset (default: 0). MUST be a multiple of limit
228
+ - response_format ('markdown' | 'json'): Output format (default: 'markdown')
229
+ - response_mode ('full' | 'compact' | 'summary'): Detail level (default: 'full')
230
+
231
+ Pagination:
232
+ Use the next_offset value from the response to get the next page.
233
+
234
+ Examples:
235
+ - Use when: "Search for tasks containing 'bug' in team 123456"
236
+ - Use when: "Find all 'in progress' tasks assigned to user 789"
237
+ - Use with: response_mode='compact' for large result sets
238
+
239
+ Error Handling:
240
+ - Returns "Error: Resource not found" if team_id is invalid (404)`,
241
+ inputSchema: z.object({
242
+ team_id: z.string().min(1).describe("Team ID"),
243
+ query: z.string().optional().describe("Search query string"),
244
+ statuses: z.array(z.string()).optional().describe("Filter by status names - MUST be array"),
245
+ assignees: z.array(z.number()).optional().describe("Filter by assignee IDs - MUST be array"),
246
+ tags: z.array(z.string()).optional().describe("Filter by tag names - MUST be array"),
247
+ date_created_gt: z.number().optional().describe("Created after (Unix timestamp)"),
248
+ date_updated_gt: z.number().optional().describe("Updated after (Unix timestamp)"),
249
+ ...PaginationSchema.shape,
250
+ response_format: ResponseFormatSchema,
251
+ response_mode: ResponseModeSchema
252
+ }).strict(),
253
+ annotations: {
254
+ readOnlyHint: true,
255
+ destructiveHint: false,
256
+ idempotentHint: true,
257
+ openWorldHint: true
258
+ }
259
+ }, async (params) => {
260
+ try {
261
+ const limit = params.limit ?? DEFAULT_LIMIT;
262
+ const offset = params.offset ?? 0;
263
+ // Validate pagination alignment
264
+ if (offset % limit !== 0) {
265
+ return {
266
+ content: [{
267
+ type: "text",
268
+ text: `Error: offset (${offset}) must be a multiple of limit (${limit}) for proper pagination.`
269
+ }]
270
+ };
271
+ }
272
+ const queryParams = {
273
+ page: Math.floor(offset / limit),
274
+ limit: limit // FIX: Send limit to API
275
+ };
276
+ let useClientSideFiltering = false;
277
+ let allTasks = [];
278
+ if (params.query)
279
+ queryParams.query = params.query;
280
+ if (params.statuses && params.statuses.length > 0) {
281
+ queryParams.statuses = JSON.stringify(params.statuses);
282
+ }
283
+ if (params.assignees)
284
+ queryParams.assignees = params.assignees;
285
+ if (params.tags)
286
+ queryParams.tags = JSON.stringify(params.tags);
287
+ if (params.date_created_gt)
288
+ queryParams.date_created_gt = params.date_created_gt;
289
+ if (params.date_updated_gt)
290
+ queryParams.date_updated_gt = params.date_updated_gt;
291
+ try {
292
+ const data = await makeApiRequest(`team/${params.team_id}/task`, "GET", undefined, queryParams);
293
+ allTasks = data.tasks || [];
294
+ }
295
+ catch (error) {
296
+ // If API filtering fails with 400 error, fall back to client-side filtering
297
+ if (error instanceof Error && 'response' in error && error.response?.status === 400 && params.statuses && params.statuses.length > 0) {
298
+ useClientSideFiltering = true;
299
+ // Fetch all tasks with pagination
300
+ let currentOffset = 0;
301
+ let hasMore = true;
302
+ const fetchLimit = MAX_LIMIT;
303
+ while (hasMore) {
304
+ const fetchParams = {
305
+ page: Math.floor(currentOffset / fetchLimit),
306
+ limit: fetchLimit // FIX: Send limit to API
307
+ };
308
+ if (params.query)
309
+ fetchParams.query = params.query;
310
+ if (params.assignees)
311
+ fetchParams.assignees = params.assignees;
312
+ if (params.tags)
313
+ fetchParams.tags = JSON.stringify(params.tags);
314
+ if (params.date_created_gt)
315
+ fetchParams.date_created_gt = params.date_created_gt;
316
+ if (params.date_updated_gt)
317
+ fetchParams.date_updated_gt = params.date_updated_gt;
318
+ const fetchData = await makeApiRequest(`team/${params.team_id}/task`, "GET", undefined, fetchParams);
319
+ const fetchedTasks = fetchData.tasks || [];
320
+ allTasks.push(...fetchedTasks);
321
+ hasMore = fetchedTasks.length === fetchLimit;
322
+ currentOffset += fetchLimit;
323
+ }
324
+ // Apply client-side status filtering
325
+ allTasks = filterTasksByStatus(allTasks, params.statuses);
326
+ }
327
+ else {
328
+ throw error;
329
+ }
330
+ }
331
+ // Apply pagination to results
332
+ const paginatedTasks = useClientSideFiltering
333
+ ? allTasks.slice(offset, offset + limit)
334
+ : allTasks;
335
+ const pagination = getPagination(useClientSideFiltering ? allTasks.length : undefined, paginatedTasks.length, offset, limit);
336
+ let result;
337
+ if (params.response_format === ResponseFormat.MARKDOWN) {
338
+ const lines = ["# Task Search Results", ""];
339
+ if (params.response_mode === ResponseMode.SUMMARY) {
340
+ result = generateTaskSummary(useClientSideFiltering ? allTasks : paginatedTasks);
341
+ }
342
+ else {
343
+ const totalCount = useClientSideFiltering ? allTasks.length : paginatedTasks.length;
344
+ lines.push(`Found ${totalCount} task(s)`, "");
345
+ for (const task of paginatedTasks) {
346
+ if (params.response_mode === ResponseMode.COMPACT) {
347
+ lines.push(formatTaskCompact(task));
348
+ }
349
+ else {
350
+ lines.push(formatTaskMarkdown(task));
351
+ lines.push("");
352
+ lines.push("---");
353
+ lines.push("");
354
+ }
355
+ }
356
+ if (pagination.has_more) {
357
+ lines.push("");
358
+ lines.push(`More results available. Use offset=${pagination.next_offset} to get next page.`);
359
+ }
360
+ result = lines.join("\n");
361
+ }
362
+ }
363
+ else {
364
+ result = JSON.stringify({ tasks: paginatedTasks, pagination }, null, 2);
365
+ }
366
+ const { content: finalContent, truncation } = truncateResponse(result, paginatedTasks.length, "tasks");
367
+ result = finalContent + formatTruncationInfo(truncation);
368
+ return {
369
+ content: [{ type: "text", text: result }]
370
+ };
371
+ }
372
+ catch (error) {
373
+ return {
374
+ content: [{ type: "text", text: handleApiError(error) }]
375
+ };
376
+ }
377
+ });
378
+ }
379
+ //# sourceMappingURL=tasks-read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks-read.js","sourceRoot":"","sources":["../../src/tools/tasks-read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Task search tools for ClickUp MCP server.
3
+ * Tools for searching tasks across teams.
4
+ */
5
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+ /**
7
+ * Register task search tools with the MCP server
8
+ */
9
+ export declare function registerTaskSearchTools(server: McpServer): void;
10
+ //# sourceMappingURL=tasks-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks-search.d.ts","sourceRoot":"","sources":["../../src/tools/tasks-search.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBzE;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4L/D"}
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Task search tools for ClickUp MCP server.
3
+ * Tools for searching tasks across teams.
4
+ */
5
+ import { z } from "zod";
6
+ import { ResponseFormat, ResponseMode, DEFAULT_LIMIT, MAX_LIMIT } from "../constants.js";
7
+ import { ResponseFormatSchema, ResponseModeSchema, PaginationSchema } from "../schemas.js";
8
+ import { makeApiRequest, handleApiError, formatTaskMarkdown, formatTaskCompact, generateTaskSummary, getPagination, truncateResponse, formatTruncationInfo, filterTasksByStatus } from "../utils/index.js";
9
+ /**
10
+ * Register task search tools with the MCP server
11
+ */
12
+ export function registerTaskSearchTools(server) {
13
+ // Tool 11: Search Tasks
14
+ server.registerTool("clickup_search_tasks", {
15
+ title: "Search ClickUp Tasks",
16
+ description: `Search for tasks across a team with advanced filtering.
17
+
18
+ Args:
19
+ - team_id (string): The team ID to search in
20
+ - query (string, optional): Search query string
21
+ - statuses (string[], optional): Filter by status names. MUST be array
22
+ - assignees (number[], optional): Filter by assignee IDs. MUST be array
23
+ - tags (string[], optional): Filter by tag names. MUST be array
24
+ - date_created_gt (number, optional): Created after (Unix timestamp)
25
+ - date_updated_gt (number, optional): Updated after (Unix timestamp)
26
+ - limit (number): Maximum results (1-100, default: 20)
27
+ - offset (number): Pagination offset (default: 0). MUST be multiple of limit
28
+ - response_format ('markdown' | 'json'): Output format (default: 'markdown')
29
+ - response_mode ('full' | 'compact' | 'summary'): Detail level (default: 'full')
30
+
31
+ Pagination:
32
+ Use the next_offset value from the response to get the next page.
33
+
34
+ Examples:
35
+ - Use when: "Search for tasks containing 'bug' in team 123456"
36
+ - Use when: "Find all 'in progress' tasks assigned to user 789"
37
+ - Use with: response_mode='compact' for large result sets
38
+
39
+ Error Handling:
40
+ - Returns "Error: Resource not found" if team_id is invalid (404)`,
41
+ inputSchema: z.object({
42
+ team_id: z.string().min(1).describe("Team ID"),
43
+ query: z.string().optional().describe("Search query string"),
44
+ statuses: z.array(z.string()).optional().describe("Filter by status names - MUST be array"),
45
+ assignees: z.array(z.number()).optional().describe("Filter by assignee IDs - MUST be array"),
46
+ tags: z.array(z.string()).optional().describe("Filter by tag names - MUST be array"),
47
+ date_created_gt: z.number().optional().describe("Created after (Unix timestamp)"),
48
+ date_updated_gt: z.number().optional().describe("Updated after (Unix timestamp)"),
49
+ ...PaginationSchema.shape,
50
+ response_format: ResponseFormatSchema,
51
+ response_mode: ResponseModeSchema
52
+ }).strict(),
53
+ annotations: {
54
+ readOnlyHint: true,
55
+ destructiveHint: false,
56
+ idempotentHint: true,
57
+ openWorldHint: true
58
+ }
59
+ }, async (params) => {
60
+ try {
61
+ const limit = params.limit ?? DEFAULT_LIMIT;
62
+ const offset = params.offset ?? 0;
63
+ // Validate pagination alignment
64
+ if (offset % limit !== 0) {
65
+ return {
66
+ content: [{
67
+ type: "text",
68
+ text: `Error: offset (${offset}) must be a multiple of limit (${limit}) for proper pagination.`
69
+ }]
70
+ };
71
+ }
72
+ const queryParams = {
73
+ page: Math.floor(offset / limit),
74
+ limit: limit // FIX: Send limit to API
75
+ };
76
+ let useClientSideFiltering = false;
77
+ let allTasks = [];
78
+ if (params.query)
79
+ queryParams.query = params.query;
80
+ if (params.statuses && params.statuses.length > 0) {
81
+ queryParams.statuses = JSON.stringify(params.statuses);
82
+ }
83
+ if (params.assignees)
84
+ queryParams.assignees = params.assignees;
85
+ if (params.tags)
86
+ queryParams.tags = JSON.stringify(params.tags);
87
+ if (params.date_created_gt)
88
+ queryParams.date_created_gt = params.date_created_gt;
89
+ if (params.date_updated_gt)
90
+ queryParams.date_updated_gt = params.date_updated_gt;
91
+ try {
92
+ const data = await makeApiRequest(`team/${params.team_id}/task`, "GET", undefined, queryParams);
93
+ allTasks = data.tasks || [];
94
+ }
95
+ catch (error) {
96
+ // If API filtering fails with 400 error, fall back to client-side filtering
97
+ if (error instanceof Error && 'response' in error && error.response?.status === 400 && params.statuses && params.statuses.length > 0) {
98
+ useClientSideFiltering = true;
99
+ let currentOffset = 0;
100
+ let hasMore = true;
101
+ const fetchLimit = MAX_LIMIT;
102
+ while (hasMore) {
103
+ const fetchParams = {
104
+ page: Math.floor(currentOffset / fetchLimit),
105
+ limit: fetchLimit // FIX: Send limit to API
106
+ };
107
+ if (params.query)
108
+ fetchParams.query = params.query;
109
+ if (params.assignees)
110
+ fetchParams.assignees = params.assignees;
111
+ if (params.tags)
112
+ fetchParams.tags = JSON.stringify(params.tags);
113
+ if (params.date_created_gt)
114
+ fetchParams.date_created_gt = params.date_created_gt;
115
+ if (params.date_updated_gt)
116
+ fetchParams.date_updated_gt = params.date_updated_gt;
117
+ const fetchData = await makeApiRequest(`team/${params.team_id}/task`, "GET", undefined, fetchParams);
118
+ const fetchedTasks = fetchData.tasks || [];
119
+ allTasks.push(...fetchedTasks);
120
+ hasMore = fetchedTasks.length === fetchLimit;
121
+ currentOffset += fetchLimit;
122
+ }
123
+ allTasks = filterTasksByStatus(allTasks, params.statuses);
124
+ }
125
+ else {
126
+ throw error;
127
+ }
128
+ }
129
+ const paginatedTasks = useClientSideFiltering
130
+ ? allTasks.slice(offset, offset + limit)
131
+ : allTasks;
132
+ const pagination = getPagination(useClientSideFiltering ? allTasks.length : undefined, paginatedTasks.length, offset, limit);
133
+ let result;
134
+ if (params.response_format === ResponseFormat.MARKDOWN) {
135
+ const lines = ["# Task Search Results", ""];
136
+ if (params.response_mode === ResponseMode.SUMMARY) {
137
+ result = generateTaskSummary(useClientSideFiltering ? allTasks : paginatedTasks);
138
+ }
139
+ else {
140
+ const totalCount = useClientSideFiltering ? allTasks.length : paginatedTasks.length;
141
+ lines.push(`Found ${totalCount} task(s)`, "");
142
+ for (const task of paginatedTasks) {
143
+ if (params.response_mode === ResponseMode.COMPACT) {
144
+ lines.push(formatTaskCompact(task));
145
+ }
146
+ else {
147
+ lines.push(formatTaskMarkdown(task));
148
+ lines.push("");
149
+ lines.push("---");
150
+ lines.push("");
151
+ }
152
+ }
153
+ if (pagination.has_more) {
154
+ lines.push("");
155
+ lines.push(`More results available. Use offset=${pagination.next_offset} to get next page.`);
156
+ }
157
+ result = lines.join("\n");
158
+ }
159
+ }
160
+ else {
161
+ result = JSON.stringify({ tasks: paginatedTasks, pagination }, null, 2);
162
+ }
163
+ const { content: finalContent, truncation } = truncateResponse(result, paginatedTasks.length, "tasks");
164
+ result = finalContent + formatTruncationInfo(truncation);
165
+ return {
166
+ content: [{ type: "text", text: result }]
167
+ };
168
+ }
169
+ catch (error) {
170
+ return {
171
+ content: [{ type: "text", text: handleApiError(error) }]
172
+ };
173
+ }
174
+ });
175
+ }
176
+ //# sourceMappingURL=tasks-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks-search.js","sourceRoot":"","sources":["../../src/tools/tasks-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Task write tools for ClickUp MCP server.
3
+ * Tools for creating, updating, and deleting tasks.
4
+ */
5
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+ /**
7
+ * Register task write tools with the MCP server
8
+ */
9
+ export declare function registerTaskWriteTools(server: McpServer): void;
10
+ //# sourceMappingURL=tasks-write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks-write.d.ts","sourceRoot":"","sources":["../../src/tools/tasks-write.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2O9D"}