How to integrate Asana MCP with Mastra AI

Connect Mastra AI to Asana MCP. Create a new project for q3 goals, add followers to the product launch task, and more using natural language, with authentication handled for you.

Asana logoAsana
Oauth2

Asana is a collaborative work management platform for teams to organize and track projects. It streamlines teamwork, boosts productivity, and keeps everyone aligned on goals.

247 Tools6 Triggers

Introduction

This guide walks you through connecting Asana to Mastra AI using the Composio tool router. By the end, you'll have a working Asana agent that can create and assign tasks, organize projects and sections, track goals and portfolios, post status updates, and comment on tasks through natural language commands.

This guide will help you understand how to give your Mastra AI agent real control over a Asana account through Composio's Asana MCP server.

Before we dive in, let's take a quick look at the key ideas and tools involved.

Also integrate Asana with

TL;DR

Here's what you'll learn:
  • Set up your environment so Mastra, OpenAI, and Composio work together
  • Create a Tool Router session in Composio that exposes Asana tools
  • Connect Mastra's MCP client to the Composio generated MCP URL
  • Fetch Asana tool definitions and attach them as a toolset
  • Build a Mastra agent that can reason, call tools, and return structured results
  • Run an interactive CLI where you can chat with your Asana agent

What is Mastra AI?

Mastra AI is a TypeScript framework for building AI agents with tool support. It provides a clean API for creating agents that can use external services through MCP.

Key features include:

  • MCP Client: Built-in support for Model Context Protocol servers
  • Toolsets: Organize tools into logical groups
  • Step Callbacks: Monitor and debug agent execution
  • OpenAI Integration: Works with OpenAI models via @ai-sdk/openai

What is the Asana MCP server, and what's possible with it?

The Asana MCP server is an implementation of the Model Context Protocol that connects your AI agent and assistants like Claude, Cursor, etc directly to your Asana account. It provides structured and secure access to your projects, tasks, teams, portfolios, and goals, so your agent can organize work, create projects, update statuses, manage collaborators, and handle task details on your behalf.

  • Project planning and organization: Have your agent create or duplicate projects, add sections, prepare project briefs, and remove projects that are no longer needed.
  • Task coordination: Let the agent create subtasks, duplicate tasks, assign tasks to projects or sections, add dependencies, apply tags, and delete outdated tasks.
  • Updates and collaboration: Direct your agent to post task comments, publish project status updates, and add followers so the right people stay informed.
  • Team and workspace management: Instruct your agent to add users to teams or workspaces and manage project membership for users and teams.
  • Portfolio, goal, and resource planning: Have your agent add projects to portfolios, connect supporting goals, create resource allocations, and review existing allocations.

What is the Composio tool router, and how does it fit here?

What is Composio SDK?

Composio's Composio SDK helps agents find the right tools for a task at runtime. You can plug in multiple toolkits (like Gmail, HubSpot, and GitHub), and the agent will identify the relevant app and action to complete multi-step workflows. This can reduce token usage and improve the reliability of tool calls. Read more here: Getting started with Composio SDK

The tool router generates a secure MCP URL that your agents can access to perform actions.

How the Composio SDK works

The Composio SDK follows a three-phase workflow:

  1. Discovery: Searches for tools matching your task and returns relevant toolkits with their details.
  2. Authentication: Checks for active connections. If missing, creates an auth config and returns a connection URL via Auth Link.
  3. Execution: Executes the action using the authenticated connection.

Step-by-step Guide

Step by step09 STEPS
1

Prerequisites

Before starting, make sure you have:
  • Node.js 18 or higher
  • A Composio account with an active API key
  • An OpenAI API key
  • Basic familiarity with TypeScript
2

Getting API Keys for OpenAI and Composio

OpenAI API Key
  • Go to the OpenAI dashboard and create an API key.
  • You need credits or a connected billing setup to use the models.
  • Store the key somewhere safe.
Composio API Key
  • Log in to the Composio dashboard.
  • Go to Settings and copy your API key.
  • This key lets your Mastra agent talk to Composio and reach Asana through MCP.
3

Install dependencies

bash
npm install @composio/core @mastra/core @mastra/mcp @ai-sdk/openai dotenv

