@griffinwork40/clickup-mcp-server 1.1.4 → 1.1.6
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/README.md +583 -71
- package/dist/schemas.d.ts +33 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +34 -0
- package/dist/schemas.js.map +1 -0
- package/dist/server.d.ts +10 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +56 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/comments.d.ts +10 -0
- package/dist/tools/comments.d.ts.map +1 -0
- package/dist/tools/comments.js +123 -0
- package/dist/tools/comments.js.map +1 -0
- package/dist/tools/custom-fields.d.ts +10 -0
- package/dist/tools/custom-fields.d.ts.map +1 -0
- package/dist/tools/custom-fields.js +68 -0
- package/dist/tools/custom-fields.js.map +1 -0
- package/dist/tools/hierarchy.d.ts +10 -0
- package/dist/tools/hierarchy.d.ts.map +1 -0
- package/dist/tools/hierarchy.js +188 -0
- package/dist/tools/hierarchy.js.map +1 -0
- package/dist/tools/index.d.ts +13 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +13 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/lists.d.ts +10 -0
- package/dist/tools/lists.d.ts.map +1 -0
- package/dist/tools/lists.js +148 -0
- package/dist/tools/lists.js.map +1 -0
- package/dist/tools/tasks-analytics.d.ts +10 -0
- package/dist/tools/tasks-analytics.d.ts.map +1 -0
- package/dist/tools/tasks-analytics.js +160 -0
- package/dist/tools/tasks-analytics.js.map +1 -0
- package/dist/tools/tasks-get.d.ts +10 -0
- package/dist/tools/tasks-get.d.ts.map +1 -0
- package/dist/tools/tasks-get.js +209 -0
- package/dist/tools/tasks-get.js.map +1 -0
- package/dist/tools/tasks-read.d.ts +10 -0
- package/dist/tools/tasks-read.d.ts.map +1 -0
- package/dist/tools/tasks-read.js +379 -0
- package/dist/tools/tasks-read.js.map +1 -0
- package/dist/tools/tasks-search.d.ts +10 -0
- package/dist/tools/tasks-search.d.ts.map +1 -0
- package/dist/tools/tasks-search.js +176 -0
- package/dist/tools/tasks-search.js.map +1 -0
- package/dist/tools/tasks-write.d.ts +10 -0
- package/dist/tools/tasks-write.d.ts.map +1 -0
- package/dist/tools/tasks-write.js +232 -0
- package/dist/tools/tasks-write.js.map +1 -0
- package/dist/tools/time-tracking.d.ts +10 -0
- package/dist/tools/time-tracking.d.ts.map +1 -0
- package/dist/tools/time-tracking.js +180 -0
- package/dist/tools/time-tracking.js.map +1 -0
- package/dist/utils/api-client.d.ts +17 -0
- package/dist/utils/api-client.d.ts.map +1 -0
- package/dist/utils/api-client.js +77 -0
- package/dist/utils/api-client.js.map +1 -0
- package/dist/utils/csv-export.d.ts +29 -0
- package/dist/utils/csv-export.d.ts.map +1 -0
- package/dist/utils/csv-export.js +204 -0
- package/dist/utils/csv-export.js.map +1 -0
- package/dist/utils/custom-fields.d.ts +25 -0
- package/dist/utils/custom-fields.d.ts.map +1 -0
- package/dist/utils/custom-fields.js +132 -0
- package/dist/utils/custom-fields.js.map +1 -0
- package/dist/utils/data-processing.d.ts +10 -0
- package/dist/utils/data-processing.d.ts.map +1 -0
- package/dist/utils/data-processing.js +18 -0
- package/dist/utils/data-processing.js.map +1 -0
- package/dist/utils/formatters/base.d.ts +21 -0
- package/dist/utils/formatters/base.d.ts.map +1 -0
- package/dist/utils/formatters/base.js +30 -0
- package/dist/utils/formatters/base.js.map +1 -0
- package/dist/utils/formatters/entities.d.ts +34 -0
- package/dist/utils/formatters/entities.d.ts.map +1 -0
- package/dist/utils/formatters/entities.js +146 -0
- package/dist/utils/formatters/entities.js.map +1 -0
- package/dist/utils/formatters/index.d.ts +6 -0
- package/dist/utils/formatters/index.d.ts.map +1 -0
- package/dist/utils/formatters/index.js +6 -0
- package/dist/utils/formatters/index.js.map +1 -0
- package/dist/utils/index.d.ts +13 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +21 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/task-analytics.d.ts +14 -0
- package/dist/utils/task-analytics.d.ts.map +1 -0
- package/dist/utils/task-analytics.js +67 -0
- package/dist/utils/task-analytics.js.map +1 -0
- package/dist/utils/task-counter.d.ts +24 -0
- package/dist/utils/task-counter.d.ts.map +1 -0
- package/dist/utils/task-counter.js +52 -0
- package/dist/utils/task-counter.js.map +1 -0
- package/dist/utils/truncation.d.ts +14 -0
- package/dist/utils/truncation.d.ts.map +1 -0
- package/dist/utils/truncation.js +124 -0
- package/dist/utils/truncation.js.map +1 -0
- package/package.json +1 -1
|
@@ -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"}
|