Skip to main content
Glama
cristip73
by cristip73

asana_update_project

Modify project details in Asana, including name, status, members, timeline, layout, and description fields.

Instructions

Update details of an existing project

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
project_idYesThe project ID to update
nameNoUpdated name of the project
publicNoWhether the project is public to the organization
archivedNoWhether the project is archived
colorNoColor of the project (light-green, light-orange, light-blue, etc.)
membersNoArray of user GIDs that are members of this project
followersNoArray of user GIDs that are followers of this project
project_briefNoHTML-formatted string containing the description for the project brief
layoutNoThe layout of the project (board, list, timeline, or calendar)
default_viewNoThe default view of the project (list, board, calendar, timeline, or gantt)
due_onNoThe date on which this project is due (YYYY-MM-DD format)
start_onNoThe day on which work for this project begins (YYYY-MM-DD format)
notesNoFree-form textual information associated with the project
html_notesNoHTML-formatted notes for the project
opt_fieldsNoComma-separated list of optional fields to include in the response

Implementation Reference

  • The handler case for 'asana_update_project' that processes input arguments, removes fields requiring separate tools (members, followers, etc.), calls the Asana client's updateProject method, and returns the JSON response or a warning message.
    case "asana_update_project": { const { project_id, ...projectData } = args; // Extragem opt_fields pentru opțiuni const { opt_fields, ...restData } = projectData; // Câmpuri problematice care necesită API-uri separate const problematicFields = ['members', 'followers', 'public', 'html_notes', 'start_on']; let hasProblematicFields = false; // Verificăm dacă există câmpuri problematice în datele de actualizare for (const field of problematicFields) { if (field in restData) { // Înlăturăm câmpul problematic din datele trimise către API delete restData[field]; hasProblematicFields = true; } } // Pregătim datele pentru actualizare const data = { ...restData }; const response = await asanaClient.updateProject(project_id, data, { opt_fields }); // Avertizare pentru utilizator dacă au fost înlăturate câmpuri problematice if (hasProblematicFields) { return { content: [ { type: "text", text: "Unele câmpuri nu pot fi actualizate direct prin updateProject și necesită API-uri separate:\n" + "- Pentru a actualiza membrii, folosește asana_add_members_for_project\n" + "- Pentru a actualiza followeri, folosește asana_add_followers_for_project\n" + "- Câmpurile public, html_notes și start_on au de asemenea limitări\n\n" + "Proiectul a fost actualizat cu succes pentru celelalte câmpuri. Iată răspunsul:\n" + JSON.stringify(response) } ], }; } return { content: [{ type: "text", text: JSON.stringify(response) }], }; }
  • The Tool schema definition for 'asana_update_project', specifying the input parameters, their types, descriptions, and required fields.
    export const updateProjectTool: Tool = { name: "asana_update_project", description: "Update details of an existing project", inputSchema: { type: "object", properties: { project_id: { type: "string", description: "The project ID to update" }, name: { type: "string", description: "Updated name of the project" }, public: { type: "boolean", description: "Whether the project is public to the organization" }, archived: { type: "boolean", description: "Whether the project is archived" }, color: { type: "string", description: "Color of the project (light-green, light-orange, light-blue, etc.)" }, members: { type: "array", items: { type: "string" }, description: "Array of user GIDs that are members of this project" }, followers: { type: "array", items: { type: "string" }, description: "Array of user GIDs that are followers of this project" }, project_brief: { type: "string", description: "HTML-formatted string containing the description for the project brief" }, layout: { type: "string", description: "The layout of the project (board, list, timeline, or calendar)" }, default_view: { type: "string", description: "The default view of the project (list, board, calendar, timeline, or gantt)" }, due_on: { type: "string", description: "The date on which this project is due (YYYY-MM-DD format)" }, start_on: { type: "string", description: "The day on which work for this project begins (YYYY-MM-DD format)" }, notes: { type: "string", description: "Free-form textual information associated with the project" }, html_notes: { type: "string", description: "HTML-formatted notes for the project" }, opt_fields: { type: "string", description: "Comma-separated list of optional fields to include in the response" } }, required: ["project_id"] } };
  • Registers 'updateProjectTool' (line 69) in the main exported tools array for MCP tool discovery.
    export const tools: Tool[] = [ listWorkspacesTool, searchProjectsTool, getProjectTool, getProjectTaskCountsTool, getProjectSectionsTool, createSectionForProjectTool, createProjectForWorkspaceTool, updateProjectTool, reorderSectionsTool, getProjectStatusTool, getProjectStatusesForProjectTool, createProjectStatusTool, deleteProjectStatusTool, searchTasksTool, getTaskTool, createTaskTool, updateTaskTool, createSubtaskTool, getMultipleTasksByGidTool, addTaskToSectionTool, getTasksForSectionTool, getProjectHierarchyTool, getSubtasksForTaskTool, getTasksForProjectTool, getTasksForTagTool, getTagsForWorkspaceTool, addTagsToTaskTool, addTaskDependenciesTool, addTaskDependentsTool, setParentForTaskTool, addFollowersToTaskTool, getStoriesForTaskTool, createTaskStoryTool, getTeamsForUserTool, getTeamsForWorkspaceTool, addMembersForProjectTool, addFollowersForProjectTool, getUsersForWorkspaceTool, getAttachmentsForObjectTool, uploadAttachmentForObjectTool, downloadAttachmentTool ];
  • Validation helper that ensures 'project_id' is a valid Asana GID before executing the tool.
    case 'asana_update_project': result = validateGid(params.project_id, 'project_id'); if (!result.valid) errors.push(...result.errors); break;

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/cristip73/mcp-server-asana'

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