ClickUp MCP Server

by taazkareem
Verified
# ClickUp MCP Server Documentation This document provides detailed information about all available tools, their parameters, and usage examples for the ClickUp MCP Server. ## Table of Contents - [Task Management](#task-management) - [List Management](#list-management) - [Folder Management](#folder-management) - [Tag Management](#tag-management) - [Workspace Organization](#workspace-organization) - [Prompts](#prompts) - [Common Parameters](#common-parameters) - [Error Handling](#error-handling) ## Task Management | Tool | Description | Required Parameters | Optional Parameters | |------|-------------|-------------------|-------------------| | get_tasks | Retrieve tasks from a list | Either `listId` or `listName` | archived, page, order_by, reverse, subtasks, statuses, include_closed, assignees, due_date_gt/lt | | get_task | Get single task details with global lookup | Either `taskId` or `taskName` (list context optional) | `listName` (for disambiguation), `subtasks` | | get_task_comments | Retrieve comments for a task | Either `taskId` or `taskName` | `listName`, `start`, `startId` | | create_task_comment | Add a comment to a task | `commentText` and either `taskId` or (`taskName` + `listName`) | `notifyAll`, `assignee` | | attach_task_file | Attach a file to a task | Either `taskId` or `taskName`, and EITHER `file_data` OR `file_url` | `file_name`, `chunk_*` parameters for large files | | create_task | Create a new task | `name` and either `listId` or `listName` | description, status, priority (1-4), dueDate, startDate, parent | | create_bulk_tasks | Create multiple tasks | `tasks[]` | `listId` or `listName` | | update_task | Modify task properties | Either `taskId` or `taskName` | name, description, status, priority, dueDate, startDate | | update_bulk_tasks | Modify multiple tasks | `tasks[]` with task identifiers | Each task can have: name, description, status, priority, dueDate, startDate, etc. | | delete_task | Remove a task | `taskId` | `taskName`, `listName` | | delete_bulk_tasks | Remove multiple tasks | `tasks[]` with task identifiers | None | | move_task | Move task to another list | Either `taskId` or `taskName`, and either `listId` or `listName` | `sourceListName` | | move_bulk_tasks | Move multiple tasks | `tasks[]` with task identifiers, and target list | None | | duplicate_task | Copy task to another list | Either `taskId` or `taskName`, and either `listId` or `listName` | `sourceListName` | | get_workspace_tasks | Retrieve tasks across the workspace with filtering | At least one filter parameter (tags, list_ids, folder_ids, space_ids, statuses, assignees, or date filters) | page, order_by, reverse | ### Task Parameters - **Priority Levels**: 1 (Urgent/Highest) to 4 (Low) - **Dates**: Unix timestamps in milliseconds - **Status**: Uses list's default if not specified - **Description**: Supports both plain text and markdown - **Files**: Attach files using base64 encoding or URLs - **Subtasks**: - Retrieve subtasks with `subtasks: true` parameter on `get_task` or `get_tasks` - Create subtasks by setting `parent` parameter with parent task ID on `create_task` - Multi-level subtasks are supported (subtasks can have their own subtasks) - **Date Parameters**: - `dueDate`: When the task is due (deadline) - `startDate`: When work on the task should begin - Both support natural language expressions (e.g., "now", "today", "tomorrow at 9am") - Date ranges can be specified using `start of today` and `end of today` - **Global Task Lookup**: - Find tasks by name across the entire workspace without specifying a list - Smart disambiguation when multiple tasks share the same name - Shows context (list, folder, space) for each matching task - Prioritizes most recently updated task when multiple matches exist - Backward compatible with list-specific lookups ### Examples #### Creating a Task **User Prompt:** ``` Create a new task in the "Development Tasks" list called "Implement Authentication". It should be high priority and due on January 1st, 2024. Add these requirements: - OAuth2 support - JWT tokens - Refresh token flow ``` **System Response:** ```json { "listName": "Development Tasks", "name": "Implement Authentication", "markdown_description": "## Requirements\n- OAuth2 support\n- JWT tokens\n- Refresh token flow", "priority": 1, "dueDate": 1703980800000 } ``` #### Creating a Task with Start Date and Due Date **User Prompt:** ``` Create a task called "Database Migration" that starts tomorrow at 9am and is due by the end of the week. It should be in the "Backend Tasks" list. ``` **System Response:** ```json { "listName": "Backend Tasks", "name": "Database Migration", "startDate": "tomorrow at 9am", "dueDate": "end of week" } ``` #### Updating a Task's Start Date **User Prompt:** ``` Change the start date of the "Database Migration" task to next Monday at 8am ``` **System Response:** ```json { "taskName": "Database Migration", "startDate": "next Monday at 8am" } ``` #### Getting Task Comments **User Prompt:** ``` Show me the comments on the "Bug Fix" task. ``` **System Response:** ```json { "taskName": "Bug Fix", "comments": [ { "id": "abcd1234", "comment": "I've identified the root cause. It's related to a race condition in the auth flow.", "comment_text": "I've identified the root cause. It's related to a race condition in the auth flow.", "user": { "id": 1234567, "username": "developer1", "email": "dev1@example.com", "color": "#ff7800" }, "resolved": false, "date": "2024-03-15T10:30:45.000Z" }, { "id": "efgh5678", "comment": "Great work! Could you submit a PR by tomorrow?", "comment_text": "Great work! Could you submit a PR by tomorrow?", "user": { "id": 7654321, "username": "manager1", "email": "manager@example.com", "color": "#0080ff" }, "resolved": false, "date": "2024-03-15T11:15:20.000Z" } ], "totalComments": 2, "pagination": { "hasMore": false } } ``` #### Creating a Task Comment **User Prompt:** ``` Add a comment to the "Bug Fix" task saying "I've fixed the issue by implementing proper mutex locks." ``` **System Response:** ```json { "success": true, "message": "Comment added successfully", "comment": { "id": "ijkl9012", "comment": "I've fixed the issue by implementing proper mutex locks.", "comment_text": "I've fixed the issue by implementing proper mutex locks.", "user": { "id": 1234567, "username": "developer1", "email": "dev1@example.com", "color": "#ff7800" }, "date": "2024-03-16T09:45:30.000Z", "resolved": false } } ``` #### Moving a Task **User Prompt:** ``` Move the "Bug Fix" task from the "Sprint Backlog" list to "Current Sprint" list ``` **System Response:** ```json { "taskName": "Bug Fix", "sourceListName": "Sprint Backlog", "destinationListName": "Current Sprint" } ``` #### Global Task Lookup **User Prompt:** ``` Get details for task "Roadmap Planning" ``` **System Response:** ```json { "taskName": "Roadmap Planning" } ``` **Response for Multiple Matches:** ```json { "matches": [ { "id": "abc123", "name": "🌐 Website Update", "description": "First instance of Website Update task in Programming list", "list": { "name": "Programming", "id": "123" }, "folder": { "name": "Development", "id": "456" }, "space": { "name": "Education", "id": "789" }, "date_updated": "2024-03-15T10:30:45.000Z" }, { "id": "def456", "name": "🌐 Website Update", "description": "Second instance of Website Update task in AI Assistant App list", "list": { "name": "AI Assistant App", "id": "234" }, "folder": { "name": "Macrodroid", "id": "567" }, "space": { "name": "Custom Space", "id": "890" }, "date_updated": "2024-03-10T11:15:20.000Z" } ], "count": 2 } ``` **For Disambiguation Resolution:** ``` Get details for task "Website Update" in list "AI Assistant App" ``` #### Updating Task Status **User Prompt:** ``` Update the "Bug Fix" task status to "Done" ``` **System Response:** ```json { "taskName": "Bug Fix", "status": "Done" } ``` #### Bulk Creating Tasks **User Prompt:** ``` Create these tasks in the "Sprint Backlog" list: 1. Set up CI/CD pipeline (high priority) 2. Write unit tests (normal priority) 3. Update documentation (low priority) ``` **System Response:** ```json { "listName": "Sprint Backlog", "tasks": [ { "name": "Set up CI/CD pipeline", "priority": 2 }, { "name": "Write unit tests", "priority": 3 }, { "name": "Update documentation", "priority": 4 } ] } ``` #### Bulk Creating Tasks with Start and Due Dates **User Prompt:** ``` Create these tasks in the "Project X" list: 1. Research - starts today, due in 3 days 2. Design - starts after Research ends, due in a week from start 3. Implementation - starts after Design, due in 2 weeks from start ``` **System Response:** ```json { "listName": "Project X", "tasks": [ { "name": "Research", "startDate": "today", "dueDate": "3 days from now" }, { "name": "Design", "startDate": "4 days from now", "dueDate": "11 days from now" }, { "name": "Implementation", "startDate": "12 days from now", "dueDate": "26 days from now" } ] } ``` #### Filtering Tasks by Tags **User Prompt:** ``` Find all tasks with the tags "bug" and "high-priority" across the workspace ``` **System Response:** ```json { "name": "get_workspace_tasks", "params": { "tags": ["bug", "high-priority"], "include_closed": false }, "response": { "tasks": [ { "id": "abcd1234", "name": "Fix authentication bug", "description": "Detailed bug description...", "text_content": "Plain text version...", "status": { "status": "In Progress", "color": "#f1c975" }, "creator": { "id": 123, "username": "dev1", "email": "dev1@example.com" }, "assignees": [ { "id": 456, "username": "dev2", "email": "dev2@example.com" } ], "watchers": [...], "checklists": [...], "custom_fields": [...], "list": { "id": "list123", "name": "Current Sprint" }, "tags": [ { "name": "bug", "tag_bg": "#e50000", "tag_fg": "#ffffff" }, { "name": "high-priority", "tag_bg": "#ff7800", "tag_fg": "#ffffff" } ] } ], "count": 1 } } ``` #### Adaptive Response Format in Workspace Tasks The `get_workspace_tasks` tool offers two response formats to optimize for different use cases: 1. **Summary Format** (`detail_level: 'summary'`): - Lightweight response with essential task information - Ideal for lists, overviews, and large datasets - Includes: id, name, status, list info, due date, URL, priority, and tags - Automatically used when response size exceeds 50,000 tokens 2. **Detailed Format** (`detail_level: 'detailed'`): - Complete task information including all fields - Best for detailed views and task management - Includes: all task data, custom fields, descriptions, comments, etc. Example using summary format: ```json { "summaries": [ { "id": "123abc", "name": "🎯 Important Task", "status": "in progress", "list": { "id": "456def", "name": "Project Alpha" }, "due_date": "2024-03-20T10:00:00Z", "url": "https://app.clickup.com/t/123abc", "priority": 1, "tags": [ { "name": "urgent", "tag_bg": "#ff0000", "tag_fg": "#ffffff" } ] } ], "total_count": 100, "has_more": true, "next_page": 1 } ``` Example using detailed format: ```json { "tasks": [ { // Full task object with all fields "id": "123abc", "name": "🎯 Important Task", "description": "Detailed task description...", "status": { "status": "in progress", "color": "#4A90E2" }, "custom_fields": [...], "assignees": [...], "watchers": [...], "checklists": [...], // ... all other task fields } ], "total_count": 100, "has_more": true, "next_page": 1 } ``` ##### Best Practices for Workspace Tasks 1. **Use Filters**: At least one filter parameter is required to prevent overly broad queries: - `tags`: Filter by tag names - `list_ids`: Filter by specific lists - `folder_ids`: Filter by folders - `space_ids`: Filter by spaces - `statuses`: Filter by task status - `assignees`: Filter by assigned users - Date filters: `due_date_gt`, `due_date_lt`, etc. 2. **Pagination**: Use `page`, `order_by`, and `reverse` parameters to navigate through results: ```json { "list_ids": ["123"], "page": 0, "order_by": "due_date", "reverse": true } ``` 3. **Response Size**: For large datasets: - Use `detail_level: 'summary'` to get lightweight responses - The tool automatically switches to summary format if response exceeds 50,000 tokens - Use filters to narrow down results 4. **Adaptive Response Pattern**: 1. Fetch summaries first for list views 2. Load details on-demand when viewing specific tasks 3. Use pagination to load more items as needed #### Bulk Updating Tasks **User Prompt:** ``` Update all the following tasks to high priority: 1. "Implement login screen" 2. "Create database schema" 3. "Set up CI pipeline" ``` **System Response:** ```json { "tasks": [ { "taskName": "Implement login screen", "listName": "Development Tasks", "priority": 2 }, { "taskName": "Create database schema", "listName": "Development Tasks", "priority": 2 }, { "taskName": "Set up CI pipeline", "listName": "Development Tasks", "priority": 2 } ] } ``` #### Bulk Updating Tasks with Start Dates **User Prompt:** ``` Update these tasks to have new start dates: 1. "Research" should start now 2. "Design" should start after "Research" is done (3 days from now) 3. "Implementation" should start next week ``` **System Response:** ```json { "tasks": [ { "taskName": "Research", "listName": "Project X", "startDate": "now" }, { "taskName": "Design", "listName": "Project X", "startDate": "3 days from now" }, { "taskName": "Implementation", "listName": "Project X", "startDate": "next week" } ] } ``` #### Bulk Moving Tasks **User Prompt:** ``` Move all the completed tasks from "In Progress" list to "Done" list: 1. "Backend API implementation" 2. "Frontend form validation" ``` **System Response:** ```json { "tasks": [ { "taskName": "Backend API implementation", "listName": "In Progress" }, { "taskName": "Frontend form validation", "listName": "In Progress" } ], "targetListName": "Done" } ``` #### Bulk Deleting Tasks **User Prompt:** ``` Delete all these tasks from the "Archived" list: 1. "Outdated feature" 2. "Duplicate bug report" ``` **System Response:** ```json { "tasks": [ { "taskName": "Outdated feature", "listName": "Archived" }, { "taskName": "Duplicate bug report", "listName": "Archived" } ] } ``` #### Attaching a File to a Task **User Prompt:** ``` Attach a file to the task "Implement Authentication". The file is at URL "https://example.com/files/specs.pdf" ``` **System Response:** ```json { "taskName": "Implement Authentication", "file_url": "https://example.com/files/specs.pdf", "file_name": "specs.pdf" } ``` **User Prompt:** ``` Attach this document to the task with ID 86b4bnnny ``` **System Response:** ```json { "taskId": "86b4bnnny", "file_data": "<base64-encoded-content>", "file_name": "document.txt" } ``` #### Handling Different File Types The attach_task_file tool supports various file types including: - Documents (PDF, DOCX, TXT) - Images (PNG, JPG, SVG) - Data files (CSV, JSON) - And many others Files can be attached using either: 1. **Base64 Method**: For small files (using `file_data` parameter) 2. **URL Method**: For files already available online (using `file_url` parameter) 3. **Local File Path**: For files on the local filesystem (using `file_url` parameter with an absolute file path) 4. **Chunked Upload**: For large files (automatically selected for `file_data` > 10MB) #### Retrieving Tasks with Subtasks **User Prompt:** ``` Get the "Project Planning" task with all its subtasks ``` **System Response:** ```json { "taskName": "Project Planning", "subtasks": true } ``` **Response will include:** ```json { "id": "abc123", "name": "Project Planning", "description": "Plan the new project phase", "subtasks": [ { "id": "def456", "name": "Define Requirements", "parent": "abc123", "top_level_parent": "abc123" }, { "id": "ghi789", "name": "Create Timeline", "parent": "abc123", "top_level_parent": "abc123" } ] } ``` #### Creating a Subtask **User Prompt:** ``` Create a subtask under "Project Planning" called "Schedule Team Meeting" ``` **System Response:** ```json { "name": "Schedule Team Meeting", "parent": "abc123", "listName": "Development Tasks" } ``` #### Natural Language Date Support The server supports a wide range of natural language date expressions: 1. **Basic expressions**: - "now" - current date and time - "today" - end of current day - "tomorrow" - end of tomorrow - "next week" - end of next week - "in 3 days" - 3 days from current time 2. **Time-specific expressions**: - "tomorrow at 9am" - "next Monday at 2pm" - "Friday at noon" 3. **Range expressions**: - "start of today" - beginning of current day (midnight) - "end of today" - end of current day (23:59:59) - "beginning of next week" - "end of this month" 4. **Relative expressions**: - "30 minutes from now" - "2 hours from now" - "5 days after tomorrow" These expressions can be used with both `dueDate` and `startDate` parameters. ## List Management | Tool | Description | Required Parameters | Optional Parameters | |------|-------------|-------------------|-------------------| | create_list | Create a new list | `name` and either `spaceId` or `spaceName` | content, dueDate, priority, assignee | | create_list_in_folder | Create list in folder | `name` and either `folderId` or `folderName` | content, status | | get_list | Get list details | Either `listId` or `listName` | None | | update_list | Update list properties | Either `listId` or `listName` | name, content, status | | delete_list | Delete a list | Either `listId` or `listName` | None | ### List Parameters - **Content**: Description or purpose of the list - **Priority**: Same scale as tasks (1-4) - **Status**: Initial status for the list ### Examples #### Getting List Details **User Prompt:** ``` Get details for the "Sprint Backlog" list ``` **System Response:** ```json { "listName": "Sprint Backlog" } ``` #### Updating a List **User Prompt:** ``` Update the "Sprint Backlog" list to have the description "Current sprint planning items and priorities" ``` **System Response:** ```json { "listName": "Sprint Backlog", "content": "Current sprint planning items and priorities" } ``` ## Folder Management | Tool | Description | Required Parameters | Optional Parameters | |------|-------------|-------------------|-------------------| | create_folder | Create a new folder | `name` and either `spaceId` or `spaceName` | override_statuses | | get_folder | Get folder details | Either `folderId` or `folderName` | `spaceId` or `spaceName` (if using `folderName`) | | update_folder | Update folder properties | Either `folderId` or `folderName` | name, override_statuses, `spaceId` or `spaceName` (if using `folderName`) | | delete_folder | Delete a folder | Either `folderId` or `folderName` | `spaceId` or `spaceName` (if using `folderName`) | ### Folder Parameters - **override_statuses**: Boolean to determine if folder should use custom statuses - **name**: Display name for the folder ### Examples #### Getting Folder Details **User Prompt:** ``` Get details for the "Development Projects" folder ``` **System Response:** ```json { "folderName": "Development Projects" } ``` #### Updating a Folder **User Prompt:** ``` Update the "Development Projects" folder to be named "Active Development Projects" ``` **System Response:** ```json { "folderName": "Development Projects", "name": "Active Development Projects" } ``` ## Tag Management | Tool | Description | Required Parameters | Optional Parameters | |------|-------------|-------------------|-------------------| | get_space_tags | Get all tags in a space | Either `spaceId` or `spaceName` | None | | create_space_tag | Create a new tag | `tagName` and either `spaceId` or `spaceName` | `tagBg` (hex color), `tagFg` (hex color), `colorCommand` (natural language) | | update_space_tag | Update an existing tag | `tagName` and either `spaceId` or `spaceName` | `newTagName`, `tagBg`, `tagFg`, `colorCommand` (natural language) | | delete_space_tag | Delete a tag | `tagName` and either `spaceId` or `spaceName` | None | | add_tag_to_task | Add tag to a task | `tagName` and either `taskId` or (`taskName` + `listName`) | None | | remove_tag_from_task | Remove tag from task | `tagName` and either `taskId` or (`taskName` + `listName`) | None | ### Tag Parameters - **tagName**: Name of the tag (case-sensitive) - **tagBg**: Background color in hex format (e.g., "#FF5733") - **tagFg**: Foreground (text) color in hex format (e.g., "#FFFFFF") - **newTagName**: New name when updating a tag - **colorCommand**: Natural language color description (e.g., "blue tag", "dark red background") ### Examples #### Getting Space Tags **User Prompt:** ``` Show me all tags in the "Development" space ``` **System Response:** ```json { "spaceName": "Development", "tags": [ { "name": "feature", "tag_bg": "#FF5733", "tag_fg": "#FFFFFF" }, { "name": "bug", "tag_bg": "#DC3545", "tag_fg": "#FFFFFF" } ] } ``` #### Creating a Tag **User Prompt:** ``` Create a new tag called "priority" in the "Development" space with red background ``` **System Response:** ```json { "spaceName": "Development", "tagName": "priority", "tagBg": "#FF0000", "tagFg": "#FFFFFF" } ``` #### Creating a Tag with Natural Language Color Command **User Prompt:** ``` Create a new tag called "important" in the "Development" space using dark blue color ``` **System Response:** ```json { "spaceName": "Development", "tagName": "important", "colorCommand": "dark blue color" } ``` #### Updating a Tag **User Prompt:** ``` Update the "priority" tag to have a blue background ``` **System Response:** ```json { "spaceName": "Development", "tagName": "priority", "tagBg": "#0000FF" } ``` #### Updating a Tag with Natural Language Color Command **User Prompt:** ``` Change the "priority" tag color to light green ``` **System Response:** ```json { "spaceName": "Development", "tagName": "priority", "colorCommand": "light green" } ``` #### Adding a Tag to a Task **User Prompt:** ``` Add the "feature" tag to the task "Implement Authentication" ``` **System Response:** ```json { "taskName": "Implement Authentication", "tagName": "feature" } ``` ### Important Notes 1. **Tag Existence**: Before adding a tag to a task, ensure the tag exists in the space. Use `get_space_tags` to verify tag existence and `create_space_tag` to create it if needed. 2. **Color Formats**: - **Hex Format**: Colors can be provided in hex format (e.g., "#FF5733", "#fff") - **Natural Language**: Colors can be specified using natural language (e.g., "blue", "dark red", "light green") - When using natural language colors, the system automatically generates appropriate foreground (text) colors for optimal contrast 3. **Case Sensitivity**: Tag names are case-sensitive. "Feature" and "feature" are treated as different tags. 4. **Task Tags**: When creating or updating tasks, you can include tags in the task properties: ```json { "name": "New Task", "tags": ["feature", "priority"] } ``` 5. **Supported Color Names**: Basic colors (red, blue, green, etc.) and common variations (dark blue, light green, etc.) are supported. ## Workspace Organization | Tool | Description | Required Parameters | Response | |------|-------------|-------------------|----------| | get_workspace_hierarchy | Get complete structure | None | Full workspace tree with spaces, folders, and lists | ### Workspace Tree Structure ```json { "workspace": { "id": "team_id", "name": "Workspace Name", "spaces": [{ "id": "space_id", "name": "Space Name", "lists": [...], "folders": [{ "id": "folder_id", "name": "Folder Name", "lists": [...] }] }] } } ``` ## Prompts | Prompt | Purpose | Features | |--------|---------|----------| | summarize_tasks | Generate task overview | Status summary, relationships, current states | | analyze_priorities | Review task priorities | Priority review, adjustments, sequencing | | generate_description | Create task descriptions | Structure, objectives, dependencies | ## Common Parameters ### Name-based Lookup All tools support looking up items by name instead of ID: - `listName` instead of `listId` - `taskName` instead of `taskId` - `spaceName` instead of `spaceId` - `folderName` instead of `folderId` ### Date Formats - All dates should be provided as Unix timestamps in milliseconds - Example: `1703980800000` for January 1, 2024 ### Priority Levels 1. Urgent/Highest 2. High 3. Normal 4. Low ## Error Handling The server provides clear error messages for: - Missing required parameters - Invalid IDs or names - Items not found - Permission issues - API rate limiting ### Common Error Responses ```json { "error": "List with name 'Development' not found", "type": "NOT_FOUND" } ``` ```json { "error": "Either taskId or taskName is required", "type": "MISSING_PARAMETER" } ``` ### Rate Limiting - Automatic handling of ClickUp API rate limits - Built-in retry mechanism with exponential backoff - Status updates during rate limit waits