UNPKG

clickup-mcp-server

Version:

A Model Context Protocol (MCP) server that provides a standardized interface for AI assistants to interact with the ClickUp API

103 lines 4.73 kB
import { ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js'; import { createClickUpClient } from '../clickup-client/index.js'; import { createTasksClient } from '../clickup-client/tasks.js'; import { createChecklistsClient } from '../clickup-client/checklists.js'; // Create clients const clickUpClient = createClickUpClient(); const tasksClient = createTasksClient(clickUpClient); const checklistsClient = createChecklistsClient(clickUpClient); export function setupChecklistResources(server) { // Register task checklists resource server.resource('task-checklists', new ResourceTemplate('clickup://task/{task_id}/checklist', { list: undefined }), { description: 'Get all checklists for a specific ClickUp task, including their names, items, and completion status.' }, async (uri, params) => { try { const task_id = params.task_id; // Get the task details const task = await tasksClient.getTask(task_id); // Note: The ClickUp API doesn't return checklists directly with task data // We would need to make a separate call to get checklists for a task // This would need to be implemented in the checklistsClient if API supports it // For now, return an empty array with proper typing const checklists = []; // In a real implementation, we might do something like: // const checklists = await checklistsClient.getChecklistsForTask(task_id); return { contents: [ { uri: uri.toString(), mimeType: 'application/json', text: JSON.stringify({ task_id: task_id, task_name: task.name, checklists: checklists }, null, 2), }, ], }; } catch (error) { console.error('[ChecklistResources] Error fetching checklists:', error); throw new Error(`Error fetching checklists: ${error.message}`); } }); // Register checklist items resource server.resource('checklist-items', new ResourceTemplate('clickup://checklist/{checklist_id}/items', { list: undefined }), { description: 'Get all items in a specific ClickUp checklist, including their names, assignees, and completion status.' }, async (uri, params) => { try { const checklist_id = params.checklist_id; // For now, this is a placeholder as we'd need to implement a method // to get all items for a checklist - we'll need to implement this endpoint // or extract this data from the checklist details // Placeholder for response format const checklistItems = { checklist_id: checklist_id, items: [] }; return { contents: [ { uri: uri.toString(), mimeType: 'application/json', text: JSON.stringify(checklistItems, null, 2), }, ], }; } catch (error) { console.error('[ChecklistResources] Error fetching checklist items:', error); throw new Error(`Error fetching checklist items: ${error.message}`); } }); // Add some example static resources for discoverability server.resource('example-task-checklists', 'clickup://task/86rkjvttt/checklist', { description: 'An example task checklists resource demonstrating the checklist data format.' }, async (uri) => { try { const task_id = '86rkjvttt'; // Get the task details const task = await tasksClient.getTask(task_id); // Placeholder for checklists const checklists = []; return { contents: [ { uri: uri.toString(), mimeType: 'application/json', text: JSON.stringify({ task_id: task_id, task_name: task.name, checklists: checklists }, null, 2), }, ], }; } catch (error) { console.error('[ChecklistResources] Error fetching example checklists:', error); throw new Error(`Error fetching example checklists: ${error.message}`); } }); } //# sourceMappingURL=checklist-resources.js.map