Skip to main content
Glama

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.

Related MCP server: MCP Server for Asana

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

      • 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

      • 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_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

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

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

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

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

  26. asana_delete_tag

    • Delete a tag

    • Required input:

      • tag_gid (string): Globally unique identifier for the tag

    • Returns: Deletion confirmation

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

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

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

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

      • insert_after (string): A task ID to insert this task after. At most one of insert_before, insert_after, or section should be specified.

      • insert_before (string): A task ID to insert this task before. At most one of insert_before, 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

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

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

  33. asana_create_project

    • Create a new project in a workspace or team

    • Required input:

      • workspace (string): The workspace GID to create the project in

      • name (string): Name of the project

    • Optional input:

      • team (string): The team GID (required for organization workspaces)

      • notes (string): Description or notes for the project

      • color (string): Color of the project (e.g., dark-pink, dark-green, light-blue)

      • privacy_setting (string): Privacy setting (public_to_workspace, private_to_team, private)

      • default_view (string): Default view (list, board, calendar, timeline)

      • opt_fields (string): Comma-separated list of optional fields to include

    • Returns: The created project object

  34. asana_update_project

    • Update a project's details (name, description, etc.)

    • Required input:

      • project_id (string): The project GID to update

    • Optional input:

      • name (string): New name for the project

      • notes (string): New plain text description for the project

      • html_notes (string): New HTML formatted description (must be valid Asana XML)

      • color (string): Color of the project (e.g., dark-pink, dark-green, light-blue)

      • privacy_setting (string): Privacy setting (public_to_workspace, private_to_team, private)

      • opt_fields (string): Comma-separated list of optional fields to include

    • Returns: Updated project information

  35. asana_create_section

    • Create a new section in a project

    • Required input:

      • project_id (string): The project GID to create the section in

      • name (string): Name of the new section

    • Optional input:

      • opt_fields (string): Comma-separated list of optional fields to include

    • Returns: Created section information

  36. asana_update_section

    • Update a section (rename it)

    • Required input:

      • section_id (string): The section GID to update

      • name (string): New name for the section

    • Optional input:

      • opt_fields (string): Comma-separated list of optional fields to include

    • Returns: Updated section information

  37. asana_delete_section

    • Delete a section from a project

    • Required input:

      • section_id (string): The section GID to delete

    • Returns: Deletion confirmation

  38. asana_add_task_to_section

    • Move a task to a section within its project

    • Required input:

      • section_id (string): The section GID to add the task to

      • task_id (string): The task GID to move

    • Optional input:

      • insert_before (string): A task GID to insert the task before

      • insert_after (string): A task GID to insert the task after

    • Returns: Success confirmation

  39. asana_get_subtasks

    • Get all subtasks of a given task. Returns a compact representation of each subtask.

    • Required input:

      • task_gid (string): The GID of the parent task

    • Optional input:

      • opt_fields (string): Comma-separated list of optional fields to include (e.g. 'name,completed,assignee,due_on')

    • Returns: Array of subtask objects

  40. asana_get_tasks_for_project

    • Get all tasks in a project. Use this instead of search_tasks when you need to list tasks in a specific project. Works on free Asana plans (unlike search_tasks which requires premium). Supports pagination and optional field selection.

    • Required input:

      • project_id (string): The project GID to get tasks for

    • Optional input:

      • opt_fields (string): Comma-separated list of optional fields to include

      • limit (number): Results per page (1-100)

      • offset (string): Pagination offset token from a previous response

    • Returns: Array of task objects

  41. asana_get_my_tasks

    • Get tasks from the authenticated user's 'My Tasks' list in a workspace

    • Required input:

      • workspace (string): The workspace GID to get My Tasks from

    • Optional input:

      • opt_fields (string): Comma-separated list of optional fields to include

      • completed_since (string): Only return tasks completed since this time (ISO 8601). Use 'now' to only return incomplete tasks.

    • Returns: List of tasks from the user's My Tasks list

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:

    {
      "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:

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

    Replace <TOKEN> with your Asana access token.

    For Codex CLI:

    Add the following to your ~/.codex/config.toml:

    [mcp_servers.asana]
    command = "npx"
    args = [
      "-y", "@roychri/mcp-server-asana"
    ]
    env = {ASANA_ACCESS_TOKEN= "<TOKEN>"}

    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:

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:

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.

Available Tools

22 tools
asana_add_task_dependenciesC

Set dependencies for a task

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesThe task ID to add dependencies to
dependenciesYesArray of task IDs that this task depends on

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Set dependencies for a task' implies a mutation operation, but it doesn't specify whether this overwrites existing dependencies, appends to them, or requires specific permissions. It also lacks details on error handling (e.g., invalid task IDs) or rate limits. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste—it directly states the tool's purpose without unnecessary words. It's appropriately sized for a simple tool and front-loaded with the core action, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (a mutation tool with 2 parameters) and lack of annotations and output schema, the description is incomplete. It doesn't cover behavioral aspects like whether dependencies are overwritten or appended, error conditions, or return values. For a tool that modifies task relationships, more context is needed to ensure safe and correct usage by an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with clear documentation for 'task_id' and 'dependencies'. The description adds no additional parameter semantics beyond what the schema provides (e.g., it doesn't explain the format of task IDs or constraints on the dependencies array). According to the rules, with high schema coverage (>80%), the baseline score is 3, which is appropriate here as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Set') and resource ('dependencies for a task'), making the purpose immediately understandable. It distinguishes from siblings like 'asana_add_task_dependents' (which likely sets dependents rather than dependencies) and 'asana_update_task' (which might handle broader updates). However, it doesn't explicitly mention that this adds dependencies to an existing task versus creating new ones, which slightly limits specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., task must exist), exclusions (e.g., cannot set circular dependencies), or comparisons to siblings like 'asana_update_task' (which might also handle dependencies). Without such context, an agent must infer usage from the tool name and schema alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asana_add_task_dependentsC

