Skip to main content
Glama
cristip73

MCP Server for Asana

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