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)
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. While 'Update' implies mutation, the description lacks critical behavioral details: it doesn't specify what permissions are required, whether updates are reversible, if partial updates are allowed, what happens to unspecified fields, or what the response contains. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.

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 perfectly concise with two clear sentences that each earn their place. The first states the purpose, the second provides usage guidance. No wasted words, well-structured, and front-loaded with the core functionality.

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

Completeness3/5

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

Given this is a mutation tool with 6 parameters, no annotations, and no output schema, the description is minimally adequate. It covers purpose and basic usage but lacks important context about behavioral implications, error conditions, and response format. The high schema coverage helps, but for a write operation, more behavioral disclosure would be beneficial.

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%, so the schema already documents all 6 parameters thoroughly with descriptions and enums. The description adds minimal value beyond the schema - it mentions 'status or details' which aligns with parameters but doesn't provide additional context about parameter interactions, dependencies, or usage patterns. Baseline 3 is appropriate when schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the tool's purpose with 'Update a task's status or details' - a specific verb (update) and resource (task). It distinguishes from siblings like task_create (create) and task_get (retrieve), though it doesn't explicitly mention all sibling differences. The PROJECT MANAGEMENT (TPM) context helps but isn't essential to the core purpose.

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

Usage Guidelines4/5

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

The description provides clear usage context with 'Use when completing or updating task progress.' This gives practical guidance on when to invoke the tool. However, it doesn't explicitly mention when NOT to use it (e.g., vs task_create for new tasks) or name specific alternatives, though the context implies distinction from other task_* tools.

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

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