things_update_todo
Modify existing to-dos in Things 3 by updating titles, notes, due dates, tags, checklists, and completion status using JSON input.
Instructions
Update an existing to-do in Things using JSON API for full feature support
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| notes | No | ||
| when | No | Schedule the todo: today/tomorrow/evening (relative), anytime/someday (Things categories), YYYY-MM-DD (specific date), or YYYY-MM-DD@HH:MM (specific time) | |
| deadline | No | ||
| tags | No | ||
| checklist_items | No | Break down this todo into smaller, manageable steps using a checklist. Perfect for complex tasks that have multiple components but don't warrant a full project. Each checklist item can be individually checked off, providing visual progress feedback. Use when user mentions "steps", "checklist", "break down into parts", or when a task has multiple actionable components (e.g., "Plan event" → ["Book venue", "Arrange catering", "Send invites"]). Alternative to creating separate todos for multi-step tasks. | |
| list_id | No | ID of the project or area to add the todo to | |
| list | No | Name of the project, area, or built-in list (inbox, today, anytime, etc.) | |
| heading | No | Place this todo under a specific heading within the project | |
| completed | No | ||
| canceled | No | ||
| id | Yes | Unique system-generated ID of the todo to update (alphanumeric, 20-24 chars). NOT the todo title! Use things_get_project, things_get_list, or things_search to find the correct ID first. Example: "AbC123dEf456gHi789JkL" | |
| operation | No |
Implementation Reference
- src/lib/json-builder.ts:38-48 (handler)The 'updateTodo' method inside 'ThingsJSONBuilder' which constructs the update payload and executes the JSON API call.
async updateTodo(params: UpdateTodoJSONParams): Promise<string> { const updateData = { type: 'to-do', operation: 'update', id: params.id, attributes: this.convertTodoParams(params) }; await executeThingsJSON([updateData]); return `✅ To-do updated successfully: "${params.title || 'Updated todo'}"`; } - src/tools/update-json.ts:14-18 (registration)Definition and registration of the 'things_update_todo' tool in the 'UpdateJSONToolHandler' class.
{ name: 'things_update_todo', description: 'Update an existing to-do in Things using JSON API for full feature support', schema: UpdateTodoJSONSchema as any }, - src/tools/update-json.ts:32-34 (handler)Routing logic within the tool handler that invokes 'jsonBuilder.updateTodo' when 'things_update_todo' is called.
if (toolName === 'things_update_todo') { const todoParams = params as z.infer<typeof UpdateTodoJSONSchema>; return jsonBuilder.updateTodo(todoParams);