Asana connector
OAuth 2.1/DCR Project ManagementProductivityConnect to Asana MCP server to manage tasks, projects, and teams directly from your AI workflows.
Asana connector
-
Install the SDK
Section titled “Install the SDK”Terminal window npm install @scalekit-sdk/nodeTerminal window pip install scalekit -
Set your credentials
Section titled “Set your credentials”Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret> -
Set up the connector
Section titled “Set up the connector”Register your Asana credentials with Scalekit so it handles the token lifecycle. You do this once per environment.
Dashboard setup steps
Asana uses Dynamic Client Registration (DCR) — no client ID or secret is needed. The only step is registering your Scalekit redirect URI as an allowed domain in Atlassian Administration.
-
Copy the redirect URI from Scalekit
In the Scalekit dashboard, go to AgentKit > Connections > Create Connection. Find Asana and click Create. Copy the redirect URI — it looks like
https://<SCALEKIT_ENVIRONMENT_URL>/sso/v1/oauth/<CONNECTION_ID>/callback. -
Open the Rovo MCP server settings in Atlassian
- Go to admin.atlassian.com and select your organisation.
- In the left sidebar, expand Rovo and click Rovo access.
- Click Rovo MCP server in the submenu.
- Select the Domains tab at the top of the page.
-
Add the redirect URI as a domain
- Under Your domains, click Add domain.
- In the Add domain dialog, paste the redirect URI from Scalekit into the Domain field.
- Accept the terms and click Add.
Once added, Scalekit automatically registers the OAuth client via DCR and handles token management for every user who authorizes the connection — no further configuration needed.
-
-
Authorize and make your first call
Section titled “Authorize and make your first call”quickstart.ts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENV_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'asanamcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Asana:', link)process.stdout.write('Press Enter after authorizing...')await new Promise(r => process.stdin.once('data', r))// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'asanamcp_get_me',toolInput: {},})console.log(result)quickstart.py import osfrom scalekit.client import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENV_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "asanamcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Asana:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="asanamcp_get_me",connection_name=connection_name,identifier=identifier,)print(result)
What you can do
Section titled “What you can do”Connect this agent connector to let your agent:
- Comment add — Post a comment (discussion entry) to a specific Asana task
- Create project, project preview, project status update — Create a new Asana project with optional sections and tasks pre-populated
- Delete task — Permanently delete an Asana task and all of its dependent subtasks
- Get agent, attachments, items for portfolio — Retrieve full details of a specific Asana AI Teammate agent record by its GID
- Search objects, tasks, tasks preview — Universal search across Asana resource types including tasks, projects, portfolios, goals, teams, users, tags, and custom fields
- Update tasks — Modify one or more Asana tasks in a single operation
Common workflows
Section titled “Common workflows”Get your cloud ID
Most Asana tools require a cloudId — the UUID that identifies your Atlassian cloud site. Call asanamcp_getaccessibleatlassianresources once to retrieve it, then pass the id field value in every subsequent tool call.
// Step 1 — get the cloud IDconst resources = await actions.executeTool({ connectionName: 'asanamcp', identifier: 'user_123', toolName: 'asanamcp_getaccessibleatlassianresources', toolInput: {},});const cloudId = resources[0].id;
// Step 2 — use cloudId in subsequent callsconst issue = await actions.executeTool({ connectionName: 'asanamcp', identifier: 'user_123', toolName: 'asanamcp_getjiraissue', toolInput: { cloudId, issueIdOrKey: 'KAN-1', },});console.log(issue);# Step 1 — get the cloud IDresources = actions.execute_tool( connection_name="asanamcp", identifier="user_123", tool_name="asanamcp_getaccessibleatlassianresources", tool_input={},)cloud_id = resources[0]["id"]
# Step 2 — use cloud_id in subsequent callsissue = actions.execute_tool( connection_name="asanamcp", identifier="user_123", tool_name="asanamcp_getjiraissue", tool_input={ "cloudId": cloud_id, "issueIdOrKey": "KAN-1", },)print(issue)The asanamcp_getaccessibleatlassianresources response looks like this:
[ { "id": "a4c9b3e2-1234-5678-abcd-ef0123456789", "name": "My Company", "url": "https://mycompany.atlassian.net", "scopes": ["read:jira-work", "write:jira-work", "read:confluence-content.all"] }]Use id as the cloudId parameter. If the user belongs to multiple Atlassian sites, the list contains one entry per site — pick the one matching the target url.
Tool list
Section titled “Tool list”Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.
asanamcp_add_comment
#
Post a comment (discussion entry) to a specific Asana task. Supports plain text or HTML formatting. 3 params
Post a comment (discussion entry) to a specific Asana task. Supports plain text or HTML formatting.
task_gid string required GID of the task to post a comment on. Find the GID in the Asana task URL. Example: '1234567890123456' html string optional HTML-formatted content of the comment. Use for rich text formatting with bold, links, etc. Example: '<body>This looks <strong>good</strong>!</body>' text string optional Plain text content of the comment. Use this for simple text comments without formatting. Example: 'This looks good, approved!' asanamcp_create_project
#
Create a new Asana project with optional sections and tasks pre-populated. 5 params
Create a new Asana project with optional sections and tasks pre-populated.
name string required Name of the project to create. This is the primary label shown in Asana's project list. Example: 'Q4 Product Launch' description string optional Description of the project, explaining its purpose or scope. Example: 'Track all Q4 product launch tasks.' sections array optional Names of sections to pre-create in the project. Sections help organize tasks into groups. Example: ["Planning", "In Progress", "Done"] team string optional GID of the team to associate the project with. Team projects are visible to all team members. Example: '1234567890123456' workspace_gid string optional GID of the workspace where the project should be created. Required if no team is specified. Example: '1234567890123456' asanamcp_create_project_preview
#
Present a structured project plan for confirmation before creating the project in Asana. 5 params
Present a structured project plan for confirmation before creating the project in Asana.
name string required Name of the project to preview. This is the primary label shown in Asana's project list. Example: 'Q4 Product Launch' description string optional Description of the project, explaining its purpose or scope. Example: 'Track all Q4 product launch tasks.' sections array optional Names of sections to pre-create in the project. Sections help organize tasks into groups. Example: ["Planning", "In Progress", "Done"] team string optional GID of the team to associate the project with. Team projects are visible to all team members. Example: '1234567890123456' workspace_gid string optional GID of the workspace where the project should be created. Required if no team is specified. Example: '1234567890123456' asanamcp_create_project_status_update
#
Post a status update to an Asana project or portfolio, including a title, status color, and body text. 4 params
Post a status update to an Asana project or portfolio, including a title, status color, and body text.
project_or_portfolio_gid string required GID of the project or portfolio to post the status update to. Find the GID in the Asana project or portfolio URL. Example: '1234567890123456' status_type string required Status color indicator representing the health of the project. Valid values: 'on_track', 'at_risk', 'off_track', 'on_hold', 'complete'. Example: 'on_track' title string required Title of the status update. Appears as the headline of the status entry. Example: 'On track for Q4 launch' body string optional Detailed body text of the status update. Provides additional context, highlights, and notes. Example: 'All milestones are on track. Team velocity is good.' asanamcp_create_task_preview
#
Draft an Asana task for review before creation. Shows a preview to the user without immediately creating the task. 6 params
Draft an Asana task for review before creation. Shows a preview to the user without immediately creating the task.
name string required Name (title) of the task to preview. This is the primary identifier that will be shown in Asana's task list. Example: 'Review Q4 report' assignee string optional GID or 'me' of the user to assign the task to. Use 'me' to assign to the authenticated user. Example: 'me' or '1234567890123456' description string optional Task description in plain text or HTML. Provides additional context for the preview. Example: 'Please review the Q4 financial report.' due_date string optional Proposed due date in ISO 8601 format (YYYY-MM-DD). Example: '2024-12-31' project string optional GID of the project to add the task to. Example: '1234567890123456' section string optional GID of the section within the project to place the task in. Requires project to also be specified. Example: '1234567890123456' asanamcp_create_tasks
#
Create one or more Asana tasks immediately, without a confirmation step. Supports creating up to 50 tasks in a single call. 7 params
Create one or more Asana tasks immediately, without a confirmation step. Supports creating up to 50 tasks in a single call.
name string required Name (title) of the task to create. This is the primary identifier shown in the Asana task list. Example: 'Review Q4 report' assignee string optional GID or 'me' of the user to assign the task to. Use 'me' to assign to the authenticated user. Example: 'me' or '1234567890123456' description string optional Task description in plain text or HTML. Provides additional context and details for the task. Example: 'Please review the Q4 financial report.' due_date string optional Due date for the task in ISO 8601 format (YYYY-MM-DD). Example: '2024-12-31' project string optional GID of the project to add the task to. Find the project GID in the Asana project URL. Example: '1234567890123456' section string optional GID of the section within the project to place the task in. Requires project to also be specified. Example: '1234567890123456' workspace_gid string optional GID of the workspace where the task should be created. Required if no project is specified. Example: '1234567890123456' asanamcp_delete_task
#
Permanently delete an Asana task and all of its dependent subtasks. This action cannot be undone. 1 param
Permanently delete an Asana task and all of its dependent subtasks. This action cannot be undone.
task_gid string required GID of the task to permanently delete. All subtasks will also be deleted. This action cannot be undone. Example: '1234567890123456' asanamcp_get_agent
#
Retrieve full details of a specific Asana AI Teammate agent record by its GID. 1 param
Retrieve full details of a specific Asana AI Teammate agent record by its GID.
agent_gid string required The GID of the AI Teammate agent to retrieve. asanamcp_get_attachments
#
Retrieve file attachments with download and view URLs for a task, project, or brief. 2 params
Retrieve file attachments with download and view URLs for a task, project, or brief.
parent_gid string required GID of the task, project, or project brief to get attachments for. parent_type string optional Type of the parent resource. Valid values: task, project, project_brief. asanamcp_get_items_for_portfolio
#
Return all projects and other items contained within a specific Asana portfolio. 1 param
Return all projects and other items contained within a specific Asana portfolio.
portfolio_gid string required The GID of the portfolio to retrieve items for. asanamcp_get_me
#
Return profile details for the currently authenticated Asana user, including name, email, and workspace memberships. 0 params
Return profile details for the currently authenticated Asana user, including name, email, and workspace memberships.
asanamcp_get_my_tasks
#
Retrieve tasks assigned to the currently authenticated Asana user. 1 param
Retrieve tasks assigned to the currently authenticated Asana user.
completion_status string optional Filter tasks by completion status. Valid values: 'incomplete' (default), 'completed', 'all'. Example: 'incomplete' asanamcp_get_portfolio
#
Retrieve details of a specific Asana portfolio including its associated projects and status. 1 param
Retrieve details of a specific Asana portfolio including its associated projects and status.
portfolio_gid string required The GID (global identifier) of the Asana portfolio to retrieve. Example: '1234567890123456' asanamcp_get_portfolios
#
List all portfolios owned by the currently authenticated Asana user. 1 param
List all portfolios owned by the currently authenticated Asana user.
workspace_gid string optional The GID of the workspace to filter portfolios by. If omitted, returns portfolios across all workspaces. Example: '1234567890123456' asanamcp_get_project
#
Fetch details of a specific Asana project including its sections and member information. 1 param
Fetch details of a specific Asana project including its sections and member information.
project_gid string required The GID (global identifier) of the Asana project to retrieve. Example: '1234567890123456' asanamcp_get_projects
#
List workspace projects, optionally filtered by team. Returns project names, GIDs, and status. 3 params
List workspace projects, optionally filtered by team. Returns project names, GIDs, and status.
include_archived boolean optional Whether to include archived projects in the results. Defaults to false if omitted. team string optional Filter projects by team GID. Only projects belonging to the specified team will be returned. Example: '1234567890123456' workspace_gid string optional The GID of the workspace to list projects from. Example: '1234567890123456' asanamcp_get_status_overview
#
Returns an aggregated status report for one or more Asana projects or portfolios, including health indicators and progress updates. 2 params
Returns an aggregated status report for one or more Asana projects or portfolios, including health indicators and progress updates.
project_or_portfolio string optional Name or GID of the project or portfolio to get status for. workspace_gid string optional Workspace GID to look up the project or portfolio in. asanamcp_get_task
#
Retrieve comprehensive details of a specific Asana task by its GID, including assignments, dates, custom fields, and comments. 1 param
Retrieve comprehensive details of a specific Asana task by its GID, including assignments, dates, custom fields, and comments.
task_gid string required The GID (global identifier) of the Asana task to retrieve. Example: '1234567890123456' asanamcp_get_tasks
#
Returns a filtered list of tasks by context. At least one filter parameter (project, section, tag, user_task_list, or assignee) is required. 6 params
Returns a filtered list of tasks by context. At least one filter parameter (project, section, tag, user_task_list, or assignee) is required.
assignee string optional Filter tasks by assignee. Provide an assignee GID or the string 'me' for the current user. Example: 'me' or '1234567890123456' completed boolean optional Filter tasks by completion status. Set to true to return only completed tasks, false for incomplete tasks. If omitted, returns all tasks. project string optional Filter tasks by project GID. Example: '1234567890123456' section string optional Filter tasks by section GID. Returns tasks in the specified section. Example: '1234567890123456' tag string optional Filter tasks by tag GID. Returns tasks associated with the specified tag. Example: '1234567890123456' user_task_list string optional Filter tasks by user task list (My Tasks) GID. Example: '1234567890123456' asanamcp_get_teams
#
List teams in the workspace, optionally filtered to teams the specified user is a member of. 2 params
List teams in the workspace, optionally filtered to teams the specified user is a member of.
user string optional User GID or 'me' to filter teams by the user's membership. workspace_gid string optional Workspace GID to list teams from. asanamcp_get_user
#
Retrieve details of an Asana user by their GID, email address, or 'me' for the current user. 2 params
Retrieve details of an Asana user by their GID, email address, or 'me' for the current user.
email string optional Email address of the user to look up. user_gid string optional User GID or 'me' to retrieve the authenticated user's details. asanamcp_get_users
#
List users in the workspace, optionally filtered to members of a specific team. 2 params
List users in the workspace, optionally filtered to members of a specific team.
team string optional Team GID to filter users by team membership. workspace_gid string optional Workspace GID to list users from. asanamcp_get_workspace_agents
#
Return a list of all AI Teammate agents configured in the Asana workspace. 0 params
Return a list of all AI Teammate agents configured in the Asana workspace.
asanamcp_search_objects
#
Universal search across Asana resource types including tasks, projects, portfolios, goals, teams, users, tags, and custom fields. 3 params
Universal search across Asana resource types including tasks, projects, portfolios, goals, teams, users, tags, and custom fields.
resource_type string required Type of Asana resource to search. Valid values: task, project, portfolio, goal, team, user, tag, custom_field. Example: 'task' query string optional Search query text to match against resource names and descriptions. Example: 'Q4 planning' workspace_gid string optional The GID of the workspace to scope the search within. If omitted, searches across all accessible workspaces. Example: '1234567890123456' asanamcp_search_tasks
#
Advanced task searching with full-text and attribute-based filtering. Requires a Premium Asana account. 10 params
Advanced task searching with full-text and attribute-based filtering. Requires a Premium Asana account.
assignee string optional Filter tasks by assignee GID or 'me' for the current user. Example: 'me' completed boolean optional Filter by completion status. Set to true to return only completed tasks, false for incomplete tasks. due_on string optional Filter tasks with an exact due date (ISO 8601 format). Example: '2024-12-31' due_on_after string optional Filter tasks due after this date (ISO 8601 format, inclusive). Example: '2024-01-01' due_on_before string optional Filter tasks due before this date (ISO 8601 format, exclusive). Example: '2024-12-31' project string optional Filter tasks by project GID. Example: '1234567890123456' section string optional Filter tasks by section GID. Example: '1234567890123456' tag string optional Filter tasks by tag GID. Example: '1234567890123456' text string optional Full-text search query to match against task names and descriptions. Example: 'website redesign' workspace_gid string optional The GID of the workspace to search within. Example: '1234567890123456' asanamcp_search_tasks_preview
#
Display interactive search results for Asana tasks matching the given filters, before committing to any action. 5 params
Display interactive search results for Asana tasks matching the given filters, before committing to any action.
assignee string optional Filter tasks by assignee GID or 'me' for the authenticated user. Example: 'me' or '1234567890123456' due_date_range_end string optional End of the due date range filter in ISO 8601 format (YYYY-MM-DD). Returns tasks with due dates on or before this date. Example: '2024-12-31' due_date_range_start string optional Start of the due date range filter in ISO 8601 format (YYYY-MM-DD). Returns tasks with due dates on or after this date. Example: '2024-01-01' status string optional Filter tasks by completion status. Valid values: 'incomplete', 'completed', 'all'. Example: 'incomplete' text string optional Full-text search query for tasks. Matches against task name, description, and other text fields. Example: 'Q4 launch' asanamcp_update_tasks
#
Modify one or more Asana tasks in a single operation. Supports updating up to 50 tasks at once. 6 params
Modify one or more Asana tasks in a single operation. Supports updating up to 50 tasks at once.
task_gids array required List of GIDs of the tasks to update. Up to 50 task GIDs may be provided in a single call. Example: ["1234567890123456", "9876543210987654"] assignee string optional New assignee GID or 'me' to reassign the task(s). Use 'me' to assign to the authenticated user. Example: 'me' or '1234567890123456' completed boolean optional Set to true to mark the task(s) as completed, or false to reopen them. Example: true description string optional New description for the task(s). Replaces the existing description. Supports plain text or HTML. Example: 'Updated task description.' due_date string optional New due date in ISO 8601 format (YYYY-MM-DD). Replaces the existing due date. Example: '2024-12-31' name string optional New name (title) for the task(s). Replaces the existing task name. Example: 'Updated task name'