Set dependents for a task (tasks that depend on this task)

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesThe task ID to add dependents to
dependentsYesArray of task IDs that depend on this task

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but only states the action without behavioral details. It doesn't disclose permissions needed, whether this overwrites or appends dependents, error conditions, or rate limits, leaving significant gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is appropriately sized and front-loaded, with every part contributing essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral traits, return values, error handling, and usage context, which are critical for an AI agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents both parameters. The description adds no additional meaning beyond what the schema provides, such as format examples or edge cases, meeting the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Set') and resource ('dependents for a task'), specifying that it adds tasks that depend on the given task. It distinguishes from sibling 'asana_add_task_dependencies' by focusing on dependents rather than dependencies, but doesn't explicitly contrast them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like 'asana_add_task_dependencies' or 'asana_update_task'. The description implies usage for setting dependents but lacks context about prerequisites, constraints, or typical scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asana_create_project_statusC

Create a new status update for a project

ParametersJSON Schema
NameRequiredDescriptionDefault
project_gidYesThe project GID to create the status for
textYesThe text content of the status update
colorNoThe color of the status (green, yellow, red)
titleNoThe title of the status update
html_textNoHTML formatted text for the status update
opt_fieldsNoComma-separated list of optional fields to include

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. While 'Create' implies a write operation, the description doesn't mention authentication requirements, rate limits, whether the operation is idempotent, what happens on failure, or what the response looks like. For a creation tool with zero annotation coverage, this leaves significant behavioral questions unanswered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that gets straight to the point with zero wasted words. It's perfectly front-loaded with the essential information and doesn't include any unnecessary elaboration or repetition. This is an excellent example of conciseness in tool descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation tool with 6 parameters, no annotations, and no output schema, the description is insufficiently complete. It doesn't address what the tool returns, error conditions, authentication needs, or how it fits within the broader Asana API context. The user would need to consult external documentation to understand the full operational context of this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 6 parameters thoroughly. The description adds no additional parameter information beyond what's in the schema - it doesn't explain relationships between parameters, provide examples, or clarify semantics like what 'GID' means or how 'opt_fields' should be used. The baseline score of 3 reflects adequate but minimal value added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create') and resource ('new status update for a project'), making the purpose immediately understandable. However, it doesn't differentiate this tool from sibling tools like 'asana_create_task_story' or 'asana_create_subtask' that also create content in Asana, leaving room for confusion about when to choose this specific creation tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'asana_get_project_status' and 'asana_delete_project_status' available, there's no indication of whether this is for initial creation versus updates, or how it relates to other project management tools in the set. The user must infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asana_create_subtaskC

Create a new subtask for an existing task

ParametersJSON Schema
NameRequiredDescriptionDefault
parent_task_idYesThe parent task ID to create the subtask under
nameYesName of the subtask
notesNoDescription of the subtask
html_notesNoHTML-like formatted description of the subtask. Does not support ALL HTML tags. Only a subset. The only allowed TAG in the HTML are: <body> <h1> <h2> <ol> <ul> <li> <strong> <em> <u> <s> <code> <pre> <blockquote> <a data-asana-type="" data-asana-gid=""> <hr> <img> <table> <tr> <td>. No other tags are allowed. Use the \n to create a newline. Do not use \n after <body>. Example: <body><h1>Motivation</h1> A customer called in to complain <h1>Goal</h1> Fix the problem</body>
due_onNoDue date in YYYY-MM-DD format
assigneeNoAssignee (can be 'me' or a user ID)
opt_fieldsNoComma-separated list of optional fields to include

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but offers minimal behavioral insight. It states 'Create' which implies a write/mutation operation, but doesn't disclose permissions needed, rate limits, whether the operation is idempotent, what happens on failure, or what the response contains. For a creation tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with zero wasted words. It's front-loaded with the core purpose and appropriately sized for what it communicates. Every word earns its place without being overly terse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation tool with 7 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what a successful creation returns, error conditions, or important behavioral aspects like whether subtasks inherit properties from parent tasks. The high parameter count and mutation nature demand more contextual information than provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 7 parameters thoroughly. The description adds no parameter-specific information beyond what's in the schema. However, it does imply the existence of a parent-child relationship through 'subtask for an existing task,' which contextualizes the 'parent_task_id' parameter. This meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create') and resource ('new subtask for an existing task'), making the purpose immediately understandable. It distinguishes this from general task creation tools like 'asana_create_task' by specifying it's for subtasks, though it doesn't explicitly contrast with sibling tools beyond this inherent differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (like needing an existing parent task), compare it to 'asana_create_task' for regular tasks, or indicate when subtasks are appropriate versus dependencies or other task relationships available in sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asana_create_taskC

