Asana MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ASANA_ACCESS_TOKEN | Yes | Your Asana personal access token | |
| ASANA_READ_ONLY_MODE | No | Set to true to disable all write operations | |
| ASANA_DEFAULT_WORKSPACE_GID | No | Default workspace GID — tools use this when no workspace is specified |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
| completions | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| asana_list_workspacesA | List all Asana workspaces accessible to the current token. Call this first to get the workspace GID required by most other tools. Most accounts have exactly one workspace. Returns an array with gid, resource_type, and name by default. |
| asana_get_userA | Get details for an Asana user by GID, email address, or |
| asana_get_users_for_workspaceA | List all users in a workspace. Returns gid, name, and email for each user. Use this to find a user's GID before assigning tasks or filtering by assignee. Supports pagination for large workspaces. |
| asana_get_teamA | Get details for a team by GID. Returns gid, name, description, and organization. Use asana_get_teams_for_workspace to find team GIDs. |
| asana_get_teams_for_workspaceA | List all teams in a workspace. Returns gid and name for each team. Use this to find a team GID before calling asana_create_project — most organization workspaces require a team. Supports pagination. |
| asana_typeaheadA | Search for Asana objects (tasks, projects, users, tags, teams, portfolios, goals) by partial name. Returns up to 100 compact results with gid and name. Use this to find the GID of a resource when you only know its name — e.g. find a task called 'Fix login bug' before updating it. Results are ordered by relevance (recency for projects, contact frequency for users). For users, include |
| asana_search_projectsA | Search for projects in a workspace by name using a regex pattern. Fetches all projects (auto-paginated) and filters client-side. Use |
| asana_get_projectA | Get full details for a project by GID. Returns gid, name, archived, color, created_at, modified_at, default_view, due_on, start_on, notes, privacy_setting, public, team.gid, and workspace.gid by default. |
| asana_get_project_task_countsA | Get task counts for a project broken down by completion status. IMPORTANT: returns an empty object unless opt_fields specifies count fields explicitly. Always include opt_fields. |
| asana_get_project_sectionsA | List all sections in a project. Returns array of objects with gid, name, resource_type. Section GIDs are needed to place tasks in specific sections or to call section-specific tools. |
| asana_create_projectA | Create a new project in a workspace. In organization workspaces (most), a team GID is required. Returns the created project object. |
| asana_update_projectA | Update fields on an existing project. Only supply the fields you want to change. Returns the updated project object. |
| asana_delete_projectA | Permanently delete a project and all its tasks. This action cannot be undone. |
| asana_get_project_statusA | Get a single project status update by its GID. Returns the status object including text, color (green/yellow/red), title, author, and created_at. |
| asana_get_project_statusesA | List all status updates for a project, ordered newest first. Status updates are the periodic health check-ins (green/yellow/red) visible in the project's status tab. Returns an array of status objects. |
| asana_create_project_statusA | Create a new status update for a project (the health check-in shown in the project's status tab). Returns the created status object. Use |
| asana_delete_project_statusA | Permanently delete a project status update. This cannot be undone. |
| asana_search_tasksA | Full-text search for tasks across a workspace with advanced filters. Searches task names AND descriptions. Returns up to 100 results (no auto-pagination). Prefer filters like |
| asana_get_taskA | Get full details for a single task by GID. Default response is minimal (gid + name only) — always use opt_fields. Returns rich data including custom fields, memberships (project+section), HTML notes, parent, subtask count, tags, and followers. |
| asana_create_taskA | Create a new task. Use |
| asana_update_taskA | Update fields on an existing task. Only supply the fields you want to change. Returns the updated task object. To mark complete: set |
| asana_create_subtaskA | Create a subtask under an existing task. Subtasks are tasks with a parent. Returns the created subtask object. Use asana_get_subtasks to list existing subtasks. |
| asana_get_multiple_tasks_by_gidA | Fetch up to 25 tasks by GID in a single call. More efficient than calling asana_get_task repeatedly. Use when you have a known list of task GIDs (e.g. from a search result). Returns the same fields as asana_get_task. |
| asana_add_project_to_taskA | Add an existing task to a project (tasks can belong to multiple projects). Added to the end of the project by default. Optionally specify a section or relative position. Use at most one of: section, insert_after, insert_before. |
| asana_remove_project_from_taskA | Remove a task from a project. The task still exists and remains in any other projects it belongs to. Only removes the association. |
| asana_delete_taskA | Permanently delete a task including all its subtasks. This cannot be undone. Use asana_update_task with |
| asana_get_subtasksA | List all direct subtasks of a task. Returns only one level deep — call recursively for nested subtasks. Returns minimal fields by default, use opt_fields for more. |
| asana_get_tasks_for_projectA | List all tasks in a project (direct members only, not subtasks). Returns tasks across all sections. For tasks in a specific section use asana_get_tasks_for_section. Returns minimal fields by default — use opt_fields. |
| asana_get_tasks_for_sectionA | List all tasks in a specific project section. Use asana_get_project_sections to get section GIDs. Returns minimal fields by default — use opt_fields. |
| asana_add_task_dependenciesA | Mark one or more tasks as dependencies of a given task (i.e. the given task cannot start until the dependency tasks are complete). Returns an empty object |
| asana_add_task_dependentsA | Mark one or more tasks as dependents of a given task (i.e. those tasks cannot start until this task is complete). Returns an empty object |
| asana_set_parent_for_taskA | Convert a task into a subtask by assigning it a parent task. Optionally control the subtask's position among its siblings. Returns the updated task object including the new parent. To remove a parent (promote a subtask to top-level), set parent to |
| asana_get_task_storiesA | Get all stories (comments and system activity) for a task, ordered oldest first. Returns an array of story objects — each has |
| asana_create_task_storyA | Add a comment to a task. Provide either |
| asana_get_tagA | Get full details for a single tag by GID. Returns the tag's name, color, notes, followers, and workspace. Use asana_get_tags_for_workspace to find a tag GID by name. |
| asana_get_tags_for_taskA | List all tags currently applied to a task. Returns an array of tag objects with gid, name, and color. Tags are workspace-scoped labels used to categorize tasks across projects. |
| asana_get_tags_for_workspaceA | List all tags in a workspace. Tags are workspace-scoped and can be applied to any task. Returns an array of tag objects. Use limit and offset for pagination on large workspaces. |
| asana_update_tagA | Update the name, color, or notes of an existing tag. Only supply the fields you want to change. Returns the updated tag object. |
| asana_delete_tagA | Permanently delete a tag from the workspace. This does NOT remove the tag from tasks — it just deletes the tag itself. Returns an empty object |
| asana_get_tasks_for_tagA | List all tasks that have a specific tag applied. Returns an array of task objects. Useful for finding all tasks in a workspace labeled with a particular tag, regardless of project. |
| asana_create_tag_for_workspaceA | Create a new tag in a workspace. Tags are workspace-scoped and can be applied to any task. Returns the created tag object. After creating, use asana_add_tag_to_task to apply it. |
| asana_add_tag_to_taskA | Apply a tag to a task. Returns an empty object |
| asana_remove_tag_from_taskA | Remove a tag from a task (does not delete the tag itself). Returns an empty object |
| asana_get_sectionA | Get details for a single section by GID. Returns the section's name, created_at, and parent project. Use asana_get_project_sections to list all sections in a project and find GIDs. |
| asana_create_sectionA | Create a new section in a project. Sections appear as column headers in board view or group headers in list view. Returns the created section object with gid and name. Use insert_before or insert_after to control placement. |
| asana_update_sectionA | Rename an existing section. Returns the updated section object with gid and name. To reorder sections, use asana_move_section instead. |
| asana_delete_sectionA | Delete a section from a project. Tasks in the deleted section are moved to the project's default (first) section — they are NOT deleted. The last remaining section in a project cannot be deleted. Returns a success message. |
| asana_move_sectionA | Reorder a section within a project by moving it before or after another section. Returns an empty object |
| asana_add_task_to_sectionA | Move a task into a specific section within a project. The task is placed at the top of the section unless insert_before or insert_after is specified. Returns a success message. Prefer using the |
| asana_get_portfolioA | Get full details for a portfolio by GID. Returns name, color, public status, owner, members, and workspace. Use asana_get_portfolios to find portfolio GIDs. |
| asana_get_portfoliosA | List portfolios in a workspace. IMPORTANT: The |
| asana_create_portfolioA | Create a new portfolio in a workspace. Portfolios group related projects for high-level tracking. Returns the created portfolio object with gid and name. |
| asana_update_portfolioA | Update the name, color, or public visibility of a portfolio. Only supply the fields to change. Returns the updated portfolio object. |
| asana_delete_portfolioA | Permanently delete a portfolio. This does NOT delete the projects in the portfolio. Returns a success message. |
| asana_get_portfolio_itemsA | List all projects in a portfolio. Returns an array of project objects with gid, name, color, and archived status. Use asana_add_portfolio_item to add projects. |
| asana_add_portfolio_itemA | Add a project to a portfolio. Optionally control placement with insert_before or insert_after. Returns a success message. |
| asana_remove_portfolio_itemA | Remove a project from a portfolio. This does NOT delete the project — it only removes the association. Returns a success message. |
| asana_get_goalA | Get full details for a goal by GID. Returns name, status, notes, owner, team, time_period, followers, and workspace. Use asana_get_goals to list goals and find GIDs. |
| asana_get_goalsA | List goals in a workspace. Returns an array of goal objects with gid, name, status, owner, and team. Filter by team or time period using optional params. Supports pagination. |
| asana_create_goalA | Create a new goal in a workspace. IMPORTANT: |
| asana_update_goalA | Update fields on an existing goal. Only supply the fields to change. Returns the updated goal object. Note: setting |
| asana_delete_goalA | Permanently delete a goal. This cannot be undone. Returns a success message. |
| asana_get_time_periodsA | List all time periods in a workspace (fiscal years, halves, and quarters). Time periods are used to scope goals. Returns a hierarchical array: FY (fiscal year) → H (half-year) → Q (quarter), each with gid, display_name, start_on, end_on, and parent. Use the GIDs with asana_create_goal or asana_get_goals. |
| asana_get_time_periodA | Get full details for a single time period by GID. Returns display_name, start_on, end_on, and parent time period. Use asana_get_time_periods to find GIDs. |
| asana_get_time_tracking_entriesA | List all time tracking entries logged for a task. Returns an array of entry objects with gid, duration_minutes, entered_on, and created_by. Note: time tracking must be enabled in the workspace. |
| asana_create_time_tracking_entryA | Log time spent on a task. Returns the created entry with gid, duration_minutes, entered_on, and created_by. Note: time tracking must be enabled in the workspace. |
| asana_get_time_tracking_entryA | Get a single time tracking entry by GID. Returns gid, duration_minutes, entered_on, created_by, and task. Use asana_get_time_tracking_entries to find entry GIDs. |
| asana_update_time_tracking_entryA | Update the duration or date of an existing time tracking entry. Returns the updated entry with gid, duration_minutes, and entered_on. |
| asana_delete_time_tracking_entryA | Permanently delete a time tracking entry from a task. This cannot be undone. Returns a success message. |
| asana_get_attachments_for_objectA | List all attachments on a task or project. Returns gid, name, resource_subtype, created_at, and host for each attachment. Use asana_get_attachment to get the download URL for a specific file. |
| asana_get_attachmentA | Get full details for a single attachment by GID. Returns name, download_url, view_url, size, host, created_at, and parent. Use the download_url to access the file. Use asana_get_attachments_for_object to list all attachments on a task. |
| asana_delete_attachmentA | Delete an attachment from a task or project. Returns an empty object |
| asana_create_attachment_for_objectA | Attach an external URL link to a task or project. Creates a named link that appears in the task's attachments panel. Use this to link GitHub PRs, documents, design files, or any external resource to a task. Note: file upload (binary) is not supported through this tool — only URL-based (external) attachments. |
| asana_get_custom_fields_for_workspaceA | List all custom field definitions in a workspace. Returns gid, name, type, and enum_options for each field. Use this to discover available custom fields and their GIDs before reading or writing custom field values on tasks. |
| asana_get_custom_fieldA | Get full details for a custom field by GID. Returns name, type, description, enum_options (with gid, name, color, enabled), precision, and format. Use this to get enum option GIDs before setting custom field values on tasks. |
| asana_create_custom_fieldA | Create a new custom field in a workspace. Supported types: |
| asana_update_custom_fieldA | Update a custom field's name, description, or settings. Note: the |
| asana_delete_custom_fieldA | Permanently delete a custom field from the workspace. This removes the field from all tasks and projects. Locked fields can only be deleted by the user who locked them. Returns an empty object |
| asana_create_enum_optionA | Add a new option to an enum or multi_enum custom field. New options are appended to the end of the list by default. Returns the created enum option with its GID. Use the GID to set this option on tasks via asana_update_task. |
| asana_update_enum_optionA | Update an enum option's name, color, or enabled status. Use this to rename options, change their color, or disable/enable them. Disabled options are hidden from users but existing values are preserved. Returns the updated enum option. |
| asana_get_task_historyA | Reconstruct a task's full lifecycle from its Asana activity stream. Returns the chronological event timeline (assignments, section moves, reschedules, completions, custom-field changes, comments), how long the task spent in each section, cycle/lead time, reschedule history with slip days, ownership churn, and triggered risk signals (stalled, chronic slip, ownership churn, review-bound). Use this to answer 'why is this task late?', 'where did it get stuck?' or 'who has touched it?'. Accepts a task GID, an Asana task URL, or a task name. Costs 2–3 API requests (more for very long activity streams). |
| asana_get_project_flow_metricsA | Compute delivery-flow statistics for a project by replaying the activity stream of its recently-completed tasks. Returns cycle-time and lead-time percentiles (p50/p85/p95 — cycle time is right-skewed, so the mean is reported only as a secondary figure), per-section dwell times ranked worst-first to expose bottlenecks, weekly throughput, reschedule frequency and median slip, and 'worst offender' task lists with clickable permalinks. EXPENSIVE: costs roughly one API request per sampled task, so it is bounded by |
| asana_get_user_activityA | Summarize what a person did in Asana over a date range: tasks completed, tasks created, optional comment activity, and current open workload. Aggregates by month and by project. Uses windowed search to work correctly beyond Asana's 100-result search cap, and always reports coverage so partial results are never mistaken for complete ones. Returns methodology caveats that must be surfaced alongside any figures — notably that |
| asana_find_comparable_tasksA | Find completed tasks similar to a target task, to anchor an estimate on real history (reference-class forecasting). Returns each comparable's story points AND its actual cycle time, which is what reveals where past estimates were wrong. Similarity is computed from name/description term overlap, shared tags, and section match. Use this before estimating so the estimate is grounded in what work of this shape has actually cost. |
| asana_get_velocityA | Compute delivery velocity for a person or project over recent periods. Reports median and MAD (not mean and stddev — small samples make stddev unstable), detects bulk-close periods and excludes them, and reports what fraction of completed tasks actually had story points. When points coverage is below 50% the point velocity is SUPPRESSED and task-count velocity is returned instead, because low-coverage point velocity looks authoritative while measuring an arbitrary subset. Always returns a commitment RANGE, never a single number. |
| asana_match_tasks_to_refsA | Resolve code references — branch names, commit subjects, PR titles — to the Asana tasks they refer to. Recognizes bare GIDs, Asana URLs, |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| asana-help | List everything this Asana server can do, grouped by what you are trying to accomplish, with copy-pasteable examples. Start here if you are not sure which command to use. |
| task-summary | Get a comprehensive summary and status update for an Asana task. Pre-fetches task details, custom fields, and all comments — no additional tool calls required. |
| task-history | Reconstruct and analyze the full history of an Asana task from its activity stream: section timeline, time spent in each stage, handoffs, reschedules, and risk signals. Pre-fetches the entire lifecycle — no additional tool calls required. |
| analyze-task | Score how well-defined and understandable an Asana task is. Pre-fetches the task, subtasks, and comments, then produces a clarity score with a per-dimension breakdown and specific improvement suggestions. |
| task-completeness | Fetch an Asana task, assess whether its description is fully actionable, ask targeted questions to fill gaps, then update the task description. |
| task-breakdown | Break a complex Asana task into well-scoped subtasks. Pre-fetches the task and existing subtasks, then guides creation of a complete subtask checklist. |
| estimate | Estimate an Asana task by anchoring on completed work of similar shape (reference-class forecasting). Pre-fetches comparable tasks with both their original estimates and their ACTUAL cycle times, so the estimate corrects for historical bias instead of inheriting it. Supports a planning-poker mode for team discussion. |
| log-work | Document work that was done outside Asana (ad-hoc, urgent, or support tasks). Searches for the project, creates a task with full context, and marks it complete. Useful for retro-logging. |
| project-summary | Generate a project status report for an Asana project. Pre-fetches project metadata, task counts, recent status updates, and open tasks — no additional tool calls required. |
| status-update | Generate a polished stakeholder status update (email/Slack format) for an Asana project. Pre-fetches project data — no additional tool calls required. |
| project-risks | Scan a project for risk signals (overdue tasks, missing assignees, empty descriptions, milestones at risk) and produce a prioritized risk register with mitigations. |
| flow-report | Analyze delivery flow for an Asana project: cycle/lead time percentiles, which workflow sections are bottlenecks, weekly throughput, reschedule rates, and the worst-offending tasks. Reconstructs history from each task's activity stream. Costs roughly one API request per sampled task. |
| project-onboarding | Generate a 'getting up to speed' brief for someone new to a project. Pre-fetches project details, structure, active tasks, and recent status updates. |
| overdue-triage | Fetch all overdue tasks in a project and help triage them: do now, reschedule, reassign, or drop. Pre-fetches task data — no additional tool calls required. |
| stale-tasks | Find tasks that have had no activity for a long time and decide what to do with each: revive, reassign, reschedule, or close. The highest-return recurring cleanup — stale tasks quietly destroy the signal value of a backlog. |
| prioritize-backlog | Fetch all incomplete tasks in a project and guide prioritization. Organizes by section, surfaces unprioritized items, and asks targeted questions to help rank work. |
| team-workload | Analyze task distribution across team members in an Asana project to identify workload imbalances, overloaded members, and unassigned work. |
| my-tasks | Fetch all incomplete tasks assigned to you and generate a prioritized daily work plan. Optionally scoped to a specific workspace. |
| standup | Generate standup notes by fetching tasks you completed recently and tasks currently assigned to you. Produces a done/doing/blockers summary. |
| weekly-review | Generate a weekly review by fetching tasks completed this week and your current open tasks. Produces a reflection on the past week and a plan for the next. |
| unblock-me | Find what is blocking your work — tasks waiting on dependencies, on other people, or stuck in review — and draft the nudges needed to clear them. Turns 'I'm stuck' into specific, sendable follow-ups. |
| capture | Turn a freeform braindump — meeting notes, a list of thoughts, pasted text — into well-formed Asana tasks in the right projects. Previews everything before creating. The fastest path from 'things in my head' to tracked work. |
| contributions | Summarize a person's Asana work over a period: what they completed and created, how it was distributed across projects and months, and how it compares to the previous period. Pre-fetches everything using windowed search so results are not silently truncated. Reports methodology caveats alongside the figures. |
| portfolio-health | Roll up delivery health across every project in an Asana portfolio: progress, status colour, overdue counts, and ownership. The executive cross-project view — answers 'how is everything going?' in one call. |
| goal-progress | Report progress against Asana goals: current metric values, status, time elapsed versus progress made, and which goals are behind pace. Answers 'how are we tracking against our objectives?' |
| sprint-capacity | Recommend how much work a person or team should commit to next sprint, based on measured historical velocity rather than guesswork. Detects and excludes bulk-close periods, reports points coverage, and always answers with a range. Use before sprint planning to set a realistic commitment. |
| sprint-planning | Plan a sprint from a project's backlog. Pre-fetches incomplete tasks, then guides selection, assignment, and sprint goal definition based on team capacity. |
| sprint-from-confluence | Fetch a Confluence page, extract work items or requirements, and create corresponding Asana tasks in a project. Bridges research/planning docs directly into actionable work. |
| create-task | Interactively guide the creation of a comprehensive Asana task by collecting requirements through targeted questions, then create it using asana_create_task. |
| link-tasks-to-code | Map an Asana project's tasks to the repository's branches and commits. Identifies tasks with no code behind them and commits with no tracked task. Requires the client to have git/filesystem tools; degrades to asking the user to paste git output. |
| tech-debt-roadmap | Turn in-code debt markers (TODO/FIXME/HACK) and churn hotspots into a reviewable Asana backlog. Pre-fetches existing debt-tagged tasks so proposals are deduplicated against work already tracked. Previews before creating anything. |
| estimate-from-code | Estimate an Asana task by examining the actual code that would change, combined with historical comparables. More accurate than title-only estimation because it grounds the estimate in real change surface. |
| release-notes | Generate release notes by combining tasks completed in a window with the commits from the same period. Produces a themed changelog rather than a raw task dump. |
| roadmap-gap-analysis | Compare what the Asana roadmap claims is done against what the codebase actually supports. Surfaces items marked complete that lack tests, error handling, or documentation. |
| impact-analysis | For a proposed change, identify the affected code, related past Asana work, and who last touched the area — to determine blast radius and the right owner. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/BlZvi/asana-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server