Skip to main content
Glama
DiversioTeam

ClickUp MCP Server

by DiversioTeam

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
NameRequiredDescriptionDefault
task_idYesTask ID
titleNoNew title
descriptionNoNew description
statusNoNew status
priorityNoNew priority
due_dateNoNew due date
assignees_addNoUser IDs to add as assignees
assignees_removeNoUser IDs to remove as assignees

Implementation Reference

  • 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,
        }
  • 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"],
        },
    ),
  • 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,
    }
  • 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()
  • 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)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DiversioTeam/clickup-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server