Skip to main content
Glama

task_update

Modify task status, priority, or details to track project progress and maintain accurate project management records.

Instructions

PROJECT MANAGEMENT (TPM): Update a task's status or details. Use when completing or updating task progress.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
task_idYesTask ID (e.g., TASK-001-1)
titleNoNew title
detailsNoNew details
statusNoNew status
priorityNoNew priority
complexityNoNew complexity

Implementation Reference

  • Handler logic in _handle_tool function: parses arguments into TaskUpdate model, calls db.update_task, returns confirmation or error.
    if name == "task_update":
        update = TaskUpdate(
            title=args.get("title"),
            details=args.get("details"),
            status=TaskStatus(args["status"]) if args.get("status") else None,
            priority=Priority(args["priority"]) if args.get("priority") else None,
            complexity=Complexity(args["complexity"]) if args.get("complexity") else None,
        )
        task = db.update_task(args["task_id"], update)
        if task:
            # Return minimal confirmation to avoid context bleed
            return f"Updated task: {task.id} - {task.title} [{task.status.value}]"
        return f"Task {args['task_id']} not found"
  • Pydantic model defining input schema for task_update tool.
    class TaskUpdate(BaseModel):
        title: str | None = None
        details: str | None = None
        status: TaskStatus | None = None
        priority: Priority | None = None
        complexity: Complexity | None = None
        acceptance_criteria: list[str] | None = None
        metadata: dict[str, Any] | None = None
  • Tool registration in list_tools(): defines name, description, and inputSchema for task_update.
    Tool(
        name="task_update",
        description="PROJECT MANAGEMENT (TPM): Update a task's status or details. Use when completing or updating task progress.",
        inputSchema={
            "type": "object",
            "properties": {
                "task_id": {"type": "string", "description": "Task ID (e.g., TASK-001-1)"},
                "title": {"type": "string", "description": "New title"},
                "details": {"type": "string", "description": "New details"},
                "status": {
                    "type": "string",
                    "enum": ["pending", "in-progress", "done", "blocked"],
                    "description": "New status",
                },
                "priority": {
                    "type": "string",
                    "enum": ["critical", "high", "medium", "low"],
                    "description": "New priority",
                },
                "complexity": {
                    "type": "string",
                    "enum": ["simple", "medium", "complex"],
                    "description": "New complexity",
                },
            },
            "required": ["task_id"],
        },
  • Database helper method: dynamically builds SQL UPDATE for tasks table based on provided TaskUpdate fields.
    def update_task(self, task_id: str, data: TaskUpdate) -> Task | None:
        updates = []
        params = []
        if data.title is not None:
            updates.append("title = ?")
            params.append(data.title)
        if data.details is not None:
            updates.append("details = ?")
            params.append(data.details)
        if data.status is not None:
            updates.append("status = ?")
            params.append(data.status.value)
            if data.status in (TaskStatus.DONE, TaskStatus.COMPLETED):
                updates.append("completed_at = ?")
                params.append(self._now())
        if data.priority is not None:
            updates.append("priority = ?")
            params.append(data.priority.value)
        if data.complexity is not None:
            updates.append("complexity = ?")
            params.append(data.complexity.value)
        if data.acceptance_criteria is not None:
            updates.append("acceptance_criteria = ?")
            params.append(_to_json(data.acceptance_criteria))
        if data.metadata is not None:
            updates.append("metadata = ?")
            params.append(_to_json(data.metadata))
    
        if not updates:
            return self.get_task(task_id)
    
        params.append(task_id)
        self.conn.execute(f"UPDATE tasks SET {', '.join(updates)} WHERE id = ?", params)
        self.conn.commit()
        return self.get_task(task_id)

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/urjitbhatia/tpm-mcp'

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