Asana MCP Server
Provides tools for managing tasks, projects, sections, tags, custom fields, portfolios, goals, time tracking, comments, attachments, users, teams, and workspaces in Asana, with full CRUD operations and AI-powered prompt templates for task creation, project management, and personal productivity.
Enables fetching Confluence pages and converting them into Asana tasks as part of sprint planning workflows.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Asana MCP ServerShow me all my incomplete tasks in the Marketing project."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Server for Asana
Give your AI assistant full access to Asana. Create tasks, manage projects, analyze delivery flow, estimate work from history — all through natural language.
86 tools | 35 slash commands | Autocomplete | 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"
"Why is this task late?" → full lifecycle: where it stalled, who touched it, every reschedule
"What did Alice work on in the last 3 months?"
"How much should we commit to next sprint?" → measured from real velocity, not guesswork
"Where does work get stuck in this project?" → cycle time, bottlenecks, throughput
"Turn these meeting notes into tasks"
Run /asana-help to see every command grouped by what you're trying to do.
Related MCP server: Asana MCP Server
Highlights
Type names, not GIDs | Every command accepts a task/project name or URL. Live autocomplete suggests your real projects and people as you type. Ambiguous names return a disambiguation list rather than a wrong guess. |
Honest analytics | Asana's search API caps at 100 results with no pagination. This server uses adaptive time-window bisection to get complete data — and every report states exactly what it sampled, so partial results are never mistaken for complete ones. |
History, not just snapshots | Task activity streams are parsed into structured lifecycles: time-in-section, reschedule patterns, ownership churn, cycle vs. lead time. |
Safe by default | Read-only mode, dry-run mode, destructive-operation hints, and preview-before-write on every bulk operation. |
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.
86 Tools Across 20 Categories
Full CRUD coverage of the Asana API — your AI can read and write.
Category | Tools | What you can do |
History & Flow | 2 | Task lifecycle reconstruction, project cycle-time/bottleneck analysis |
Activity | 1 | Per-person work history over any date range, with coverage reporting |
Estimation | 2 | Find comparable completed tasks, compute velocity with outlier detection |
Code Bridge | 1 | Resolve branch names / commit messages to Asana tasks |
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 |
Teams | 2 | Get team info, list teams in workspace |
Typeahead | 1 | Fuzzy search any resource type by name |
Workspaces | 1 | List all accessible workspaces |
35 Slash Commands
Pre-built workflows that combine API calls with AI reasoning. The server pre-fetches the relevant Asana data server-side, then hands the model one fully-hydrated message — so most commands need zero follow-up tool calls.
Not sure which to use? Run /asana-help. ✎ = writes to Asana (always previews first).
Task-level
Command | Description |
| Status summary with details, custom fields, and all comments |
| New. Full lifecycle from the activity stream: time in each section, every reschedule, ownership churn, risk signals |
| Scores how well-defined a task is (0–100) with per-dimension breakdown |
| New. Estimate by anchoring on comparable completed tasks — shows their original points and actual cycle time |
| Identifies gaps, asks clarifying questions, updates the description |
| Breaks a complex task into well-scoped subtasks |
| Retro-log work done outside Asana |
Project-level
Command | Description |
| Full status report with task counts, statuses, and open tasks |
| New. Cycle/lead time percentiles, section bottlenecks, throughput, worst offenders |
| Polished stakeholder update (email/Slack-ready) |
| Risk register built from real risk signals |
| New. Find forgotten work and decide: revive, reassign, reschedule, or close |
| Triage overdue tasks: do now, reschedule, reassign, or drop |
| Rank the backlog into P1–P4 |
| Task distribution across members, to spot imbalances |
| "Getting up to speed" brief for someone new |
Personal productivity
Command | Description |
| Prioritized daily plan from your open tasks |
| Done / doing / blockers summary |
| New. What's blocking you, plus drafted nudges to clear it |
| Weekly reflection and next-week plan |
| New. Turn a freeform braindump into well-formed tasks |
Cross-project
Command | Description |
| New. What a person worked on over a period, with trend comparison and methodology caveats |
| New. Roll-up across every project in a portfolio — the executive view |
| New. Goal tracking with pace analysis (progress vs. time elapsed) |
Planning
Command | Description |
| New. How much to commit, from measured velocity — always a range |
| Build a sprint from the backlog |
| Create tasks from a Confluence page |
| Guided task creation |
Code ↔ Asana
These need your client to have git/filesystem tools (Claude Code, Cursor, etc). They degrade gracefully when it doesn't — asking you to paste the command output instead.
Command | Description |
| New. Which tasks have code behind them, which commits have no task |
| New. TODO/FIXME markers + churn hotspots → clustered, deduplicated backlog |
| New. Estimate grounded in the actual change surface |
| New. Changelog from completed tasks + commits |
| New. Does the code back up what the roadmap claims is done? |
| New. Blast radius and the right owner for a proposed change |
Discovery
Command | Description |
| New. Every command grouped by intent, with examples and your current config |
Browsable Resources
Expose Asana data as MCP resources that clients can browse directly:
URI Pattern | Description |
| Workspace details, org info, email domains |
| Project details, sections, custom fields, dates |
| Task details, subtasks, custom fields, recent comments |
Configuration
Variable | Default | Description |
| required | |
| — | Default workspace — avoids passing one to every command |
|
|
|
|
|
|
|
| IANA timezone for all "today"/overdue reasoning (e.g. |
|
| Simultaneous Asana API calls (1–10) |
|
| Request budget per analytics command (10–500) |
|
|
|
| — | Explicit story-points custom field GID |
|
| Regex used to auto-discover the points field |
|
| Default period length for velocity |
|
| Working days (0 = Sunday) |
Bad or missing config never throws — every value degrades to its default.
Set
ASANA_TIMEZONE. The default of UTC means a user in UTC-8 at 5pm gets tomorrow's date, and tasks get flagged overdue a day early.
Safety Modes
Read-only (ASANA_READ_ONLY_MODE=true) — hides all 43 write tools and 7 write commands. For safe exploration, shared environments, and audit/reporting use.
Dry run (ASANA_DRY_RUN=true) — write tools stay visible so the model can plan a complete sequence, but each returns "would have created task X" instead of calling Asana. Use this to rehearse a bulk operation before committing to it.
Tool annotations — every tool reports readOnlyHint, destructiveHint, and idempotentHint, so clients can auto-approve safe reads while prompting for confirmation on the 13 genuinely destructive operations.
How the analytics stay honest
Asana's task search endpoint returns at most 100 results and supports no pagination. A naive "what did Alice do in 6 months" query returns an arbitrary 100 tasks and reports it as complete.
This server solves that with adaptive time-window bisection: the range is split into buckets, and any bucket that saturates at 100 is recursively halved until it fits or hits a floor. Results are deduplicated by GID.
Critically, every command using this reports its own coverage:
Based on 340 tasks across 7 windows (28 requests). Complete.
or
Based on 512 tasks across 12 windows (40 requests). INCOMPLETE — 2 windows hit the 100-result cap; counts are a lower bound.
The same principle applies throughout: flow-report states its sample size versus project size, contributions ships methodology caveats with the data, and sprint-capacity suppresses point velocity entirely when fewer than 50% of tasks have points set — because low-coverage point velocity looks authoritative while measuring an arbitrary subset.
Roadmap
What's coming next:
Elicitation — Structured confirmation dialogs for bulk writes (currently prose-based preview + confirm)
Structured output —
outputSchemaon read tools so clients render tables instead of JSONRemove 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
Tool | Description |
| Reconstruct a task's full lifecycle from its activity stream: event timeline, time per section, cycle/lead time, reschedule history with slip days, ownership churn, and triggered risk signals |
| Cycle/lead time percentiles, section bottlenecks, weekly throughput, reschedule rates, and worst-offending tasks for a project |
| What a person completed and created over a date range, aggregated by month and project, with full coverage reporting and methodology caveats |
| Find completed tasks similar to a target, returning their estimates and actual cycle times for reference-class forecasting |
| Velocity for a person or project using median + MAD, with bulk-close outlier detection and points-coverage reporting |
| Resolve branch names, commit messages, and PR titles to Asana tasks |
Tool | Description |
| Search tasks with advanced filtering (assignee, project, tags, custom fields, etc.) |
| Get detailed information about a task |
| Get details for up to 25 tasks at once |
| Create a task in a project (supports section placement via |
| Update task details (name, assignee, due date, custom fields, etc.) |
| Permanently delete a task |
| List all tasks in a project |
| List all tasks in a section |
| Create a subtask under a parent task |
| Get all subtasks of a task |
| Add a task to a project |
| Remove a task from a project |
Tool | Description |
| Set tasks that a task depends on |
| Set tasks that depend on a task |
| Set/change a task's parent and position |
Tool | Description |
| Search projects by name pattern |
| Get project details |
| Create a new project |
| Update project details |
| Delete a project |
| Get task count breakdown for a project |
| Get sections in a project |
Tool | Description |
| Get all status updates for a project |
| Get a specific project status |
| Create a project status update |
| Delete a project status update |
Tool | Description |
| Get section details |
| Create a section in a project |
| Rename a section |
| Delete a section |
| Reorder a section within a project |
| Move a task to a section |
Tool | Description |
| Get tag details |
| Get tags on a task |
| Get tasks with a specific tag |
| List tags in a workspace |
| Create a new tag |
| Update a tag |
| Delete a tag |
| Add a tag to a task |
| Remove a tag from a task |
Tool | Description |
| List all custom field definitions in a workspace |
| Get custom field details (including enum options and GIDs) |
| Create a new custom field (text, number, enum, date, people) |
| Update custom field name, description, or number settings |
| Permanently delete a custom field from the workspace |
| Add a new option to an enum or multi_enum custom field |
| Update an enum option's name, color, or enabled status |
Tool | Description |
| Get portfolio details |
| List portfolios in a workspace |
| Create a portfolio |
| Update a portfolio |
| Delete a portfolio |
| Get projects in a portfolio |
| Add a project to a portfolio |
| Remove a project from a portfolio |
Tool | Description |
| Get goal details |
| List goals in a workspace |
| Create a goal |
| Update a goal |
| Delete a goal |
Tool | Description |
| List time periods in a workspace (quarters, fiscal years) |
| Get time period details |
| Get time entries for a task |
| Get a specific time entry |
| Log time on a task |
| Update a time entry |
| Delete a time entry |
Tool | Description |
| Get comments and activity for a task |
| Add a comment to a task (plain text or rich HTML) |
Tool | Description |
| List all attachments on a task or project |
| Get attachment details (including download URL) |
| Delete an attachment |
| Attach an external URL link to a task or project |
Tool | Description |
| Get user details by GID, email, or |
| List all users in a workspace (find GIDs by name or email) |
Tool | Description |
| Get team details |
| List all teams in a workspace |
Tool | Description |
| Fuzzy-search for tasks, projects, users, tags, teams, portfolios, or goals by partial name |
Tool | Description |
| List all available workspaces |
Security
This server holds an Asana personal access token with your full permissions. It writes nothing to disk, talks only to app.asana.com, and never logs credentials.
That last point takes active effort: the Asana SDK attaches the Authorization: Bearer <token> header to every error it throws, so a naive console.error(err) would leak your token into terminal scrollback and client logs. All error output is routed through a redacting summariser, and CI fails if any code path passes a raw error to console.*.
See SECURITY.md for the full threat model and reporting process.
Requirements
Node.js 22 or newer. CI tests against 22 (Maintenance LTS), 24 (Active LTS), and 26 (Current). Node 24 is recommended — 22 leaves maintenance in April 2027.
Contributing
git clone https://github.com/BLZvi/asana-mcp-server.git
cd asana-mcp-server
npm install
npm run verify # lint, typecheck, tests, logging guard, build, smoke testThen npm run dev to run from source, or npm run inspector for interactive testing.
See CONTRIBUTING.md — it documents four rules that are enforced in CI (never log raw errors, never hide incomplete coverage, never parse story text, always preview before writing).
License
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityDmaintenanceEnables Claude to interact with Asana workspaces, tasks and projects through the Asana API, allowing users to search, create, update, and manage Asana tasks and projects using natural language.3,143MIT
- Alicense-quality-maintenanceEnables comprehensive Asana workspace management through natural language, supporting task tracking, project planning, team collaboration, and workflow automation across workspaces, projects, sections, and tasks.1
- Alicense-quality-maintenanceEnables AI assistants to interact with ClickUp workspaces through natural language - search tasks, manage workflows, track time, collaborate via comments, and access complete task context including comments and images.
- Alicense-qualityDmaintenanceProvides a standardized interface for interacting with Asana's tools and services through a unified API, enabling AI assistants to manage tasks, projects, and workflows.MIT
Related MCP Connectors
Manage projects, tasks, time tracking, and team collaboration through natural language.
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Connect AI assistants to Stellary projects, boards, documents, and governed agent workflows.
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