task_update
Update task status, priority, or details to track progress and manage project workflows effectively.
Instructions
PROJECT MANAGEMENT (TPM): Update a task's status or details. Use when completing or updating task progress.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task ID (e.g., TASK-001-1) | |
| title | No | New title | |
| details | No | New details | |
| status | No | New status | |
| priority | No | New priority | |
| complexity | No | New complexity |
Implementation Reference
- src/tpm_mcp/server.py:691-703 (handler)Handler function for the task_update tool call, parses arguments into TaskUpdate model and calls db.update_task.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"
- src/tpm_mcp/models.py:141-149 (schema)Pydantic model defining the input schema for task updates, used for validation.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
- src/tpm_mcp/server.py:328-355 (registration)Registration of the "task_update" tool in the MCP server, including its description and input schema.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"], }, ),
- src/tpm_mcp/db.py:699-734 (helper)Database method that performs the actual task update in SQLite, handling partial updates and timestamps.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)