@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.
Files changed (98) hide show
  1. package/README.md +583 -71
  2. package/dist/schemas.d.ts +33 -0
  3. package/dist/schemas.d.ts.map +1 -0
  4. package/dist/schemas.js +34 -0
  5. package/dist/schemas.js.map +1 -0
  6. package/dist/server.d.ts +10 -0
  7. package/dist/server.d.ts.map +1 -0
  8. package/dist/server.js +56 -0
  9. package/dist/server.js.map +1 -0
  10. package/dist/tools/comments.d.ts +10 -0
  11. package/dist/tools/comments.d.ts.map +1 -0
  12. package/dist/tools/comments.js +123 -0
  13. package/dist/tools/comments.js.map +1 -0
  14. package/dist/tools/custom-fields.d.ts +10 -0
  15. package/dist/tools/custom-fields.d.ts.map +1 -0
  16. package/dist/tools/custom-fields.js +68 -0
  17. package/dist/tools/custom-fields.js.map +1 -0
  18. package/dist/tools/hierarchy.d.ts +10 -0
  19. package/dist/tools/hierarchy.d.ts.map +1 -0
  20. package/dist/tools/hierarchy.js +188 -0
  21. package/dist/tools/hierarchy.js.map +1 -0
  22. package/dist/tools/index.d.ts +13 -0
  23. package/dist/tools/index.d.ts.map +1 -0
  24. package/dist/tools/index.js +13 -0
  25. package/dist/tools/index.js.map +1 -0
  26. package/dist/tools/lists.d.ts +10 -0
  27. package/dist/tools/lists.d.ts.map +1 -0
  28. package/dist/tools/lists.js +148 -0
  29. package/dist/tools/lists.js.map +1 -0
  30. package/dist/tools/tasks-analytics.d.ts +10 -0
  31. package/dist/tools/tasks-analytics.d.ts.map +1 -0
  32. package/dist/tools/tasks-analytics.js +160 -0
  33. package/dist/tools/tasks-analytics.js.map +1 -0
  34. package/dist/tools/tasks-get.d.ts +10 -0
  35. package/dist/tools/tasks-get.d.ts.map +1 -0
  36. package/dist/tools/tasks-get.js +209 -0
  37. package/dist/tools/tasks-get.js.map +1 -0
  38. package/dist/tools/tasks-read.d.ts +10 -0
  39. package/dist/tools/tasks-read.d.ts.map +1 -0
  40. package/dist/tools/tasks-read.js +379 -0
  41. package/dist/tools/tasks-read.js.map +1 -0
  42. package/dist/tools/tasks-search.d.ts +10 -0
  43. package/dist/tools/tasks-search.d.ts.map +1 -0
  44. package/dist/tools/tasks-search.js +176 -0
  45. package/dist/tools/tasks-search.js.map +1 -0
  46. package/dist/tools/tasks-write.d.ts +10 -0
  47. package/dist/tools/tasks-write.d.ts.map +1 -0
  48. package/dist/tools/tasks-write.js +232 -0
  49. package/dist/tools/tasks-write.js.map +1 -0
  50. package/dist/tools/time-tracking.d.ts +10 -0
  51. package/dist/tools/time-tracking.d.ts.map +1 -0
  52. package/dist/tools/time-tracking.js +180 -0
  53. package/dist/tools/time-tracking.js.map +1 -0
  54. package/dist/utils/api-client.d.ts +17 -0
  55. package/dist/utils/api-client.d.ts.map +1 -0
  56. package/dist/utils/api-client.js +77 -0
  57. package/dist/utils/api-client.js.map +1 -0
  58. package/dist/utils/csv-export.d.ts +29 -0
  59. package/dist/utils/csv-export.d.ts.map +1 -0
  60. package/dist/utils/csv-export.js +204 -0
  61. package/dist/utils/csv-export.js.map +1 -0
  62. package/dist/utils/custom-fields.d.ts +25 -0
  63. package/dist/utils/custom-fields.d.ts.map +1 -0
  64. package/dist/utils/custom-fields.js +132 -0
  65. package/dist/utils/custom-fields.js.map +1 -0
  66. package/dist/utils/data-processing.d.ts +10 -0
  67. package/dist/utils/data-processing.d.ts.map +1 -0
  68. package/dist/utils/data-processing.js +18 -0
  69. package/dist/utils/data-processing.js.map +1 -0
  70. package/dist/utils/formatters/base.d.ts +21 -0
  71. package/dist/utils/formatters/base.d.ts.map +1 -0
  72. package/dist/utils/formatters/base.js +30 -0
  73. package/dist/utils/formatters/base.js.map +1 -0
  74. package/dist/utils/formatters/entities.d.ts +34 -0
  75. package/dist/utils/formatters/entities.d.ts.map +1 -0
  76. package/dist/utils/formatters/entities.js +146 -0
  77. package/dist/utils/formatters/entities.js.map +1 -0
  78. package/dist/utils/formatters/index.d.ts +6 -0
  79. package/dist/utils/formatters/index.d.ts.map +1 -0
  80. package/dist/utils/formatters/index.js +6 -0
  81. package/dist/utils/formatters/index.js.map +1 -0
  82. package/dist/utils/index.d.ts +13 -0
  83. package/dist/utils/index.d.ts.map +1 -0
  84. package/dist/utils/index.js +21 -0
  85. package/dist/utils/index.js.map +1 -0
  86. package/dist/utils/task-analytics.d.ts +14 -0
  87. package/dist/utils/task-analytics.d.ts.map +1 -0
  88. package/dist/utils/task-analytics.js +67 -0
  89. package/dist/utils/task-analytics.js.map +1 -0
  90. package/dist/utils/task-counter.d.ts +24 -0
  91. package/dist/utils/task-counter.d.ts.map +1 -0
  92. package/dist/utils/task-counter.js +52 -0
  93. package/dist/utils/task-counter.js.map +1 -0
  94. package/dist/utils/truncation.d.ts +14 -0
  95. package/dist/utils/truncation.d.ts.map +1 -0
  96. package/dist/utils/truncation.js +124 -0
  97. package/dist/utils/truncation.js.map +1 -0
  98. package/package.json +1 -1