Create a new task in a project

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesThe project to create the task in
nameYesName of the task
notesNoDescription of the task
html_notesNoHTML-like formatted description of the task. Does not support ALL HTML tags. Only a subset. The only allowed TAG in the HTML are: <body> <h1> <h2> <ol> <ul> <li> <strong> <em> <u> <s> <code> <pre> <blockquote> <a data-asana-type="" data-asana-gid=""> <hr> <img> <table> <tr> <td>. No other tags are allowed. Use the \n to create a newline. Do not use \n after <body>. Example: <body><h1>Motivation</h1> A customer called in to complain <h1>Goal</h1> Fix the problem</body>
due_onNoDue date in YYYY-MM-DD format
assigneeNoAssignee (can be 'me' or a user ID)
followersNoArray of user IDs to add as followers
parentNoThe parent task ID to set this task under
projectsNoArray of project IDs to add this task to
resource_subtypeNoThe type of the task. Can be one of 'default_task' or 'milestone'
custom_fieldsNoObject mapping custom field GID strings to their values. For enum fields use the enum option GID as the value.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. 'Create a new task' implies a write/mutation operation, but the description doesn't mention permissions required, whether this is idempotent, rate limits, error conditions, or what happens on success (e.g., returns a task ID). For a mutation tool with zero annotation coverage, this is inadequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero wasted words. It's appropriately sized for a basic create operation and front-loads the essential information without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 11 parameters, no annotations, and no output schema, the description is insufficient. It doesn't address what the tool returns, error handling, authentication requirements, or how it differs from similar tools. The 100% schema coverage helps with parameters, but other critical context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 11 parameters thoroughly. The description adds no additional parameter information beyond what's in the schema (e.g., it doesn't explain relationships between parameters like 'project_id' vs 'projects', or provide usage examples). Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Create a new task in a project' clearly states the action (create) and resource (task), with the project context providing specificity. However, it doesn't differentiate from sibling tools like 'asana_create_subtask' or 'asana_update_task', which would require explicit comparison to earn a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. There are multiple sibling tools for task creation and modification (e.g., asana_create_subtask, asana_update_task, asana_set_parent_for_task), but the description offers no context about prerequisites, when this is appropriate versus other tools, or any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asana_create_task_storyC

Create a comment or story on a task. Either text or html_text is required.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesThe task ID to add the story to
textNoThe plain text content of the story/comment. Required if html_text is not provided.
html_textNoHTML-like formatted text for the comment. Required if text is not provided. Does not support ALL HTML tags. Only a subset. The only allowed TAG in the HTML are: <body> <h1> <h2> <ol> <ul> <li> <strong> <em> <u> <s> <code> <pre> <blockquote> <a data-asana-type="" data-asana-gid=""> <hr> <img> <table> <tr> <td>. No other tags are allowed. Use the \n to create a newline. Do not use \n after <body>.
opt_fieldsNoComma-separated list of optional fields to include

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool creates a comment/story, implying a write operation, but doesn't mention permissions needed, rate limits, whether the action is reversible, or what the response looks like. For a mutation tool with zero annotation coverage, this is a significant gap in behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise—just one sentence that directly states the purpose and a key requirement. Every word earns its place with no redundancy or fluff, making it front-loaded and efficient for quick understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given this is a mutation tool (creates comments/stories) with no annotations and no output schema, the description is incomplete. It lacks information on behavioral traits like permissions, side effects, or response format. While the schema covers parameters well, the overall context for safe and effective use is insufficient, especially compared to sibling tools that might handle similar operations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters thoroughly. The description adds minimal value by noting that either 'text' or 'html_text' is required, which is already implied in the schema descriptions. It doesn't provide additional semantic context beyond what's in the structured fields, meeting the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create a comment or story on a task') and specifies the resource ('task'), which is a specific verb+resource combination. However, it doesn't distinguish this tool from potential alternatives like 'asana_create_task' or 'asana_get_task_stories' beyond the basic function, missing explicit sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It mentions that either 'text' or 'html_text' is required, but this is a parameter requirement, not usage context. There's no mention of prerequisites, when this operation is appropriate, or how it differs from sibling tools like 'asana_create_task' or 'asana_update_task'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asana_delete_project_statusC

Delete a project status update

ParametersJSON Schema
NameRequiredDescriptionDefault
project_status_gidYesThe project status GID to delete

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but only states the action without behavioral details. It doesn't disclose if deletion is permanent, requires specific permissions, has side effects (e.g., affecting project data), or error handling, which is inadequate for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, direct sentence with zero waste, front-loading the core action and resource. It's appropriately sized for a simple tool, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's destructive nature (implied by 'Delete'), lack of annotations, and no output schema, the description is incomplete. It should cover behavioral risks, permissions, or result expectations, but provides only minimal context, leaving gaps for safe agent use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the parameter 'project_status_gid' well-documented in the schema. The description adds no additional meaning beyond the schema, such as format examples or constraints, so it meets the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Delete') and target resource ('a project status update'), which is specific and unambiguous. However, it doesn't differentiate from sibling tools like 'asana_create_project_status' or 'asana_get_project_status' beyond the verb, missing explicit contrast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a valid project status GID), exclusions, or related tools like 'asana_create_project_status' for creation, leaving usage context unclear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asana_get_multiple_tasks_by_gidB

