todoist_update_project
Modify an existing Todoist project by updating its name, color, favorite status, or view style to reflect changes in your workflow organization.
Instructions
Update an existing project
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The ID of the project to update | |
| name | No | New name for the project (optional) | |
| color | No | New color for the project (optional) | |
| isFavorite | No | Whether to mark as favorite (optional) | |
| viewStyle | No | Project view style: 'list' or 'board' (optional) |
Implementation Reference
- src/index.ts:1415-1435 (handler)Handler function for the 'todoist_update_project' tool. Validates arguments using isUpdateProjectArgs, constructs update data from provided fields (name, color, isFavorite, viewStyle), calls todoistClient.updateProject, and returns formatted success response with updated project details.
if (name === "todoist_update_project") { if (!isUpdateProjectArgs(args)) { throw new Error("Invalid arguments for todoist_update_project"); } const updateData: any = {}; if (args.name) updateData.name = args.name; if (args.color) updateData.color = args.color; if (args.isFavorite !== undefined) updateData.isFavorite = args.isFavorite; if (args.viewStyle) updateData.viewStyle = args.viewStyle; const updatedProject = await todoistClient.updateProject(args.projectId, updateData); return { content: [{ type: "text", text: `Project updated successfully:\nID: ${updatedProject.id}\n${formatProject(updatedProject)}` }], isError: false, }; } - src/index.ts:430-460 (schema)Tool schema definition for 'todoist_update_project', specifying input parameters including required projectId and optional fields for update.
const UPDATE_PROJECT_TOOL: Tool = { name: "todoist_update_project", description: "Update an existing project", inputSchema: { type: "object", properties: { projectId: { type: "string", description: "The ID of the project to update" }, name: { type: "string", description: "New name for the project (optional)" }, color: { type: "string", description: "New color for the project (optional)" }, isFavorite: { type: "boolean", description: "Whether to mark as favorite (optional)" }, viewStyle: { type: "string", description: "Project view style: 'list' or 'board' (optional)", enum: ["list", "board"] } }, required: ["projectId"] } }; - src/index.ts:1083-1121 (registration)Registration of the UPDATE_PROJECT_TOOL in the list of available tools returned by ListToolsRequestSchema handler.
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:849-862 (helper)Type guard helper function to validate input arguments for the todoist_update_project tool, ensuring projectId is present as string.
function isUpdateProjectArgs(args: unknown): args is { projectId: string; name?: string; color?: string; isFavorite?: boolean; viewStyle?: string; } { return ( typeof args === "object" && args !== null && "projectId" in args && typeof (args as { projectId: string }).projectId === "string" ); } - src/index.ts:722-724 (helper)Helper function to format project details for output in tool responses, used by todoist_update_project handler.
function formatProject(project: any): string { return `- ${project.name}${project.color ? `\n Color: ${project.color}` : ''}${project.isFavorite ? `\n Favorite: Yes` : ''}${project.viewStyle ? `\n View: ${project.viewStyle}` : ''}${project.parentId ? `\n Parent: ${project.parentId}` : ''}${project.id ? ` (ID: ${project.id})` : ''}`; }