bulk_update_tasks
Efficiently update multiple tasks simultaneously in ClickUp by modifying status, priority, assignees, or other fields using a single operation.
Instructions
Update multiple tasks at once
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| task_ids | Yes | List of task IDs to update | |
| updates | Yes | Updates to apply (status, priority, assignees, etc.) |
Implementation Reference
- src/clickup_mcp/tools.py:1022-1050 (handler)The main handler function that implements the bulk_update_tasks tool. It processes a list of task_ids and an updates dict, converts updates to UpdateTaskRequest, resolves each task ID using _resolve_task_id helper, calls client.update_task on each, and returns a results dict with updated and failed tasks.async def bulk_update_tasks( self, task_ids: List[str], updates: Dict[str, Any] ) -> Dict[str, Any]: """Update multiple tasks at once.""" results = {"updated": [], "failed": []} # Convert updates dict to UpdateTaskRequest format update_request = UpdateTaskRequest() if "status" in updates: update_request.status = updates["status"] if "priority" in updates: update_request.priority = updates["priority"] if "assignees_add" in updates: update_request.assignees = {"add": updates["assignees_add"]} if "assignees_remove" in updates: if update_request.assignees is None: update_request.assignees = {} update_request.assignees["rem"] = updates["assignees_remove"] for task_id in task_ids: try: # Resolve each task ID to get the internal ID resolved_task = await self._resolve_task_id(task_id) await self.client.update_task(resolved_task.id, update_request) results["updated"].append(task_id) except Exception as e: results["failed"].append({"task_id": task_id, "error": str(e)}) return results
- src/clickup_mcp/tools.py:332-350 (schema)The input schema definition for the bulk_update_tasks tool within the get_tool_definitions method, specifying required task_ids (array of strings) and updates (object).Tool( name="bulk_update_tasks", description="Update multiple tasks at once", inputSchema={ "type": "object", "properties": { "task_ids": { "type": "array", "items": {"type": "string"}, "description": "List of task IDs to update", }, "updates": { "type": "object", "description": "Updates to apply (status, priority, assignees, etc.)", }, }, "required": ["task_ids", "updates"], }, ),
- src/clickup_mcp/tools.py:23-57 (registration)Registration of the bulk_update_tasks tool name mapped to the self.bulk_update_tasks handler method in the ClickUpTools class __init__ _tools dictionary. This dict is used by call_tool to dispatch tool calls.self._tools: Dict[str, Callable] = { "create_task": self.create_task, "get_task": self.get_task, "update_task": self.update_task, "delete_task": self.delete_task, "list_tasks": self.list_tasks, "search_tasks": self.search_tasks, "get_subtasks": self.get_subtasks, "get_task_comments": self.get_task_comments, "create_task_comment": self.create_task_comment, "get_task_status": self.get_task_status, "update_task_status": self.update_task_status, "get_assignees": self.get_assignees, "assign_task": self.assign_task, "list_spaces": self.list_spaces, "list_folders": self.list_folders, "list_lists": self.list_lists, "find_list_by_name": self.find_list_by_name, # Bulk operations "bulk_update_tasks": self.bulk_update_tasks, "bulk_move_tasks": self.bulk_move_tasks, # Time tracking "get_time_tracked": self.get_time_tracked, "log_time": self.log_time, # Templates "create_task_from_template": self.create_task_from_template, "create_task_chain": self.create_task_chain, # Analytics "get_team_workload": self.get_team_workload, "get_task_analytics": self.get_task_analytics, # User management "list_users": self.list_users, "get_current_user": self.get_current_user, "find_user_by_name": self.find_user_by_name, }