Install
$ agentstack add mcp-roychri-mcp-server-asana ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
MCP Server for Asana
[](https://www.npmjs.com/package/@roychri/mcp-server-asana)
This Model Context Protocol server implementation of Asana allows you to talk to Asana API from MCP Client such as Anthropic's Claude Desktop Application, and many more.
More details on MCP here:
- https://www.anthropic.com/news/model-context-protocol
- https://modelcontextprotocol.io/introduction
- https://github.com/modelcontextprotocol
Environment Variables
ASANA_ACCESS_TOKEN: (Required) Your Asana access tokenREAD_ONLY_MODE: (Optional) Set to 'true' to disable all write operations. In this mode:- Tools that modify Asana data (create, update, delete) will be disabled
- The
create-taskprompt will be disabled - Only read operations will be available
This is useful for testing or when you want to ensure no changes can be made to your Asana workspace.
Usage
In the AI tool of your choice (ex: Claude Desktop) ask something about asana tasks, projects, workspaces, and/or comments. Mentioning the word "asana" will increase the chance of having the LLM pick the right tool.
Example:
> How many unfinished asana tasks do we have in our Sprint 30 project?
Another example:
Tools
asana_list_workspaces
- List all available workspaces in Asana
- Optional input:
- opt_fields (string): Comma-separated list of optional fields to include
- Returns: List of workspaces
asana_search_projects
- Search for projects in Asana using name pattern matching
- Required input:
- workspace (string): The workspace to search in
- name_pattern (string): Regular expression pattern to match project names
- Optional input:
- archived (boolean): Only return archived projects (default: false)
- opt_fields (string): Comma-separated list of optional fields to include
- Returns: List of matching projects
asana_search_tasks
- Search tasks in a workspace with advanced filtering options
- Required input:
- workspace (string): The workspace to search in
- Optional input:
- text (string): Text to search for in task names and descriptions
- resource_subtype (string): Filter by task subtype (e.g. milestone)
- completed (boolean): Filter for completed tasks
- is_subtask (boolean): Filter for subtasks
- has_attachment (boolean): Filter for tasks with attachments
- is_blocked (boolean): Filter for tasks with incomplete dependencies
- is_blocking (boolean): Filter for incomplete tasks with dependents
- assignee, projects, sections, tags, teams, and many other advanced filters
- sortby (string): Sort by duedate, createdat, completedat, likes, modifiedat (default: modifiedat)
- sort_ascending (boolean): Sort in ascending order (default: false)
- opt_fields (string): Comma-separated list of optional fields to include
- custom_fields (object): Object containing custom field filters
- Returns: List of matching tasks
asana_get_task
- Get detailed information about a specific task
- Required input:
- task_id (string): The task ID to retrieve
- Optional input:
- opt_fields (string): Comma-separated list of optional fields to include
- Returns: Detailed task information
asana_create_task
- Create a new task in a project
- Required input:
- project_id (string): The project to create the task in
- name (string): Name of the task
- Optional input:
- notes (string): Description of the task
- html_notes (string): HTML-like formatted description of the task
- due_on (string): Due date in YYYY-MM-DD format
- assignee (string): Assignee (can be 'me' or a user ID)
- followers (array of strings): Array of user IDs to add as followers
- parent (string): The parent task ID to set this task under
- projects (array of strings): Array of project IDs to add this task to
- resourcesubtype (string): The type of the task (defaulttask or milestone)
- custom_fields (object): Object mapping custom field GID strings to their values
- Returns: Created task information
asana_get_task_stories
- Get comments and stories for a specific task
- Required input:
- task_id (string): The task ID to get stories for
- Optional input:
- opt_fields (string): Comma-separated list of optional fields to include
- Returns: List of task stories/comments
asana_update_task
- Update an existing task's details
- Required input:
- task_id (string): The task ID to update
- Optional input:
- name (string): New name for the task
- notes (string): New description for the task
- html_notes (string): HTML-like formatted description of the task (subset of HTML tags supported)
- due_on (string): New due date in YYYY-MM-DD format
- assignee (string): New assignee (can be 'me' or a user ID)
- followers (array): Array of user IDs to add as followers
- parent (string): The parent task ID to move this task under
- completed (boolean): Mark task as completed or not
- resourcesubtype (string): The type of the task (defaulttask or milestone)
- custom_fields (object): Object mapping custom field GID strings to their values
- Returns: Updated task information
asana_get_project
- Get detailed information about a specific project
- Required input:
- project_id (string): The project ID to retrieve
- Optional input:
- opt_fields (string): Comma-separated list of optional fields to include
- Returns: Detailed project information
asana_get_project_task_counts
- Get the number of tasks in a project
- Required input:
- project_id (string): The project ID to get task counts for
- Optional input:
- opt_fields (string): Comma-separated list of optional fields to include
- Returns: Task count information
asana_get_project_sections
- Get sections in a project
- Required input:
- project_id (string): The project ID to get sections for
- Optional input:
- opt_fields (string): Comma-separated list of optional fields to include
- Returns: List of project sections
asana_create_task_story
- Create a comment or story on a task
- Required input:
- task_id (string): The task ID to add the story to
- text (string): The text content of the story/comment
- Optional input:
- opt_fields (string): Comma-separated list of optional fields to include
- Returns: Created story information
asana_add_task_dependencies
- Set dependencies for a task
- Required input:
- task_id (string): The task ID to add dependencies to
- dependencies (array of strings): Array of task IDs that this task depends on
- Returns: Updated task dependencies
asana_add_task_dependents
- Set dependents for a task (tasks that depend on this task)
- Required input:
- task_id (string): The task ID to add dependents to
- dependents (array of strings): Array of task IDs that depend on this task
- Returns: Updated task dependents
asana_create_subtask
- Create a new subtask for an existing task
- Required input:
- parenttaskid (string): The parent task ID to create the subtask under
- name (string): Name of the subtask
- Optional input:
- notes (string): Description of the subtask
- due_on (string): Due date in YYYY-MM-DD format
- assignee (string): Assignee (can be 'me' or a user ID)
- opt_fields (string): Comma-separated list of optional fields to include
- Returns: Created subtask information
asana_get_multiple_tasks_by_gid
- Get detailed information about multiple tasks by their GIDs (maximum 25 tasks)
- Required input:
- task_ids (array of strings or comma-separated string): Task GIDs to retrieve (max 25)
- Optional input:
- opt_fields (string): Comma-separated list of optional fields to include
- Returns: List of detailed task information
asana_get_project_status
- Get a project status update
- Required input:
- projectstatusgid (string): The project status GID to retrieve
- Optional input:
- opt_fields (string): Comma-separated list of optional fields to include
- Returns: Project status information
asana_get_project_statuses
- Get all status updates for a project
- Required input:
- project_gid (string): The project GID to get statuses for
- Optional input:
- limit (number): Results per page (1-100)
- offset (string): Pagination offset token
- opt_fields (string): Comma-separated list of optional fields to include
- Returns: List of project status updates
asana_create_project_status
- Create a new status update for a project
- Required input:
- project_gid (string): The project GID to create the status for
- text (string): The text content of the status update
- Optional input:
- color (string): The color of the status (green, yellow, red)
- title (string): The title of the status update
- html_text (string): HTML formatted text for the status update
- opt_fields (string): Comma-separated list of optional fields to include
- Returns: Created project status information
asana_delete_project_status
- Delete a project status update
- Required input:
- projectstatusgid (string): The project status GID to delete
- Returns: Deletion confirmation
asana_set_parent_for_task
- Set the parent of a task and position the subtask within the other subtasks of that parent
- Required input:
- task_id (string): The task ID to operate on
- data (object):
- parent (string): The new parent of the task, or null for no parent
- Optional input:
- insert_after (string): A subtask of the parent to insert the task after, or null to insert at the beginning of the list
- insert_before (string): A subtask of the parent to insert the task before, or null to insert at the end of the list
- opt_fields (string): Comma-separated list of optional fields to include
- Returns: Updated task information
asana_get_tag
- Get detailed information about a specific tag
- Required input:
- tag_gid (string): Globally unique identifier for the tag
- Optional input:
- opt_fields (string): Comma-separated list of optional fields to include
- Returns: Detailed tag information
asana_get_tags_for_task
- Get a task's tags
- Required input:
- task_gid (string): The task to operate on
- Optional input:
- limit (number): Results per page. The number of objects to return per page. The value must be between 1 and 100.
- offset (string): Offset token. An offset to the next page returned by the API.
- opt_fields (string): Comma-separated list of optional fields to include
- Returns: List of tags associated with the task
asana_get_tasks_for_tag
- Get tasks for a specific tag
- Required input:
- tag_gid (string): The tag GID to retrieve tasks for
- Optional input:
- opt_fields (string): Comma-separated list of optional fields to include
- opt_pretty (boolean): Provides the response in a 'pretty' format
- limit (integer): The number of objects to return per page. The value must be between 1 and 100.
- offset (string): An offset to the next page returned by the API.
- Returns: List of tasks for the specified tag
asana_get_tags_for_workspace
- Get tags in a workspace
- Required input:
- workspace_gid (string): Globally unique identifier for the workspace or organization
- Optional input:
- limit (integer): Results per page. The number of objects to return per page. The value must be between 1 and 100.
- offset (string): Offset token. An offset to the next page returned by the API.
- opt_fields (string): Comma-separated list of optional fields to include
- Returns: List of tags in the workspace
asana_update_tag
- Update an existing tag
- Required input:
- tag_gid (string): Globally unique identifier for the tag
- Optional input:
- name (string): Name of the tag
- color (string): Color of the tag. Can be one of: dark-pink, dark-green, dark-blue, dark-red, dark-teal, dark-brown, dark-orange, dark-purple, dark-warm-gray, light-pink, light-green, light-blue, light-red, light-teal, light-brown, light-orange, light-purple, light-warm-gray
- notes (string): Notes about the tag
- opt_fields (string): Comma-separated list of optional fields to include
- Returns: Updated tag information
asana_delete_tag
- Delete a tag
- Required input:
- tag_gid (string): Globally unique identifier for the tag
- Returns: Deletion confirmation
asana_create_tag_for_workspace
- Create a new tag in a workspace
- Required input:
- workspace_gid (string): Globally unique identifier for the workspace or organization
- name (string): Name of the tag
- Optional input:
- color (string): Color of the tag. Can be one of: dark-pink, dark-green, dark-blue, dark-red, dark-teal, dark-brown, dark-orange, dark-purple, dark-warm-gray, light-pink, light-green, light-blue, light-red, light-teal, light-brown, light-orange, light-purple, light-warm-gray
- notes (string): Notes about the tag
- opt_fields (string): Comma-separated list of optional fields to include
- Returns: Created tag information
asana_add_tag_to_task
- Add a tag to a task
- Required input:
- task_gid (string): The task GID to add the tag to
- tag_gid (string): The tag GID to add to the task
- Returns: Success response
asana_remove_tag_from_task
- Remove a tag from a task
- Required input:
- task_gid (string): The task GID to remove the tag from
- tag_gid (string): The tag GID to remove from the task
- Returns: Success response
asana_add_project_to_task
- Add an existing task to a project
- Required input:
- task_id (string): The task ID to add to the project
- project_id (string): The project ID to add the task to
- Optional input:
- section (string): The section ID to add the task to within the project
- insertafter (string): A task ID to insert this task after. At most one of insertbefore, insert_after, or section should be specified.
- insertbefore (string): A task ID to insert this task before. At most one of insertbefore, insert_after, or section should be specified.
- Returns: Success message confirming the task was added to the project
- Notes: If no positioning arguments are given, the task will be added to the end of the project
asana_remove_project_from_task
- Remove a task from a project
- Required input:
- task_id (string): The task ID to remove from the project
- project_id (string): The project ID to remove the task from
- Returns: Success message confirming the task was removed from the project
- Notes: The task will still exist in the system, but it will not be in the project anymore
asana_delete_task
- Delete a task permanently
- Required input:
- task_id (string): The task ID to delete
- Returns: Success message confirming the task was deleted
- Notes: This action cannot be undone. The task will be permanently removed.
asana_create_project
- Create a new project in a workspace or team
- Required input:
- workspace (string)
…
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: roychri
- Source: roychri/mcp-server-asana
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.