Install the required packages.

What's happening:

  • @composio/core is the Composio SDK for creating MCP sessions
  • @mastra/core provides the Agent class
  • @mastra/mcp is Mastra's MCP client
  • @ai-sdk/openai is the model wrapper for OpenAI
  • dotenv loads environment variables from .env
4

Set up environment variables

bash
COMPOSIO_API_KEY=your_composio_api_key_here
COMPOSIO_USER_ID=your_user_id_here
OPENAI_API_KEY=your_openai_api_key_here

Create a .env file in your project root.

What's happening:

  • COMPOSIO_API_KEY authenticates your requests to Composio
  • COMPOSIO_USER_ID tells Composio which user this session belongs to
  • OPENAI_API_KEY lets the Mastra agent call OpenAI models
5

Import libraries and validate environment

typescript
import "dotenv/config";
import { openai } from "@ai-sdk/openai";
import { Agent } from "@mastra/core/agent";
import { MCPClient } from "@mastra/mcp";
import { Composio } from "@composio/core";
import * as readline from "readline";

import type { AiMessageType } from "@mastra/core/agent";

const openaiAPIKey = process.env.OPENAI_API_KEY;
const composioAPIKey = process.env.COMPOSIO_API_KEY;
const composioUserID = process.env.COMPOSIO_USER_ID;

if (!openaiAPIKey) throw new Error("OPENAI_API_KEY is not set");
if (!composioAPIKey) throw new Error("COMPOSIO_API_KEY is not set");
if (!composioUserID) throw new Error("COMPOSIO_USER_ID is not set");

const composio = new Composio({
  apiKey: composioAPIKey as string,
});
What's happening:
  • dotenv/config auto loads your .env so process.env.* is available
  • openai gives you a Mastra compatible model wrapper
  • Agent is the Mastra agent that will call tools and produce answers
  • MCPClient connects Mastra to your Composio MCP server
  • Composio is used to create a Tool Router session
6

Create a Tool Router session for Asana

typescript
async function main() {
  const session = await composio.create(
    composioUserID as string,
    {
      toolkits: ["asana"],
    },
  );

  const composioMCPUrl = session.mcp.url;
  console.log("Asana MCP URL:", composioMCPUrl);
What's happening:
  • create spins up a short-lived MCP HTTP endpoint for this user
  • The toolkits array contains "asana" for Asana access
  • session.mcp.url is the MCP URL that Mastra's MCPClient will connect to
7

Configure Mastra MCP client and fetch tools

typescript
const mcpClient = new MCPClient({
    id: composioUserID as string,
    servers: {
      nasdaq: {
        url: new URL(composioMCPUrl),
        requestInit: {
          headers: session.mcp.headers,
        },
      },
    },
    timeout: 30_000,
  });

console.log("Fetching MCP tools from Composio...");
const composioTools = await mcpClient.getTools();
console.log("Number of tools:", Object.keys(composioTools).length);
What's happening:
  • MCPClient takes an id for this client and a list of MCP servers
  • The headers property includes the x-api-key for authentication
  • getTools fetches the tool definitions exposed by the Asana toolkit
8

Create the Mastra agent

typescript
const agent = new Agent({
    name: "asana-mastra-agent",
    instructions: "You are an AI agent with Asana tools via Composio.",
    model: "openai/gpt-5",
  });
What's happening:
  • Agent is the core Mastra agent
  • name is just an identifier for logging and debugging
  • instructions guide the agent to use tools instead of only answering in natural language
  • model uses openai("gpt-5") to configure the underlying LLM
9

Set up interactive chat interface

typescript
let messages: AiMessageType[] = [];

console.log("Chat started! Type 'exit' or 'quit' to end.\n");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
  prompt: "> ",
});

rl.prompt();

