@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.
- 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 +5 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lists.d.ts","sourceRoot":"","sources":["../../src/tools/lists.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6JzD"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* List tools for ClickUp MCP server.
|
|
3
|
+
* Tools for managing lists.
|
|
4
|
+
*/
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
import { ResponseFormat } from "../constants.js";
|
|
7
|
+
import { ResponseFormatSchema } from "../schemas.js";
|
|
8
|
+
import { makeApiRequest, handleApiError, formatListMarkdown, truncateResponse, formatTruncationInfo } from "../utils/index.js";
|
|
9
|
+
/**
|
|
10
|
+
* Register list tools with the MCP server
|
|
11
|
+
*/
|
|
12
|
+
export function registerListTools(server) {
|
|
13
|
+
// Tool 4: Get Lists
|
|
14
|
+
server.registerTool("clickup_get_lists", {
|
|
15
|
+
title: "Get ClickUp Lists",
|
|
16
|
+
description: `Get all lists in a folder or space.
|
|
17
|
+
|
|
18
|
+
Lists are containers for tasks (Team → Space → Folder → List → Task).
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
- folder_id (string, optional): Folder ID to get lists from
|
|
22
|
+
- space_id (string, optional): Space ID to get folderless lists from
|
|
23
|
+
- archived (boolean): Include archived lists (default: false)
|
|
24
|
+
- response_format ('markdown' | 'json'): Output format (default: 'markdown')
|
|
25
|
+
|
|
26
|
+
Note: You must provide either folder_id OR space_id, but not both.
|
|
27
|
+
|
|
28
|
+
Examples:
|
|
29
|
+
- Use when: "Show me lists in folder 123456"
|
|
30
|
+
- Use when: "Get folderless lists in space 789"
|
|
31
|
+
|
|
32
|
+
Error Handling:
|
|
33
|
+
- Returns error if neither folder_id nor space_id provided
|
|
34
|
+
- Returns "Error: Resource not found" if ID is invalid (404)`,
|
|
35
|
+
inputSchema: z.object({
|
|
36
|
+
folder_id: z.string().optional().describe("Folder ID"),
|
|
37
|
+
space_id: z.string().optional().describe("Space ID"),
|
|
38
|
+
archived: z.boolean().default(false).describe("Include archived lists"),
|
|
39
|
+
response_format: ResponseFormatSchema
|
|
40
|
+
}).strict(),
|
|
41
|
+
annotations: {
|
|
42
|
+
readOnlyHint: true,
|
|
43
|
+
destructiveHint: false,
|
|
44
|
+
idempotentHint: true,
|
|
45
|
+
openWorldHint: true
|
|
46
|
+
}
|
|
47
|
+
}, async (params) => {
|
|
48
|
+
try {
|
|
49
|
+
if (!params.folder_id && !params.space_id) {
|
|
50
|
+
return {
|
|
51
|
+
content: [{
|
|
52
|
+
type: "text",
|
|
53
|
+
text: "Error: Must provide either folder_id or space_id"
|
|
54
|
+
}]
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
if (params.folder_id && params.space_id) {
|
|
58
|
+
return {
|
|
59
|
+
content: [{
|
|
60
|
+
type: "text",
|
|
61
|
+
text: "Error: Provide only one of folder_id or space_id, not both"
|
|
62
|
+
}]
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
const endpoint = params.folder_id
|
|
66
|
+
? `folder/${params.folder_id}/list`
|
|
67
|
+
: `space/${params.space_id}/list`;
|
|
68
|
+
const data = await makeApiRequest(endpoint, "GET", undefined, { archived: params.archived });
|
|
69
|
+
const lists = data.lists || [];
|
|
70
|
+
let result;
|
|
71
|
+
if (params.response_format === ResponseFormat.MARKDOWN) {
|
|
72
|
+
const parent = params.folder_id ? `Folder ${params.folder_id}` : `Space ${params.space_id}`;
|
|
73
|
+
const lines = [`# Lists in ${parent}`, ""];
|
|
74
|
+
lines.push(`Found ${lists.length} list(s)`, "");
|
|
75
|
+
for (const list of lists) {
|
|
76
|
+
lines.push(formatListMarkdown(list));
|
|
77
|
+
lines.push("");
|
|
78
|
+
}
|
|
79
|
+
result = lines.join("\n");
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
result = JSON.stringify({ lists }, null, 2);
|
|
83
|
+
}
|
|
84
|
+
const { content: finalContent, truncation } = truncateResponse(result, lists.length, "lists");
|
|
85
|
+
result = finalContent + formatTruncationInfo(truncation);
|
|
86
|
+
return {
|
|
87
|
+
content: [{ type: "text", text: result }]
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
return {
|
|
92
|
+
content: [{ type: "text", text: handleApiError(error) }]
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
// Tool 5: Get List Details
|
|
97
|
+
server.registerTool("clickup_get_list_details", {
|
|
98
|
+
title: "Get ClickUp List Details",
|
|
99
|
+
description: `Get detailed information about a specific list, including available statuses and custom fields.
|
|
100
|
+
|
|
101
|
+
This tool is essential for understanding what statuses and custom fields are available before creating or updating tasks.
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
- list_id (string): The list ID
|
|
105
|
+
- response_format ('markdown' | 'json'): Output format (default: 'markdown')
|
|
106
|
+
|
|
107
|
+
Returns:
|
|
108
|
+
Detailed list information including available statuses, custom fields, task count.
|
|
109
|
+
|
|
110
|
+
Examples:
|
|
111
|
+
- Use when: "What statuses are available in list 123456?"
|
|
112
|
+
- Use when: "Show me custom fields for this list"
|
|
113
|
+
- Use before: Creating tasks to know valid statuses
|
|
114
|
+
|
|
115
|
+
Error Handling:
|
|
116
|
+
- Returns "Error: Resource not found" if list_id is invalid (404)`,
|
|
117
|
+
inputSchema: z.object({
|
|
118
|
+
list_id: z.string().min(1).describe("List ID"),
|
|
119
|
+
response_format: ResponseFormatSchema
|
|
120
|
+
}).strict(),
|
|
121
|
+
annotations: {
|
|
122
|
+
readOnlyHint: true,
|
|
123
|
+
destructiveHint: false,
|
|
124
|
+
idempotentHint: true,
|
|
125
|
+
openWorldHint: true
|
|
126
|
+
}
|
|
127
|
+
}, async (params) => {
|
|
128
|
+
try {
|
|
129
|
+
const list = await makeApiRequest(`list/${params.list_id}`);
|
|
130
|
+
let result;
|
|
131
|
+
if (params.response_format === ResponseFormat.MARKDOWN) {
|
|
132
|
+
result = formatListMarkdown(list);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
result = JSON.stringify(list, null, 2);
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
content: [{ type: "text", text: result }]
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
return {
|
|
143
|
+
content: [{ type: "text", text: handleApiError(error) }]
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=lists.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lists.js","sourceRoot":"","sources":["../../src/tools/lists.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task analytics tools for ClickUp MCP server.
|
|
3
|
+
* Tools for counting and exporting tasks.
|
|
4
|
+
*/
|
|
5
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
6
|
+
/**
|
|
7
|
+
* Register task analytics tools with the MCP server
|
|
8
|
+
*/
|
|
9
|
+
export declare function registerTaskAnalyticsTools(server: McpServer): void;
|
|
10
|
+
//# sourceMappingURL=tasks-analytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks-analytics.d.ts","sourceRoot":"","sources":["../../src/tools/tasks-analytics.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiKlE"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task analytics tools for ClickUp MCP server.
|
|
3
|
+
* Tools for counting and exporting tasks.
|
|
4
|
+
*/
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
import { ResponseFormat } from "../constants.js";
|
|
7
|
+
import { ResponseFormatSchema } from "../schemas.js";
|
|
8
|
+
import { handleApiError, countTasksByStatus, exportTasksToCSV } from "../utils/index.js";
|
|
9
|
+
/**
|
|
10
|
+
* Register task analytics tools with the MCP server
|
|
11
|
+
*/
|
|
12
|
+
export function registerTaskAnalyticsTools(server) {
|
|
13
|
+
// Tool 12: Count Tasks by Status
|
|
14
|
+
server.registerTool("clickup_count_tasks_by_status", {
|
|
15
|
+
title: "Count Tasks by Status",
|
|
16
|
+
description: `Count tasks in a list, optionally filtered by status.
|
|
17
|
+
|
|
18
|
+
Handles pagination internally and returns counts efficiently.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
- list_id (string): The list ID to count tasks in
|
|
22
|
+
- statuses (string[], optional): Filter by specific status names
|
|
23
|
+
- archived (boolean): Include archived tasks (default: false)
|
|
24
|
+
- include_closed (boolean): Include closed tasks (default: false)
|
|
25
|
+
- response_format ('markdown' | 'json'): Output format (default: 'markdown')
|
|
26
|
+
|
|
27
|
+
Returns:
|
|
28
|
+
Total count and breakdown by status.
|
|
29
|
+
|
|
30
|
+
Examples:
|
|
31
|
+
- Use when: "Count all tasks in list 123456"
|
|
32
|
+
- Use when: "How many tasks have status '#1 - phone call'?"
|
|
33
|
+
|
|
34
|
+
Error Handling:
|
|
35
|
+
- Returns "Error: Resource not found" if list_id is invalid (404)`,
|
|
36
|
+
inputSchema: z.object({
|
|
37
|
+
list_id: z.string().min(1).describe("List ID"),
|
|
38
|
+
statuses: z.array(z.string()).optional().describe("Filter by specific status names"),
|
|
39
|
+
archived: z.boolean().default(false).describe("Include archived tasks"),
|
|
40
|
+
include_closed: z.boolean().default(false).describe("Include closed tasks"),
|
|
41
|
+
response_format: ResponseFormatSchema
|
|
42
|
+
}).strict(),
|
|
43
|
+
annotations: {
|
|
44
|
+
readOnlyHint: true,
|
|
45
|
+
destructiveHint: false,
|
|
46
|
+
idempotentHint: true,
|
|
47
|
+
openWorldHint: true
|
|
48
|
+
}
|
|
49
|
+
}, async (params) => {
|
|
50
|
+
try {
|
|
51
|
+
const result = await countTasksByStatus(params.list_id, {
|
|
52
|
+
archived: params.archived,
|
|
53
|
+
include_closed: params.include_closed,
|
|
54
|
+
statuses: params.statuses
|
|
55
|
+
});
|
|
56
|
+
let output;
|
|
57
|
+
if (params.response_format === ResponseFormat.MARKDOWN) {
|
|
58
|
+
const lines = [`# Task Counts for List ${params.list_id}`, ""];
|
|
59
|
+
if (params.statuses && params.statuses.length > 0) {
|
|
60
|
+
lines.push(`**Filtering by status**: ${params.statuses.join(", ")}`, "");
|
|
61
|
+
}
|
|
62
|
+
lines.push(`**Total tasks**: ${result.total}`, "");
|
|
63
|
+
lines.push("");
|
|
64
|
+
if (Object.keys(result.by_status).length > 0) {
|
|
65
|
+
lines.push("## Counts by Status");
|
|
66
|
+
for (const [status, count] of Object.entries(result.by_status).sort((a, b) => b[1] - a[1])) {
|
|
67
|
+
lines.push(`- ${status}: ${count}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
lines.push("No tasks found matching the criteria.");
|
|
72
|
+
}
|
|
73
|
+
output = lines.join("\n");
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
output = JSON.stringify(result, null, 2);
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
content: [{ type: "text", text: output }]
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
return {
|
|
84
|
+
content: [{ type: "text", text: handleApiError(error) }]
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
// Tool 13: Export Tasks to CSV
|
|
89
|
+
server.registerTool("clickup_export_tasks_to_csv", {
|
|
90
|
+
title: "Export Tasks to CSV",
|
|
91
|
+
description: `Export tasks from a list to CSV format.
|
|
92
|
+
|
|
93
|
+
Handles pagination, status filtering, and custom field extraction.
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
- list_id (string): The list to export from
|
|
97
|
+
- statuses (string[], optional): Filter by specific status names
|
|
98
|
+
- archived (boolean): Include archived tasks (default: false)
|
|
99
|
+
- include_closed (boolean): Include closed tasks (default: false)
|
|
100
|
+
- custom_fields (string[], optional): Specific custom field names to include
|
|
101
|
+
- include_standard_fields (boolean): Include standard fields (default: true)
|
|
102
|
+
- add_phone_number_column (boolean): Create combined phone_number column (default: false)
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
CSV content as text.
|
|
106
|
+
|
|
107
|
+
Examples:
|
|
108
|
+
- Use when: "Export all tasks from list 123456 to CSV"
|
|
109
|
+
- Use when: "Export tasks with status '#1 - phone call' to CSV"
|
|
110
|
+
|
|
111
|
+
Error Handling:
|
|
112
|
+
- Returns "Error: Resource not found" if list_id is invalid (404)`,
|
|
113
|
+
inputSchema: z.object({
|
|
114
|
+
list_id: z.string().min(1).describe("List ID"),
|
|
115
|
+
statuses: z.array(z.string()).optional().describe("Filter by specific status names"),
|
|
116
|
+
archived: z.boolean().default(false).describe("Include archived tasks"),
|
|
117
|
+
include_closed: z.boolean().default(false).describe("Include closed tasks"),
|
|
118
|
+
custom_fields: z.array(z.string()).optional().describe("Specific custom field names to include"),
|
|
119
|
+
include_standard_fields: z.boolean().default(true).describe("Include standard fields"),
|
|
120
|
+
add_phone_number_column: z.boolean().default(false).describe("Create combined phone_number column")
|
|
121
|
+
}).strict(),
|
|
122
|
+
annotations: {
|
|
123
|
+
readOnlyHint: true,
|
|
124
|
+
destructiveHint: false,
|
|
125
|
+
idempotentHint: true,
|
|
126
|
+
openWorldHint: true
|
|
127
|
+
}
|
|
128
|
+
}, async (params) => {
|
|
129
|
+
try {
|
|
130
|
+
const csvContent = await exportTasksToCSV(params.list_id, {
|
|
131
|
+
archived: params.archived,
|
|
132
|
+
include_closed: params.include_closed,
|
|
133
|
+
statuses: params.statuses,
|
|
134
|
+
custom_fields: params.custom_fields,
|
|
135
|
+
include_standard_fields: params.include_standard_fields,
|
|
136
|
+
add_phone_number_column: params.add_phone_number_column
|
|
137
|
+
});
|
|
138
|
+
if (csvContent === '') {
|
|
139
|
+
return {
|
|
140
|
+
content: [{
|
|
141
|
+
type: "text",
|
|
142
|
+
text: "No tasks found matching the criteria. CSV is empty."
|
|
143
|
+
}]
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
content: [{
|
|
148
|
+
type: "text",
|
|
149
|
+
text: csvContent
|
|
150
|
+
}]
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
return {
|
|
155
|
+
content: [{ type: "text", text: handleApiError(error) }]
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=tasks-analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks-analytics.js","sourceRoot":"","sources":["../../src/tools/tasks-analytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task get tools for ClickUp MCP server.
|
|
3
|
+
* Tools for retrieving individual tasks and task lists.
|
|
4
|
+
*/
|
|
5
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
6
|
+
/**
|
|
7
|
+
* Register task get tools with the MCP server
|
|
8
|
+
*/
|
|
9
|
+
export declare function registerTaskGetTools(server: McpServer): void;
|
|
10
|
+
//# sourceMappingURL=tasks-get.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks-get.d.ts","sourceRoot":"","sources":["../../src/tools/tasks-get.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBzE;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8O5D"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task get tools for ClickUp MCP server.
|
|
3
|
+
* Tools for retrieving individual tasks and task lists.
|
|
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 get tools with the MCP server
|
|
11
|
+
*/
|
|
12
|
+
export function registerTaskGetTools(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
|
|
23
|
+
- assignees (number[], optional): Filter by assignee IDs. MUST be array
|
|
24
|
+
- limit (number): Maximum results (1-100, default: 20)
|
|
25
|
+
- offset (number): Pagination offset (default: 0). MUST be 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
|
+
|
|
36
|
+
Error Handling:
|
|
37
|
+
- Returns "Error: Resource not found" if list_id is invalid (404)`,
|
|
38
|
+
inputSchema: z.object({
|
|
39
|
+
list_id: z.string().min(1).describe("List ID"),
|
|
40
|
+
archived: z.boolean().default(false).describe("Include archived tasks"),
|
|
41
|
+
include_closed: z.boolean().default(false).describe("Include closed tasks"),
|
|
42
|
+
statuses: z.array(z.string()).optional().describe("Filter by status names - MUST be array"),
|
|
43
|
+
assignees: z.array(z.number()).optional().describe("Filter by assignee IDs - MUST be array"),
|
|
44
|
+
...PaginationSchema.shape,
|
|
45
|
+
response_format: ResponseFormatSchema,
|
|
46
|
+
response_mode: ResponseModeSchema
|
|
47
|
+
}).strict(),
|
|
48
|
+
annotations: {
|
|
49
|
+
readOnlyHint: true,
|
|
50
|
+
destructiveHint: false,
|
|
51
|
+
idempotentHint: true,
|
|
52
|
+
openWorldHint: true
|
|
53
|
+
}
|
|
54
|
+
}, async (params) => {
|
|
55
|
+
try {
|
|
56
|
+
const limit = params.limit ?? DEFAULT_LIMIT;
|
|
57
|
+
const offset = params.offset ?? 0;
|
|
58
|
+
// Validate pagination alignment
|
|
59
|
+
if (offset % limit !== 0) {
|
|
60
|
+
return {
|
|
61
|
+
content: [{
|
|
62
|
+
type: "text",
|
|
63
|
+
text: `Error: offset (${offset}) must be a multiple of limit (${limit}) for proper pagination.`
|
|
64
|
+
}]
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const queryParams = {
|
|
68
|
+
archived: params.archived,
|
|
69
|
+
include_closed: params.include_closed,
|
|
70
|
+
page: Math.floor(offset / limit),
|
|
71
|
+
limit: limit // FIX: Send limit to API
|
|
72
|
+
};
|
|
73
|
+
let useClientSideFiltering = false;
|
|
74
|
+
let allTasks = [];
|
|
75
|
+
if (params.statuses && params.statuses.length > 0) {
|
|
76
|
+
queryParams.statuses = JSON.stringify(params.statuses);
|
|
77
|
+
}
|
|
78
|
+
if (params.assignees && params.assignees.length > 0) {
|
|
79
|
+
queryParams.assignees = params.assignees;
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
const data = await makeApiRequest(`list/${params.list_id}/task`, "GET", undefined, queryParams);
|
|
83
|
+
allTasks = data.tasks || [];
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
// If API filtering fails with 400 error, fall back to client-side filtering
|
|
87
|
+
if (error instanceof Error && 'response' in error && error.response?.status === 400 && params.statuses && params.statuses.length > 0) {
|
|
88
|
+
useClientSideFiltering = true;
|
|
89
|
+
let currentOffset = 0;
|
|
90
|
+
let hasMore = true;
|
|
91
|
+
const fetchLimit = MAX_LIMIT;
|
|
92
|
+
while (hasMore) {
|
|
93
|
+
const fetchParams = {
|
|
94
|
+
archived: params.archived,
|
|
95
|
+
include_closed: params.include_closed,
|
|
96
|
+
page: Math.floor(currentOffset / fetchLimit),
|
|
97
|
+
limit: fetchLimit // FIX: Send limit to API
|
|
98
|
+
};
|
|
99
|
+
if (params.assignees && params.assignees.length > 0) {
|
|
100
|
+
fetchParams.assignees = params.assignees;
|
|
101
|
+
}
|
|
102
|
+
const fetchData = await makeApiRequest(`list/${params.list_id}/task`, "GET", undefined, fetchParams);
|
|
103
|
+
const fetchedTasks = fetchData.tasks || [];
|
|
104
|
+
allTasks.push(...fetchedTasks);
|
|
105
|
+
hasMore = fetchedTasks.length === fetchLimit;
|
|
106
|
+
currentOffset += fetchLimit;
|
|
107
|
+
}
|
|
108
|
+
allTasks = filterTasksByStatus(allTasks, params.statuses);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
throw error;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const paginatedTasks = useClientSideFiltering
|
|
115
|
+
? allTasks.slice(offset, offset + limit)
|
|
116
|
+
: allTasks;
|
|
117
|
+
const pagination = getPagination(useClientSideFiltering ? allTasks.length : undefined, paginatedTasks.length, offset, limit);
|
|
118
|
+
let result;
|
|
119
|
+
if (params.response_format === ResponseFormat.MARKDOWN) {
|
|
120
|
+
const lines = [`# Tasks in List ${params.list_id}`, ""];
|
|
121
|
+
if (params.response_mode === ResponseMode.SUMMARY) {
|
|
122
|
+
result = generateTaskSummary(useClientSideFiltering ? allTasks : paginatedTasks);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
const totalCount = useClientSideFiltering ? allTasks.length : paginatedTasks.length;
|
|
126
|
+
lines.push(`Found ${totalCount} task(s) (offset: ${offset})`, "");
|
|
127
|
+
for (const task of paginatedTasks) {
|
|
128
|
+
if (params.response_mode === ResponseMode.COMPACT) {
|
|
129
|
+
lines.push(formatTaskCompact(task));
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
lines.push(formatTaskMarkdown(task));
|
|
133
|
+
lines.push("");
|
|
134
|
+
lines.push("---");
|
|
135
|
+
lines.push("");
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (pagination.has_more) {
|
|
139
|
+
lines.push("");
|
|
140
|
+
lines.push(`More results available. Use offset=${pagination.next_offset} to get next page.`);
|
|
141
|
+
}
|
|
142
|
+
result = lines.join("\n");
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
result = JSON.stringify({ tasks: paginatedTasks, pagination }, null, 2);
|
|
147
|
+
}
|
|
148
|
+
const { content: finalContent, truncation } = truncateResponse(result, paginatedTasks.length, "tasks");
|
|
149
|
+
result = finalContent + formatTruncationInfo(truncation);
|
|
150
|
+
return {
|
|
151
|
+
content: [{ type: "text", text: result }]
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
return {
|
|
156
|
+
content: [{ type: "text", text: handleApiError(error) }]
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
// Tool 7: Get Task
|
|
161
|
+
server.registerTool("clickup_get_task", {
|
|
162
|
+
title: "Get Task Details",
|
|
163
|
+
description: `Get detailed information about a specific task.
|
|
164
|
+
|
|
165
|
+
Args:
|
|
166
|
+
- task_id (string): The task ID
|
|
167
|
+
- response_format ('markdown' | 'json'): Output format (default: 'markdown')
|
|
168
|
+
|
|
169
|
+
Returns:
|
|
170
|
+
Complete task information including name, description, status, priority, etc.
|
|
171
|
+
|
|
172
|
+
Examples:
|
|
173
|
+
- Use when: "Show me details for task abc123"
|
|
174
|
+
- Use when: "What's the status of task xyz?"
|
|
175
|
+
|
|
176
|
+
Error Handling:
|
|
177
|
+
- Returns "Error: Resource not found" if task_id is invalid (404)`,
|
|
178
|
+
inputSchema: z.object({
|
|
179
|
+
task_id: z.string().min(1).describe("Task ID"),
|
|
180
|
+
response_format: ResponseFormatSchema
|
|
181
|
+
}).strict(),
|
|
182
|
+
annotations: {
|
|
183
|
+
readOnlyHint: true,
|
|
184
|
+
destructiveHint: false,
|
|
185
|
+
idempotentHint: true,
|
|
186
|
+
openWorldHint: true
|
|
187
|
+
}
|
|
188
|
+
}, async (params) => {
|
|
189
|
+
try {
|
|
190
|
+
const task = await makeApiRequest(`task/${params.task_id}`);
|
|
191
|
+
let result;
|
|
192
|
+
if (params.response_format === ResponseFormat.MARKDOWN) {
|
|
193
|
+
result = formatTaskMarkdown(task);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
result = JSON.stringify(task, null, 2);
|
|
197
|
+
}
|
|
198
|
+
return {
|
|
199
|
+
content: [{ type: "text", text: result }]
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
return {
|
|
204
|
+
content: [{ type: "text", text: handleApiError(error) }]
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=tasks-get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks-get.js","sourceRoot":"","sources":["../../src/tools/tasks-get.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task read tools for ClickUp MCP server.
|
|
3
|
+
* Tools for reading and searching tasks.
|
|
4
|
+
*/
|
|
5
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
6
|
+
/**
|
|
7
|
+
* Register task read tools with the MCP server
|
|
8
|
+
*/
|
|
9
|
+
export declare function registerTaskReadTools(server: McpServer): void;
|
|
10
|
+
//# sourceMappingURL=tasks-read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks-read.d.ts","sourceRoot":"","sources":["../../src/tools/tasks-read.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBzE;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkb7D"}
|