MCP Server for Asana

MCP Server for Asana

Bridge Asana's API with Model Context Protocol tools for seamless task management.

107
Stars
41
Forks
107
Watchers
11
Issues
MCP Server for Asana provides a Model Context Protocol (MCP) compliant interface to the Asana API, enabling direct interaction with Asana from MCP clients such as Claude Desktop. It offers tools to list, search, retrieve, and create tasks and projects within Asana workspaces, with options for both read and write operations. The server supports advanced task filtering, project searching, and read-only modes for secure testing. Integration facilitates automation and streamlined project management within AI-powered environments.

Key Features

Model Context Protocol (MCP) server implementation for Asana
Direct integration with Asana API
Support for listing workspaces and searching projects
Advanced task search and filtering capabilities
Detailed task retrieval with customizable fields
Task creation with support for notes and custom fields
Configurable read-only operation mode for security
Compatible with MCP clients like Claude Desktop
Environment variable based configuration
Disable modification tools for safe environment testing

Use Cases

Automating Asana project and task management via AI-powered tools
Advanced task filtering and reporting in large teams
Safe, read-only data access for audit or review purposes
Integrating Asana data into workflow automation pipelines
Enhancing team productivity with intelligent, context-aware assistants
Centralized management of workspace, projects, and tasks
Rapid prototyping for AI agents leveraging Asana functionalities
Securely testing Asana API integrations before production use
Custom tool building for project tracking and updates in Asana
Providing project context to AI models for improved output relevance

README

MCP Server for Asana

npm version

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:

Environment Variables

  • ASANA_ACCESS_TOKEN: (Required) Your Asana access token
  • READ_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-task prompt 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:

Claude Desktop Example

