@chykalophia/clickup-mcp-server 3.2.0
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/LICENSE +21 -0
- package/README.md +467 -0
- package/bin/clickup-mcp-server-ai.js +9 -0
- package/bin/clickup-mcp-server-basic.js +9 -0
- package/bin/clickup-mcp-server-efficiency.js +9 -0
- package/bin/clickup-mcp-server-enhanced.js +9 -0
- package/build/app.d.ts +1 -0
- package/build/app.js +2 -0
- package/build/app.js.map +1 -0
- package/build/clickup-client/attachments-enhanced.d.ts +128 -0
- package/build/clickup-client/attachments-enhanced.js +212 -0
- package/build/clickup-client/attachments-enhanced.js.map +1 -0
- package/build/clickup-client/auth.d.ts +254 -0
- package/build/clickup-client/auth.js +105 -0
- package/build/clickup-client/auth.js.map +1 -0
- package/build/clickup-client/chat-enhanced.d.ts +141 -0
- package/build/clickup-client/chat-enhanced.js +196 -0
- package/build/clickup-client/chat-enhanced.js.map +1 -0
- package/build/clickup-client/checklists.d.ts +87 -0
- package/build/clickup-client/checklists.js +63 -0
- package/build/clickup-client/checklists.js.map +1 -0
- package/build/clickup-client/comments-enhanced.d.ts +176 -0
- package/build/clickup-client/comments-enhanced.js +230 -0
- package/build/clickup-client/comments-enhanced.js.map +1 -0
- package/build/clickup-client/comments.d.ts +173 -0
- package/build/clickup-client/comments.js +312 -0
- package/build/clickup-client/comments.js.map +1 -0
- package/build/clickup-client/custom-fields-enhanced.d.ts +286 -0
- package/build/clickup-client/custom-fields-enhanced.js +416 -0
- package/build/clickup-client/custom-fields-enhanced.js.map +1 -0
- package/build/clickup-client/dependencies-enhanced.d.ts +144 -0
- package/build/clickup-client/dependencies-enhanced.js +142 -0
- package/build/clickup-client/dependencies-enhanced.js.map +1 -0
- package/build/clickup-client/docs-enhanced.d.ts +176 -0
- package/build/clickup-client/docs-enhanced.js +374 -0
- package/build/clickup-client/docs-enhanced.js.map +1 -0
- package/build/clickup-client/docs.d.ts +84 -0
- package/build/clickup-client/docs.js +156 -0
- package/build/clickup-client/docs.js.map +1 -0
- package/build/clickup-client/folders.d.ts +62 -0
- package/build/clickup-client/folders.js +53 -0
- package/build/clickup-client/folders.js.map +1 -0
- package/build/clickup-client/goals-enhanced.d.ts +163 -0
- package/build/clickup-client/goals-enhanced.js +309 -0
- package/build/clickup-client/goals-enhanced.js.map +1 -0
- package/build/clickup-client/index.d.ts +16 -0
- package/build/clickup-client/index.js +61 -0
- package/build/clickup-client/index.js.map +1 -0
- package/build/clickup-client/lists.d.ts +105 -0
- package/build/clickup-client/lists.js +108 -0
- package/build/clickup-client/lists.js.map +1 -0
- package/build/clickup-client/secure-client.d.ts +88 -0
- package/build/clickup-client/secure-client.js +275 -0
- package/build/clickup-client/secure-client.js.map +1 -0
- package/build/clickup-client/spaces.d.ts +58 -0
- package/build/clickup-client/spaces.js +28 -0
- package/build/clickup-client/spaces.js.map +1 -0
- package/build/clickup-client/tasks.d.ts +161 -0
- package/build/clickup-client/tasks.js +99 -0
- package/build/clickup-client/tasks.js.map +1 -0
- package/build/clickup-client/time-tracking-enhanced.d.ts +153 -0
- package/build/clickup-client/time-tracking-enhanced.js +292 -0
- package/build/clickup-client/time-tracking-enhanced.js.map +1 -0
- package/build/clickup-client/views-enhanced.d.ts +149 -0
- package/build/clickup-client/views-enhanced.js +210 -0
- package/build/clickup-client/views-enhanced.js.map +1 -0
- package/build/clickup-client/webhooks-enhanced.d.ts +119 -0
- package/build/clickup-client/webhooks-enhanced.js +169 -0
- package/build/clickup-client/webhooks-enhanced.js.map +1 -0
- package/build/controllers/lists.controller.d.ts +1 -0
- package/build/controllers/lists.controller.js +2 -0
- package/build/controllers/lists.controller.js.map +1 -0
- package/build/index-efficiency-simple.d.ts +2 -0
- package/build/index-efficiency-simple.js +379 -0
- package/build/index-efficiency-simple.js.map +1 -0
- package/build/index-enhanced-efficiency.d.ts +2 -0
- package/build/index-enhanced-efficiency.js +275 -0
- package/build/index-enhanced-efficiency.js.map +1 -0
- package/build/index-enhanced.d.ts +2 -0
- package/build/index-enhanced.js +74 -0
- package/build/index-enhanced.js.map +1 -0
- package/build/index.d.ts +2 -0
- package/build/index.js +77 -0
- package/build/index.js.map +1 -0
- package/build/resources/checklist-resources.d.ts +2 -0
- package/build/resources/checklist-resources.js +102 -0
- package/build/resources/checklist-resources.js.map +1 -0
- package/build/resources/comment-resources.d.ts +2 -0
- package/build/resources/comment-resources.js +152 -0
- package/build/resources/comment-resources.js.map +1 -0
- package/build/resources/doc-resources.d.ts +2 -0
- package/build/resources/doc-resources.js +77 -0
- package/build/resources/doc-resources.js.map +1 -0
- package/build/resources/folder-resources.d.ts +2 -0
- package/build/resources/folder-resources.js +160 -0
- package/build/resources/folder-resources.js.map +1 -0
- package/build/resources/list-resources.d.ts +2 -0
- package/build/resources/list-resources.js +104 -0
- package/build/resources/list-resources.js.map +1 -0
- package/build/resources/space-resources.d.ts +2 -0
- package/build/resources/space-resources.js +104 -0
- package/build/resources/space-resources.js.map +1 -0
- package/build/resources/task-resources.d.ts +2 -0
- package/build/resources/task-resources.js +57 -0
- package/build/resources/task-resources.js.map +1 -0
- package/build/routes/lists.routes.d.ts +1 -0
- package/build/routes/lists.routes.js +2 -0
- package/build/routes/lists.routes.js.map +1 -0
- package/build/schemas/attachments-schemas.d.ts +201 -0
- package/build/schemas/attachments-schemas.js +250 -0
- package/build/schemas/attachments-schemas.js.map +1 -0
- package/build/schemas/chat-schemas.d.ts +478 -0
- package/build/schemas/chat-schemas.js +173 -0
- package/build/schemas/chat-schemas.js.map +1 -0
- package/build/schemas/custom-field-schemas.d.ts +1617 -0
- package/build/schemas/custom-field-schemas.js +384 -0
- package/build/schemas/custom-field-schemas.js.map +1 -0
- package/build/schemas/dependencies-schemas.d.ts +274 -0
- package/build/schemas/dependencies-schemas.js +176 -0
- package/build/schemas/dependencies-schemas.js.map +1 -0
- package/build/schemas/document-schemas.d.ts +433 -0
- package/build/schemas/document-schemas.js +168 -0
- package/build/schemas/document-schemas.js.map +1 -0
- package/build/schemas/goals-schemas.d.ts +961 -0
- package/build/schemas/goals-schemas.js +293 -0
- package/build/schemas/goals-schemas.js.map +1 -0
- package/build/schemas/time-tracking-schemas.d.ts +741 -0
- package/build/schemas/time-tracking-schemas.js +234 -0
- package/build/schemas/time-tracking-schemas.js.map +1 -0
- package/build/schemas/views-schemas.d.ts +1168 -0
- package/build/schemas/views-schemas.js +221 -0
- package/build/schemas/views-schemas.js.map +1 -0
- package/build/schemas/webhook-schemas.d.ts +1127 -0
- package/build/schemas/webhook-schemas.js +137 -0
- package/build/schemas/webhook-schemas.js.map +1 -0
- package/build/services/lists.service.d.ts +1 -0
- package/build/services/lists.service.js +2 -0
- package/build/services/lists.service.js.map +1 -0
- package/build/tools/attachments-tools-setup.d.ts +2 -0
- package/build/tools/attachments-tools-setup.js +387 -0
- package/build/tools/attachments-tools-setup.js.map +1 -0
- package/build/tools/chat-tools-enhanced.d.ts +5 -0
- package/build/tools/chat-tools-enhanced.js +396 -0
- package/build/tools/chat-tools-enhanced.js.map +1 -0
- package/build/tools/chat-tools.d.ts +2 -0
- package/build/tools/chat-tools.js +614 -0
- package/build/tools/chat-tools.js.map +1 -0
- package/build/tools/checklist-tools.d.ts +2 -0
- package/build/tools/checklist-tools.js +139 -0
- package/build/tools/checklist-tools.js.map +1 -0
- package/build/tools/comment-tools.d.ts +2 -0
- package/build/tools/comment-tools.js +295 -0
- package/build/tools/comment-tools.js.map +1 -0
- package/build/tools/custom-field-tools.d.ts +2 -0
- package/build/tools/custom-field-tools.js +578 -0
- package/build/tools/custom-field-tools.js.map +1 -0
- package/build/tools/dependencies-tools-setup.d.ts +2 -0
- package/build/tools/dependencies-tools-setup.js +319 -0
- package/build/tools/dependencies-tools-setup.js.map +1 -0
- package/build/tools/doc-tools-enhanced.d.ts +2 -0
- package/build/tools/doc-tools-enhanced.js +417 -0
- package/build/tools/doc-tools-enhanced.js.map +1 -0
- package/build/tools/doc-tools.d.ts +2 -0
- package/build/tools/doc-tools.js +109 -0
- package/build/tools/doc-tools.js.map +1 -0
- package/build/tools/goals-tools.d.ts +2 -0
- package/build/tools/goals-tools.js +422 -0
- package/build/tools/goals-tools.js.map +1 -0
- package/build/tools/helper-tools.d.ts +2 -0
- package/build/tools/helper-tools.js +363 -0
- package/build/tools/helper-tools.js.map +1 -0
- package/build/tools/space-tools.d.ts +2 -0
- package/build/tools/space-tools.js +45 -0
- package/build/tools/space-tools.js.map +1 -0
- package/build/tools/task-tools.d.ts +2 -0
- package/build/tools/task-tools.js +415 -0
- package/build/tools/task-tools.js.map +1 -0
- package/build/tools/time-tracking-tools.d.ts +2 -0
- package/build/tools/time-tracking-tools.js +329 -0
- package/build/tools/time-tracking-tools.js.map +1 -0
- package/build/tools/views-tools-setup.d.ts +2 -0
- package/build/tools/views-tools-setup.js +358 -0
- package/build/tools/views-tools-setup.js.map +1 -0
- package/build/tools/webhook-tools-setup.d.ts +2 -0
- package/build/tools/webhook-tools-setup.js +304 -0
- package/build/tools/webhook-tools-setup.js.map +1 -0
- package/build/tools/webhook-tools.d.ts +4 -0
- package/build/tools/webhook-tools.js +345 -0
- package/build/tools/webhook-tools.js.map +1 -0
- package/build/utils/clickup-comment-formatter.d.ts +124 -0
- package/build/utils/clickup-comment-formatter.js +504 -0
- package/build/utils/clickup-comment-formatter.js.map +1 -0
- package/build/utils/context-aware-suggestions.d.ts +45 -0
- package/build/utils/context-aware-suggestions.js +360 -0
- package/build/utils/context-aware-suggestions.js.map +1 -0
- package/build/utils/error-handling.d.ts +140 -0
- package/build/utils/error-handling.js +392 -0
- package/build/utils/error-handling.js.map +1 -0
- package/build/utils/markdown-styling.d.ts +40 -0
- package/build/utils/markdown-styling.js +344 -0
- package/build/utils/markdown-styling.js.map +1 -0
- package/build/utils/markdown.d.ts +54 -0
- package/build/utils/markdown.js +243 -0
- package/build/utils/markdown.js.map +1 -0
- package/build/utils/security.d.ts +79 -0
- package/build/utils/security.js +303 -0
- package/build/utils/security.js.map +1 -0
- package/build/utils/tool-efficiency.d.ts +59 -0
- package/build/utils/tool-efficiency.js +247 -0
- package/build/utils/tool-efficiency.js.map +1 -0
- package/package.json +130 -0
|
@@ -0,0 +1,578 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { createClickUpClient } from '../clickup-client/index.js';
|
|
3
|
+
import { createEnhancedCustomFieldsClient } from '../clickup-client/custom-fields-enhanced.js';
|
|
4
|
+
import { /* CustomFieldToolSchemas, */ DropdownOptionSchema } from '../schemas/custom-field-schemas.js';
|
|
5
|
+
// Create clients
|
|
6
|
+
const clickUpClient = createClickUpClient();
|
|
7
|
+
const customFieldsClient = createEnhancedCustomFieldsClient(clickUpClient);
|
|
8
|
+
export function setupCustomFieldTools(server) {
|
|
9
|
+
// ========================================
|
|
10
|
+
// GET CUSTOM FIELDS OPERATIONS
|
|
11
|
+
// ========================================
|
|
12
|
+
server.tool('get_custom_fields', 'Get custom fields for a ClickUp list, folder, or space. Returns all field definitions with their configurations.', {
|
|
13
|
+
container_type: z.enum(['list', 'folder', 'space']).describe('The type of container to get custom fields from'),
|
|
14
|
+
container_id: z.string().min(1).describe('The ID of the container (list, folder, or space)'),
|
|
15
|
+
include_deleted: z.boolean().optional().default(false).describe('Whether to include deleted custom fields')
|
|
16
|
+
}, async ({ container_type, container_id, include_deleted }) => {
|
|
17
|
+
try {
|
|
18
|
+
let fields;
|
|
19
|
+
switch (container_type) {
|
|
20
|
+
case 'list':
|
|
21
|
+
fields = await customFieldsClient.getListCustomFields(container_id, { include_deleted });
|
|
22
|
+
break;
|
|
23
|
+
case 'folder':
|
|
24
|
+
fields = await customFieldsClient.getFolderCustomFields(container_id, { include_deleted });
|
|
25
|
+
break;
|
|
26
|
+
case 'space':
|
|
27
|
+
fields = await customFieldsClient.getSpaceCustomFields(container_id, { include_deleted });
|
|
28
|
+
break;
|
|
29
|
+
default:
|
|
30
|
+
throw new Error('Invalid container type');
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
content: [{
|
|
34
|
+
type: 'text',
|
|
35
|
+
text: `Custom fields for ${container_type} ${container_id}:\n\n${JSON.stringify(fields, null, 2)}`
|
|
36
|
+
}]
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
console.error('Error getting custom fields:', error);
|
|
41
|
+
return {
|
|
42
|
+
content: [{ type: 'text', text: `Error getting custom fields: ${error.message}` }],
|
|
43
|
+
isError: true
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
// ========================================
|
|
48
|
+
// CREATE CUSTOM FIELD OPERATIONS
|
|
49
|
+
// ========================================
|
|
50
|
+
server.tool('create_custom_field', 'Create a new custom field in a ClickUp list, folder, or space. Supports all field types with type-specific configurations.', {
|
|
51
|
+
container_type: z.enum(['list', 'folder', 'space']).describe('The type of container to create the custom field in'),
|
|
52
|
+
container_id: z.string().min(1).describe('The ID of the container (list, folder, or space)'),
|
|
53
|
+
name: z.string().min(1).max(255).describe('The name of the custom field'),
|
|
54
|
+
type: z.enum([
|
|
55
|
+
'text', 'textarea',
|
|
56
|
+
'number', 'currency',
|
|
57
|
+
'date',
|
|
58
|
+
'drop_down', 'labels',
|
|
59
|
+
'checkbox',
|
|
60
|
+
'url', 'email', 'phone',
|
|
61
|
+
'rating', 'progress',
|
|
62
|
+
'task_relationship'
|
|
63
|
+
]).describe('The type of custom field to create'),
|
|
64
|
+
type_config: z.record(z.any()).optional().describe('Type-specific configuration object'),
|
|
65
|
+
required: z.boolean().optional().default(false).describe('Whether the field is required'),
|
|
66
|
+
hide_from_guests: z.boolean().optional().default(false).describe('Whether to hide the field from guests')
|
|
67
|
+
}, async ({ container_type, container_id, name, type, type_config, required, hide_from_guests }) => {
|
|
68
|
+
try {
|
|
69
|
+
// Get default configuration for field type if not provided
|
|
70
|
+
const finalTypeConfig = type_config || customFieldsClient.getFieldTypeTemplate(type);
|
|
71
|
+
const fieldParams = {
|
|
72
|
+
name,
|
|
73
|
+
type: type,
|
|
74
|
+
type_config: finalTypeConfig,
|
|
75
|
+
required,
|
|
76
|
+
hide_from_guests
|
|
77
|
+
};
|
|
78
|
+
let field;
|
|
79
|
+
switch (container_type) {
|
|
80
|
+
case 'list':
|
|
81
|
+
field = await customFieldsClient.createListCustomField(container_id, fieldParams);
|
|
82
|
+
break;
|
|
83
|
+
case 'folder':
|
|
84
|
+
field = await customFieldsClient.createFolderCustomField(container_id, fieldParams);
|
|
85
|
+
break;
|
|
86
|
+
case 'space':
|
|
87
|
+
field = await customFieldsClient.createSpaceCustomField(container_id, fieldParams);
|
|
88
|
+
break;
|
|
89
|
+
default:
|
|
90
|
+
throw new Error('Invalid container type');
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
content: [{
|
|
94
|
+
type: 'text',
|
|
95
|
+
text: `Custom field created successfully in ${container_type} ${container_id}!\n\n${JSON.stringify(field, null, 2)}`
|
|
96
|
+
}]
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
console.error('Error creating custom field:', error);
|
|
101
|
+
return {
|
|
102
|
+
content: [{ type: 'text', text: `Error creating custom field: ${error.message}` }],
|
|
103
|
+
isError: true
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
// ========================================
|
|
108
|
+
// UPDATE CUSTOM FIELD OPERATIONS
|
|
109
|
+
// ========================================
|
|
110
|
+
server.tool('update_custom_field', 'Update an existing custom field. Can modify name, configuration, required status, and guest visibility.', {
|
|
111
|
+
field_id: z.string().min(1).describe('The ID of the custom field to update'),
|
|
112
|
+
name: z.string().min(1).max(255).optional().describe('New name for the custom field'),
|
|
113
|
+
type_config: z.record(z.any()).optional().describe('Updated type-specific configuration'),
|
|
114
|
+
required: z.boolean().optional().describe('Whether the field should be required'),
|
|
115
|
+
hide_from_guests: z.boolean().optional().describe('Whether to hide the field from guests')
|
|
116
|
+
}, async ({ field_id, name, type_config, required, hide_from_guests }) => {
|
|
117
|
+
try {
|
|
118
|
+
// Validate that at least one field is being updated
|
|
119
|
+
if (name === undefined && type_config === undefined &&
|
|
120
|
+
required === undefined && hide_from_guests === undefined) {
|
|
121
|
+
return {
|
|
122
|
+
content: [{ type: 'text', text: 'Error: Must specify at least one field to update (name, type_config, required, or hide_from_guests)' }],
|
|
123
|
+
isError: true
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
const updatedField = await customFieldsClient.updateCustomField(field_id, {
|
|
127
|
+
name,
|
|
128
|
+
type_config,
|
|
129
|
+
required,
|
|
130
|
+
hide_from_guests
|
|
131
|
+
});
|
|
132
|
+
return {
|
|
133
|
+
content: [{
|
|
134
|
+
type: 'text',
|
|
135
|
+
text: `Custom field updated successfully!\n\n${JSON.stringify(updatedField, null, 2)}`
|
|
136
|
+
}]
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
console.error('Error updating custom field:', error);
|
|
141
|
+
return {
|
|
142
|
+
content: [{ type: 'text', text: `Error updating custom field: ${error.message}` }],
|
|
143
|
+
isError: true
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
// ========================================
|
|
148
|
+
// DELETE CUSTOM FIELD OPERATIONS
|
|
149
|
+
// ========================================
|
|
150
|
+
server.tool('delete_custom_field', 'Delete a custom field from ClickUp. This will remove the field and all its values from tasks. This action cannot be undone.', {
|
|
151
|
+
field_id: z.string().min(1).describe('The ID of the custom field to delete')
|
|
152
|
+
}, async ({ field_id }) => {
|
|
153
|
+
try {
|
|
154
|
+
await customFieldsClient.deleteCustomField(field_id);
|
|
155
|
+
return {
|
|
156
|
+
content: [{
|
|
157
|
+
type: 'text',
|
|
158
|
+
text: `Custom field ${field_id} deleted successfully. All field values have been removed from tasks.`
|
|
159
|
+
}]
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
console.error('Error deleting custom field:', error);
|
|
164
|
+
return {
|
|
165
|
+
content: [{ type: 'text', text: `Error deleting custom field: ${error.message}` }],
|
|
166
|
+
isError: true
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
// ========================================
|
|
171
|
+
// CUSTOM FIELD VALUE OPERATIONS
|
|
172
|
+
// ========================================
|
|
173
|
+
server.tool('set_custom_field_value', 'Set a custom field value on a ClickUp task. The value format depends on the field type.', {
|
|
174
|
+
task_id: z.string().min(1).describe('The ID of the task to set the custom field value on'),
|
|
175
|
+
field_id: z.string().min(1).describe('The ID of the custom field'),
|
|
176
|
+
value: z.any().describe('The value to set (format depends on field type)')
|
|
177
|
+
}, async ({ task_id, field_id, value }) => {
|
|
178
|
+
try {
|
|
179
|
+
await customFieldsClient.setCustomFieldValue(task_id, field_id, value);
|
|
180
|
+
return {
|
|
181
|
+
content: [{
|
|
182
|
+
type: 'text',
|
|
183
|
+
text: `Custom field value set successfully on task ${task_id} for field ${field_id}.`
|
|
184
|
+
}]
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
console.error('Error setting custom field value:', error);
|
|
189
|
+
return {
|
|
190
|
+
content: [{ type: 'text', text: `Error setting custom field value: ${error.message}` }],
|
|
191
|
+
isError: true
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
server.tool('remove_custom_field_value', 'Remove a custom field value from a ClickUp task. This clears the field value but keeps the field definition.', {
|
|
196
|
+
task_id: z.string().min(1).describe('The ID of the task to remove the custom field value from'),
|
|
197
|
+
field_id: z.string().min(1).describe('The ID of the custom field to clear')
|
|
198
|
+
}, async ({ task_id, field_id }) => {
|
|
199
|
+
try {
|
|
200
|
+
await customFieldsClient.removeCustomFieldValue(task_id, field_id);
|
|
201
|
+
return {
|
|
202
|
+
content: [{
|
|
203
|
+
type: 'text',
|
|
204
|
+
text: `Custom field value removed successfully from task ${task_id} for field ${field_id}.`
|
|
205
|
+
}]
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
console.error('Error removing custom field value:', error);
|
|
210
|
+
return {
|
|
211
|
+
content: [{ type: 'text', text: `Error removing custom field value: ${error.message}` }],
|
|
212
|
+
isError: true
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
server.tool('get_custom_field_value', 'Get a custom field value from a ClickUp task. Returns the current value and field information.', {
|
|
217
|
+
task_id: z.string().min(1).describe('The ID of the task to get the custom field value from'),
|
|
218
|
+
field_id: z.string().min(1).describe('The ID of the custom field to retrieve')
|
|
219
|
+
}, async ({ task_id, field_id }) => {
|
|
220
|
+
try {
|
|
221
|
+
const value = await customFieldsClient.getCustomFieldValue(task_id, field_id);
|
|
222
|
+
return {
|
|
223
|
+
content: [{
|
|
224
|
+
type: 'text',
|
|
225
|
+
text: `Custom field value for task ${task_id}, field ${field_id}:\n\n${JSON.stringify(value, null, 2)}`
|
|
226
|
+
}]
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
console.error('Error getting custom field value:', error);
|
|
231
|
+
return {
|
|
232
|
+
content: [{ type: 'text', text: `Error getting custom field value: ${error.message}` }],
|
|
233
|
+
isError: true
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
server.tool('bulk_set_custom_field_values', 'Set multiple custom field values on a ClickUp task in a single operation. More efficient than setting values individually.', {
|
|
238
|
+
task_id: z.string().min(1).describe('The ID of the task to set custom field values on'),
|
|
239
|
+
field_values: z.array(z.object({
|
|
240
|
+
field_id: z.string().min(1).describe('The ID of the custom field'),
|
|
241
|
+
value: z.any().describe('The value to set (format depends on field type)')
|
|
242
|
+
})).min(1).describe('Array of field ID and value pairs to set')
|
|
243
|
+
}, async ({ task_id, field_values }) => {
|
|
244
|
+
try {
|
|
245
|
+
// Ensure all field_values have the required properties
|
|
246
|
+
const validatedFieldValues = field_values.map(fv => ({
|
|
247
|
+
field_id: fv.field_id,
|
|
248
|
+
value: fv.value
|
|
249
|
+
}));
|
|
250
|
+
const results = await customFieldsClient.bulkSetCustomFieldValues(task_id, validatedFieldValues);
|
|
251
|
+
return {
|
|
252
|
+
content: [{
|
|
253
|
+
type: 'text',
|
|
254
|
+
text: `Bulk custom field values set successfully on task ${task_id}!\n\nResults:\n${JSON.stringify(results, null, 2)}`
|
|
255
|
+
}]
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
console.error('Error bulk setting custom field values:', error);
|
|
260
|
+
return {
|
|
261
|
+
content: [{ type: 'text', text: `Error bulk setting custom field values: ${error.message}` }],
|
|
262
|
+
isError: true
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
server.tool('get_task_custom_field_values', 'Get all custom field values for a ClickUp task. Returns all field values with their definitions.', {
|
|
267
|
+
task_id: z.string().min(1).describe('The ID of the task to get custom field values from')
|
|
268
|
+
}, async ({ task_id }) => {
|
|
269
|
+
try {
|
|
270
|
+
const values = await customFieldsClient.getTaskCustomFieldValues(task_id);
|
|
271
|
+
return {
|
|
272
|
+
content: [{
|
|
273
|
+
type: 'text',
|
|
274
|
+
text: `All custom field values for task ${task_id}:\n\n${JSON.stringify(values, null, 2)}`
|
|
275
|
+
}]
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
console.error('Error getting task custom field values:', error);
|
|
280
|
+
return {
|
|
281
|
+
content: [{ type: 'text', text: `Error getting task custom field values: ${error.message}` }],
|
|
282
|
+
isError: true
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
// ========================================
|
|
287
|
+
// HELPER TOOLS FOR FIELD CREATION
|
|
288
|
+
// ========================================
|
|
289
|
+
server.tool('create_text_custom_field', 'Create a text custom field with optional default value and placeholder.', {
|
|
290
|
+
container_type: z.enum(['list', 'folder', 'space']).describe('The type of container'),
|
|
291
|
+
container_id: z.string().min(1).describe('The ID of the container'),
|
|
292
|
+
name: z.string().min(1).max(255).describe('The name of the text field'),
|
|
293
|
+
default_value: z.string().optional().describe('Default text value'),
|
|
294
|
+
placeholder: z.string().optional().describe('Placeholder text'),
|
|
295
|
+
required: z.boolean().optional().default(false).describe('Whether the field is required'),
|
|
296
|
+
hide_from_guests: z.boolean().optional().default(false).describe('Whether to hide from guests')
|
|
297
|
+
}, async ({ container_type, container_id, name, default_value, placeholder, required, hide_from_guests }) => {
|
|
298
|
+
try {
|
|
299
|
+
const type_config = {
|
|
300
|
+
default: default_value,
|
|
301
|
+
placeholder
|
|
302
|
+
};
|
|
303
|
+
const fieldParams = {
|
|
304
|
+
name,
|
|
305
|
+
type: 'text',
|
|
306
|
+
type_config,
|
|
307
|
+
required,
|
|
308
|
+
hide_from_guests
|
|
309
|
+
};
|
|
310
|
+
let field;
|
|
311
|
+
switch (container_type) {
|
|
312
|
+
case 'list':
|
|
313
|
+
field = await customFieldsClient.createListCustomField(container_id, fieldParams);
|
|
314
|
+
break;
|
|
315
|
+
case 'folder':
|
|
316
|
+
field = await customFieldsClient.createFolderCustomField(container_id, fieldParams);
|
|
317
|
+
break;
|
|
318
|
+
case 'space':
|
|
319
|
+
field = await customFieldsClient.createSpaceCustomField(container_id, fieldParams);
|
|
320
|
+
break;
|
|
321
|
+
}
|
|
322
|
+
return {
|
|
323
|
+
content: [{
|
|
324
|
+
type: 'text',
|
|
325
|
+
text: `Text custom field created successfully!\n\n${JSON.stringify(field, null, 2)}`
|
|
326
|
+
}]
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
catch (error) {
|
|
330
|
+
console.error('Error creating text custom field:', error);
|
|
331
|
+
return {
|
|
332
|
+
content: [{ type: 'text', text: `Error creating text custom field: ${error.message}` }],
|
|
333
|
+
isError: true
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
});
|
|
337
|
+
server.tool('create_dropdown_custom_field', 'Create a dropdown custom field with specified options.', {
|
|
338
|
+
container_type: z.enum(['list', 'folder', 'space']).describe('The type of container'),
|
|
339
|
+
container_id: z.string().min(1).describe('The ID of the container'),
|
|
340
|
+
name: z.string().min(1).max(255).describe('The name of the dropdown field'),
|
|
341
|
+
options: z.array(DropdownOptionSchema).min(1).describe('Array of dropdown options'),
|
|
342
|
+
default_option_index: z.number().min(0).optional().describe('Index of default selected option'),
|
|
343
|
+
required: z.boolean().optional().default(false).describe('Whether the field is required'),
|
|
344
|
+
hide_from_guests: z.boolean().optional().default(false).describe('Whether to hide from guests')
|
|
345
|
+
}, async ({ container_type, container_id, name, options, default_option_index, required, hide_from_guests }) => {
|
|
346
|
+
try {
|
|
347
|
+
const type_config = {
|
|
348
|
+
options: options.map((option, index) => ({
|
|
349
|
+
...option,
|
|
350
|
+
orderindex: option.orderindex ?? index
|
|
351
|
+
})),
|
|
352
|
+
default: default_option_index
|
|
353
|
+
};
|
|
354
|
+
const fieldParams = {
|
|
355
|
+
name,
|
|
356
|
+
type: 'drop_down',
|
|
357
|
+
type_config,
|
|
358
|
+
required,
|
|
359
|
+
hide_from_guests
|
|
360
|
+
};
|
|
361
|
+
let field;
|
|
362
|
+
switch (container_type) {
|
|
363
|
+
case 'list':
|
|
364
|
+
field = await customFieldsClient.createListCustomField(container_id, fieldParams);
|
|
365
|
+
break;
|
|
366
|
+
case 'folder':
|
|
367
|
+
field = await customFieldsClient.createFolderCustomField(container_id, fieldParams);
|
|
368
|
+
break;
|
|
369
|
+
case 'space':
|
|
370
|
+
field = await customFieldsClient.createSpaceCustomField(container_id, fieldParams);
|
|
371
|
+
break;
|
|
372
|
+
}
|
|
373
|
+
return {
|
|
374
|
+
content: [{
|
|
375
|
+
type: 'text',
|
|
376
|
+
text: `Dropdown custom field created successfully with ${options.length} options!\n\n${JSON.stringify(field, null, 2)}`
|
|
377
|
+
}]
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
catch (error) {
|
|
381
|
+
console.error('Error creating dropdown custom field:', error);
|
|
382
|
+
return {
|
|
383
|
+
content: [{ type: 'text', text: `Error creating dropdown custom field: ${error.message}` }],
|
|
384
|
+
isError: true
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
});
|
|
388
|
+
server.tool('create_number_custom_field', 'Create a number custom field with optional precision and default value.', {
|
|
389
|
+
container_type: z.enum(['list', 'folder', 'space']).describe('The type of container'),
|
|
390
|
+
container_id: z.string().min(1).describe('The ID of the container'),
|
|
391
|
+
name: z.string().min(1).max(255).describe('The name of the number field'),
|
|
392
|
+
default_value: z.number().optional().describe('Default numeric value'),
|
|
393
|
+
precision: z.number().min(0).max(8).optional().default(0).describe('Number of decimal places (0-8)'),
|
|
394
|
+
required: z.boolean().optional().default(false).describe('Whether the field is required'),
|
|
395
|
+
hide_from_guests: z.boolean().optional().default(false).describe('Whether to hide from guests')
|
|
396
|
+
}, async ({ container_type, container_id, name, default_value, precision, required, hide_from_guests }) => {
|
|
397
|
+
try {
|
|
398
|
+
const type_config = {
|
|
399
|
+
default: default_value,
|
|
400
|
+
precision
|
|
401
|
+
};
|
|
402
|
+
const fieldParams = {
|
|
403
|
+
name,
|
|
404
|
+
type: 'number',
|
|
405
|
+
type_config,
|
|
406
|
+
required,
|
|
407
|
+
hide_from_guests
|
|
408
|
+
};
|
|
409
|
+
let field;
|
|
410
|
+
switch (container_type) {
|
|
411
|
+
case 'list':
|
|
412
|
+
field = await customFieldsClient.createListCustomField(container_id, fieldParams);
|
|
413
|
+
break;
|
|
414
|
+
case 'folder':
|
|
415
|
+
field = await customFieldsClient.createFolderCustomField(container_id, fieldParams);
|
|
416
|
+
break;
|
|
417
|
+
case 'space':
|
|
418
|
+
field = await customFieldsClient.createSpaceCustomField(container_id, fieldParams);
|
|
419
|
+
break;
|
|
420
|
+
}
|
|
421
|
+
return {
|
|
422
|
+
content: [{
|
|
423
|
+
type: 'text',
|
|
424
|
+
text: `Number custom field created successfully with ${precision} decimal places!\n\n${JSON.stringify(field, null, 2)}`
|
|
425
|
+
}]
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
catch (error) {
|
|
429
|
+
console.error('Error creating number custom field:', error);
|
|
430
|
+
return {
|
|
431
|
+
content: [{ type: 'text', text: `Error creating number custom field: ${error.message}` }],
|
|
432
|
+
isError: true
|
|
433
|
+
};
|
|
434
|
+
}
|
|
435
|
+
});
|
|
436
|
+
server.tool('create_date_custom_field', 'Create a date custom field with optional time inclusion.', {
|
|
437
|
+
container_type: z.enum(['list', 'folder', 'space']).describe('The type of container'),
|
|
438
|
+
container_id: z.string().min(1).describe('The ID of the container'),
|
|
439
|
+
name: z.string().min(1).max(255).describe('The name of the date field'),
|
|
440
|
+
include_time: z.boolean().optional().default(false).describe('Whether to include time in the date field'),
|
|
441
|
+
default_value: z.number().positive().optional().describe('Default date value (Unix timestamp)'),
|
|
442
|
+
required: z.boolean().optional().default(false).describe('Whether the field is required'),
|
|
443
|
+
hide_from_guests: z.boolean().optional().default(false).describe('Whether to hide from guests')
|
|
444
|
+
}, async ({ container_type, container_id, name, include_time, default_value, required, hide_from_guests }) => {
|
|
445
|
+
try {
|
|
446
|
+
const type_config = {
|
|
447
|
+
include_time,
|
|
448
|
+
default: default_value
|
|
449
|
+
};
|
|
450
|
+
const fieldParams = {
|
|
451
|
+
name,
|
|
452
|
+
type: 'date',
|
|
453
|
+
type_config,
|
|
454
|
+
required,
|
|
455
|
+
hide_from_guests
|
|
456
|
+
};
|
|
457
|
+
let field;
|
|
458
|
+
switch (container_type) {
|
|
459
|
+
case 'list':
|
|
460
|
+
field = await customFieldsClient.createListCustomField(container_id, fieldParams);
|
|
461
|
+
break;
|
|
462
|
+
case 'folder':
|
|
463
|
+
field = await customFieldsClient.createFolderCustomField(container_id, fieldParams);
|
|
464
|
+
break;
|
|
465
|
+
case 'space':
|
|
466
|
+
field = await customFieldsClient.createSpaceCustomField(container_id, fieldParams);
|
|
467
|
+
break;
|
|
468
|
+
}
|
|
469
|
+
return {
|
|
470
|
+
content: [{
|
|
471
|
+
type: 'text',
|
|
472
|
+
text: `Date custom field created successfully${include_time ? ' with time support' : ''}!\n\n${JSON.stringify(field, null, 2)}`
|
|
473
|
+
}]
|
|
474
|
+
};
|
|
475
|
+
}
|
|
476
|
+
catch (error) {
|
|
477
|
+
console.error('Error creating date custom field:', error);
|
|
478
|
+
return {
|
|
479
|
+
content: [{ type: 'text', text: `Error creating date custom field: ${error.message}` }],
|
|
480
|
+
isError: true
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
});
|
|
484
|
+
server.tool('create_checkbox_custom_field', 'Create a checkbox (boolean) custom field with optional default value.', {
|
|
485
|
+
container_type: z.enum(['list', 'folder', 'space']).describe('The type of container'),
|
|
486
|
+
container_id: z.string().min(1).describe('The ID of the container'),
|
|
487
|
+
name: z.string().min(1).max(255).describe('The name of the checkbox field'),
|
|
488
|
+
default_value: z.boolean().optional().default(false).describe('Default checkbox state'),
|
|
489
|
+
required: z.boolean().optional().default(false).describe('Whether the field is required'),
|
|
490
|
+
hide_from_guests: z.boolean().optional().default(false).describe('Whether to hide from guests')
|
|
491
|
+
}, async ({ container_type, container_id, name, default_value, required, hide_from_guests }) => {
|
|
492
|
+
try {
|
|
493
|
+
const type_config = {
|
|
494
|
+
default: default_value
|
|
495
|
+
};
|
|
496
|
+
const fieldParams = {
|
|
497
|
+
name,
|
|
498
|
+
type: 'checkbox',
|
|
499
|
+
type_config,
|
|
500
|
+
required,
|
|
501
|
+
hide_from_guests
|
|
502
|
+
};
|
|
503
|
+
let field;
|
|
504
|
+
switch (container_type) {
|
|
505
|
+
case 'list':
|
|
506
|
+
field = await customFieldsClient.createListCustomField(container_id, fieldParams);
|
|
507
|
+
break;
|
|
508
|
+
case 'folder':
|
|
509
|
+
field = await customFieldsClient.createFolderCustomField(container_id, fieldParams);
|
|
510
|
+
break;
|
|
511
|
+
case 'space':
|
|
512
|
+
field = await customFieldsClient.createSpaceCustomField(container_id, fieldParams);
|
|
513
|
+
break;
|
|
514
|
+
}
|
|
515
|
+
return {
|
|
516
|
+
content: [{
|
|
517
|
+
type: 'text',
|
|
518
|
+
text: `Checkbox custom field created successfully!\n\n${JSON.stringify(field, null, 2)}`
|
|
519
|
+
}]
|
|
520
|
+
};
|
|
521
|
+
}
|
|
522
|
+
catch (error) {
|
|
523
|
+
console.error('Error creating checkbox custom field:', error);
|
|
524
|
+
return {
|
|
525
|
+
content: [{ type: 'text', text: `Error creating checkbox custom field: ${error.message}` }],
|
|
526
|
+
isError: true
|
|
527
|
+
};
|
|
528
|
+
}
|
|
529
|
+
});
|
|
530
|
+
// ========================================
|
|
531
|
+
// FIELD VALUE VALIDATION HELPER
|
|
532
|
+
// ========================================
|
|
533
|
+
server.tool('validate_custom_field_value', 'Validate a custom field value against its field type and configuration. Useful for checking values before setting them.', {
|
|
534
|
+
field_id: z.string().min(1).describe('The ID of the custom field'),
|
|
535
|
+
container_type: z.enum(['list', 'folder', 'space']).describe('The type of container the field belongs to'),
|
|
536
|
+
container_id: z.string().min(1).describe('The ID of the container'),
|
|
537
|
+
value: z.any().describe('The value to validate')
|
|
538
|
+
}, async ({ field_id, container_type, container_id, value }) => {
|
|
539
|
+
try {
|
|
540
|
+
// Get the field definition first
|
|
541
|
+
let fields;
|
|
542
|
+
switch (container_type) {
|
|
543
|
+
case 'list':
|
|
544
|
+
fields = await customFieldsClient.getListCustomFields(container_id);
|
|
545
|
+
break;
|
|
546
|
+
case 'folder':
|
|
547
|
+
fields = await customFieldsClient.getFolderCustomFields(container_id);
|
|
548
|
+
break;
|
|
549
|
+
case 'space':
|
|
550
|
+
fields = await customFieldsClient.getSpaceCustomFields(container_id);
|
|
551
|
+
break;
|
|
552
|
+
}
|
|
553
|
+
const field = fields.find(f => f.id === field_id);
|
|
554
|
+
if (!field) {
|
|
555
|
+
return {
|
|
556
|
+
content: [{ type: 'text', text: `Error: Custom field ${field_id} not found in ${container_type} ${container_id}` }],
|
|
557
|
+
isError: true
|
|
558
|
+
};
|
|
559
|
+
}
|
|
560
|
+
// Validate the value
|
|
561
|
+
const isValid = customFieldsClient.validateFieldValue(field, value);
|
|
562
|
+
return {
|
|
563
|
+
content: [{
|
|
564
|
+
type: 'text',
|
|
565
|
+
text: `Validation result for field "${field.name}" (${field.type}):\n\nValue: ${JSON.stringify(value)}\nValid: ${isValid}\n\nField Configuration:\n${JSON.stringify(field.type_config, null, 2)}`
|
|
566
|
+
}]
|
|
567
|
+
};
|
|
568
|
+
}
|
|
569
|
+
catch (error) {
|
|
570
|
+
console.error('Error validating custom field value:', error);
|
|
571
|
+
return {
|
|
572
|
+
content: [{ type: 'text', text: `Error validating custom field value: ${error.message}` }],
|
|
573
|
+
isError: true
|
|
574
|
+
};
|
|
575
|
+
}
|
|
576
|
+
});
|
|
577
|
+
}
|
|
578
|
+
//# sourceMappingURL=custom-field-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-field-tools.js","sourceRoot":"","sources":["../../src/tools/custom-field-tools.ts"],"names":[],"mappings":"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"}
|