rl.on("line", async (userInput: string) => {
  const trimmedInput = userInput.trim();

  if (["exit", "quit", "bye"].includes(trimmedInput.toLowerCase())) {
    console.log("\nGoodbye!");
    rl.close();
    process.exit(0);
  }

  if (!trimmedInput) {
    rl.prompt();
    return;
  }

  messages.push({
    id: crypto.randomUUID(),
    role: "user",
    content: trimmedInput,
  });

  console.log("\nAgent is thinking...\n");

  try {
    const response = await agent.generate(messages, {
      toolsets: {
        asana: composioTools,
      },
      maxSteps: 8,
    });

    const { text } = response;

    if (text && text.trim().length > 0) {
      console.log(`Agent: ${text}\n`);
        messages.push({
          id: crypto.randomUUID(),
          role: "assistant",
          content: text,
        });
      }
    } catch (error) {
      console.error("\nError:", error);
    }

    rl.prompt();
  });

  rl.on("close", async () => {
    console.log("\nSession ended.");
    await mcpClient.disconnect();
    process.exit(0);
  });
}

main().catch((err) => {
  console.error("Fatal error:", err);
  process.exit(1);
});
What's happening:
  • messages keeps the full conversation history in Mastra's expected format
  • agent.generate runs the agent with conversation history and Asana toolsets
  • maxSteps limits how many tool calls the agent can take in a single run
  • onStepFinish is a hook that prints intermediate steps for debugging

Complete Code

Here's the complete code to get you started with Asana and Mastra AI:

typescript
import "dotenv/config";
import { openai } from "@ai-sdk/openai";
import { Agent } from "@mastra/core/agent";
import { MCPClient } from "@mastra/mcp";
import { Composio } from "@composio/core";
import * as readline from "readline";

import type { AiMessageType } from "@mastra/core/agent";

const openaiAPIKey = process.env.OPENAI_API_KEY;
const composioAPIKey = process.env.COMPOSIO_API_KEY;
const composioUserID = process.env.COMPOSIO_USER_ID;

if (!openaiAPIKey) throw new Error("OPENAI_API_KEY is not set");
if (!composioAPIKey) throw new Error("COMPOSIO_API_KEY is not set");
if (!composioUserID) throw new Error("COMPOSIO_USER_ID is not set");

const composio = new Composio({ apiKey: composioAPIKey as string });

async function main() {
  const session = await composio.create(composioUserID as string, {
    toolkits: ["asana"],
  });

  const composioMCPUrl = session.mcp.url;

  const mcpClient = new MCPClient({
    id: composioUserID as string,
    servers: {
      asana: {
        url: new URL(composioMCPUrl),
        requestInit: {
          headers: session.mcp.headers,
        },
      },
    },
    timeout: 30_000,
  });

  const composioTools = await mcpClient.getTools();

  const agent = new Agent({
    name: "asana-mastra-agent",
    instructions: "You are an AI agent with Asana tools via Composio.",
    model: "openai/gpt-5",
  });

  let messages: AiMessageType[] = [];

  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    prompt: "> ",
  });

  rl.prompt();

  rl.on("line", async (input: string) => {
    const trimmed = input.trim();
    if (["exit", "quit"].includes(trimmed.toLowerCase())) {
      rl.close();
      return;
    }

    messages.push({ id: crypto.randomUUID(), role: "user", content: trimmed });

    const { text } = await agent.generate(messages, {
      toolsets: { asana: composioTools },
      maxSteps: 8,
    });

    if (text) {
      console.log(`Agent: ${text}\n`);
      messages.push({ id: crypto.randomUUID(), role: "assistant", content: text });
    }

    rl.prompt();
  });

  rl.on("close", async () => {
    await mcpClient.disconnect();
    process.exit(0);
  });
}

main();

Conclusion

You've built a Mastra AI agent that can interact with Asana through Composio's Tool Router. You can extend this further by:
  • Adding other toolkits like Gmail, Slack, or GitHub
  • Building a web-based chat interface around this agent
  • Using multiple MCP endpoints to enable cross-app workflows
TOOLS & TRIGGERS

Supported Tools and Triggers

Every Asana action and event your agent gets out of the box.

Add a custom field to a goal

Add a custom field to a goal.

Add a custom field to a portfolio

Add a custom field to a portfolio.

Add a custom field to a project

Add a custom field to a project.

Add a collaborator to a goal

Add a collaborator to a goal.

Add Followers to Project

Tool to add followers to a project in Asana.

Add Followers to Task

Tool to add followers to a task in Asana.

