The MCP Server for Asana enables you to interact with the Asana API through Model Context Protocol (MCP) clients such as Claude Desktop. This integration allows you to query and manage your Asana tasks, projects, workspaces, and more directly from your AI assistant.
Create an Asana account:
Retrieve your Asana Access Token:
Optional: Get your default workspace ID:
Add the following to your claude_desktop_config.json
:
{
"mcpServers": {
"asana": {
"command": "npx",
"args": ["-y", "@cristip73/mcp-server-asana"],
"env": {
"ASANA_ACCESS_TOKEN": "your-asana-access-token",
"DEFAULT_WORKSPACE_ID": "your-default-workspace-id"
}
}
}
}
In your AI tool (like Claude Desktop), simply ask about Asana tasks, projects, or workspaces. Including the word "asana" in your query helps the AI select the right tool.
Example queries:
When updating or creating tasks with custom fields, use the following format:
asana_update_task({
task_id: "TASK_ID",
custom_fields: {
"custom_field_gid": value // The value format depends on the field type
}
})
The value format varies by field type:
enum_option.gid
of the optionTo find the GIDs of custom fields and their enum options:
Get task details with custom fields:
asana_get_task({
task_id: "TASK_ID",
opt_fields: "custom_fields,custom_fields.enum_options"
})
In the response, examine the custom_fields
array to find:
gid
: The unique identifier for the custom fieldname
: The display nameresource_subtype
: The field typeenum_options
array for the GID of each option// First, get the task with custom fields
const taskDetails = asana_get_task({
task_id: "1234567890",
opt_fields: "custom_fields,custom_fields.enum_options"
});
// Find the custom field GID and enum option GID
const priorityFieldGid = "11112222"; // From taskDetails.custom_fields
const highPriorityOptionGid = "33334444"; // From the enum_options of the priority field
// Update the task with the custom field
asana_update_task({
task_id: "1234567890",
custom_fields: {
[priorityFieldGid]: highPriorityOptionGid
}
});
asana_list_workspaces
: List all available workspacesasana_list_workspace_users
: Get users in a workspaceasana_get_teams_for_workspace
: Get teams in a workspaceasana_get_teams_for_user
: Get teams for a specific userasana_get_tags_for_workspace
: Get tags in a workspaceasana_search_projects
: Search for projects by name patternasana_get_project
: Get details about a specific projectasana_create_project
: Create a new projectasana_get_project_sections
: Get sections in a projectasana_create_section_for_project
: Create a new section in a projectasana_get_project_task_counts
: Get the number of tasks in a projectasana_get_project_hierarchy
: Get the complete hierarchical structure of a projectasana_get_project_status
: Get a specific project status updateasana_get_project_statuses
: Get all status updates for a projectasana_create_project_status
: Create a new status update for a projectasana_delete_project_status
: Delete a project status updateasana_search_tasks
: Search tasks with advanced filtering optionsasana_get_task
: Get detailed information about a taskasana_create_task
: Create a new taskasana_update_task
: Update an existing taskasana_get_task_stories
: Get comments and stories for a taskasana_create_task_story
: Create a comment on a taskasana_create_subtask
: Create a new subtaskasana_get_multiple_tasks_by_gid
: Get details about multiple tasks (up to 25)asana_add_task_to_section
: Add a task to a specific sectionasana_add_task_dependencies
: Set dependencies for a taskasana_add_task_dependents
: Set tasks that depend on a taskasana_add_followers_to_task
: Add followers to a taskasana_set_parent_for_task
: Set the parent of a taskasana_get_tasks_for_tag
: Get tasks for a specific tagasana_get_attachments_for_object
: List attachments for a task or projectasana_upload_attachment_for_object
: Upload a file as an attachmentasana_download_attachment
: Download an attachment to a local directorytask-summary
: Generate a summary and status update for a taskIf you encounter permission errors:
claude_desktop_config.json
There are two ways to add an MCP server to Cursor. The most common way is to add the server globally in the ~/.cursor/mcp.json
file so that it is available in all of your projects.
If you only need the server in a single project, you can add it to the project instead by creating or adding it to the .cursor/mcp.json
file.
To add a global MCP server go to Cursor Settings > MCP and click "Add new global MCP server".
When you click that button the ~/.cursor/mcp.json
file will be opened and you can add your server like this:
{
"mcpServers": {
"cursor-rules-mcp": {
"command": "npx",
"args": [
"-y",
"cursor-rules-mcp"
]
}
}
}
To add an MCP server to a project you can create a new .cursor/mcp.json
file or add it to the existing one. This will look exactly the same as the global MCP server example above.
Once the server is installed, you might need to head back to Settings > MCP and click the refresh button.
The Cursor agent will then be able to see the available tools the added MCP server has available and will call them when it needs to.
You can also explictly ask the agent to use the tool by mentioning the tool name and describing what the function does.