get_task_status
Retrieve the current status of a ClickUp task using its ID to track progress and manage project workflows.
Instructions
Get current status of a task
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task ID |
Implementation Reference
- src/clickup_mcp/tools.py:867-880 (handler)The handler function that implements the core logic of the 'get_task_status' tool. It resolves the task ID using a helper method and extracts status information from the task object.async def get_task_status(self, task_id: str) -> Dict[str, Any]: """Get task status.""" try: task = await self._resolve_task_id(task_id) except ClickUpAPIError as e: return {"error": f"Failed to get task status for '{task_id}': {e!s}"} return { "task_id": task.id, "status": task.status.status, "status_color": task.status.color, "status_type": task.status.type, }
- src/clickup_mcp/tools.py:239-249 (schema)The input schema definition for the 'get_task_status' tool, defining the required 'task_id' parameter.Tool( name="get_task_status", description="Get current status of a task", inputSchema={ "type": "object", "properties": { "task_id": {"type": "string", "description": "Task ID"}, }, "required": ["task_id"], }, ),
- src/clickup_mcp/tools.py:23-57 (registration)The internal tools dictionary in ClickUpTools.__init__ that registers 'get_task_status' as a callable method, used by call_tool to dispatch invocations.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/tools.py:59-59 (registration)The method that returns all Tool objects for MCP server registration, including the schema for 'get_task_status'.def get_tool_definitions(self) -> List[Tool]:
- src/clickup_mcp/tools.py:527-567 (helper)Helper method used by get_task_status to resolve flexible task ID formats (internal IDs, custom IDs, URLs) to a concrete Task object.async def _resolve_task_id(self, task_id: str, include_subtasks: bool = False) -> Task: """Smart task ID resolution that handles both internal and custom IDs.""" # Parse task ID to determine if it might be a custom ID parsed_id, custom_type = parse_task_id(task_id, self.client.config.id_patterns) # Try direct lookup first (works for both internal and custom IDs) try: return await self.client.get_task(parsed_id, include_subtasks=include_subtasks) except ClickUpAPIError as direct_error: # If it might be a custom ID, try with custom_task_ids=true if custom_type or "-" in parsed_id: try: team_id = ( self.client.config.default_team_id or self.client.config.default_workspace_id ) return await self.client.get_task( parsed_id, include_subtasks=include_subtasks, custom_task_ids=True, team_id=team_id, ) except ClickUpAPIError as custom_error: # If both fail, try search as final fallback try: tasks = await self.client.search_tasks(query=task_id) if not tasks: raise ClickUpAPIError(f"Task '{task_id}' not found") # Find exact match by custom_id or use first result for task in tasks: if hasattr(task, "custom_id") and task.custom_id == task_id: return task return tasks[0] except ClickUpAPIError: # Re-raise the most relevant error raise (custom_error if custom_type else direct_error) from None else: # Not a custom ID pattern, re-raise the original error raise direct_error