Get detailed information about multiple tasks by their GIDs (maximum 25 tasks)

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idsYesArray or comma-separated string of task GIDs to retrieve (max 25)
opt_fieldsNoComma-separated list of optional fields to include

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the 25-task limit, which is useful, but fails to describe other critical behaviors: whether this is a read-only operation, what authentication is required, rate limits, error handling for invalid GIDs, or the structure of returned data. For a batch retrieval tool with zero annotation coverage, this leaves significant gaps in understanding how the tool behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose ('Get detailed information about multiple tasks') followed by the key constraint ('by their GIDs (maximum 25 tasks)'). Every word earns its place with zero redundancy or unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of batch retrieval, absence of annotations, and no output schema, the description is incomplete. It doesn't explain what 'detailed information' includes, how results are structured, error scenarios, or authentication requirements. While concise, it lacks sufficient context for an agent to confidently use this tool without additional assumptions or trial-and-error.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents both parameters (task_ids with format options and max limit, opt_fields). The description adds minimal value beyond the schema by mentioning 'maximum 25 tasks' which aligns with the schema's maxItems constraint. No additional parameter semantics are provided, so the baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get detailed information') and resource ('multiple tasks by their GIDs'), making the purpose immediately understandable. It distinguishes from the single-task retrieval sibling 'asana_get_task' by specifying 'multiple tasks' and the batch limit. However, it doesn't explicitly contrast with other task-related siblings like 'asana_get_tasks_for_tag' or 'asana_search_tasks'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by specifying 'maximum 25 tasks' and the GID-based retrieval approach, suggesting this is for batch fetching of known tasks. However, it provides no explicit guidance on when to use this versus alternatives like 'asana_get_task' (single task) or 'asana_search_tasks' (filter-based search). The agent must infer appropriate usage from the description's constraints.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asana_get_projectB

Get detailed information about a specific project

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesThe project ID to retrieve
opt_fieldsNoComma-separated list of optional fields to include

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states 'Get detailed information' but doesn't disclose behavioral traits such as whether this is a read-only operation, authentication requirements, rate limits, error handling, or response format. For a tool with no annotation coverage, this leaves significant gaps in understanding how it behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste. It's front-loaded with the core purpose and appropriately sized for a simple retrieval tool, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description is incomplete. It doesn't explain what 'detailed information' includes, the return format, or any behavioral context. For a tool with 2 parameters and no structured support, the description should provide more guidance to compensate for these gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters (project_id and opt_fields) with clear descriptions. The description adds no additional meaning beyond what the schema provides, such as examples or context for opt_fields usage. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and resource 'detailed information about a specific project', making the purpose unambiguous. It distinguishes from siblings like asana_search_projects (which searches multiple projects) and asana_get_project_sections (which gets sections within a project). However, it doesn't explicitly mention what constitutes 'detailed information' or contrast with asana_get_project_task_counts, which is slightly less specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you need details for a specific project (vs. searching multiple projects with asana_search_projects), but it doesn't explicitly state when to use this tool versus alternatives like asana_get_project_statuses or asana_get_project_task_counts. No guidance on prerequisites or exclusions is provided, leaving usage context somewhat inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asana_get_project_sectionsC

Get sections in a project

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesThe project ID to get sections for
opt_fieldsNoComma-separated list of optional fields to include

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states 'Get sections in a project', implying a read-only operation, but does not specify whether this requires authentication, returns paginated results, or handles errors. For a tool with zero annotation coverage, this is insufficient to inform safe and effective usage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words. It is front-loaded with the core action and resource, making it easy to parse quickly. This minimal structure is appropriate for a straightforward tool, though it sacrifices detail for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete for effective tool use. It does not explain what the tool returns (e.g., list of sections, error formats) or behavioral aspects like rate limits. For a tool with no structured metadata, the description should provide more context to compensate, which it fails to do.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, clearly documenting both parameters: 'project_id' and 'opt_fields'. The description does not add any additional meaning beyond the schema, such as examples for 'opt_fields' or constraints on 'project_id'. Given the high schema coverage, a baseline score of 3 is appropriate as the schema handles the parameter documentation adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'sections in a project', making the purpose unambiguous. However, it does not differentiate from sibling tools like 'asana_get_project' or 'asana_get_project_statuses', which also retrieve project-related data, leaving room for potential confusion about when to use this specific tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, such as needing a valid project ID, or compare it to sibling tools like 'asana_get_project' for broader project details. This lack of context could lead to misuse or redundant tool calls.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asana_get_project_statusC

Get a project status update

ParametersJSON Schema
NameRequiredDescriptionDefault
project_status_gidYesThe project status GID to retrieve
opt_fieldsNoComma-separated list of optional fields to include

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but offers minimal behavioral insight. It implies a read operation ('get'), but doesn't disclose permissions needed, rate limits, error conditions, or what the return format looks like (e.g., JSON structure). This leaves significant gaps for an agent to understand how to handle the tool effectively.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words. It's front-loaded with the core action, though it could be more specific (e.g., 'Retrieve a single project status update by its GID'). Overall, it's appropriately concise for a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and a read operation with two parameters, the description is incomplete. It doesn't explain what a 'project status update' contains, how results are structured, or any behavioral traits like error handling. For a tool that retrieves data, more context on the return value is needed for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with clear descriptions for both parameters (project_status_gid and opt_fields). The description adds no additional meaning beyond the schema, such as examples of valid GIDs or common opt_fields values. Baseline 3 is appropriate since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get a project status update' clearly states the action (get) and resource (project status update), but it's vague about what exactly a 'project status update' entails. It doesn't distinguish this tool from sibling 'asana_get_project_statuses' (plural), which might retrieve multiple statuses versus this single one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'asana_get_project_statuses' or 'asana_get_project'. The description lacks context about prerequisites, such as needing a specific project status GID, or exclusions for when other tools might be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asana_get_project_statusesC