Tools

  1. 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
  2. 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
  3. 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
      • sort_by (string): Sort by due_date, created_at, completed_at, likes, modified_at (default: modified_at)
      • 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
  4. 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
  5. 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
      • resource_subtype (string): The type of the task (default_task or milestone)
      • custom_fields (object): Object mapping custom field GID strings to their values
    • Returns: Created task information
  6. 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
  7. 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
      • due_on (string): New due date in YYYY-MM-DD format
      • assignee (string): New assignee (can be 'me' or a user ID)
      • completed (boolean): Mark task as completed or not
      • resource_subtype (string): The type of the task (default_task or milestone)
      • custom_fields (object): Object mapping custom field GID strings to their values
    • Returns: Updated task information
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. asana_create_subtask
    • Create a new subtask for an existing task
    • Required input:
      • parent_task_id (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
  15. 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
  16. asana_get_project_status
    • Get a project status update
    • Required input:
      • project_status_gid (string): The project status GID to retrieve
    • Optional input:
      • opt_fields (string): Comma-separated list of optional fields to include
    • Returns: Project status information
  17. 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
  18. 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
  19. asana_delete_project_status
    • Delete a project status update
    • Required input:
      • project_status_gid (string): The project status GID to delete
    • Returns: Deletion confirmation
  20. 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
  21. 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
  22. 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

Prompts

  1. task-summary

    • Get a summary and status update for a task based on its notes, custom fields and comments
    • Required input:
      • task_id (string): The task ID to get summary for
    • Returns: A detailed prompt with instructions for generating a task summary
  2. task-completeness

    • Analyze if a task description contains all necessary details for completion
    • Required input:
      • task_id (string): The task ID or URL to analyze
    • Returns: A detailed prompt with instructions for analyzing task completeness
  3. create-task

    • Create a new task with specified details
    • Required input:
      • project_name (string): The name of the Asana project where the task should be created
      • title (string): The title of the task
    • Optional input:
      • notes (string): Notes or description for the task
      • due_date (string): Due date for the task (YYYY-MM-DD format)
    • Returns: A detailed prompt with instructions for creating a comprehensive task

Resources

  1. Workspaces - asana://workspace/{workspace_gid}

    • Representation of Asana workspaces as resources
    • Each workspace is exposed as a separate resource
    • URI Format: asana://workspace/{workspace_gid}
    • Returns: JSON object with workspace details including:
      • name: Workspace name (string)
      • id: Workspace global ID (string)
      • type: Resource type (string)
      • is_organization: Whether the workspace is an organization (boolean)
      • email_domains: List of email domains associated with the workspace (string[])
    • Mime Type: application/json
  2. Projects - asana://project/{project_gid}

    • Template resource for retrieving project details by GID
    • URI Format: asana://project/{project_gid}
    • Returns: JSON object with project details including:
      • name: Project name (string)
      • id: Project global ID (string)
      • type: Resource type (string)
      • archived: Whether the project is archived (boolean)
      • public: Whether the project is public (boolean)
      • notes: Project description/notes (string)
      • color: Project color (string)
      • default_view: Default view type (string)
      • due_date, due_on, start_on: Project date information (string)
      • workspace: Object containing workspace information
      • team: Object containing team information
      • sections: Array of section objects in the project
      • custom_fields: Array of custom field definitions for the project
    • Mime Type: application/json

Setup

  1. Create an Asana account:

    • Visit the Asana.
    • Click "Sign up".
  2. Retrieve the Asana Access Token:

  3. Installation Options:

    For Claude Desktop:

    Add the following to your claude_desktop_config.json:

    json
    {
      "mcpServers": {
        "asana": {
          "command": "npx",
          "args": ["-y", "@roychri/mcp-server-asana"],
          "env": {
            "ASANA_ACCESS_TOKEN": "your-asana-access-token"
          }
        }
      }
    }
    

    For Claude Code:

    Use the following command to install and configure the MCP server:

    bash
    claude mcp add asana -e ASANA_ACCESS_TOKEN=<TOKEN> -- npx -y @roychri/mcp-server-asana
    

    Replace <TOKEN> with your Asana access token.

If you want to install the beta version (not yet released), you can use:

  • @roychri/mcp-server-asana@beta

You can find the current beta release, if any, with either:

  1. https://www.npmjs.com/package/@roychri/mcp-server-asana?activeTab=versions
  2. npm dist-tag ls @roychri/mcp-server-asana

Troubleshooting

If you encounter permission errors:

  1. Ensure the asana plan you have allows API access
  2. Confirm the access token and configuration are correctly set in claude_desktop_config.json.

Contributing

Clone this repo and start hacking.

Test it locally with the MCP Inspector

If you want to test your changes, you can use the MCP Inspector like this:

bash
npm run inspector

This will expose the client to port 5173 and server to port 3000.

If those ports are already used by something else, you can use:

bash
CLIENT_PORT=5009 SERVER_PORT=3009 npm run inspector

License

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

Star History

Star History Chart

Repository Owner

roychri
roychri

User

Repository Details

Language TypeScript
Default Branch main
Size 432 KB
Contributors 5
License MIT License
MCP Verified Nov 12, 2025

Programming Languages

TypeScript
93.77%
JavaScript
3.57%
Shell
2.66%

Tags

Join Our Newsletter

Stay updated with the latest AI tools, news, and offers by subscribing to our weekly newsletter.

We respect your privacy. Unsubscribe at any time.

Related MCPs

Discover similar Model Context Protocol servers

  • MCP Manager for Claude Desktop

    MCP Manager for Claude Desktop

    A desktop app to manage Model Context Protocol (MCP) servers for Claude Desktop on MacOS.

    MCP Manager for Claude Desktop provides a user-friendly interface to manage Model Context Protocol (MCP) servers, enabling Claude to access private data, APIs, and local or remote services securely from a MacOS desktop. It facilitates rapid configuration and integration with a wide variety of MCP servers, including productivity tools, databases, and web APIs. The app runs locally to ensure data privacy and streamlines connecting Claude to new sources through simple environment and server settings management.

    • 270
    • MCP
    • zueai/mcp-manager
  • Notion MCP Server

    Notion MCP Server

    Enable LLMs to interact with Notion using the Model Context Protocol.

    Notion MCP Server allows large language models to interface with Notion workspaces through a Model Context Protocol server, supporting both data retrieval and editing capabilities. It includes experimental Markdown conversion to optimize token usage for more efficient communication with LLMs. The server can be configured with environment variables and controlled for specific tool access. Integration with applications like Claude Desktop is supported for seamless automation.

    • 834
    • MCP
    • suekou/mcp-notion-server
  • Perplexity MCP Server

    Perplexity MCP Server

    MCP Server integration for accessing the Perplexity API with context-aware chat completion.

    Perplexity MCP Server provides a Model Context Protocol (MCP) compliant server that interfaces with the Perplexity API, enabling chat completion with citations. Designed for seamless integration with clients such as Claude Desktop, it allows users to send queries and receive context-rich responses from Perplexity. Environment configuration for API key management is supported, and limitations with long-running requests are noted. Future updates are planned to enhance support for client progress reporting.

    • 85
    • MCP
    • tanigami/mcp-server-perplexity
  • mcp-cli

    mcp-cli

    A command-line inspector and client for the Model Context Protocol

    mcp-cli is a command-line interface tool designed to interact with Model Context Protocol (MCP) servers. It allows users to run and connect to MCP servers from various sources, inspect available tools, resources, and prompts, and execute commands non-interactively or interactively. The tool supports OAuth for various server types, making integration and automation seamless for developers working with MCP-compliant servers.

    • 391
    • MCP
    • wong2/mcp-cli
  • MCP Linear

    MCP Linear

    MCP server for AI-driven control of Linear project management.

    MCP Linear is a Model Context Protocol (MCP) server implementation that enables AI assistants to interact with the Linear project management platform. It provides a bridge between AI systems and the Linear GraphQL API, allowing the retrieval and management of issues, projects, teams, and more. With MCP Linear, users can create, update, assign, and comment on Linear issues, as well as manage project and team structures directly through AI interfaces. The tool supports seamless integration via Smithery and can be configured for various AI clients like Cursor and Claude Desktop.

    • 117
    • MCP
    • tacticlaunch/mcp-linear
  • anki-mcp

    anki-mcp

    MCP server for seamless integration with Anki via AnkiConnect.

    An MCP server that bridges Anki flashcards with the Model Context Protocol, exposing AnkiConnect functionalities as standardized MCP tools. It organizes Anki actions into intuitive services covering decks, notes, cards, and models for easy access and automation. Designed for integration with AI assistants and other MCP-compatible clients, it enables operations like creating, modifying, and organizing flashcards through a unified protocol.

    • 6
    • MCP
    • ujisati/anki-mcp
  • Didn't find tool you were looking for?

    Be as detailed as possible for better results