Skip to main content
Glama
DiversioTeam

ClickUp MCP Server

by DiversioTeam

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
NameRequiredDescriptionDefault
task_idYesTask ID

Implementation Reference

  • 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,
        }
  • 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"],
        },
    ),
  • 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,
    }
  • 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]:
  • 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
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden for behavioral disclosure. While 'Get' implies a read operation, the description doesn't specify whether this requires authentication, what happens if the task doesn't exist, whether it returns only status or additional metadata, or any rate limits. For a tool with no annotation coverage, this leaves significant behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at just 5 words ('Get current status of a task'), with zero wasted words. It's front-loaded with the core purpose and doesn't include any unnecessary elaboration, making it efficient for quick understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is insufficiently complete. It doesn't explain what 'status' means in this context (e.g., pending, in-progress, completed), what format the status is returned in, or any error conditions. For a tool in a rich ecosystem with many sibling tools, more context is needed to understand its specific role and behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the single parameter 'task_id' clearly documented in the schema. The description doesn't add any additional parameter semantics beyond what the schema provides (e.g., format examples, validation rules, or relationship to other parameters). With complete schema coverage, the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the purpose as 'Get current status of a task', which is a clear verb+resource combination. However, it doesn't distinguish this tool from sibling tools like 'get_task' or 'update_task_status', leaving ambiguity about what specifically makes this tool different from other task-related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'get_task' (which might return full task details) and 'update_task_status' (which modifies status), there's no indication of when 'get_task_status' is the appropriate choice or what its specific use case is compared to these alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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