Get all status updates for a project

ParametersJSON Schema
NameRequiredDescriptionDefault
project_gidYesThe project GID to get statuses for
limitNoResults per page (1-100)
offsetNoPagination offset token
opt_fieldsNoComma-separated list of optional fields to include

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions retrieving status updates but fails to describe key traits like pagination behavior (implied by 'limit' and 'offset' parameters), rate limits, authentication needs, or the format of returned data. This leaves significant gaps for a tool with multiple parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words. It is front-loaded with the core purpose, making it easy to parse quickly, though its brevity contributes to gaps in other dimensions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a tool with 4 parameters, no annotations, and no output schema, the description is incomplete. It lacks details on behavioral traits, usage context, and output format, which are essential for effective tool invocation by an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema fully documents all parameters. The description adds no additional meaning beyond what the schema provides, such as clarifying the relationship between 'project_gid' and other parameters or usage examples. Baseline 3 is appropriate as the schema handles the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and resource ('all status updates for a project'), making the tool's purpose understandable. However, it does not differentiate from sibling tools like 'asana_get_project_status' (singular vs. plural) or explain the relationship between them, which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, such as 'asana_get_project_status' (singular) or other project-related tools. It lacks context about prerequisites, typical use cases, or exclusions, leaving the agent with minimal direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asana_get_project_task_countsC