Add item to portfolio

Add a project (or other supported item) to an Asana portfolio using the native addItem endpoint.

Add users to a portfolio

Add users to a portfolio.

Add Members to Project

Tool to add users to a project in Asana.

Add Project to Task

Tool to add a project to a task in Asana.

Add Supporting Relationship to Goal

Tool to add a supporting goal relationship to a goal.

Add Tag to Task

Tool to add an existing tag to a task in Asana.

Add Task Dependencies

Tool to add dependency relationships to an Asana task.

Add Task Dependents

Mark tasks as dependents of an Asana prerequisite task, if not already linked.

Add task to section

Adds an existing task to a section, optionally positioning it before or after another task in that section; if no position is specified, the task is added to the end.

Add User for Team

Tool to add a user to a team in Asana.

Add User for Workspace

Tool to add a user to a workspace or organization in Asana.

Approve Access Request

Tool to approve an access request in Asana.

Create Access Request

Tool to create an access request in Asana.

Create Allocation

Creates an allocation for a user in a workspace over a defined period, with an effort value in hours or percent and an optional project association.

Create a project

Creates a new Asana project in the specified workspace.

Create a tag in a workspace

Creates a new tag, with properties like name and color defined in the request body, within a specific Asana workspace (using `workspace_gid`); this tag helps categorize tasks, is confined to the workspace, and is not automatically applied to tasks.

Create task in asana with specific details

Creates a new Asana task; requires 'workspace', 'parent', or 'projects' for association, and 'followers', 'projects', 'tags' are set only at creation.

Create Attachment for Object

Tool to upload an attachment or link an external resource to a task, project, or project_brief in Asana.

Create Attachment for Task

Tool to upload an attachment to a task.

Create a budget

Create a budget.

Create Custom Field

Tool to create a new custom field in a workspace.

Create Enum Option for Custom Field

Tool to create a new enum option for a custom field in Asana.

Create a goal

Create a goal.

Create a goal metric

Create a goal metric.

Create Membership

Tool to create a membership by adding a user or team to a project, goal, or portfolio.

Create an OOO entry

Create an OOO entry.

Create a portfolio

Create a portfolio.

Create Project Brief

Tool to create a project brief for a project.

Create project for team

Tool to create a project in a team.

Create project for workspace

Tool to create a project in a workspace.

Create Project Status Update

Tool to create a new status update on a project.

Create a rate

Create a rate.

Create a role

Create a role.

Create a section in a project

Creates a new SECTION (not a task) in a project.

Create Status Update for Object

Tool to create a status update on a project, portfolio, or goal.

Create a story on a goal

Create a story on a goal.

Create subtask

Creates a new Asana subtask under an existing parent task (`task_gid`); `due_on` and `due_at` are mutually exclusive and cannot be set simultaneously.

Create a tag

Tool to create a new tag in an Asana workspace.

Create task comment

Adds a new text comment (story) to an existing Asana task, appearing in its activity feed.

Create Team

Creates a new team in a specified Asana organization for collaboration.

Create a timesheet approval status

Create a timesheet approval status.

Create a time tracking category

Create a time tracking category.

Create a time tracking entry

Create a time tracking entry.

Delete Allocation

Tool to delete an allocation by its ID.

Delete Attachment

Tool to delete an attachment by its globally unique identifier.

Delete a budget

Delete a budget.

Delete Custom Field

Tool to delete a custom field by its globally unique identifier.

Delete a goal

Delete a goal.

Delete Membership

Tool to delete a membership by its GID.

Delete an OOO entry

Delete an OOO entry.

Delete a portfolio

Delete a portfolio.

Delete a project

Delete a project.

Delete Project Brief

Tool to delete a project brief by its GID.

Delete Project Status

Tool to delete a project status by its GID.

Delete a project template

Delete a project template.

Delete a rate

Delete a rate.

Delete a role

Delete a role.

Delete a section

Tool to delete a section by its GID.

Delete Status Update

Tool to delete a status update by its GID.

Delete Story

Tool to delete a story by its GID.

Delete a Tag

Tool to delete a specific tag by its GID.

Delete a task

Delete a task.

Delete a task template

