update_task
Modify ClickUp task details including title, description, status, priority, due date, and assignees to keep project information current.
Instructions
Update task properties
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task ID | |
| title | No | New title | |
| description | No | New description | |
| status | No | New status | |
| priority | No | New priority | |
| due_date | No | New due date | |
| assignees_add | No | User IDs to add as assignees | |
| assignees_remove | No | User IDs to remove as assignees |
Implementation Reference
- src/clickup_mcp/tools.py:669-719 (handler)The primary handler function for the MCP 'update_task' tool. Resolves task ID using _resolve_task_id, constructs UpdateTaskRequest from parameters, calls client.update_task, and returns formatted result.async def update_task( self, task_id: str, title: Optional[str] = None, description: Optional[str] = None, status: Optional[str] = None, priority: Optional[int] = None, due_date: Optional[str] = None, assignees_add: Optional[List[int]] = None, assignees_remove: Optional[List[int]] = None, **kwargs: Any, ) -> Dict[str, Any]: """Update task properties.""" try: # First resolve the task to get the internal ID resolved_task = await self._resolve_task_id(task_id) parsed_id = resolved_task.id except ClickUpAPIError as e: return {"error": f"Failed to resolve task '{task_id}': {e!s}"} update_request = UpdateTaskRequest() if title: update_request.name = title if description is not None: update_request.description = description if status: update_request.status = status if priority: update_request.priority = priority if due_date: dt = datetime.fromisoformat(due_date.replace("Z", "+00:00")) update_request.due_date = int(dt.timestamp() * 1000) update_request.due_date_time = True if assignees_add or assignees_remove: update_request.assignees = {} if assignees_add: update_request.assignees["add"] = assignees_add if assignees_remove: update_request.assignees["rem"] = assignees_remove task = await self.client.update_task(parsed_id, update_request) return { "id": task.id, "name": task.name, "status": task.status.status, "updated": True, }
- src/clickup_mcp/tools.py:114-139 (schema)JSON schema definition for the 'update_task' tool input parameters, defined in ClickUpTools.get_tool_definitions().Tool( name="update_task", description="Update task properties", inputSchema={ "type": "object", "properties": { "task_id": {"type": "string", "description": "Task ID"}, "title": {"type": "string", "description": "New title"}, "description": {"type": "string", "description": "New description"}, "status": {"type": "string", "description": "New status"}, "priority": {"type": "integer", "description": "New priority"}, "due_date": {"type": "string", "description": "New due date"}, "assignees_add": { "type": "array", "items": {"type": "integer"}, "description": "User IDs to add as assignees", }, "assignees_remove": { "type": "array", "items": {"type": "integer"}, "description": "User IDs to remove as assignees", }, }, "required": ["task_id"], }, ),
- src/clickup_mcp/tools.py:23-57 (registration)Registration of the 'update_task' handler (and all other tools) in the ClickUpTools._tools dictionary during __init__, used by call_tool.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, }
- src/clickup_mcp/server.py:41-45 (registration)MCP server handler for listing tools, which returns definitions including 'update_task' schema from ClickUpTools.get_tool_definitions().@self.server.list_tools() async def list_tools() -> List[Tool]: """List all available tools.""" return self.tools.get_tool_definitions()
- src/clickup_mcp/client.py:306-317 (helper)ClickUpClient.update_task method: performs the actual API PUT request to /task/{task_id} with UpdateTaskRequest data, used by the tool handler.async def update_task( self, task_id: str, updates: UpdateTaskRequest, ) -> Task: """Update a task.""" data = await self._request( "PUT", f"/task/{task_id}", json=updates.model_dump(exclude_none=True), ) return Task(**data)