MCP.Market

Asana MCP Server

by jtalk22·io.github.jtalk22/asana-mcp-server·v1.0.1

Change Asana without opening Asana — custom fields, sections, start dates, rich notes, bulk. PAT.

B78/100grade B
What users say
No reviews yet
Be the first
Safety scan
B78/100

full report

Adoption
Growing

0 stars71 downloads/wk

Reviews

Write one

Nobody has reviewed Asana MCP Server yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

Asana MCP Server tools (75, 22 write)

write = sends, deletes, buys or posts

Read from the package source without running it. The installed server may list more.

  • asana_add_comment

    Add a comment (story) to a task. Prefer text (plain, with real newlines; literal "\ " sequences are auto-converted) — the /stories endpoint escapes html_text into literal tags. Pass html_text only if you accept that.

  • asana_add_dependency

    Mark a task as depending on one or more other tasks (this task waits on them).

  • asana_add_dependent

    Mark one or more tasks as dependent on this task (they wait on this one).

  • asana_add_enum_option

    Add an option to an existing enum/multi_enum custom field (extend a dropdown without recreating the field).

  • asana_add_field_to_project

    Attach an existing custom field to a project (addCustomFieldSetting), optionally important/positioned. Pairs with asana_create_custom_field to build a board.

  • asana_add_follower

    Add follower(s) to a task.

  • asana_add_project_members

    Add member(s) to a project (e.g. add a teammate to a new board).

  • asana_add_tag

    Add a tag to a task.

  • asana_add_to_portfolio

    Add a project/portfolio item to a portfolio.

  • asana_add_to_project

    Add a task to a project, optionally placing it in a specific section. Fixes: no MCP tool for addProject + section placement.

  • asana_attach_file

    Attach a local file to an Asana task. Requires confirm:true and restricts reads to the current directory or ASANA_MCP_FILE_ROOTS. Max 100MB.

  • asana_batch_opswrite action

    Execute up to 5 Asana API operations in a single HTTP call. ⚠ GET-with-default-fields ONLY — options (opt_fields/completed_since) + PUT data are dropped by the batch endpoint. For filtered reads use asana_search_tasks/asana_list_*; for writes use the dedicated tools.

  • asana_batch_updatewrite action

    Update multiple task fields in a single REST call. Combines assignee, dates, custom fields, notes, name, and completion.

  • asana_board_rollup

    COMPOSITE: roll up ONE board (project) — active tasks grouped by section, an amount custom field summed per section and in total (e.g. "Deal $", "Claim $"), an optional secondary amount, and every task whose deadline (any named date custom fields + due_on) has passed, with days overdue and WHICH field fired. Ranked by amount descending. Fields may be given by GID or by exact name (resolved live vi

  • asana_bulk_move_section

    Move MANY tasks into one section in a single call (loops section addTask). Returns a per-task summary. Throughput multiplier for triaging a board column.

  • asana_bulk_updatewrite action

    Apply the SAME field changes to MANY tasks in one call (assignee, dates, completed, notes/html_notes, custom_fields). Loops PUT per task, continues past individual failures, returns a per-task summary.

  • asana_complete_task

    Mark a task complete (default) or incomplete (completed:false).

  • asana_create_custom_fieldwrite action

    Create a workspace custom field (design the board schema). resource_subtype ∈ text|number|enum|multi_enum|date|people. For enum/multi_enum pass enum_options:[{name,color?}].

  • asana_create_portfoliowrite action

    Create a portfolio (group projects for North-Star-style tracking).

  • asana_create_projectwrite action

    Create a project. In an org workspace a team GID is required; otherwise the workspace default is used.

  • asana_create_project_statuswrite action

    Post a status update to a project. status_type ∈ on_track|at_risk|off_track|on_hold|complete. text required (html_text optional).

  • asana_create_sectionwrite action

    Create a new section in a project. Optionally position via insert_before/insert_after (section GIDs).

  • asana_create_subtaskwrite action

    Create a subtask under a parent task.

  • asana_create_taskwrite action

    Create a general task. Provide either projects[] (workspace inferred) or it lands in the workspace default. Supports assignee, notes/html_notes, dates, followers, tags, custom_fields (dates auto-wrapped).

  • asana_delete_projectwrite action

    DESTRUCTIVE — permanently delete a project. Requires confirm:true (C13 gate). No-op + gate message otherwise.

  • asana_delete_sectionwrite action

    DESTRUCTIVE — delete a section (Asana requires it be empty, or moves its tasks out). Requires confirm:true (C13 gate).

  • asana_delete_taskwrite action

    DESTRUCTIVE — permanently delete (trash) a task. Requires confirm:true (C13 gate). Without confirm it is a no-op that reports the gate.

  • asana_duplicate_project

    Duplicate an existing project (clone a board with its structure). include = fields to copy (array or comma string, e.g. ["members","task_notes","task_assignee"]). Returns an async job.

  • asana_duplicate_task

    Duplicate a task (template instantiation). include = which fields to copy (array or comma string, e.g. ["notes","assignee","subtasks","dependencies"]). Returns an async job.

  • asana_find_duplicates

    Find TRUE duplicate tasks. Dedupes by GID FIRST — one task on N boards = multi_homed (shared membership, reported separately, NOT a dup; deleting it removes the real task from EVERY board) — then groups DISTINCT gids by name. Scan one project/section, or projects[] for cross-board. Returns {multi_homed, true_duplicate_clusters}. Read-only — reason before you delete.

  • asana_get_custom_field

    Fetch one custom field by GID — type, precision, and full enum_options (name+GID) list.

  • asana_get_custom_field_settings

    Fetch a project's custom field settings — live field GIDs, types, and enum option GIDs. Use this to derive field/option GIDs live instead of trusting hand-coded maps that drift.

  • asana_get_job

    Poll an async job by GID (from duplicate_task/duplicate_project/instantiate_* tools). Returns status (not_started|in_progress|succeeded|failed) and the new_task/new_project GID once done.

  • asana_get_portfolio

    Fetch one portfolio; set include_items=true to also pull its member projects/portfolios.

  • asana_get_project

    Fetch one project with its custom_field_settings (field GIDs + enum option GIDs) AND its sections, merged into one response.

  • asana_get_task

    Fetch one task with rich fields (assignee, projects, section memberships, custom fields, notes, subtask count). Override opt_fields for more/less.

  • asana_get_user

    Fetch one user by GID (default "me" = token owner). Returns name, email, GID.

  • asana_get_workspace

    Fetch workspace metadata (name, is_organization, email_domains).

  • asana_instantiate_project_templatewrite action

    Create a new project from a project template (repeatable board setup). Returns an async job whose new_project holds the created project.

  • asana_instantiate_task_templatewrite action

    Create a new task from a task template (repeatable intake/ops task). Returns an async job whose new_task holds the created task.

  • asana_list_attachments

    List a task's attachments with download/permanent URLs and sizes.

  • asana_list_dependencies

    Return a task's dependencies (what it waits on) AND dependents (what waits on it), in one call.

  • asana_list_portfolios

    List portfolios owned by a user in the workspace. owner defaults to "me". Paginated.

  • asana_list_project_statuses

    List a project's status updates (status_type, title, text, author). Paginated.

  • asana_list_projects

    List projects in the workspace (or a team). Excludes archived by default; set include_archived=true for all. Paginated.

  • asana_list_sections

    List the sections of a project (name + GID), in board order.

  • asana_list_stories

    List a task's stories (comments + activity log). text field holds comment bodies. Paginated.

  • asana_list_subtasks

    List a task's subtasks with rich fields. Paginated.

  • asana_list_tags

    List tags in the workspace (name → GID). Paginated.

  • asana_list_task_templates

    List a project's task templates (repeatable task blueprints). Paginated.

  • asana_list_tasks

    List tasks by project, section, tag, OR assignee (provide exactly one anchor). Paginated. assignee uses the workspace default.

  • asana_list_teams

    List teams the token owner belongs to in the workspace/organization. Paginated.

  • asana_list_users

    List workspace members (name → GID resolution). Paginated.

  • asana_list_workspace_custom_fields

    List ALL custom fields defined in the workspace (design discovery — find a field GID to attach to a board). Paginated.

  • asana_morning_brief

    COMPOSITE: one-call daily brief — incomplete tasks bucketed into overdue / due_today / upcoming (within horizon_days) + blocked (due-window tasks waiting on an incomplete dependency), with a summary count. Defaults to "me"; pass user=<gid> for a teammate or user="all" for the whole workspace. Built on the search API (caps at 100 by due date).

  • asana_move_section

    Move a task to a different section within its project. Fixes: no MCP tool for section moves.

  • asana_my_tasks

    List the TOKEN OWNER's My Tasks (user task list). NOTE: a personal PAT can only read its OWN My Tasks — passing another user returns 403. For other users use asana_search_tasks or asana_list_tasks with assignee=<gid>, or asana_user_queue. Paginated.

  • asana_portfolio_rollup

    COMPOSITE: per-project health across a portfolio — incomplete, overdue, and completed-in-window counts + current status, sorted by overdue. Scope via projects:[gids] (best), portfolio_gid, or default to all non-archived workspace projects (capped at max_projects). One task-list call per project; caps are reported, never silent.

  • asana_remove_field_from_projectwrite action

    Detach a custom field from a project (removeCustomFieldSetting). Symmetric with asana_add_field_to_project.

  • asana_remove_followerwrite action

    Remove follower(s) from a task.

  • asana_remove_from_portfoliowrite action

    Remove an item from a portfolio.

  • asana_remove_from_projectwrite action

    Remove a task from a project (un-add a board card). Symmetric with asana_add_to_project.

  • asana_remove_tagwrite action

    Remove a tag from a task.

  • asana_reorder_section

    Reorder a section within its project (move a board column). Provide before_section or after_section (section GIDs).

  • asana_search_tasks

    Advanced workspace task search with filters: text, assignee, project, section, tag, completed, due/created date ranges, custom-field filters (filters passthrough), sorting. Single page (search API caps at 100, no offset).

  • asana_set_custom_fields

    Set custom fields on a task using correct type handling. Fixes: multi_enum arrays and date object wrappers that fail via official MCP.

  • asana_set_dates

    Set start_on and/or due_on dates on a task. Fixes: start_on not exposed in official MCP schema, and due_on must be set first.

  • asana_set_html_notes

    Set rich-text notes on a task using html_notes. Fixes: "XML is invalid" error from official MCP.

  • asana_set_notes_safe

    Set notes AND survive workspace automations that rewrite the task name / parse dates out of notes text (Rules and some integrations do this): write notes, wait settle_ms, then re-assert name + due_on. Use instead of raw notes edits on automated boards.

  • asana_set_parent

    Re-parent a task: make it a subtask of parent_gid, or detach to top level (parent_gid:null). Optional insert_before/insert_after sibling GIDs.

  • asana_triage_inbox

    COMPOSITE: bulk-create tasks from a triaged list in ONE call (fills the gap — no bulk CREATE existed). The model reads the inbox/note, extracts items, and passes them here. Per-item project/assignee/section/due override the defaults; default_assignee falls back to ASANA_DEFAULT_ASSIGNEE, else "me". Continues past individual failures; returns a per-item created/failed summary with permalinks.

  • asana_typeahead

    Resolve a partial NAME → GID across the workspace for any resource type (task|project|user|tag|portfolio|project_template|goal). Fast lookup when you do not know the GID.

  • asana_update_projectwrite action

    Update a project: name, notes, color, archived, public, default_view, dates.

  • asana_update_sectionwrite action

    Rename a section.

  • asana_user_queue

    COMPOSITE: one person's FULL incomplete queue — paginated (NOT capped at 100 like the search API), bucketed by due (overdue / due_today / this_week / later / no_due) with a per-project count map. Default user = "me"; pass user=<gid> for a teammate (the PAT-owner-only restriction on My Tasks does not apply — this uses /tasks?assignee=). The right call for "what is X sitting on?" and hand-off review

Public scan report

scanner v0.1.10 · 2026-11-03 · same rubric, same numbers if you re-run it

no findings
  • Code scan11 source files scanned25/25
  • –Live reliabilityno gateway calls yet and no remote to proben/a
  • –Tool poisoningtools not inspected (local package is not executed); not countedn/a
  • Auth qualitystatic API keys via environment variables6/15
  • Maintenancelast push 80 days ago12/15
  • Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10
Overall 78/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

How Asana MCP Server compares

Against every graded Productivity MCP server, from our own scans and uptime checks. Updated after each scan run.

Safety score
78/100
higher than 50% of 1,301 Productivity servers
Tools
75
the typical Productivity server has 7
Tools that change things
29%
typical: 0%. Fewer write tools means less an agent can break
Downloads a week
71
more than 46% of 433 Productivity servers with a package

What its tools let an agent do: 53 read · 22 change

Install Asana MCP Server in Claude Code, Cursor or VS Code

Runs npx -y @jtalk22/asana-mcp on your machine. Read the scan report first; the gateway never runs local packages.

claude mcp add asana-mcp-server -- npx -y @jtalk22/asana-mcp
Add to Cursor

What the publisher says

From the Asana MCP Server repository's README, as published. We do not edit it. Read it on GitHub

Asana MCP Server

Change Asana without opening Asana.

A local-first Asana MCP over the REST API: controlled writes, schema operations, diagnostics, and one-call briefs over a Personal Access Token.

npx -y @jtalk22/asana-mcp --setup

Claude Code Claude Desktop Cursor Copilot Windsurf Gemini CLI Codex CLI any stdio MCP client

Why this exists · Install · 75 tools · Composites · Slack + Asana · Honest limits · API reference

Why this exists

Asana's official V2 MCP server is the supported hosted choice: OAuth, workspace-scoped access, consolidated task writes, and interactive confirmations in supported clients. Its tool set changes over time, so use Asana's current tools reference rather than a frozen comparison table.

Choose this server when you want a transparent local stdio process and direct REST coverage:

You can use both: the official service for managed OAuth and this package for local-first REST workflows or capabilities your operating model needs. To use this package, create a Personal Access Token, run --setup, and keep the process on your machine. It talks only to app.asana.com.

Slack + Asana continuity preview

This package remains the full 75-tool, MIT-licensed local server. Nothing below is an unlock for missing tools.

The same maintainer is also building Keep the Thread, a managed continuity layer for an independent operator or two-to-five-person team that already works in Slack and Asana but does not want another dashboard. Its first cross-tool contract asks a narrower question:

Which Slack commitment is missing, incomplete, or stale in one selected Asana project?

flowchart LR
    Slack["1–5 selected Slack channels"] --> Report["continuity_asana_discrepancy_report"]
    Asana["1 selected Asana project\nincomplete tasks only"] --> Report
    Report --> Gaps["matched commitments · gaps · task drift · next reviews"]
    Gaps --> Receipt["source IDs preserved\nwrites_performed: 0"]

Shortened. The full README is on GitHub.

Nothing above is checked by us. What we check is on the safety report.

Asana MCP Server: common questions

Is Asana MCP Server safe?
Mostly: it is graded B (78/100). Read the Asana MCP Server safety report
How do I install Asana MCP Server?
It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
Does Asana MCP Server need an API key?
Yes. The registry entry asks for ASANA_PAT.
Is Asana MCP Server maintained?
The last commit was 82 days ago (2026-08-15). The latest release is v1.0.1.
What can I use instead of Asana MCP Server?
Servers from other publishers that do the same job: Context7 MCP server, Obsidian MCP server and AIquila — Nextcloud MCP Server.
How does Asana MCP Server compare with other Productivity MCP servers?
safety score 78/100 (higher than 50% of 1,301 Productivity servers); tools 75 (the typical Productivity server has 7); tools that change things 29% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.

Alternatives to Asana MCP Server

Same job from other publishers: the closest match first, then the best rated.

  • Context7
    Up-to-date docs for AI agents
    A
  • Obsidian
    Read, write, search, and surgically edit Obsidian notes, tags, and frontmatter via MCP.
    A
  • AIquila — Nextcloud MCP Server
    Nextcloud MCP server — 345 tools: files, calendar, contacts, mail, Talk, Deck, photos, maps, notes
    C
  • iCloud MCP
    Apple Mail, Calendar, Contacts, Reminders, Notes, Messages and Safari via AppleScript or iCloud
    B
  • AI Agents API Library
    Find APIs and MCP servers for AI agents: auth, free tier, MCP endpoint, docs, last-checked date.
    B