Delete a task template.

Delete a time tracking category

Delete a time tracking category.

Delete a time tracking entry

Delete a time tracking entry.

Delete a webhook

Delete a webhook.

Duplicate a portfolio

Duplicate a portfolio.

Duplicate Project

Duplicate a project with a new name.

Duplicate Task

Duplicate a task, returning an asynchronous job record.

Get Access Requests

Tool to retrieve access requests for a target object.

Get AI Studio credit utilization

Get AI Studio credit utilization.

Get AI Studio seats

Get AI Studio seats.

Get Allocation

Get an allocation by ID.

Get Allocations

Tool to get multiple allocations.

Get a project

Retrieves a specific Asana project by its `project_gid`, with an option to include additional fields for comprehensive details using `opt_fields`; this action does not return tasks within the project.

Get a task

Retrieves full details for a specified task GID accessible by the user; use `opt_fields` to customize returned data.

Get Attachment

Tool to get a single attachment by its globally unique identifier.

Get Audit Log Events

Retrieve audit log events for a workspace or organization, with optional filters.

Get a user task list

Retrieves a user's Asana task list for a specified workspace, using the user GID or `me` in `user_task_list_gid`.

Get a budget

Get a budget.

Get all budgets

Get all budgets.

Get current user

Retrieve the authenticated user, including accessible workspaces, for establishing user context.

Get Custom Field

Retrieve a custom field by its globally unique identifier, with optional selection of returned properties.

Get a goal's custom fields

Get a goal's custom fields.

Get a portfolio's custom fields

Get a portfolio's custom fields.

Get a team's custom fields

Get a team's custom fields.

Get Custom Fields for Workspace

List custom fields in a workspace, returning a page of results and pagination information when available.

Get a custom type

Get a custom type.

Get Custom Types

List custom types associated with a project, returning a page of results and pagination information when available.

Get Events on a Resource

Retrieve events on an Asana resource to monitor changes using a sync token.

Get Favorites for User

Get a user's favorites of a selected resource type within a workspace, ordered as they appear in the Asana sidebar.

Get Goal

Retrieve a single goal by its GID, with optional field selection.

Get a goal relationship

Get a goal relationship.

Get Goal Relationships

Tool to retrieve goal relationships.

Get Goals

Tool to retrieve multiple goals.

Get Job

Tool to retrieve a job by its globally unique identifier.

Get Membership

Tool to retrieve a single membership by its ID.

Get Memberships

Tool to retrieve memberships for goals, projects, portfolios, or custom fields.

Get multiple projects

Returns a list of projects filtered by workspace or team (one required), with optional archived status filter, supporting pagination for large datasets.

Get multiple tasks

Retrieve tasks using exactly one scope: a project, section, tag, user task list, or assignee and workspace together.

Get multiple users

Returns a list of users in an Asana workspace or organization, optionally filtered by workspace or team GID, with support for pagination and specifying optional fields.

Get multiple workspaces

Retrieve workspaces accessible to the authenticated user, with pagination support.

Get OOO Entries

Get one page of out-of-office entries for a user in a workspace.

Get an OOO entry

Get an OOO entry.

Get parent goals from a goal

Get parent goals from a goal.

Get Portfolio

Retrieve a single portfolio by its GID, with optional fields for portfolio details.

Get Portfolio Items

Retrieve items in a portfolio.

Get a portfolio membership

Get a portfolio membership.

Get Portfolio Memberships

Tool to retrieve multiple portfolio memberships.

Get memberships from a portfolio

Get memberships from a portfolio.

Get Portfolios

Retrieve portfolios in a specific workspace for a specified owner.

Get Project Brief

Tool to retrieve a project brief by its GID.

Get Project Custom Field Settings

List the custom-field settings attached to an Asana project.

Get Project Membership

Tool to get a project membership by ID.

Get Project Memberships For Project

Tool to get memberships from a specific project.

Get a project portfolio setting

Get a project portfolio setting.

Get project portfolio settings for a portfolio

Get project portfolio settings for a portfolio.

Get project portfolio settings for a project

Get project portfolio settings for a project.

Get Projects for Task

List projects associated with a specific task.

Get Projects for Team

