Asana MCP Server
OFFICIAL SERVERAsana's own hosted MCP endpoint for reading and changing tasks, projects and portfolios
Read and manage Asana tasks, projects, sections, tags and status updates from an MCP client
By Christian Roy (individual) TypeScript Local · stdio Productivity
56 popularity score ★ 149 ↓ 3.8k/wk
Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs ASANA_ACCESS_TOKEN. Replace each <NAME> with your value.
claude mcp add for-asana -e ASANA_ACCESS_TOKEN=<ASANA_ACCESS_TOKEN> -- npx -y @roychri/mcp-server-asana{
"mcpServers": {
"for-asana": {
"command": "npx",
"args": [
"-y",
"@roychri/mcp-server-asana"
],
"env": {
"ASANA_ACCESS_TOKEN": "<ASANA_ACCESS_TOKEN>"
}
}
}
}{
"mcpServers": {
"for-asana": {
"command": "npx",
"args": [
"-y",
"@roychri/mcp-server-asana"
],
"env": {
"ASANA_ACCESS_TOKEN": "<ASANA_ACCESS_TOKEN>"
}
}
}
}{
"servers": {
"for-asana": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@roychri/mcp-server-asana"
],
"env": {
"ASANA_ACCESS_TOKEN": "<ASANA_ACCESS_TOKEN>"
}
}
}
}[mcp_servers.for-asana]
command = "npx"
args = ["-y", "@roychri/mcp-server-asana"]
[mcp_servers.for-asana.env]
ASANA_ACCESS_TOKEN = "<ASANA_ACCESS_TOKEN>"gemini mcp add --scope user -e ASANA_ACCESS_TOKEN=<ASANA_ACCESS_TOKEN> for-asana npx -- -y @roychri/mcp-server-asanaASANA_ACCESS_TOKEN |
Required: Asana personal access token; the server exits at start without it. |
|---|---|
READ_ONLY_MODE |
Optional: Set to true to hide and block the 23 tools that change data and the create-task prompt. |
A community-built stdio server that talks to the Asana API with a personal access token. It covers the everyday objects of an Asana workspace: workspaces, projects, sections, tasks and subtasks, comments (stories), tags, task dependencies and project status updates. It can search and read them, and it can also create, edit, move and delete them.
The tool list in version 1.8.0 holds 41 tools, of which 18 only read (the list is fixed in src/tool-handler.ts). Setting READ_ONLY_MODE to the exact string true hides the other 23 and refuses any call to them, which also removes the create-task prompt. Besides tools it offers three prompts (task-summary, task-completeness, create-task) and exposes workspaces and projects as resources under asana:// addresses.
Project search is done on your side, not by Asana: asana_search_projects pulls the workspace's project list 100 at a time, up to 50 pages, and filters names with a case-insensitive regular expression (src/asana-client-wrapper.ts).
| Runtime | Node.js |
|---|
Node.js with npx. An Asana account and a personal access token from the Asana developer console, set as ASANA_ACCESS_TOKEN; the server exits at start without it. The Asana plan must allow API access, and asana_search_tasks needs a paid (premium) Asana plan.
asana_search_tasks relies on Asana's search API, which free plans lack; asana_get_tasks_for_project is the free-plan way to list tasks. asana_get_multiple_tasks_by_gid refuses more than 25 task IDs. asana_search_projects only looks at the first 5,000 projects in a workspace (50 pages of 100). asana_delete_task removes a task permanently. Only stdio is offered; there is no hosted endpoint. There is no tool for attachments, custom field definitions, portfolios, goals or users.
Suits a person or small team who wants an assistant to triage, create and update Asana tasks under their own token, running locally. Turn on READ_ONLY_MODE when you only want reporting, since the default set includes delete tools. It is not Asana's own server; if you need a vendor-maintained or hosted option, look elsewhere. Teams on free Asana plans lose task search but keep per-project task listing.
asana_list_workspacesasana_search_projectsasana_get_my_tasksasana_search_tasksasana_get_taskasana_create_taskasana_get_task_storiesasana_update_taskasana_get_projectasana_get_project_task_countsasana_get_project_sectionsasana_get_tasks_for_projectasana_create_projectasana_create_task_storyasana_add_task_dependenciesasana_add_task_dependentsasana_create_subtaskasana_get_subtasksasana_get_multiple_tasks_by_gidasana_get_project_statusasana_get_project_statusesasana_create_project_statusasana_delete_project_statusasana_set_parent_for_taskasana_get_tagasana_get_tags_for_taskasana_get_tags_for_workspaceasana_update_tagasana_delete_tagasana_get_tasks_for_tagasana_create_tag_for_workspaceasana_add_tag_to_taskasana_remove_tag_from_taskasana_add_project_to_taskasana_remove_project_from_taskasana_delete_taskasana_create_sectionasana_update_sectionasana_delete_sectionasana_add_task_to_sectionasana_update_project