""" MCP Tool: Update task fields """ from typing import Dict, Any, Optional from pydantic import BaseModel class UpdateTaskInput(BaseModel): task_id: int title: Optional[str] = None description: Optional[str] = None completed: Optional[bool] = None class UpdateTaskOutput(BaseModel): success: bool task: Optional[Dict[str, Any]] = None error: Optional[str] = None async def update_task(input: UpdateTaskInput, context: Dict[str, Any]) -> UpdateTaskOutput: """ MCP Tool: Update task fields Args: input: UpdateTaskInput with fields to update context: MCP context containing user_id Returns: UpdateTaskOutput with updated task """ try: user_id = context.get("user_id") if not user_id: return UpdateTaskOutput(success=False, error="User ID not found in context") from backend.src.services.task_service import TaskService from backend.src.core.database import get_session async with get_session() as session: update_data = {} if input.title: update_data["title"] = input.title if input.description: update_data["description"] = input.description if input.completed is not None: update_data["completed"] = input.completed task = TaskService.update_task( session, task_id=input.task_id, user_id=user_id, **update_data ) if task: return UpdateTaskOutput(success=True, task=task.model_dump()) else: return UpdateTaskOutput(success=False, error="Task not found or unauthorized") except Exception as e: return UpdateTaskOutput(success=False, error=str(e))