Get the number of tasks in a project

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesThe project ID to get task counts for
opt_fieldsNoComma-separated list of optional fields to include

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states a read operation ('Get'), implying it's likely non-destructive, but doesn't cover aspects like authentication requirements, rate limits, error conditions, or what the output format looks like (e.g., raw count vs structured data). This leaves significant gaps for an agent to understand how to interact with it effectively.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no wasted words. It's front-loaded with the core purpose and avoids unnecessary elaboration, making it efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete for a tool with two parameters. It doesn't explain the return value (e.g., whether it's a simple integer, a JSON object with counts, or includes optional fields), nor does it address potential behavioral nuances like pagination or error handling. This leaves the agent with insufficient context for reliable use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, fully documenting both parameters ('project_id' and 'opt_fields'). The description adds no additional semantic context about parameters beyond what's in the schema, such as explaining what 'opt_fields' might include or how task counts are calculated. This meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and resource ('number of tasks in a project'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'asana_get_project' or 'asana_get_task', which also retrieve project/task information but for different data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention scenarios where task counts are needed over detailed task lists (e.g., from 'asana_get_tasks_for_tag') or other project metrics, nor does it specify prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asana_get_tags_for_workspaceC

Get tags in a workspace

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_gidYesGlobally unique identifier for the workspace or organization
limitNoResults per page. The number of objects to return per page. The value must be between 1 and 100.
offsetNoOffset token. An offset to the next page returned by the API.
opt_fieldsNoComma-separated list of optional fields to include

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Get tags' implies a read-only operation, but the description doesn't mention pagination behavior (despite limit/offset parameters), rate limits, authentication requirements, or what the return format looks like (e.g., list of tag objects). For a tool with 4 parameters and no output schema, this leaves significant gaps in understanding how it behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core action ('Get tags in a workspace'), making it immediately scannable. Every word earns its place, and there's no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (4 parameters, no annotations, no output schema), the description is insufficiently complete. It doesn't address behavioral aspects like pagination, return format, or error conditions. For a tool that likely returns a list of tag objects with optional fields, the agent lacks critical context to use it effectively beyond basic parameter passing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents all 4 parameters (workspace_gid, limit, offset, opt_fields). The description adds no additional meaning about parameters beyond what's in the schema—it doesn't explain why you'd use limit/offset for pagination or what opt_fields might include. With high schema coverage, the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'tags in a workspace', making the purpose immediately understandable. It distinguishes this tool from siblings like 'asana_get_tasks_for_tag' or 'asana_list_workspaces' by focusing specifically on tags. However, it doesn't specify the scope (e.g., all tags vs. filtered tags), which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. There's no mention of prerequisites (e.g., needing workspace access), when not to use it, or how it differs from other tag-related operations that might exist in the broader Asana API. The agent must infer usage from the tool name and schema alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asana_get_taskC

Get detailed information about a specific task

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesThe task ID to retrieve
opt_fieldsNoComma-separated list of optional fields to include

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states this is a read operation ('Get'), implying it's non-destructive, but doesn't cover aspects like authentication requirements, rate limits, error handling, or the format of returned data. This leaves significant gaps for an agent to understand how to use it effectively.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without any redundant information. It's appropriately sized for a simple retrieval tool and front-loaded with the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what 'detailed information' includes, the response format, or any behavioral traits like pagination or error cases. For a tool with no structured metadata, this leaves too much unspecified for reliable agent use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, clearly documenting both parameters. The description adds no additional semantic context beyond what the schema provides, such as examples of 'opt_fields' values or constraints on 'task_id'. This meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('detailed information about a specific task'), making the purpose unambiguous. However, it doesn't differentiate from sibling tools like 'asana_get_multiple_tasks_by_gid' or 'asana_get_task_stories', which also retrieve task information but with different scopes or related data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose this over 'asana_get_multiple_tasks_by_gid' for bulk retrieval or 'asana_get_task_stories' for historical data, nor does it specify prerequisites like needing a valid task ID.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asana_get_tasks_for_tagC

Get tasks for a specific tag

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_gidYesThe tag GID to retrieve tasks for
opt_fieldsNoComma-separated list of optional fields to include
opt_prettyNoProvides the response in a 'pretty' format
limitNoThe number of objects to return per page. The value must be between 1 and 100.
offsetNoAn offset to the next page returned by the API.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. While 'Get' implies a read-only operation, the description doesn't mention any behavioral traits such as pagination behavior (implied by 'limit' and 'offset' parameters but not explained), rate limits, authentication requirements, or what the response format looks like. For a tool with 5 parameters and no annotations, this leaves significant gaps in understanding how it behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise—a single, clear sentence that states the tool's purpose without any wasted words. It's front-loaded with the core functionality, making it easy to parse quickly. Every word earns its place, and there's no unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (5 parameters, no output schema, no annotations), the description is incomplete. It doesn't address key contextual elements like what the tool returns (e.g., a list of tasks, paginated results), error conditions, or how it differs from similar sibling tools. For a tool with multiple parameters and no structured output documentation, the description should provide more guidance to be fully helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, meaning all parameters are well-documented in the input schema itself. The description adds no additional meaning beyond the schema—it doesn't explain parameter interactions, default values, or usage examples. With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract from the schema's documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and resource ('tasks for a specific tag'), making the purpose immediately understandable. However, it doesn't distinguish this tool from sibling tools like 'asana_get_task' or 'asana_search_tasks', which also retrieve tasks but through different mechanisms. The description is specific but lacks sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'asana_get_task' (for single tasks by GID), 'asana_search_tasks' (for broader searches), and 'asana_get_multiple_tasks_by_gid' (for batch retrieval by GID), there's no indication that this tool is specifically for retrieving tasks associated with a particular tag. No context or exclusions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asana_get_task_storiesC

Get comments and stories for a specific task

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesThe task ID to get stories for
opt_fieldsNoComma-separated list of optional fields to include

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves data ('Get'), implying a read-only operation, but does not specify aspects like authentication requirements, rate limits, error handling, or the format of returned stories/comments. For a tool with no annotations, this leaves significant gaps in understanding its behavior and constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that directly states the tool's purpose without unnecessary words. It is front-loaded with the core action and resource, making it efficient and easy to parse. Every part of the sentence contributes essential information, earning its place in the description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete for a tool that retrieves task stories and comments. It does not explain the return format, such as whether stories include metadata or how comments are structured, nor does it cover behavioral aspects like pagination or error cases. For a read operation with no structured output guidance, more context is needed to ensure proper usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with clear documentation for both parameters ('task_id' and 'opt_fields'). The description does not add any additional meaning beyond what the schema provides, such as examples of optional fields or usage tips. Given the high schema coverage, a baseline score of 3 is appropriate, as the schema adequately handles parameter semantics without extra description input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('comments and stories for a specific task'), making the purpose immediately understandable. However, it does not explicitly differentiate this tool from similar siblings like 'asana_get_task' or 'asana_get_multiple_tasks_by_gid', which might also retrieve task-related data, leaving some ambiguity in sibling distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, such as needing a valid task ID, or compare it to other tools like 'asana_get_task' for general task info or 'asana_create_task_story' for adding stories. This lack of context could lead to misuse in scenarios where other tools might be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asana_list_workspacesB

List all available workspaces in Asana

ParametersJSON Schema
NameRequiredDescriptionDefault
opt_fieldsNoComma-separated list of optional fields to include

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It states it's a list operation but doesn't mention whether it requires authentication, has rate limits, returns paginated results, or what format the output takes. For a tool with zero annotation coverage, this is insufficient behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that states exactly what the tool does with zero wasted words. It's appropriately sized for a simple list operation and front-loads the core functionality.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with one optional parameter and no output schema, the description provides the basic purpose but lacks important contextual information. Without annotations or output schema, it should explain more about authentication requirements, return format, or behavioral constraints to be truly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description doesn't mention any parameters, but the input schema has 100% description coverage for its single optional parameter 'opt_fields'. The baseline score of 3 is appropriate since the schema adequately documents the parameter, and the description doesn't need to compensate for gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List') and resource ('all available workspaces in Asana'), making the purpose immediately understandable. However, it doesn't distinguish this tool from potential sibling list operations (though none exist in the provided sibling list), which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. There's no mention of prerequisites, context for listing workspaces, or comparison with other workspace-related tools (though none are in the sibling list). This leaves the agent without usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asana_search_projectsC

Search for projects in Asana using name pattern matching

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceYesThe workspace to search in
name_patternYesRegular expression pattern to match project names
archivedNoOnly return archived projects
opt_fieldsNoComma-separated list of optional fields to include

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but offers minimal behavioral insight. It mentions 'search' and 'pattern matching' but doesn't disclose critical traits like whether results are paginated, rate limits, authentication requirements, or what the output format looks like (especially important without an output schema).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core purpose and includes the key constraint (name pattern matching). Every element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with 4 parameters, no annotations, and no output schema, the description is incomplete. It lacks behavioral context (e.g., pagination, error handling), usage guidance relative to siblings, and any mention of output structure, leaving significant gaps for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all 4 parameters. The description adds no additional parameter semantics beyond implying 'name_pattern' uses regular expressions (which is already in the schema). Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Search for projects') and resource ('in Asana') with the specific method 'using name pattern matching'. It distinguishes itself from siblings like 'asana_get_project' (singular retrieval) and 'asana_search_tasks' (different resource), but doesn't explicitly contrast with other project-related tools like 'asana_get_project_statuses'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives is provided. The description doesn't mention when to prefer this over 'asana_get_project' (for specific projects) or 'asana_list_workspaces' (for broader context), nor does it specify prerequisites like needing workspace access.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asana_search_tasksC

