MCP Server for Asana

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

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs ASANA_ACCESS_TOKEN. Replace each <NAME> with your value.

Claude CodeTerminal
claude mcp add for-asana -e ASANA_ACCESS_TOKEN=<ASANA_ACCESS_TOKEN> -- npx -y @roychri/mcp-server-asana
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "for-asana": {
      "command": "npx",
      "args": [
        "-y",
        "@roychri/mcp-server-asana"
      ],
      "env": {
        "ASANA_ACCESS_TOKEN": "<ASANA_ACCESS_TOKEN>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "for-asana": {
      "command": "npx",
      "args": [
        "-y",
        "@roychri/mcp-server-asana"
      ],
      "env": {
        "ASANA_ACCESS_TOKEN": "<ASANA_ACCESS_TOKEN>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "for-asana": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@roychri/mcp-server-asana"
      ],
      "env": {
        "ASANA_ACCESS_TOKEN": "<ASANA_ACCESS_TOKEN>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.for-asana]
command = "npx"
args = ["-y", "@roychri/mcp-server-asana"]

[mcp_servers.for-asana.env]
ASANA_ACCESS_TOKEN = "<ASANA_ACCESS_TOKEN>"
Gemini CLITerminal
gemini mcp add --scope user -e ASANA_ACCESS_TOKEN=<ASANA_ACCESS_TOKEN> for-asana npx -- -y @roychri/mcp-server-asana

Settings 2

ASANA_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.

What it does

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).

What it needs

RuntimeNode.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.

Limits

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.

Who it suits

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.

Tools 41

asana_list_workspaces
Lists the workspaces the token can see.
asana_search_projects
Finds projects in a workspace whose names match a regular expression.
asana_get_my_tasks
Reads the user's My Tasks list in a workspace.
asana_search_tasks
Searches tasks in a workspace with filters such as text, assignee, status and custom fields.
asana_get_task
Returns the details of one task.
asana_create_task
Creates a task in a project, with optional assignee, due date and custom fields.
asana_get_task_stories
Reads a task's comments and activity.
asana_update_task
Changes a task's name, notes, due date, assignee, completion or fields.
asana_get_project
Returns the details of one project.
asana_get_project_task_counts
Gives the number of tasks in a project.
asana_get_project_sections
Lists the sections of a project.
asana_get_tasks_for_project
Lists the tasks in a project, page by page; works on free plans.
asana_create_project
Creates a project in a workspace or team.
asana_create_task_story
Adds a comment to a task.
asana_add_task_dependencies
Marks a task as depending on other tasks.
asana_add_task_dependents
Marks other tasks as depending on a task.
asana_create_subtask
Creates a subtask under an existing task.
asana_get_subtasks
Lists the subtasks of a task.
asana_get_multiple_tasks_by_gid
Fetches up to 25 tasks by ID in one call.
asana_get_project_status
Reads one project status update.
asana_get_project_statuses
Lists the status updates of a project.
asana_create_project_status
Posts a status update to a project.
asana_delete_project_status
Deletes a project status update.
asana_set_parent_for_task
Moves a task under another parent and sets its position.
asana_get_tag
Returns the details of one tag.
asana_get_tags_for_task
Lists the tags on a task.
asana_get_tags_for_workspace
Lists the tags in a workspace.
asana_update_tag
Renames a tag or changes its colour or notes.
asana_delete_tag
Deletes a tag.
asana_get_tasks_for_tag
Lists the tasks carrying a tag.
asana_create_tag_for_workspace
Creates a tag in a workspace.
asana_add_tag_to_task
Puts a tag on a task.
asana_remove_tag_from_task
Takes a tag off a task.
asana_add_project_to_task
Adds an existing task to another project.
asana_remove_project_from_task
Removes a task from a project without deleting it.
asana_delete_task
Deletes a task permanently.
asana_create_section
Creates a section in a project.
asana_update_section
Renames a section.
asana_delete_section
Deletes a section from a project.
asana_add_task_to_section
Moves a task into a section of its project.
asana_update_project
Changes a project's name, notes, colour or privacy.

Similar servers