todoist_update_comment
Modify existing Todoist comments by providing a comment ID and new content to update task or project annotations.
Instructions
Update an existing comment by its ID
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| commentId | Yes | The ID of the comment to update | |
| content | Yes | New content/text for the comment |
Implementation Reference
- src/index.ts:1782-1796 (handler)The main handler logic for the 'todoist_update_comment' tool within the CallToolRequestSchema handler. Validates arguments using isUpdateCommentArgs, calls todoistClient.updateComment(commentId, updateArgs), formats the response using formatComment, and handles errors.if (name === "todoist_update_comment") { if (!isUpdateCommentArgs(args)) { return { content: [{ type: "text", text: "Invalid arguments for update_comment" }], isError: true }; } try { const { commentId, ...updateArgs } = args; const updatedComment = await todoistClient.updateComment(commentId, updateArgs); return { content: [{ type: "text", text: `Comment updated:\n${formatComment(updatedComment)}` }], isError: false }; } catch (error: any) { return { content: [{ type: "text", text: `Error updating comment: ${error.message}` }], isError: true }; } }
- src/index.ts:657-674 (schema)The Tool object definition including name, description, and inputSchema (JSON Schema) for validating arguments: requires commentId and content.const UPDATE_COMMENT_TOOL: Tool = { name: "todoist_update_comment", description: "Update an existing comment by its ID", inputSchema: { type: "object", properties: { commentId: { type: "string", description: "The ID of the comment to update" }, content: { type: "string", description: "New content/text for the comment" } }, required: ["commentId", "content"] } };
- src/index.ts:1083-1121 (registration)Registration of the tool in the ListToolsRequestSchema handler. UPDATE_COMMENT_TOOL is included in the array of available tools returned by the server.server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: [ // Task tools CREATE_TASK_TOOL, QUICK_ADD_TASK_TOOL, GET_TASKS_TOOL, GET_TASK_TOOL, UPDATE_TASK_TOOL, DELETE_TASK_TOOL, COMPLETE_TASK_TOOL, REOPEN_TASK_TOOL, SEARCH_TASKS_TOOL, MOVE_TASK_TOOL, BULK_MOVE_TASKS_TOOL, // Project tools GET_PROJECTS_TOOL, GET_PROJECT_TOOL, CREATE_PROJECT_TOOL, UPDATE_PROJECT_TOOL, DELETE_PROJECT_TOOL, // Section tools GET_SECTIONS_TOOL, CREATE_SECTION_TOOL, UPDATE_SECTION_TOOL, DELETE_SECTION_TOOL, // Label tools CREATE_LABEL_TOOL, GET_LABEL_TOOL, GET_LABELS_TOOL, UPDATE_LABEL_TOOL, DELETE_LABEL_TOOL, // Comment tools CREATE_COMMENT_TOOL, GET_COMMENT_TOOL, GET_COMMENTS_TOOL, UPDATE_COMMENT_TOOL, DELETE_COMMENT_TOOL, ], }));
- src/index.ts:1068-1080 (helper)Type guard function used by the handler to validate input arguments match the expected shape: {commentId: string, content: string}.function isUpdateCommentArgs(args: unknown): args is { commentId: string; content: string; } { return ( typeof args === "object" && args !== null && "commentId" in args && "content" in args && typeof (args as { commentId: string; content: string }).commentId === "string" && typeof (args as { commentId: string; content: string }).content === "string" ); }
- src/index.ts:732-742 (helper)Helper function to format the comment object into a human-readable string for the tool response.function formatComment(comment: any): string { let commentDetails = `- ID: ${comment.id}\n Content: ${comment.content}`; if (comment.postedAt) commentDetails += `\n Posted At: ${comment.postedAt}`; if (comment.taskId) commentDetails += `\n Task ID: ${comment.taskId}`; if (comment.projectId) commentDetails += `\n Project ID: ${comment.projectId}`; if (comment.attachment) { commentDetails += `\n Attachment: ${comment.attachment.fileName || 'File'} (${comment.attachment.fileType})`; if (comment.attachment.fileUrl) commentDetails += `\n File URL: ${comment.attachment.fileUrl}`; } return commentDetails; }