Search tasks in a workspace with advanced filtering options

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceYesThe workspace to search in
textNoText to search for in task names and descriptions
resource_subtypeNoFilter by task subtype (e.g. milestone)
portfolios_anyNoComma-separated list of portfolio IDs
assignee_anyNoComma-separated list of user IDs
assignee_notNoComma-separated list of user IDs to exclude
projects_anyNoComma-separated list of project IDs
projects_notNoComma-separated list of project IDs to exclude
projects_allNoComma-separated list of project IDs that must all match
sections_anyNoComma-separated list of section IDs
sections_notNoComma-separated list of section IDs to exclude
sections_allNoComma-separated list of section IDs that must all match
tags_anyNoComma-separated list of tag IDs
tags_notNoComma-separated list of tag IDs to exclude
tags_allNoComma-separated list of tag IDs that must all match
teams_anyNoComma-separated list of team IDs
followers_notNoComma-separated list of user IDs to exclude
created_by_anyNoComma-separated list of user IDs
created_by_notNoComma-separated list of user IDs to exclude
assigned_by_anyNoComma-separated list of user IDs
assigned_by_notNoComma-separated list of user IDs to exclude
liked_by_notNoComma-separated list of user IDs to exclude
commented_on_by_notNoComma-separated list of user IDs to exclude
due_onNoISO 8601 date string or null
due_on_beforeNoISO 8601 date string
due_on_afterNoISO 8601 date string
due_at_beforeNoISO 8601 datetime string
due_at_afterNoISO 8601 datetime string
start_onNoISO 8601 date string or null
start_on_beforeNoISO 8601 date string
start_on_afterNoISO 8601 date string
created_onNoISO 8601 date string or null
created_on_beforeNoISO 8601 date string
created_on_afterNoISO 8601 date string
created_at_beforeNoISO 8601 datetime string
created_at_afterNoISO 8601 datetime string
completed_onNoISO 8601 date string or null
completed_on_beforeNoISO 8601 date string
completed_on_afterNoISO 8601 date string
completed_at_beforeNoISO 8601 datetime string
completed_at_afterNoISO 8601 datetime string
modified_onNoISO 8601 date string or null
modified_on_beforeNoISO 8601 date string
modified_on_afterNoISO 8601 date string
modified_at_beforeNoISO 8601 datetime string
modified_at_afterNoISO 8601 datetime string
completedNoFilter for completed tasks
is_subtaskNoFilter for subtasks
has_attachmentNoFilter for tasks with attachments
is_blockedNoFilter for tasks with incomplete dependencies
is_blockingNoFilter for incomplete tasks with dependents
sort_byNoSort by: due_date, created_at, completed_at, likes, modified_atmodified_at
sort_ascendingNoSort in ascending order
opt_fieldsNoComma-separated list of optional fields to include
custom_fieldsNoObject containing custom field filters. Keys should be in the format "{gid}.{operation}" where operation can be: - {gid}.is_set: Boolean - For all custom field types, check if value is set - {gid}.value: String|Number|String(enum_option_gid) - Direct value match for Text, Number or Enum fields - {gid}.starts_with: String - For Text fields only, check if value starts with string - {gid}.ends_with: String - For Text fields only, check if value ends with string - {gid}.contains: String - For Text fields only, check if value contains string - {gid}.less_than: Number - For Number fields only, check if value is less than number - {gid}.greater_than: Number - For Number fields only, check if value is greater than number Example: { "12345.value": "high", "67890.contains": "urgent" }

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only mentions 'advanced filtering options' without addressing critical behaviors like whether this is a read-only operation, potential rate limits, authentication requirements, pagination handling, or error conditions. This leaves significant gaps for a search tool with 55 parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's function. It's appropriately sized and front-loaded with the core purpose, with no wasted words or unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex search tool with 55 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what the search returns, how results are structured, pagination behavior, or error handling. The agent would struggle to use this tool effectively despite the comprehensive parameter schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, providing detailed documentation for all 55 parameters. The description adds minimal value beyond this, only hinting at 'advanced filtering options' without explaining parameter interactions or usage patterns. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Search') and resource ('tasks in a workspace'), making the purpose evident. However, it doesn't distinguish this tool from sibling tools like 'asana_get_multiple_tasks_by_gid' or 'asana_get_tasks_for_tag', which also retrieve tasks but through different mechanisms.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It mentions 'advanced filtering options' but doesn't specify scenarios where this is preferable over simpler sibling tools like 'asana_get_task' or 'asana_get_multiple_tasks_by_gid', leaving the agent without contextual usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asana_set_parent_for_taskC

