BlZvi/asana-mcp-server
MCP server that gives AI assistants full access to Asana — 80 tools, 18 prompt templates, browsable resources. One npx command to set up.
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-serverAny 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-serverInstall from source (alternative)
git clone https://github.com/BLZvi/asana-mcp-server.git
cd asana-mcp-server
npm installThen 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
- Node.js 22+
- An Asana personal access token
Contributing
git clone https://github.com/BLZvi/asana-mcp-server.git
cd asana-mcp-server
npm install
npm run devTest with the MCP Inspector:
npm run inspectorLicense
MIT