Asana MCP Server
Change Asana without opening Asana — custom fields, sections, start dates, rich notes, bulk.
Connector by jtalk22 · GitHub account verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/jtalk22-asana-mcp-server
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.
- Tools
- 26 read · 33 write · 8 delete · 8 not yet classified
- Secrets
- 1 (API keys, tokens or passwords)
- Install scripts
- Not scanned yet
- Runs as
- Node.js package
Tools by what they do 75
Read from the source code; the running server may list different tools.
Read 26 · Look things up without changing anything.
asana_find_duplicatesasana_get_custom_fieldasana_get_custom_field_settingsasana_get_jobasana_get_portfolioasana_get_projectasana_get_taskasana_get_userasana_get_workspaceasana_list_attachmentsasana_list_dependenciesasana_list_portfolios
Show 14 more tools
asana_list_project_statusesasana_list_projectsasana_list_sectionsasana_list_storiesasana_list_subtasksasana_list_tagsasana_list_task_templatesasana_list_tasksasana_list_teamsasana_list_usersasana_list_workspace_custom_fieldsasana_my_tasksasana_search_tasksasana_typeahead
Write 33 · Create, change, send or run things.
asana_add_commentasana_add_dependencyasana_add_dependentasana_add_enum_optionasana_add_field_to_projectasana_add_followerasana_add_project_membersasana_add_tagasana_add_to_portfolioasana_add_to_projectasana_attach_fileasana_batch_ops
Show 21 more tools
asana_batch_updateasana_bulk_move_sectionasana_bulk_updateasana_complete_taskasana_create_custom_fieldasana_create_portfolioasana_create_projectasana_create_project_statusasana_create_sectionasana_create_subtaskasana_create_taskasana_instantiate_project_templateasana_instantiate_task_templateasana_move_sectionasana_set_custom_fieldsasana_set_datesasana_set_html_notesasana_set_notes_safeasana_set_parentasana_update_projectasana_update_section
Delete 8 · Delete, drop, revoke or wipe things.
asana_delete_projectasana_delete_sectionasana_delete_taskasana_remove_field_from_projectasana_remove_followerasana_remove_from_portfolioasana_remove_from_projectasana_remove_tag
Not yet classified 8 · We could not tell from the name and description.
asana_board_rollupasana_duplicate_projectasana_duplicate_taskasana_morning_briefasana_portfolio_rollupasana_reorder_sectionasana_triage_inboxasana_user_queue
Secrets and settings it asks for
Secrets: values you paste in that let it act as you.
ASANA_PAT
Other settings (environment variables or headers).
ASANA_MCP_TOOLSASANA_WORKSPACE_GID
Files it touches
- Any path the agent passes to its tools
Tools (75)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
asana_add_commentAdd a comment (story) to a task. Prefer text (plain, with real newlines; literal "\n" sequences are auto-converted) — the /stories endpoint escapes html_text into literal tags. Pass html_text only if you accept that.
asana_add_dependencyMark a task as depending on one or more other tasks (this task waits on them).
asana_add_dependentMark one or more tasks as dependent on this task (they wait on this one).
asana_add_enum_optionAdd an option to an existing enum/multi_enum custom field (extend a dropdown without recreating the field).
asana_add_field_to_projectAttach an existing custom field to a project (addCustomFieldSetting), optionally important/positioned. Pairs with asana_create_custom_field to build a board.
asana_add_followerAdd follower(s) to a task.
asana_add_project_membersAdd member(s) to a project (e.g. add a teammate to a new board).
asana_add_tagAdd a tag to a task.
asana_add_to_portfolioAdd a project/portfolio item to a portfolio.
asana_add_to_projectAdd a task to a project, optionally placing it in a specific section. Fixes: no MCP tool for addProject + section placement.
asana_attach_fileAttach 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_opsExecute 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_updateUpdate multiple task fields in a single REST call. Combines assignee, dates, custom fields, notes, name, and completion.
asana_board_rollupCOMPOSITE: 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 via the project's custom_field_settings, so nothing is hard-coded).
asana_bulk_move_sectionMove MANY tasks into one section in a single call (loops section addTask). Returns a per-task summary. Throughput multiplier for triaging a board column.
Show 60 more tools
asana_bulk_updateApply 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_taskMark a task complete (default) or incomplete (completed:false).
asana_create_custom_fieldCreate 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_portfolioCreate a portfolio (group projects for North-Star-style tracking).
asana_create_projectCreate a project. In an org workspace a team GID is required; otherwise the workspace default is used.
asana_create_project_statusPost a status update to a project. status_type ∈ on_track|at_risk|off_track|on_hold|complete. text required (html_text optional).
asana_create_sectionCreate a new section in a project. Optionally position via insert_before/insert_after (section GIDs).
asana_create_subtaskCreate a subtask under a parent task.
asana_create_taskCreate 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_projectDESTRUCTIVE — permanently delete a project. Requires confirm:true (C13 gate). No-op + gate message otherwise.
asana_delete_sectionDESTRUCTIVE — delete a section (Asana requires it be empty, or moves its tasks out). Requires confirm:true (C13 gate).
asana_delete_taskDESTRUCTIVE — permanently delete (trash) a task. Requires confirm:true (C13 gate). Without confirm it is a no-op that reports the gate.
asana_duplicate_projectDuplicate 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_taskDuplicate 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_duplicatesFind 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_fieldFetch one custom field by GID — type, precision, and full enum_options (name+GID) list.
asana_get_custom_field_settingsFetch 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_jobPoll 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_portfolioFetch one portfolio; set include_items=true to also pull its member projects/portfolios.
asana_get_projectFetch one project with its custom_field_settings (field GIDs + enum option GIDs) AND its sections, merged into one response.
asana_get_taskFetch one task with rich fields (assignee, projects, section memberships, custom fields, notes, subtask count). Override opt_fields for more/less.
asana_get_userFetch one user by GID (default "me" = token owner). Returns name, email, GID.
asana_get_workspaceFetch workspace metadata (name, is_organization, email_domains).
asana_instantiate_project_templateCreate a new project from a project template (repeatable board setup). Returns an async job whose new_project holds the created project.
asana_instantiate_task_templateCreate a new task from a task template (repeatable intake/ops task). Returns an async job whose new_task holds the created task.
asana_list_attachmentsList a task's attachments with download/permanent URLs and sizes.
asana_list_dependenciesReturn a task's dependencies (what it waits on) AND dependents (what waits on it), in one call.
asana_list_portfoliosList portfolios owned by a user in the workspace. owner defaults to "me". Paginated.
asana_list_project_statusesList a project's status updates (status_type, title, text, author). Paginated.
asana_list_projectsList projects in the workspace (or a team). Excludes archived by default; set include_archived=true for all. Paginated.
asana_list_sectionsList the sections of a project (name + GID), in board order.
asana_list_storiesList a task's stories (comments + activity log). text field holds comment bodies. Paginated.
asana_list_subtasksList a task's subtasks with rich fields. Paginated.
asana_list_tagsList tags in the workspace (name → GID). Paginated.
asana_list_task_templatesList a project's task templates (repeatable task blueprints). Paginated.
asana_list_tasksList tasks by project, section, tag, OR assignee (provide exactly one anchor). Paginated. assignee uses the workspace default.
asana_list_teamsList teams the token owner belongs to in the workspace/organization. Paginated.
asana_list_usersList workspace members (name → GID resolution). Paginated.
asana_list_workspace_custom_fieldsList ALL custom fields defined in the workspace (design discovery — find a field GID to attach to a board). Paginated.
asana_morning_briefCOMPOSITE: 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_sectionMove a task to a different section within its project. Fixes: no MCP tool for section moves.
asana_my_tasksList 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_rollupCOMPOSITE: 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_projectDetach a custom field from a project (removeCustomFieldSetting). Symmetric with asana_add_field_to_project.
asana_remove_followerRemove follower(s) from a task.
asana_remove_from_portfolioRemove an item from a portfolio.
asana_remove_from_projectRemove a task from a project (un-add a board card). Symmetric with asana_add_to_project.
asana_remove_tagRemove a tag from a task.
asana_reorder_sectionReorder a section within its project (move a board column). Provide before_section or after_section (section GIDs).
asana_search_tasksAdvanced 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_fieldsSet custom fields on a task using correct type handling. Fixes: multi_enum arrays and date object wrappers that fail via official MCP.
asana_set_datesSet 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_notesSet rich-text notes on a task using html_notes. Fixes: "XML is invalid" error from official MCP.
asana_set_notes_safeSet 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_parentRe-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_inboxCOMPOSITE: 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_typeaheadResolve 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_projectUpdate a project: name, notes, color, archived, public, default_view, dates.
asana_update_sectionRename a section.
asana_user_queueCOMPOSITE: 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 reviews.
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Weekly downloads
- 21
- Last commit
- Aug 15, 2026 (2 months ago)
- Last release
- Aug 15, 2026 (2 months ago)
- Last package publish
- Aug 15, 2026 (2 months ago)
From GitHub (fetched Oct 24, 2026) and the package registry.
Details
- Registry name
io.github.jtalk22/asana-mcp-server- Version
- 1.0.1
- Auth
- API key
- Packages
- npm @jtalk22/asana-mcp
- License
- MIT
- Repository
- github.com/jtalk22/asana-mcp-server
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
More from jtalk22
Cite this page
Asana MCP Server. Agent Mart. https://agentmart.dev/connectors/jtalk22-asana-mcp-server (last updated 2026-10-24)