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 - ASANAACCESSTOKEN: (Required) Your Asana access token - RE
Add this skill
npx mdskills install roychri/mcp-server-asanaComprehensive Asana API integration with 23 well-documented tools covering all major operations
1# MCP Server for Asana23[](https://www.npmjs.com/package/@roychri/mcp-server-asana)45This Model Context Protocol server implementation of Asana allows you6to talk to Asana API from MCP Client such as Anthropic's Claude7Desktop Application, and many more.89More details on MCP here:10 - https://www.anthropic.com/news/model-context-protocol11 - https://modelcontextprotocol.io/introduction12 - https://github.com/modelcontextprotocol1314<a href="https://glama.ai/mcp/servers/ln1qzdhwmc"><img width="380" height="200" src="https://glama.ai/mcp/servers/ln1qzdhwmc/badge" alt="mcp-server-asana MCP server" /></a>1516## Environment Variables1718- `ASANA_ACCESS_TOKEN`: (Required) Your Asana access token19- `READ_ONLY_MODE`: (Optional) Set to 'true' to disable all write operations. In this mode:20 - Tools that modify Asana data (create, update, delete) will be disabled21 - The `create-task` prompt will be disabled22 - Only read operations will be available23 This is useful for testing or when you want to ensure no changes can be made to your Asana workspace.2425## Usage2627In 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.2829Example:3031> How many unfinished asana tasks do we have in our Sprint 30 project?3233Another example:34353637## Tools38391. `asana_list_workspaces`40 * List all available workspaces in Asana41 * Optional input:42 * opt_fields (string): Comma-separated list of optional fields to include43 * Returns: List of workspaces442. `asana_search_projects`45 * Search for projects in Asana using name pattern matching46 * Required input:47 * workspace (string): The workspace to search in48 * name_pattern (string): Regular expression pattern to match project names49 * Optional input:50 * archived (boolean): Only return archived projects (default: false)51 * opt_fields (string): Comma-separated list of optional fields to include52 * Returns: List of matching projects533. `asana_search_tasks`54 * Search tasks in a workspace with advanced filtering options55 * Required input:56 * workspace (string): The workspace to search in57 * Optional input:58 * text (string): Text to search for in task names and descriptions59 * resource_subtype (string): Filter by task subtype (e.g. milestone)60 * completed (boolean): Filter for completed tasks61 * is_subtask (boolean): Filter for subtasks62 * has_attachment (boolean): Filter for tasks with attachments63 * is_blocked (boolean): Filter for tasks with incomplete dependencies64 * is_blocking (boolean): Filter for incomplete tasks with dependents65 * assignee, projects, sections, tags, teams, and many other advanced filters66 * sort_by (string): Sort by due_date, created_at, completed_at, likes, modified_at (default: modified_at)67 * sort_ascending (boolean): Sort in ascending order (default: false)68 * opt_fields (string): Comma-separated list of optional fields to include69 * custom_fields (object): Object containing custom field filters70 * Returns: List of matching tasks714. `asana_get_task`72 * Get detailed information about a specific task73 * Required input:74 * task_id (string): The task ID to retrieve75 * Optional input:76 * opt_fields (string): Comma-separated list of optional fields to include77 * Returns: Detailed task information785. `asana_create_task`79 * Create a new task in a project80 * Required input:81 * project_id (string): The project to create the task in82 * name (string): Name of the task83 * Optional input:84 * notes (string): Description of the task85 * html_notes (string): HTML-like formatted description of the task86 * due_on (string): Due date in YYYY-MM-DD format87 * assignee (string): Assignee (can be 'me' or a user ID)88 * followers (array of strings): Array of user IDs to add as followers89 * parent (string): The parent task ID to set this task under90 * projects (array of strings): Array of project IDs to add this task to91 * resource_subtype (string): The type of the task (default_task or milestone)92 * custom_fields (object): Object mapping custom field GID strings to their values93 * Returns: Created task information946. `asana_get_task_stories`95 * Get comments and stories for a specific task96 * Required input:97 * task_id (string): The task ID to get stories for98 * Optional input:99 * opt_fields (string): Comma-separated list of optional fields to include100 * Returns: List of task stories/comments1017. `asana_update_task`102 * Update an existing task's details103 * Required input:104 * task_id (string): The task ID to update105 * Optional input:106 * name (string): New name for the task107 * notes (string): New description for the task108 * html_notes (string): HTML-like formatted description of the task (subset of HTML tags supported)109 * due_on (string): New due date in YYYY-MM-DD format110 * assignee (string): New assignee (can be 'me' or a user ID)111 * followers (array): Array of user IDs to add as followers112 * parent (string): The parent task ID to move this task under113 * completed (boolean): Mark task as completed or not114 * resource_subtype (string): The type of the task (default_task or milestone)115 * custom_fields (object): Object mapping custom field GID strings to their values116 * Returns: Updated task information1178. `asana_get_project`118 * Get detailed information about a specific project119 * Required input:120 * project_id (string): The project ID to retrieve121 * Optional input:122 * opt_fields (string): Comma-separated list of optional fields to include123 * Returns: Detailed project information1249. `asana_get_project_task_counts`125 * Get the number of tasks in a project126 * Required input:127 * project_id (string): The project ID to get task counts for128 * Optional input:129 * opt_fields (string): Comma-separated list of optional fields to include130 * Returns: Task count information13110. `asana_get_project_sections`132 * Get sections in a project133 * Required input:134 * project_id (string): The project ID to get sections for135 * Optional input:136 * opt_fields (string): Comma-separated list of optional fields to include137 * Returns: List of project sections13811. `asana_create_task_story`139 * Create a comment or story on a task140 * Required input:141 * task_id (string): The task ID to add the story to142 * text (string): The text content of the story/comment143 * Optional input:144 * opt_fields (string): Comma-separated list of optional fields to include145 * Returns: Created story information14612. `asana_add_task_dependencies`147 * Set dependencies for a task148 * Required input:149 * task_id (string): The task ID to add dependencies to150 * dependencies (array of strings): Array of task IDs that this task depends on151 * Returns: Updated task dependencies15213. `asana_add_task_dependents`153 * Set dependents for a task (tasks that depend on this task)154 * Required input:155 * task_id (string): The task ID to add dependents to156 * dependents (array of strings): Array of task IDs that depend on this task157 * Returns: Updated task dependents15814. `asana_create_subtask`159 * Create a new subtask for an existing task160 * Required input:161 * parent_task_id (string): The parent task ID to create the subtask under162 * name (string): Name of the subtask163 * Optional input:164 * notes (string): Description of the subtask165 * due_on (string): Due date in YYYY-MM-DD format166 * assignee (string): Assignee (can be 'me' or a user ID)167 * opt_fields (string): Comma-separated list of optional fields to include168 * Returns: Created subtask information16915. `asana_get_multiple_tasks_by_gid`170 * Get detailed information about multiple tasks by their GIDs (maximum 25 tasks)171 * Required input:172 * task_ids (array of strings or comma-separated string): Task GIDs to retrieve (max 25)173 * Optional input:174 * opt_fields (string): Comma-separated list of optional fields to include175 * Returns: List of detailed task information17616. `asana_get_project_status`177 * Get a project status update178 * Required input:179 * project_status_gid (string): The project status GID to retrieve180 * Optional input:181 * opt_fields (string): Comma-separated list of optional fields to include182 * Returns: Project status information18317. `asana_get_project_statuses`184 * Get all status updates for a project185 * Required input:186 * project_gid (string): The project GID to get statuses for187 * Optional input:188 * limit (number): Results per page (1-100)189 * offset (string): Pagination offset token190 * opt_fields (string): Comma-separated list of optional fields to include191 * Returns: List of project status updates19218. `asana_create_project_status`193 * Create a new status update for a project194 * Required input:195 * project_gid (string): The project GID to create the status for196 * text (string): The text content of the status update197 * Optional input:198 * color (string): The color of the status (green, yellow, red)199 * title (string): The title of the status update200 * html_text (string): HTML formatted text for the status update201 * opt_fields (string): Comma-separated list of optional fields to include202 * Returns: Created project status information20319. `asana_delete_project_status`204 * Delete a project status update205 * Required input:206 * project_status_gid (string): The project status GID to delete207 * Returns: Deletion confirmation20820. `asana_set_parent_for_task`209 * Set the parent of a task and position the subtask within the other subtasks of that parent210 * Required input:211 * task_id (string): The task ID to operate on212 * data (object):213 * parent (string): The new parent of the task, or null for no parent214 * Optional input:215 * insert_after (string): A subtask of the parent to insert the task after, or null to insert at the beginning of the list216 * insert_before (string): A subtask of the parent to insert the task before, or null to insert at the end of the list217 * opt_fields (string): Comma-separated list of optional fields to include218 * Returns: Updated task information21921. `asana_get_tag`220 * Get detailed information about a specific tag221 * Required input:222 * tag_gid (string): Globally unique identifier for the tag223 * Optional input:224 * opt_fields (string): Comma-separated list of optional fields to include225 * Returns: Detailed tag information22622. `asana_get_tags_for_task`227 * Get a task's tags228 * Required input:229 * task_gid (string): The task to operate on230 * Optional input:231 * limit (number): Results per page. The number of objects to return per page. The value must be between 1 and 100.232 * offset (string): Offset token. An offset to the next page returned by the API.233 * opt_fields (string): Comma-separated list of optional fields to include234 * Returns: List of tags associated with the task23523. `asana_get_tasks_for_tag`236 * Get tasks for a specific tag237 * Required input:238 * tag_gid (string): The tag GID to retrieve tasks for239 * Optional input:240 * opt_fields (string): Comma-separated list of optional fields to include241 * opt_pretty (boolean): Provides the response in a 'pretty' format242 * limit (integer): The number of objects to return per page. The value must be between 1 and 100.243 * offset (string): An offset to the next page returned by the API.244 * Returns: List of tasks for the specified tag24524. `asana_get_tags_for_workspace`246 * Get tags in a workspace247 * Required input:248 * workspace_gid (string): Globally unique identifier for the workspace or organization249 * Optional input:250 * limit (integer): Results per page. The number of objects to return per page. The value must be between 1 and 100.251 * offset (string): Offset token. An offset to the next page returned by the API.252 * opt_fields (string): Comma-separated list of optional fields to include253 * Returns: List of tags in the workspace25425. `asana_update_tag`255 * Update an existing tag256 * Required input:257 * tag_gid (string): Globally unique identifier for the tag258 * Optional input:259 * name (string): Name of the tag260 * 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-gray261 * notes (string): Notes about the tag262 * opt_fields (string): Comma-separated list of optional fields to include263 * Returns: Updated tag information26426. `asana_delete_tag`265 * Delete a tag266 * Required input:267 * tag_gid (string): Globally unique identifier for the tag268 * Returns: Deletion confirmation26927. `asana_create_tag_for_workspace`270 * Create a new tag in a workspace271 * Required input:272 * workspace_gid (string): Globally unique identifier for the workspace or organization273 * name (string): Name of the tag274 * Optional input:275 * 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-gray276 * notes (string): Notes about the tag277 * opt_fields (string): Comma-separated list of optional fields to include278 * Returns: Created tag information27928. `asana_add_tag_to_task`280 * Add a tag to a task281 * Required input:282 * task_gid (string): The task GID to add the tag to283 * tag_gid (string): The tag GID to add to the task284 * Returns: Success response28529. `asana_remove_tag_from_task`286 * Remove a tag from a task287 * Required input:288 * task_gid (string): The task GID to remove the tag from289 * tag_gid (string): The tag GID to remove from the task290 * Returns: Success response29130. `asana_add_project_to_task`292 * Add an existing task to a project293 * Required input:294 * task_id (string): The task ID to add to the project295 * project_id (string): The project ID to add the task to296 * Optional input:297 * section (string): The section ID to add the task to within the project298 * insert_after (string): A task ID to insert this task after. At most one of insert_before, insert_after, or section should be specified.299 * insert_before (string): A task ID to insert this task before. At most one of insert_before, insert_after, or section should be specified.300 * Returns: Success message confirming the task was added to the project301 * Notes: If no positioning arguments are given, the task will be added to the end of the project30231. `asana_remove_project_from_task`303 * Remove a task from a project304 * Required input:305 * task_id (string): The task ID to remove from the project306 * project_id (string): The project ID to remove the task from307 * Returns: Success message confirming the task was removed from the project308 * Notes: The task will still exist in the system, but it will not be in the project anymore30932. `asana_delete_task`310 * Delete a task permanently311 * Required input:312 * task_id (string): The task ID to delete313 * Returns: Success message confirming the task was deleted314 * Notes: This action cannot be undone. The task will be permanently removed.31533. `asana_create_project`316 * Create a new project in a workspace or team317 * Required input:318 * workspace (string): The workspace GID to create the project in319 * name (string): Name of the project320 * Optional input:321 * team (string): The team GID (required for organization workspaces)322 * notes (string): Description or notes for the project323 * color (string): Color of the project (e.g., dark-pink, dark-green, light-blue)324 * privacy_setting (string): Privacy setting (public_to_workspace, private_to_team, private)325 * default_view (string): Default view (list, board, calendar, timeline)326 * opt_fields (string): Comma-separated list of optional fields to include327 * Returns: The created project object328329## Prompts3303311. `task-summary`332 * Get a summary and status update for a task based on its notes, custom fields and comments333 * Required input:334 * task_id (string): The task ID to get summary for335 * Returns: A detailed prompt with instructions for generating a task summary3363372. `task-completeness`338 * Analyze if a task description contains all necessary details for completion339 * Required input:340 * task_id (string): The task ID or URL to analyze341 * Returns: A detailed prompt with instructions for analyzing task completeness3423433. `create-task`344 * Create a new task with specified details345 * Required input:346 * project_name (string): The name of the Asana project where the task should be created347 * title (string): The title of the task348 * Optional input:349 * notes (string): Notes or description for the task350 * due_date (string): Due date for the task (YYYY-MM-DD format)351 * Returns: A detailed prompt with instructions for creating a comprehensive task352353## Resources3543551. Workspaces - `asana://workspace/{workspace_gid}`356 * Representation of Asana workspaces as resources357 * Each workspace is exposed as a separate resource358 * URI Format: `asana://workspace/{workspace_gid}`359 * Returns: JSON object with workspace details including:360 * `name`: Workspace name (string)361 * `id`: Workspace global ID (string)362 * `type`: Resource type (string)363 * `is_organization`: Whether the workspace is an organization (boolean)364 * `email_domains`: List of email domains associated with the workspace (string[])365 * Mime Type: `application/json`3663672. Projects - `asana://project/{project_gid}`368 * Template resource for retrieving project details by GID369 * URI Format: `asana://project/{project_gid}`370 * Returns: JSON object with project details including:371 * `name`: Project name (string)372 * `id`: Project global ID (string)373 * `type`: Resource type (string)374 * `archived`: Whether the project is archived (boolean)375 * `public`: Whether the project is public (boolean)376 * `notes`: Project description/notes (string)377 * `color`: Project color (string)378 * `default_view`: Default view type (string)379 * `due_date`, `due_on`, `start_on`: Project date information (string)380 * `workspace`: Object containing workspace information381 * `team`: Object containing team information382 * `sections`: Array of section objects in the project383 * `custom_fields`: Array of custom field definitions for the project384 * Mime Type: `application/json`385386## Setup3873883891. **Create an Asana account**:390391 - Visit the [Asana](https://www.asana.com).392 - Click "Sign up".3933942. **Retrieve the Asana Access Token**:395396 - You can generate a personal access token from the Asana developer console.397 - https://app.asana.com/0/my-apps398 - More details here: https://developers.asana.com/docs/personal-access-token3994003. **Installation Options**:401402 ### For Claude Desktop:403 Add the following to your `claude_desktop_config.json`:404405 ```json406 {407 "mcpServers": {408 "asana": {409 "command": "npx",410 "args": ["-y", "@roychri/mcp-server-asana"],411 "env": {412 "ASANA_ACCESS_TOKEN": "your-asana-access-token"413 }414 }415 }416 }417 ```418419 ### For Claude Code:420421 Use the following command to install and configure the MCP server:422423 ```bash424 claude mcp add asana -e ASANA_ACCESS_TOKEN=<TOKEN> -- npx -y @roychri/mcp-server-asana425 ```426427 Replace `<TOKEN>` with your Asana access token.428429If you want to install the beta version (not yet released), you can use:430431* `@roychri/mcp-server-asana@beta`432433You can find the current beta release, if any, with either:4344351. https://www.npmjs.com/package/@roychri/mcp-server-asana?activeTab=versions4362. `npm dist-tag ls @roychri/mcp-server-asana`437438## Troubleshooting439440If you encounter permission errors:4414421. Ensure the asana plan you have allows API access4432. Confirm the access token and configuration are correctly set in `claude_desktop_config.json`.444445446## Contributing447448Clone this repo and start hacking.449450### Test it locally with the MCP Inspector451452If you want to test your changes, you can use the MCP Inspector like this:453454```bash455npm run inspector456```457458This will expose the client to port `5173` and server to port `3000`.459460If those ports are already used by something else, you can use:461462```bash463CLIENT_PORT=5009 SERVER_PORT=3009 npm run inspector464```465466## License467468This MCP server is licensed under the MIT License. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the MIT License. For more details, please see the LICENSE file in the project repository.469
Full transparency — inspect the skill content before installing.