MCP Server for Asana
Give your AI assistant full access to Asana. Create tasks, manage projects, track time, search across your workspace — all through natural language.
80 tools | 18 prompt templates | Browsable resources | Full read + write coverage
What can you do with this?
Just talk to your AI assistant naturally:
"How many unfinished tasks are in Sprint 30?"
"Create a task for Sarah to review the API docs, due Friday, in the Backend project"
"Move all overdue tasks in the Marketing project to the Backlog section"
"Log 2 hours on PROJ-1234 for today"
"What's the status of our Q1 goals?"
"Give me a standup summary for today"
"Break down this task into subtasks"
Quick Start
1. Get your Asana token from Asana Developer Console
2. Add the server to your MCP client:
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"asana": {
"command": "npx",
"args": ["-y", "@blzvi/asana-mcp-server"],
"env": {
"ASANA_ACCESS_TOKEN": "your-asana-access-token"
}
}
}
}
Claude Code
claude mcp add asana -e ASANA_ACCESS_TOKEN=<TOKEN> -- npx -y @blzvi/asana-mcp-server
Any MCP-compatible client
This server works with any client that supports the Model Context Protocol:
ASANA_ACCESS_TOKEN=your-token npx -y @blzvi/asana-mcp-server
Install from source (alternative)
git clone https://github.com/BLZvi/asana-mcp-server.git
cd asana-mcp-server
npm install
Then use node build/index.js instead of npx -y @blzvi/asana-mcp-server in the examples above.
80 Tools Across 16 Categories
Full CRUD coverage of the Asana API — your AI can read and write.
| Category | Tools | What you can do |
|---|
| Tasks | 12 | Search, create, update, delete, list by project/section/tag, batch get (up to 25), subtasks, multi-project |
| Task Relationships | 3 | Dependencies, dependents, reparenting |
| Projects | 7 | Search by name, CRUD, get sections & task counts |
| Project Statuses | 4 | CRUD for project status updates |
| Sections | 6 | CRUD, reorder, move tasks between sections |
| Tags | 9 | CRUD, add/remove from tasks, list by workspace/task |
| Custom Fields | 7 | Create/manage field definitions and enum options |
| Portfolios | 8 | CRUD, add/remove projects from portfolios |
| Goals | 5 | CRUD for workspace goals |
| Time Tracking | 7 | Log hours, manage entries, browse time periods |
| Comments & Stories | 2 | Read activity feed, post comments (plain or rich HTML) |
| Attachments | 4 | List, inspect, delete, attach external URLs |
| Users | 2 | Look up users by GID, email, or me |
| Teams | 2 | Get team info, list teams in workspace |
| Typeahead | 1 | Fuzzy search any resource type by name |
| Workspaces | 1 | List all accessible workspaces |
18 Prompt Templates
Pre-built workflows that combine API calls with AI reasoning. The AI pre-fetches relevant Asana data, then produces structured analysis or takes action.
Task-level
| Prompt | Description |
|---|
task-summary | Pre-fetches task details + comments, generates a status summary |
analyze-task | Scores how well-defined a task is (0-100) with per-dimension breakdown |
task-completeness | Fetches a task, identifies gaps, asks clarifying questions, updates the description |
task-breakdown | Breaks a complex task into well-scoped subtasks |
log-work | Retro-log work done outside Asana — creates a task and marks it complete |
Project-level
| Prompt | Description |
|---|
project-summary | Full project status report with task counts, statuses, and open tasks |
status-update | Polished stakeholder status update (email/Slack-ready) |
project-risks | Scans for risk signals (overdue, unassigned, empty descriptions) and produces a risk register |
project-onboarding | "Getting up to speed" brief for someone new to a project |
overdue-triage | Triages overdue tasks: do now, reschedule, reassign, or drop |
prioritize-backlog | Guides prioritization of incomplete tasks by section |
team-workload | Analyzes task distribution across team members to spot imbalances |
Personal productivity
| Prompt | Description |
|---|
my-tasks | Fetches your incomplete tasks and generates a prioritized daily plan |
standup | Done/doing/blockers summary from your recent task activity |
weekly-review | Weekly reflection + plan from completed and open tasks |
Planning & creation
| Prompt | Description |
|---|
sprint-planning | Plans a sprint from a project's backlog based on team capacity |
sprint-from-confluence | Fetches a Confluence page and creates corresponding Asana tasks |
create-task | Guided task creation with clarifying questions |
Browsable Resources
Expose Asana data as MCP resources that clients can browse directly:
| URI Pattern | Description |
|---|
asana://workspace/{gid} | Workspace details, org info, email domains |
asana://project/{gid} | Project details, sections, custom fields, dates |
asana://task/{gid} | Task details, subtasks, custom fields, recent comments |
Configuration
| Variable | Required | Description |
|---|
ASANA_ACCESS_TOKEN | Yes | Your Asana personal access token |
ASANA_DEFAULT_WORKSPACE_GID | No | Default workspace GID — tools use this when no workspace is specified |
ASANA_READ_ONLY_MODE | No | Set to true to disable all write operations (great for safe exploration) |
Read-Only Mode
Set ASANA_READ_ONLY_MODE=true to restrict the server to read-only operations. All create/update/delete tools and write prompts are automatically hidden. Useful for:
- Safely exploring what the server can do before granting write access
- Shared environments where you want to prevent accidental changes
- Audit and reporting use cases
Roadmap
What's coming next:
- Rate limiting / retry — Automatic backoff for Asana's 429 rate limits
- Remove dependencies/dependents — Complete dependency management (currently add-only)
- Story CRUD — Edit and delete comments (currently read + create)
- Duplicate project — Create projects from templates
- Test coverage — Unit and integration tests with vitest
Full Tool Reference
Tasks — 12 tools
| Tool | Description |
|---|
asana_search_tasks | Search tasks with advanced filtering (assignee, project, tags, custom fields, etc.) |
asana_get_task | Get detailed information about a task |
asana_get_multiple_tasks_by_gid | Get details for up to 25 tasks at once |
asana_create_task | Create a task in a project (supports section placement via memberships) |
asana_update_task | Update task details (name, assignee, due date, custom fields, etc.) |
asana_delete_task | Permanently delete a task |
asana_get_tasks_for_project | List all tasks in a project |
asana_get_tasks_for_section | List all tasks in a section |
asana_create_subtask | Create a subtask under a parent task |
asana_get_subtasks | Get all subtasks of a task |
asana_add_project_to_task | Add a task to a project |
asana_remove_project_from_task | Remove a task from a project |
Task Relationships — 3 tools
| Tool | Description |
|---|
asana_add_task_dependencies | Set tasks that a task depends on |
asana_add_task_dependents | Set tasks that depend on a task |
asana_set_parent_for_task | Set/change a task's parent and position |
Projects — 7 tools
| Tool | Description |
|---|
asana_search_projects | Search projects by name pattern |
asana_get_project | Get project details |
asana_create_project | Create a new project |
asana_update_project | Update project details |
asana_delete_project | Delete a project |
asana_get_project_task_counts | Get task count breakdown for a project |
asana_get_project_sections | Get sections in a project |
Project Statuses — 4 tools
| Tool | Description |
|---|
asana_get_project_statuses | Get all status updates for a project |
asana_get_project_status | Get a specific project status |
asana_create_project_status | Create a project status update |
asana_delete_project_status | Delete a project status update |
Sections — 6 tools
| Tool | Description |
|---|
asana_get_section | Get section details |
asana_create_section | Create a section in a project |
asana_update_section | Rename a section |
asana_delete_section | Delete a section |
asana_move_section | Reorder a section within a project |
asana_add_task_to_section | Move a task to a section |
Tags — 9 tools
| Tool | Description |
|---|
asana_get_tag | Get tag details |
asana_get_tags_for_task | Get tags on a task |
asana_get_tasks_for_tag | Get tasks with a specific tag |
asana_get_tags_for_workspace | List tags in a workspace |
asana_create_tag_for_workspace | Create a new tag |
asana_update_tag | Update a tag |
asana_delete_tag | Delete a tag |
asana_add_tag_to_task | Add a tag to a task |
asana_remove_tag_from_task | Remove a tag from a task |
Custom Fields — 7 tools
| Tool | Description |
|---|
asana_get_custom_fields_for_workspace | List all custom field definitions in a workspace |
asana_get_custom_field | Get custom field details (including enum options and GIDs) |
asana_create_custom_field | Create a new custom field (text, number, enum, date, people) |
asana_update_custom_field | Update custom field name, description, or number settings |
asana_delete_custom_field | Permanently delete a custom field from the workspace |
asana_create_enum_option | Add a new option to an enum or multi_enum custom field |
asana_update_enum_option | Update an enum option's name, color, or enabled status |
Portfolios — 8 tools
| Tool | Description |
|---|
asana_get_portfolio | Get portfolio details |
asana_get_portfolios | List portfolios in a workspace |
asana_create_portfolio | Create a portfolio |
asana_update_portfolio | Update a portfolio |
asana_delete_portfolio | Delete a portfolio |
asana_get_portfolio_items | Get projects in a portfolio |
asana_add_portfolio_item | Add a project to a portfolio |
asana_remove_portfolio_item | Remove a project from a portfolio |
Goals — 5 tools
| Tool | Description |
|---|
asana_get_goal | Get goal details |
asana_get_goals | List goals in a workspace |
asana_create_goal | Create a goal |
asana_update_goal | Update a goal |
asana_delete_goal | Delete a goal |
Time Tracking & Periods — 7 tools
| Tool | Description |
|---|
asana_get_time_periods | List time periods in a workspace (quarters, fiscal years) |
asana_get_time_period | Get time period details |
asana_get_time_tracking_entries | Get time entries for a task |
asana_get_time_tracking_entry | Get a specific time entry |
asana_create_time_tracking_entry | Log time on a task |
asana_update_time_tracking_entry | Update a time entry |
asana_delete_time_tracking_entry | Delete a time entry |
Comments & Stories — 2 tools
| Tool | Description |
|---|
asana_get_task_stories | Get comments and activity for a task |
asana_create_task_story | Add a comment to a task (plain text or rich HTML) |
Attachments — 4 tools
| Tool | Description |
|---|
asana_get_attachments_for_object | List all attachments on a task or project |
asana_get_attachment | Get attachment details (including download URL) |
asana_delete_attachment | Delete an attachment |
asana_create_attachment_for_object | Attach an external URL link to a task or project |
Users — 2 tools
| Tool | Description |
|---|
asana_get_user | Get user details by GID, email, or 'me' (current user) |
asana_get_users_for_workspace | List all users in a workspace (find GIDs by name or email) |
Teams — 2 tools
| Tool | Description |
|---|
asana_get_team | Get team details |
asana_get_teams_for_workspace | List all teams in a workspace |
Typeahead — 1 tool
| Tool | Description |
|---|
asana_typeahead | Fuzzy-search for tasks, projects, users, tags, teams, portfolios, or goals by partial name |
Workspaces — 1 tool
| Tool | Description |
|---|
asana_list_workspaces | List all available workspaces |
Requirements
Contributing
git clone https://github.com/BLZvi/asana-mcp-server.git
cd asana-mcp-server
npm install
npm run dev
Test with the MCP Inspector:
npm run inspector
License
MIT