get_task_analytics
Analyze task performance metrics like velocity and completion rates for a specified ClickUp space over a defined period to track team productivity.
Instructions
Get analytics for tasks (velocity, completion rate, etc.)
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| space_id | Yes | Space ID | |
| period_days | No | Period in days to analyze |
Implementation Reference
- src/clickup_mcp/tools.py:1301-1348 (handler)The handler function implementing get_task_analytics. Fetches tasks created in the specified period for the space, computes metrics like total tasks, completion rate, average completion time in hours, tasks per day, and breakdown by priority.async def get_task_analytics(self, space_id: str, period_days: int = 30) -> Dict[str, Any]: """Get analytics for tasks.""" # Calculate date range end_date = datetime.now() start_date = end_date - timedelta(days=period_days) # Get tasks created in period tasks = await self.client.search_tasks( query="", date_created_gt=int(start_date.timestamp() * 1000), date_created_lt=int(end_date.timestamp() * 1000), ) # Calculate metrics total_tasks = len(tasks) completed_tasks = sum(1 for task in tasks if task.status.type == "closed") # Calculate average completion time completion_times = [] for task in tasks: if task.date_closed and task.date_created: time_to_complete = (task.date_closed - task.date_created).total_seconds() / 3600 completion_times.append(time_to_complete) avg_completion_time = ( sum(completion_times) / len(completion_times) if completion_times else 0 ) # Tasks by priority by_priority = {1: 0, 2: 0, 3: 0, 4: 0} for task in tasks: if task.priority: by_priority[task.priority.value] += 1 return { "space_id": space_id, "period_days": period_days, "metrics": { "total_tasks_created": total_tasks, "completed_tasks": completed_tasks, "completion_rate": round( completed_tasks / total_tasks * 100 if total_tasks > 0 else 0, 2 ), "avg_completion_hours": round(avg_completion_time, 2), "tasks_per_day": round(total_tasks / period_days, 2), }, "by_priority": by_priority, }
- src/clickup_mcp/tools.py:453-467 (schema)The JSON schema definition for the get_task_analytics tool input, including space_id (required) and optional period_days.Tool( name="get_task_analytics", description="Get analytics for tasks (velocity, completion rate, etc.)", inputSchema={ "type": "object", "properties": { "space_id": {"type": "string", "description": "Space ID"}, "period_days": { "type": "integer", "description": "Period in days to analyze", }, }, "required": ["space_id"], }, ),
- src/clickup_mcp/tools.py:23-57 (registration)Registration of get_task_analytics in the ClickUpTools class's internal _tools dictionary, mapping the tool name to its handler method. This enables dynamic tool calling via 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, }