@@ -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":"AAAA;;;GAGG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EACL,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAG3B;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,oBAAoB;IACpB,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE;;;;;;;;;;;;;;;;;;+DAkB4C;QACzD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YACtD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YACpD,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;YACvE,eAAe,EAAE,oBAAoB;SACtC,CAAC,CAAC,MAAM,EAAE;QACX,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC1C,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,kDAAkD;yBACzD,CAAC;iBACH,CAAC;YACJ,CAAC;YAED,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACxC,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,4DAA4D;yBACnE,CAAC;iBACH,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS;gBAC/B,CAAC,CAAC,UAAU,MAAM,CAAC,SAAS,OAAO;gBACnC,CAAC,CAAC,SAAS,MAAM,CAAC,QAAQ,OAAO,CAAC;YAEpC,MAAM,IAAI,GAAG,MAAM,cAAc,CAC/B,QAAQ,EACR,KAAK,EACL,SAAS,EACT,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAC9B,CAAC;YACF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAE/B,IAAI,MAAc,CAAC;YAEnB,IAAI,MAAM,CAAC,eAAe,KAAK,cAAc,CAAC,QAAQ,EAAE,CAAC;gBACvD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC5F,MAAM,KAAK,GAAa,CAAC,cAAc,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;gBACrD,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,UAAU,EAAE,EAAE,CAAC,CAAC;gBAEhD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;oBACrC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjB,CAAC;gBAED,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC9C,CAAC;YAED,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC9F,MAAM,GAAG,YAAY,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAEzD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;aAC1C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;aACzD,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,2BAA2B;IAC3B,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE;;;;;;;;;;;;;;;;;oEAiBiD;QAC9D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC9C,eAAe,EAAE,oBAAoB;SACtC,CAAC,CAAC,MAAM,EAAE;QACX,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,cAAc,CAAc,QAAQ,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YAEzE,IAAI,MAAc,CAAC;YAEnB,IAAI,MAAM,CAAC,eAAe,KAAK,cAAc,CAAC,QAAQ,EAAE,CAAC;gBACvD,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACzC,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;aAC1C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;aACzD,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -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"}