clickup-mcp-server
Version:
A Model Context Protocol (MCP) server that provides a standardized interface for AI assistants to interact with the ClickUp API
139 lines • 6.63 kB
JavaScript
import { z } from 'zod';
import { createClickUpClient } from '../clickup-client/index.js';
import { createChecklistsClient } from '../clickup-client/checklists.js';
// Create clients
const clickUpClient = createClickUpClient();
const checklistsClient = createChecklistsClient(clickUpClient);
export function setupChecklistTools(server) {
// Register create_checklist tool
server.tool('create_checklist', 'Create a new checklist in a ClickUp task. Returns the created checklist details.', {
task_id: z.string().describe('The ID of the task to create the checklist in'),
name: z.string().describe('The name of the checklist')
}, async ({ task_id, name }) => {
try {
const checklist = await checklistsClient.createChecklist(task_id, { name });
return {
content: [{ type: 'text', text: JSON.stringify(checklist, null, 2) }]
};
}
catch (error) {
console.error('Error creating checklist:', error);
return {
content: [{ type: 'text', text: `Error creating checklist: ${error.message}` }],
isError: true
};
}
});
// Register update_checklist tool
server.tool('update_checklist', 'Update an existing ClickUp checklist\'s name.', {
checklist_id: z.string().describe('The ID of the checklist to update'),
name: z.string().describe('The new name of the checklist')
}, async ({ checklist_id, name }) => {
try {
const checklist = await checklistsClient.updateChecklist(checklist_id, { name });
return {
content: [{ type: 'text', text: JSON.stringify(checklist, null, 2) }]
};
}
catch (error) {
console.error('Error updating checklist:', error);
return {
content: [{ type: 'text', text: `Error updating checklist: ${error.message}` }],
isError: true
};
}
});
// Register delete_checklist tool
server.tool('delete_checklist', 'Delete a checklist from a ClickUp task. Removes the checklist and all its items.', {
checklist_id: z.string().describe('The ID of the checklist to delete')
}, async ({ checklist_id }) => {
try {
const result = await checklistsClient.deleteChecklist(checklist_id);
return {
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }]
};
}
catch (error) {
console.error('Error deleting checklist:', error);
return {
content: [{ type: 'text', text: `Error deleting checklist: ${error.message}` }],
isError: true
};
}
});
// Register create_checklist_item tool
server.tool('create_checklist_item', 'Create a new item in a ClickUp checklist. Supports optional assignee and resolved status.', {
checklist_id: z.string().describe('The ID of the checklist to create the item in'),
name: z.string().describe('The name of the checklist item'),
assignee: z.number().optional().describe('The ID of the user to assign to the checklist item'),
resolved: z.boolean().optional().describe('Whether the checklist item is resolved')
}, async ({ checklist_id, name, assignee, resolved }) => {
try {
const itemParams = { name };
if (assignee !== undefined)
itemParams.assignee = assignee;
if (resolved !== undefined)
itemParams.resolved = resolved;
const checklistItem = await checklistsClient.createChecklistItem(checklist_id, itemParams);
return {
content: [{ type: 'text', text: JSON.stringify(checklistItem, null, 2) }]
};
}
catch (error) {
console.error('Error creating checklist item:', error);
return {
content: [{ type: 'text', text: `Error creating checklist item: ${error.message}` }],
isError: true
};
}
});
// Register update_checklist_item tool
server.tool('update_checklist_item', 'Update an existing ClickUp checklist item\'s properties including name, assignee, and resolved status.', {
checklist_id: z.string().describe('The ID of the checklist containing the item'),
checklist_item_id: z.string().describe('The ID of the checklist item to update'),
name: z.string().optional().describe('The new name of the checklist item'),
assignee: z.number().optional().describe('The ID of the user to assign to the checklist item'),
resolved: z.boolean().optional().describe('Whether the checklist item is resolved')
}, async ({ checklist_id, checklist_item_id, name, assignee, resolved }) => {
try {
const itemParams = {};
if (name !== undefined)
itemParams.name = name;
if (assignee !== undefined)
itemParams.assignee = assignee;
if (resolved !== undefined)
itemParams.resolved = resolved;
const checklistItem = await checklistsClient.updateChecklistItem(checklist_id, checklist_item_id, itemParams);
return {
content: [{ type: 'text', text: JSON.stringify(checklistItem, null, 2) }]
};
}
catch (error) {
console.error('Error updating checklist item:', error);
return {
content: [{ type: 'text', text: `Error updating checklist item: ${error.message}` }],
isError: true
};
}
});
// Register delete_checklist_item tool
server.tool('delete_checklist_item', 'Delete an item from a ClickUp checklist.', {
checklist_id: z.string().describe('The ID of the checklist containing the item'),
checklist_item_id: z.string().describe('The ID of the checklist item to delete')
}, async ({ checklist_id, checklist_item_id }) => {
try {
const result = await checklistsClient.deleteChecklistItem(checklist_id, checklist_item_id);
return {
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }]
};
}
catch (error) {
console.error('Error deleting checklist item:', error);
return {
content: [{ type: 'text', text: `Error deleting checklist item: ${error.message}` }],
isError: true
};
}
});
}
//# sourceMappingURL=checklist-tools.js.map