Skip to main content
Glama
cristip73
by cristip73

asana_create_project

Create a new project in Asana by specifying name, workspace, team, layout, and optional details like color, members, and due dates.

Instructions

Create a new project in a workspace

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
workspace_idNoThe workspace ID to create the project in (optional if DEFAULT_WORKSPACE_ID is set)
nameYesName of the project to create
team_idNoREQUIRED for organization workspaces: The team GID to share the project with
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)list
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

Implementation Reference

  • Handler implementation for the 'asana_create_project' tool. Processes input arguments, normalizes members and followers arrays into Asana API format, and delegates to AsanaClientWrapper.createProjectForWorkspace.
    case "asana_create_project": { const { workspace_id, ...projectData } = args; // Extragem opt_fields pentru opțiuni const { opt_fields, ...restData } = projectData; // Pregătim datele pentru proiect const data = { ...restData }; // Verificăm dacă avem team_id și îl păstrăm, în asana-client-wrapper // va fi redenumit automat în team // Conversia array-urilor în formatul așteptat de API if (data.members && Array.isArray(data.members)) { data.members = data.members.map((id: string) => ({ gid: id })); } if (data.followers && Array.isArray(data.followers)) { data.followers = data.followers.map((id: string) => ({ gid: id })); } const response = await asanaClient.createProjectForWorkspace(workspace_id || undefined, data, { opt_fields }); return { content: [{ type: "text", text: JSON.stringify(response) }], }; }
  • Input schema definition for the 'asana_create_project' tool, specifying parameters like workspace_id, name, team_id, public, etc.
    export const createProjectForWorkspaceTool: Tool = { name: "asana_create_project", description: "Create a new project in a workspace", inputSchema: { type: "object", properties: { workspace_id: { type: "string", description: "The workspace ID to create the project in (optional if DEFAULT_WORKSPACE_ID is set)" }, name: { type: "string", description: "Name of the project to create" }, team_id: { type: "string", description: "REQUIRED for organization workspaces: The team GID to share the project with" }, public: { type: "boolean", description: "Whether the project is public to the organization", default: false }, archived: { type: "boolean", description: "Whether the project is archived", default: false }, 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: "list" }, 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" } }, required: ["name"] } };
  • Registration of the tool in the main tools array export. The createProjectForWorkspaceTool (named 'asana_create_project') is included at position corresponding to line 68.
    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 ];
  • Core API wrapper method called by the tool handler. Prepares request data (renames team_id to team, handles default workspace), constructs the API body with workspace, and calls Asana SDK's createProject.
    async createProjectForWorkspace(workspaceId: string | undefined, data: any, opts: any = {}) { try { // Use default workspace if not specified and available if (!workspaceId && this.defaultWorkspaceId) { workspaceId = this.defaultWorkspaceId; } if (!workspaceId) { throw new Error("No workspace specified and no default workspace ID set"); } // Pregătim datele pentru cerere const requestData = { ...data }; // Redenumim team_id în team dacă există if (requestData.team_id) { requestData.team = requestData.team_id; delete requestData.team_id; } // Asana API are nevoie de parametrii corecți const body = { data: { // Includem workspace direct workspace: workspaceId, // Includem toate celelalte date dar fără workspace sau workspace_id // deoarece sunt deja transmise prin parametrul workspaceId ...requestData } }; // Eliminăm parametrii redundanți dacă există delete body.data.workspace_id; delete body.data.workspace; // Evităm duplicarea - am pus deja workspaceId ca workspace // Folosim metoda standard createProject const response = await this.projects.createProject(body, opts); return response.data; } catch (error: any) { console.error(`Error creating project for workspace: ${error}`); // Adăugăm mai multe detalii despre eroare pentru debugging if (error.response && error.response.body) { console.error(`Response error details: ${JSON.stringify(error.response.body, null, 2)}`); } throw error; } }

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