Tool to get a list of projects for a specific team in Asana.

Get Project Status

Retrieve a project status update by its GID.

Get Project Status Updates

Tool to get status updates for a specific project.

Get Project Template

Get a single Asana project template, including configuration needed to instantiate it.

Get Multiple Project Templates

Tool to retrieve multiple project templates.

Get Project Templates for Team

Tool to get a team's project templates in Asana.

Get a rate

Get a rate.

Get multiple rates

Get multiple rates.

Get Reactions on Object

Tool to get reactions with a specific emoji base character on an object.

Get a role

Get a role.

Get multiple roles

Get multiple roles.

Get Section

Retrieve the full record for a single section by its GID.

Get sections in a project

List compact section records for a specified project.

Get Status Update

Tool to retrieve the full record for a single status update by its GID.

Get Status Updates

Retrieve status updates from an object.

Get stories from a goal

Get stories from a goal.

Get Stories for Task

Tool to get stories (comments, status updates, etc.

Get Story

Retrieve a single story by its GID, with optional selection of response fields.

Get Tag

Tool to get a single tag by its globally unique identifier.

Get Tags

Get multiple tags in a workspace.

Get Tags for Task

Get a page of tags associated with a specific task, with pagination support.

Get Tags For Workspace

Get a page of tags in a specific workspace, with pagination support.

Get Task Attachments

Tool to get the list of attachments for a given task, project, or project_brief.

Get Task Counts For Project

Tool to get task count statistics for a project.

Get a task for a given custom ID

Get a task for a given custom ID.

Get tasks for tag

Tool to retrieve tasks associated with a specific Asana tag by tag GID.

Get tasks for user task list

Tool to retrieve tasks from a user task list by user task list GID.

Retrieve tasks for project

Retrieves tasks from a specified Asana project, with a completion-since filter and optional field selection.

Get tasks from a section

Tool to retrieve tasks that belong to a specific Asana section (column/header) by section GID.

Get Task Subtasks

Lists subtasks of a specified Asana task, with pagination and optional field selection.

Get a task template

Retrieve a task template's configuration by its GID, without instantiating it.

Get Task Templates

Lists Asana task templates for a workspace or project, with pagination.

Get Team

Tool to retrieve details of a specific team by its GID.

Get Team Membership

Tool to retrieve a complete team membership record by its GID.

Get Team Memberships

Tool to retrieve compact team membership records.

Get Team Memberships for Team

Tool to get memberships from a specific team.

Get Team Memberships For User

Retrieve a page of team memberships for a specific user within a workspace.

Get Teams for User

Get a page of team records for a specific user in an organization or workspace.

Get teams in workspace

Retrieve a page of compact team records in a workspace visible to the authorized user.

Get Time Period

Tool to retrieve the full record for a single time period by its GID.

Get Time Periods

Tool to retrieve compact or full representations of time periods.

Get a timesheet approval status

Get a timesheet approval status.

Get multiple timesheet approval statuses

Get multiple timesheet approval statuses.

Get time tracking categories for a workspace

Get time tracking categories for a workspace.

Get a time tracking category

Get a time tracking category.

Get Time Tracking Entries

Tool to get multiple time tracking entries across workspace, tasks, or projects.

Get Time Tracking Entries for Task

Tool to get time tracking entries for a task.

Get time tracking entries for a time tracking category

Get time tracking entries for a time tracking category.

Get a time tracking entry

Get a time tracking entry.

Get Objects via Typeahead

Tool to retrieve objects in a workspace via a typeahead search algorithm.

Get User

Get a user by their ID.

Get User in Workspace

Tool to get a user in a workspace or organization by their GID.

Get Users for Team

Get users in a team.

Get Users in Workspace

Get users in a workspace or organization.

Get User Task List

Tool to get a single user task list by its globally unique identifier.

Get a webhook

Get a webhook.

Get Webhooks

Retrieve a page of webhooks in a workspace, optionally filtered by resource.

Get Workspace

Tool to retrieve details of a specific workspace by its GID.

Get workspace events

Get one page of workspace events since a sync token was created.

Get Workspace Membership

Tool to retrieve a specific workspace membership by its GID.

Get Workspace Memberships

Tool to retrieve the workspace memberships for a specific workspace.

Get Workspace Memberships For User

Retrieve a page of workspace memberships for a specific user.

Get Workspace Projects

Retrieve a page of projects associated with a specific Asana workspace.

Reorder Enum Option for Custom Field

Tool to reorder an existing enum option within a custom field by moving it before or after another specified enum option.

Move or Insert Section in Project

Tool to move or reorder an existing section within a project by repositioning it before or after another section.

Instantiate Project Template

Instantiate (create) a real Asana project from a project template, returning the async job record.

Instantiate a task from a task template

Instantiate a task from a task template.

Get goal relationships

Get goal relationships.

List Task Dependencies

List the prerequisite tasks that must be completed before an Asana task.

List Task Dependents

List tasks that are blocked by a specified Asana task.

Reject access request

Tool to reject an access request.

Remove a custom field from a goal

Remove a custom field from a goal.

Remove a custom field from a portfolio

Remove a custom field from a portfolio.

Remove a custom field from a project

Remove a custom field from a project.

Remove Follower From Task

Tool to remove one or more followers from a task.

Remove Followers For Project

Tool to remove followers from a project in Asana.

Remove a collaborator from a goal

Remove a collaborator from a goal.

Remove Item from Portfolio

Tool to remove an item (e.

Remove users from a portfolio

Remove users from a portfolio.

Remove Members from Project

Tool to remove users from a project in Asana.

Remove Project from Task

Tool to remove a project from a task in Asana.

Removes a supporting goal relationship

Removes a supporting goal relationship.

Remove Tag from Task

Tool to remove an existing tag from a task in Asana.

Remove Task Dependencies

Tool to unlink selected prerequisite relationships from an Asana task without deleting any task.

Remove Task Dependents

Unlink selected dependent tasks from an Asana prerequisite task without deleting any task.

Remove User For Team

Tool to remove a user from a team.

Remove User from Workspace

Tool to remove a user from a workspace or organization.

Roll up subtask dates for a project

Start a background job to reconcile subtask dates in a project.

Roll up subtask dates for a task

Start a background job to reconcile a task's subtask dates.

Create a project template from a project

Create a project template from a project.

Search projects in a workspace

Search projects in a workspace.

Search Tasks in Workspace

Search tasks in an Asana workspace by project, assignee, task subtype or text, with optional result fields and a limit of 1–100.

Set parent for task

Tool to set the parent of a task in Asana.

Submit Parallel Requests (Batch API)

Submit up to 10 Asana API requests in parallel using the Batch API, such as fetching multiple tasks or creating multiple subtasks.

Trigger a rule

Trigger a rule.

Update Allocation

Tool to update an existing allocation by its ID.

Update a task

Updates attributes of an existing Asana task identified by its task_gid.

Update a budget

Update a budget.

Update Custom Field

Update the name or description of a custom field by its globally unique identifier.

Update Enum Option

Tool to update an enum option for a custom field.

Update a goal

Update a goal.

Update a goal metric

Update a goal metric.

Update a goal relationship

Update a goal relationship.

Update a membership

Update a membership.

Update an OOO entry

Update an OOO entry.

Update a portfolio

Update a portfolio.

Update a project

Update a project.

Update Project Brief

Tool to update a project brief by its GID.

Update a project portfolio setting

Update a project portfolio setting.

Update a rate

Update a rate.

Update a role

Update a role.

Update Section

Update a section's name or position within a project.

Update Story

Tool to update a story on a task.

Update Tag

Tool to update an existing tag by its globally unique identifier.

Update a team

Tool to update details of an existing team.

Update a timesheet approval status

Update a timesheet approval status.

Update a time tracking category

Update a time tracking category.

Update a time tracking entry

Update a time tracking entry.

Update User

Update a user's custom fields.

Update User for Workspace

Tool to update a user in a workspace or organization.

Update a webhook

Update an existing Asana webhook's event filter configuration.

Update a workspace

Update a workspace.

FAQ

Frequently asked questions

Start with Asana.It takes 30 seconds.

Managed auth, hosted MCP servers, and every Asana tool your agent needs.Free to start.

Start building