Set the parent of a task and position the subtask within the other subtasks of that parent

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes
task_idYesThe task ID to operate on
optsNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions that the task is positioned 'within the other subtasks of that parent', hinting at ordering behavior, but lacks critical details: it doesn't specify if this is a mutating operation (implied by 'Set'), what permissions are required, potential side effects (e.g., impact on dependencies), error conditions, or response format. For a tool that modifies task relationships, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the main action ('Set the parent of a task') and adds positioning detail. It avoids redundancy and is appropriately sized for the tool's complexity, though it could be slightly more structured (e.g., separating purpose from constraints).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a mutating tool with no annotations, low schema coverage (33%), and no output schema, the description is incomplete. It doesn't cover behavioral aspects like permissions, side effects, or error handling, and parameter semantics are largely undocumented. For a tool that changes task hierarchy, more context is needed to ensure safe and correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low (33%), with only 'parent' parameter documented in the schema. The description adds minimal value beyond the schema: it implies parameters for parent setting and positioning but doesn't explain the semantics of 'insert_after' or 'insert_before', their mutual exclusivity, or the 'opts' parameter. It fails to compensate for the poor schema coverage, leaving most parameters unclear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Set the parent of a task') and the resource ('task'), making the purpose understandable. It also mentions positioning the subtask, which adds specificity. However, it doesn't explicitly differentiate this tool from sibling tools like 'asana_update_task' or 'asana_create_subtask', which might also involve task hierarchy modifications.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., the task must exist), compare it to siblings like 'asana_update_task' for general updates or 'asana_create_subtask' for creating new subtasks, or specify scenarios where setting a parent is appropriate versus other operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asana_update_taskC

Update an existing task's details

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesThe task ID to update
nameNoNew name for the task
notesNoNew description for the task
due_onNoNew due date in YYYY-MM-DD format
assigneeNoNew assignee (can be 'me' or a user ID)
completedNoMark task as completed or not
resource_subtypeNoThe type of the task. Can be one of 'default_task' or 'milestone'
custom_fieldsNoObject mapping custom field GID strings to their values. For enum fields use the enum option GID as the value.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure but offers minimal information. It states it 'updates' an existing task, implying a mutation operation, but doesn't cover critical aspects like authentication requirements, error handling (e.g., invalid task IDs), rate limits, or what happens to unspecified fields (partial vs. full updates). For a mutation tool with zero annotation coverage, this leaves significant gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded with the core action ('update an existing task's details'), making it immediately clear. Every word earns its place, with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (8 parameters, mutation operation, nested objects) and lack of both annotations and an output schema, the description is insufficient. It doesn't explain return values, error conditions, or behavioral nuances like partial updates. For a tool that modifies tasks with multiple fields, more context is needed to guide effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with each parameter well-documented in the schema itself (e.g., 'due_on' specifies YYYY-MM-DD format, 'assignee' explains 'me' or user ID). The description adds no additional parameter semantics beyond what's already in the schema, so it meets the baseline of 3 where the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('update') and resource ('existing task's details'), making the purpose immediately understandable. It distinguishes itself from sibling tools like 'asana_create_task' by specifying it updates existing tasks rather than creating new ones. However, it doesn't explicitly differentiate from other update-related tools like 'asana_set_parent_for_task' which also modifies tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a valid task ID), compare with similar tools like 'asana_create_subtask' or 'asana_set_parent_for_task', or indicate when not to use it (e.g., for bulk updates). The agent must infer usage from the name and schema alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

B3.2/5.0
Disambiguation4/5

Most tools have distinct purposes targeting specific Asana resources like tasks, projects, statuses, or workspaces. However, some overlap exists: 'asana_get_task' and 'asana_get_multiple_tasks_by_gid' both retrieve task details, which could cause confusion, and dependency-related tools ('asana_add_task_dependencies' vs 'asana_add_task_dependents') are conceptually similar. Descriptions help clarify, but minor ambiguity remains.

Naming Consistency5/5

All tool names follow a consistent 'asana_verb_noun' pattern with snake_case throughout. The verb-noun structure is predictable (e.g., 'asana_create_task', 'asana_get_project', 'asana_update_task'), making it easy to understand each tool's action and target resource without confusion.

Tool Count3/5

With 22 tools, the count is borderline high for an Asana integration, potentially feeling heavy. While Asana's API is feature-rich, this set includes many specific operations (e.g., separate tools for adding dependencies and dependents) that might be consolidated. It's not excessive but leans toward the upper limit of typical scopes.

Completeness4/5

The tool set covers core CRUD operations for tasks, projects, and statuses, including search, listing, and updates. Minor gaps exist: there's no tool to delete tasks or projects, and workspace management is limited to listing. However, agents can work around these with available tools, and the surface supports key workflows like task creation, dependency management, and project tracking.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP (Multi-Agent Conversation Protocol) server that enables interacting with the Asana API through natural language commands for task management, project organization, and team collaboration.
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables to interact with Asana through Claude, with read and write tools for tasks, projects, tags, and custom fields, with no destructive operations.
    42
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/roychri/mcp-server-asana'

If you have feedback or need assistance with the MCP directory API, please join our Discord server