MCP Server for Asana
Provides comprehensive access to Asana's task management API, enabling users to list workspaces, search and manage projects, create/update tasks, work with task dependencies, manage subtasks, add comments, organize sections, handle custom fields, and retrieve project hierarchies.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Server for Asanalist all tasks assigned to me in the Q4 Planning project"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Server for Asana
This Model Context Protocol server implementation of Asana allows you to talk to Asana API from MCP Client such as Anthropic's Claude Desktop Application, and many more.
More details on MCP here:
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:

Related MCP server: Asana MCP Server
Working with Custom Fields
When updating or creating tasks with custom fields, use the following format:
asana_update_task({
task_id: "TASK_ID",
custom_fields: {
"custom_field_gid": value // The value format depends on the field type
}
})The value format varies by field type:
Enum fields: Use the
enum_option.gidof the option (NOT the display name)Text fields: Use a string
Number fields: Use a number
Date fields: Use a string in YYYY-MM-DD format
Multi-enum fields: Use an array of enum option GIDs
Finding Custom Field GIDs
To find the GIDs of custom fields and their enum options:
Use
asana_get_taskwith theopt_fieldsparameter set to include custom fields:asana_get_task({ task_id: "TASK_ID", opt_fields: "custom_fields,custom_fields.enum_options" })In the response, look for the
custom_fieldsarray. Each custom field will have:gid: The unique identifier for the custom fieldname: The display name of the custom fieldresource_subtype: The type of custom field (text, number, enum, etc.)For enum fields, examine the
enum_optionsarray to find the GID of each option
Example: Updating an Enum Custom Field
// First, get the task with custom fields
const taskDetails = asana_get_task({
task_id: "1234567890",
opt_fields: "custom_fields,custom_fields.enum_options"
});
// Find the custom field GID and enum option GID
const priorityFieldGid = "11112222"; // From taskDetails.custom_fields
const highPriorityOptionGid = "33334444"; // From the enum_options of the priority field
// Update the task with the custom field
asana_update_task({
task_id: "1234567890",
custom_fields: {
[priorityFieldGid]: highPriorityOptionGid
}
});Tools
asana_list_workspacesList all available workspaces in Asana
Optional input:
opt_fields (string): Comma-separated list of optional fields to include
Returns: List of workspaces
Note: If DEFAULT_WORKSPACE_ID is set, this will only return that workspace instead of fetching all workspaces
asana_search_projectsSearch for projects in Asana using name pattern matching
Required input:
name_pattern (string): Regular expression pattern to match project names
Optional input:
workspace (string): The workspace to search in (optional if DEFAULT_WORKSPACE_ID is set)
team (string): The team to filter projects on
archived (boolean): Only return archived projects (default: false)
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 matching projects
Note: Either workspace or team must be specified if DEFAULT_WORKSPACE_ID is not set
asana_search_tasksSearch tasks in a workspace with advanced filtering options
Required input:
workspace (string): The workspace to search in (optional if DEFAULT_WORKSPACE_ID is set)
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
asana_get_taskGet detailed information about a specific task
Required input:
task_id (string): The task ID to retrieve
Optional input:
opt_fields (string): Comma-separated list of optional fields to include
Returns: Detailed task information
asana_create_taskCreate 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
asana_get_task_storiesGet comments and stories for a specific task
Required input:
task_id (string): The task ID to get stories for
Optional input:
opt_fields (string): Comma-separated list of optional fields to include
Returns: List of task stories/comments
asana_update_taskUpdate an existing task's details
Required input:
task_id (string): The task ID to update
Optional input:
name (string): New name for the task
notes (string): New description for the task
due_on (string): New due date in YYYY-MM-DD format
assignee (string): New assignee (can be 'me' or a user ID)
completed (boolean): Mark task as completed or not
resource_subtype (string): The type of the task (default_task or milestone)
custom_fields (object): Object mapping custom field GID strings to their values
Returns: Updated task information
asana_get_projectGet detailed information about a specific project
Required input:
project_id (string): The project ID to retrieve
Optional input:
opt_fields (string): Comma-separated list of optional fields to include
Returns: Detailed project information
asana_get_project_task_countsGet the number of tasks in a project
Required input:
project_id (string): The project ID to get task counts for
Optional input:
opt_fields (string): Comma-separated list of optional fields to include
Returns: Task count information
asana_get_project_sectionsGet sections in a project
Required input:
project_id (string): The project ID to get sections for
Optional input:
opt_fields (string): Comma-separated list of optional fields to include
Returns: List of project sections
asana_create_task_storyCreate a comment or story on a task
Required input:
task_id (string): The task ID to add the story to
text (string): The text content of the story/comment
Optional input:
opt_fields (string): Comma-separated list of optional fields to include
Returns: Created story information
asana_add_task_dependenciesSet dependencies for a task
Required input:
task_id (string): The task ID to add dependencies to
dependencies (array of strings): Array of task IDs that this task depends on
Returns: Updated task dependencies
asana_add_task_dependentsSet dependents for a task (tasks that depend on this task)
Required input:
task_id (string): The task ID to add dependents to
dependents (array of strings): Array of task IDs that depend on this task
Returns: Updated task dependents
asana_create_subtaskCreate 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
asana_add_followers_to_taskAdd followers to a task
Required input:
task_id (string): The task ID to add followers to
followers (array of strings): Array of user IDs to add as followers to the task
Returns: Updated task information
asana_get_multiple_tasks_by_gidGet detailed information about multiple tasks by their GIDs (maximum 25 tasks)
Required input:
task_ids (array of strings or comma-separated string): Task GIDs to retrieve (max 25)
Optional input:
opt_fields (string): Comma-separated list of optional fields to include
Returns: List of detailed task information
asana_get_project_statusGet 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
asana_get_project_statusesGet all status updates for a project
Required input:
project_gid (string): The project GID to get statuses for
Optional input:
limit (number): Results per page (1-100)
offset (string): Pagination offset token
opt_fields (string): Comma-separated list of optional fields to include
Returns: List of project status updates
asana_create_project_statusCreate a new status update for a project
Required input:
project_gid (string): The project GID to create the status for
text (string): The text content of the status update
Optional input:
color (string): The color of the status (green, yellow, red)
title (string): The title of the status update
html_text (string): HTML formatted text for the status update
opt_fields (string): Comma-separated list of optional fields to include
Returns: Created project status information
asana_delete_project_statusDelete a project status update
Required input:
project_status_gid (string): The project status GID to delete
Returns: Deletion confirmation
asana_set_parent_for_taskSet 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
parent (string): The new parent of the task, or null for no parent
Optional input:
insert_after (string): A subtask of the parent to insert the task after, or null to insert at the beginning of the list
insert_before (string): A subtask of the parent to insert the task before, or null to insert at the end of the list
opt_fields (string): Comma-separated list of optional fields to include
Returns: Updated task information
asana_get_tasks_for_tagGet tasks for a specific tag
Required input:
tag_gid (string): The tag GID to retrieve tasks for
Optional input:
opt_fields (string): Comma-separated list of optional fields to include
opt_pretty (boolean): Provides the response in a 'pretty' format
limit (integer): The number of objects to return per page. The value must be between 1 and 100.
offset (string): An offset to the next page returned by the API.
Returns: List of tasks for the specified tag
asana_get_tags_for_workspaceGet tags in a workspace
Required input:
workspace_gid (string): Globally unique identifier for the workspace or organization (optional if DEFAULT_WORKSPACE_ID is set)
Optional input:
limit (integer): Results per page. The number of objects to return per page. The value must be between 1 and 100.
offset (string): Offset token. An offset to the next page returned by the API.
opt_fields (string): Comma-separated list of optional fields to include
Returns: List of tags in the workspace
asana_create_section_for_projectCreate a new section in a project
Required input:
project_id (string): The project ID to create the section in
name (string): Name of the section to create
Optional input:
opt_fields (string): Comma-separated list of optional fields to include
Returns: Created section information
asana_add_task_to_sectionAdd a task to a specific section in a project
Required input:
section_id (string): The section ID to add the task to
task_id (string): The task ID to add to the section
Optional input:
opt_fields (string): Comma-separated list of optional fields to include
Returns: Operation result
asana_create_projectCreate a new project in a workspace
Required input:
workspace_id (string): The workspace ID to create the project in (optional if DEFAULT_WORKSPACE_ID is set)
name (string): Name of the project to create
team_id (string): REQUIRED for organization workspaces - The team GID to share the project with
Optional input:
public (boolean): Whether the project is public to the organization (default: false)
archived (boolean): Whether the project is archived (default: false)
color (string): Color of the project (light-green, light-orange, light-blue, etc.)
layout (string): The layout of the project (board, list, timeline, or calendar)
default_view (string): The default view of the project (list, board, calendar, timeline, or gantt)
due_on (string): The date on which this project is due (YYYY-MM-DD format)
start_on (string): The day on which work for this project begins (YYYY-MM-DD format)
notes (string): Free-form textual information associated with the project
opt_fields (string): Comma-separated list of optional fields to include
Returns: Created project information
asana_get_teams_for_userGet teams to which the user has access
Required input:
user_gid (string): The user GID to get teams for. Use 'me' to get teams for the current user.
Optional input:
opt_fields (string): Comma-separated list of optional fields to include
Returns: List of teams the user has access to
asana_get_teams_for_workspaceGet teams in a workspace
Required input:
workspace_gid (string): The workspace GID to get teams for (optional if DEFAULT_WORKSPACE_ID is set)
Optional input:
opt_fields (string): Comma-separated list of optional fields to include
Returns: List of teams in the workspace
asana_list_workspace_usersGet users in a workspace
Required input:
workspace_id (string): The workspace ID to get users for (optional if DEFAULT_WORKSPACE_ID is set)
Optional input:
limit (integer): Results per page (1-100)
offset (string): Pagination offset token
opt_fields (string): Comma-separated list of optional fields to include (defaults to "name,email")
auto_paginate (boolean): Whether to automatically fetch all pages
max_pages (integer): Maximum number of pages to fetch when auto_paginate is true
Returns: List of users in the workspace
asana_get_project_hierarchyGet the complete hierarchical structure of an Asana project, including sections, tasks, and subtasks
Required input:
project_id (string): The project ID to get hierarchy for
Optional input:
include_completed_tasks (boolean): Include completed tasks (default: false)
include_subtasks (boolean): Include subtasks for each task (default: true)
include_completed_subtasks (boolean): Include completed subtasks (default: follows include_completed_tasks)
max_subtask_depth (number): Maximum depth of subtasks to retrieve (default: 1)
opt_fields_tasks (string): Optional fields for tasks
opt_fields_subtasks (string): Optional fields for subtasks
opt_fields_sections (string): Optional fields for sections
opt_fields_project (string): Optional fields for project
limit (number): Max results per page (1-100)
offset (string): Pagination token from previous response
auto_paginate (boolean): Whether to automatically fetch all pages
max_pages (number): Maximum pages to fetch when auto_paginate is true
Returns: Hierarchical project structure with statistics
asana_get_attachments_for_objectList attachments for a specific object (task, project, etc.)
Required input:
object_gid (string): The object GID to retrieve attachments 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 attachments
asana_upload_attachment_for_objectUpload a local file as attachment to a task or other object
Required input:
object_gid (string): The object GID to attach the file to
file_path (string): Path to the local file to upload
Optional input:
file_name (string): Custom file name
file_type (string): MIME type of the uploaded file
Returns: Metadata of the uploaded attachment
asana_download_attachmentDownload an attachment to a local directory
Required input:
attachment_gid (string): The attachment GID to download
Optional input:
output_dir (string): Directory to save the file (default: ~/downloads)
Returns: Path and MIME type of the downloaded file
Prompts
task-summaryGet 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
Resources
None
Setup
Create an Asana account:
Visit the Asana.
Click "Sign up".
Retrieve the Asana Access Token:
You can generate a personal access token from the Asana developer console.
More details here: https://developers.asana.com/docs/personal-access-token
Optional: Get your default workspace ID:
If you primarily work with one workspace, you can set a default workspace ID.
Use the Asana API to list your workspaces, or go to your workspace in Asana and copy the ID from the URL.
When you set a default workspace ID, you won't need to specify the workspace for each API call.
Without a default workspace, the server will call
asana_list_workspacesto get the list of available workspaces.
Configure Claude Desktop: Add the following to your
claude_desktop_config.json:{ "mcpServers": { "asana": { "command": "npx", "args": ["-y", "@cristip73/mcp-server-asana"], "env": { "ASANA_ACCESS_TOKEN": "your-asana-access-token", "DEFAULT_WORKSPACE_ID": "your-default-workspace-id" } } } }
Troubleshooting
If you encounter permission errors:
Ensure the asana plan you have allows API access
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 inspectorThis 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 inspectorLicense
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
41 toolsasana_add_followers_for_projectC
Add followers to a project
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project ID to add followers to | |
| followers | Yes | Array of user GIDs to add as followers to the project | |
| opt_fields | No | Comma-separated list of optional fields to include in the response |
TDQS
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. While 'Add followers' implies a write/mutation operation, the description doesn't address permission requirements, whether this operation is idempotent, what happens if followers already exist, rate limits, or what the response contains. For a mutation tool with zero annotation coverage, this represents significant gaps 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.
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 straightforward operation and front-loads the essential information. Every word earns its place in this concise formulation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 inadequate. It doesn't explain what constitutes a successful operation, what the response looks like, error conditions, or how this tool relates to similar operations in the sibling set. The 100% schema coverage helps with parameters, but the overall context for using this tool effectively is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 three parameters thoroughly. The description doesn't add any meaningful semantic context beyond what's in the schema - it doesn't explain what 'followers' represent in Asana's context, how user GIDs should be obtained, or provide examples of valid opt_fields values. 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add followers') and target resource ('to a project'), providing a specific verb+resource combination. However, it doesn't differentiate this tool from its sibling 'asana_add_followers_to_task' which performs a similar action on a different resource type, missing an opportunity for clear sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 siblings like 'asana_add_members_for_project' and 'asana_add_followers_to_task' available, there's no indication of when followers vs members should be added, or when to use this project-focused tool versus the task-focused follower tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_add_followers_to_taskC
Add followers to a task
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The task ID to add followers to | |
| followers | Yes | Array of user IDs to add as followers to the task |
TDQS
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. While 'Add followers' implies a mutation operation, the description doesn't disclose important behavioral aspects: whether this requires specific permissions, whether followers are added cumulatively or replace existing ones, what happens if invalid user IDs are provided, or what the expected response looks like. This is inadequate for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise - a single four-word phrase that communicates the core purpose without any wasted words. It's front-loaded with the essential information and has zero unnecessary content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 insufficiently complete. It doesn't address behavioral aspects like permission requirements, error conditions, or what constitutes a successful operation. Given the complexity of adding followers (which involves user validation and potentially permission checks), the description should provide more context about how the operation works.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with both parameters clearly documented in the schema itself. The description doesn't add any meaningful parameter semantics beyond what's already in the schema descriptions. The baseline score of 3 is appropriate when the schema does the heavy lifting of parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add followers') and target resource ('to a task'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'asana_add_members_for_project' or 'asana_add_tags_to_task' which also add entities to Asana objects, leaving room for 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.
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 many sibling tools that add various entities to Asana objects (followers, members, tags, dependencies, etc.), there's no indication of when this specific 'add followers to task' operation is appropriate versus other similar operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_add_members_for_projectC
Add members to a project
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project ID to add members to | |
| members | Yes | Array of user GIDs to add as members to the project | |
| opt_fields | No | Comma-separated list of optional fields to include in the response |
TDQS
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. 'Add members' implies a mutation operation, but the description doesn't specify required permissions, whether this operation is idempotent, what happens if members already exist, rate limits, or what the response contains. This is a significant gap for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
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 straightforward operation and gets directly to the point without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 inadequate. It doesn't address behavioral aspects like permissions, idempotency, or error conditions. The presence of a similar sibling tool ('asana_add_followers_for_project') creates ambiguity that the description doesn't resolve.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are documented in the schema. The description doesn't add any meaningful semantic context beyond what's already in the schema descriptions. It doesn't explain member vs follower distinctions, GID format expectations, or practical examples of opt_fields usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add members') and target resource ('to a project'), providing a specific verb+resource combination. However, it doesn't distinguish this tool from its sibling 'asana_add_followers_for_project', which appears to serve a similar but distinct purpose in the Asana context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like 'asana_add_followers_for_project' or other member-related operations. There's no mention of prerequisites, constraints, or typical use cases for adding members versus followers in Asana projects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_add_tags_to_taskB
Add one or more tags to a task for categorization purposes
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The ID of the task to add tags to | |
| tag_ids | Yes | A list of tag GIDs to add to the task. Use asana_get_tags_for_workspace to find available tags. |
TDQS
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 the tool adds tags but doesn't disclose behavioral traits like whether it's idempotent (e.g., adding duplicate tags), what happens on invalid tag IDs, if it requires specific permissions, or the response format. For a mutation 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action ('Add one or more tags to a task') and includes the purpose ('for categorization purposes'). There is no wasted text, and it's appropriately sized for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a mutation tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral aspects (e.g., error handling, permissions), response format, and how it interacts with sibling tools. While the schema covers parameters well, the overall context for safe and effective use is insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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, so the baseline is 3. The description adds no additional parameter semantics beyond what the schema provides (e.g., it doesn't explain tag ID formats or constraints on the array). This meets the minimum viable level given the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add') and target ('tags to a task') with a purpose ('for categorization purposes'). It distinguishes from siblings like 'asana_update_task' by focusing specifically on tag addition rather than general task updates. However, it doesn't explicitly differentiate from other tag-related tools like 'asana_get_tags_for_workspace' beyond the verb difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when categorizing tasks with tags, and the input schema references 'asana_get_tags_for_workspace' to find available tags, providing some contextual guidance. However, it doesn't explicitly state when to use this tool versus alternatives like 'asana_update_task' (which might also handle tags) or mention prerequisites such as needing existing tags or task access.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_add_task_dependenciesC
Set dependencies for a task
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The task ID to add dependencies to | |
| dependencies | Yes | Array of task IDs that this task depends on |
TDQS
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 says 'Set dependencies' without explaining whether this replaces or adds to existing dependencies, what happens on error, or if special permissions are required. This is a minimal mutation description with zero 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no fluff, but it is under-specified. It essentially restates the tool name with minimal added value. While concise, it lacks the detail expected for a tool description, so it is not well-optimized for usefulness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mutation tool with no annotations and no output schema. The description fails to explain return values, idempotency, whether dependencies are appended or replaced, or how it relates to sibling tools. For a simple but consequential operation, this is severely incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage, describing both task_id and dependencies array. The description adds no additional meaning beyond the schema, such as relationship semantics or edge cases. Baseline 3 is appropriate given the schema completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 specific action unambiguous. However, it does not explicitly differentiate from the sibling tool asana_add_task_dependents, though the term 'dependencies' helps indicate direction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like asana_add_task_dependents or asana_update_task. There are no preconditions, exclusions, or context about when this action is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_add_task_dependentsB
Set dependents for a task (tasks that depend on this task)
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The task ID to add dependents to | |
| dependents | Yes | Array of task IDs that depend on this task |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure. It explains the direction of dependencies but uses 'Set' which could imply replacing all dependents rather than adding to existing ones (the tool name says 'add'). No side effects, mutability, or return behavior are disclosed, which is a significant gap 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes to explaining the operation, making it highly concise and well-structured for quick parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no annotations and no output schema, the description should provide more context about behavior, such as whether it appends or replaces dependents, and what the successful response looks like. The description only covers the bare purpose, leaving critical usage details unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains both parameters clearly. The description's parenthetical 'tasks that depend on this task' is redundant with the schema's own wording, so it adds no additional semantic value beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Set') and resource ('dependents for a task'), with a parenthetical clarifying that the dependents are tasks that depend on this task. This direction disambiguates it from the sibling 'asana_add_task_dependencies', which sets the opposite dependency direction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus alternatives like asana_add_task_dependencies. The description implies a use case but does not state prerequisites, exclusions, or relational context, leaving the agent to infer when this is the appropriate choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_add_task_to_sectionC
Add a task to a specific section in a project
| Name | Required | Description | Default |
|---|---|---|---|
| section_id | Yes | The section ID to add the task to | |
| task_id | Yes | The task ID to add to the section | |
| opt_fields | No | Comma-separated list of optional fields to include |
TDQS
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. While 'Add' implies a mutation operation, it doesn't specify whether this requires specific permissions, what happens if the task is already in the section, whether the operation is idempotent, or what the response looks like. This leaves significant gaps for an agent to understand the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that states the core purpose without unnecessary words. It's appropriately sized for a straightforward tool and is front-loaded with the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 insufficient. It doesn't explain what the tool returns, error conditions, or behavioral nuances. Given the complexity of modifying project structures in Asana, more context about the operation's effects and limitations would be necessary for an agent to use it effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema already documents all three parameters thoroughly. The description doesn't add any additional meaning about the parameters beyond what's in the schema, such as format examples or constraints. This meets the baseline expectation when schema coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add') and target resources ('task to a specific section in a project'), making the purpose immediately understandable. However, it doesn't explicitly differentiate this from sibling tools like 'asana_reorder_sections' or 'asana_get_tasks_for_section', which would require a more specific distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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., existing task and section), when not to use it, or how it differs from related tools like 'asana_update_task' or 'asana_create_section_for_project'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_create_projectC
Create a new project in a workspace
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_id | No | The workspace ID to create the project in (optional if DEFAULT_WORKSPACE_ID is set) | |
| name | Yes | Name of the project to create | |
| team_id | No | REQUIRED for organization workspaces: The team GID to share the project with | |
| public | No | Whether the project is public to the organization | |
| archived | No | Whether the project is archived | |
| color | No | Color of the project (light-green, light-orange, light-blue, etc.) | |
| members | No | Array of user GIDs that are members of this project | |
| followers | No | Array of user GIDs that are followers of this project | |
| project_brief | No | HTML-formatted string containing the description for the project brief | |
| layout | No | The layout of the project (board, list, timeline, or calendar) | list |
| default_view | No | The default view of the project (list, board, calendar, timeline, or gantt) | |
| due_on | No | The date on which this project is due (YYYY-MM-DD format) | |
| start_on | No | The day on which work for this project begins (YYYY-MM-DD format) | |
| notes | No | Free-form textual information associated with the project | |
| html_notes | No | HTML-formatted notes for the project | |
| opt_fields | No | Comma-separated list of optional fields to include |
TDQS
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 only states the basic action. It doesn't mention authentication requirements, rate limits, error conditions, what happens on success (e.g., returns project ID), or side effects like notifications to members. For a creation tool with 16 parameters, 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.
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 and resource, making it immediately scannable and appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with 16 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what the tool returns (critical for a creation operation), doesn't mention behavioral aspects like permissions or side effects, and provides no usage context. The schema handles parameter documentation, but the description fails to add necessary operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so all parameters are documented in the schema itself. The description adds no additional parameter information beyond what's in the schema, not explaining relationships between parameters (e.g., 'team_id' requirement for organization workspaces is only in schema). Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Create') and resource ('new project in a workspace'), making the purpose immediately understandable. However, it doesn't distinguish this tool from sibling tools like 'asana_create_task' or 'asana_create_project_status' beyond the obvious resource difference, missing explicit differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like 'asana_update_project' or 'asana_search_projects'. There's no mention of prerequisites, dependencies, or typical use cases, leaving the agent to infer usage from the tool 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_project_statusB
Create a new status update for a project
| Name | Required | Description | Default |
|---|---|---|---|
| project_gid | Yes | The project GID to create the status for | |
| text | Yes | The text content of the status update | |
| color | No | The color of the status (green, yellow, red) | |
| title | No | The title of the status update | |
| html_text | No | HTML formatted text for the status update | |
| opt_fields | No | Comma-separated list of optional fields to include |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only says that a status update is created, but does not mention required permissions, the effect on existing project statuses, whether the operation is reversible, or what the response contains. This is a significant gap 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the action ('Create') and the resource ('status update for a project'). It contains no redundancy or unnecessary words, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having six parameters and no output schema, the description offers only the barest functional statement. It lacks usage context, behavioral details, and return value information, leaving the agent under-informed about the tool's broader implications and expected response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so all six parameters are already well-documented. The tool description adds no additional parameter semantics beyond what the schema provides, so 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Create') and a clear resource ('status update for a project'), making the tool's purpose explicit. It distinguishes this tool from sibling tools like asana_get_project_status and asana_delete_project_status, which are distinctly different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, no mention of prerequisites, and no exclusion criteria. It simply states the function without any contextual advice, leaving the agent to infer usage from the tool 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_section_for_projectC
Create a new section in a project
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project ID to create the section in | |
| name | Yes | Name of the section to create | |
| opt_fields | No | Comma-separated list of optional fields to include |
TDQS
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 the tool creates a section, implying a write/mutation operation, but doesn't cover permissions, side effects, error handling, or what the response looks like. This leaves significant gaps for an agent to understand how to use it safely and effectively.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
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 efficiently communicates the essential action without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (a write operation with no annotations and no output schema), the description is incomplete. It doesn't address behavioral aspects like permissions, error cases, or response format, which are critical for an agent to use this tool correctly in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema already documents all three parameters (project_id, name, opt_fields). The description doesn't add any meaning beyond this, such as explaining what 'opt_fields' might include or providing examples. The baseline score of 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a new section') and the target resource ('in a project'), which is specific and unambiguous. However, it doesn't differentiate from sibling tools like 'asana_reorder_sections' or 'asana_get_project_sections', which also deal with sections but perform different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 an existing project), exclusions, or comparisons to similar tools like 'asana_reorder_sections' or 'asana_get_project_sections'.
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
| Name | Required | Description | Default |
|---|---|---|---|
| parent_task_id | Yes | The parent task ID to create the subtask under | |
| name | Yes | Name of the subtask | |
| notes | No | Description of the subtask | |
| due_on | No | Due date in YYYY-MM-DD format | |
| assignee | No | Assignee (can be 'me' or a user ID) | |
| opt_fields | No | Comma-separated list of optional fields to include |
TDQS
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 'Create' implying a write/mutation operation but doesn't mention permissions, side effects, error conditions, or response format. For a creation tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with zero wasted words. It's front-loaded with the core action and resource, making it immediately scannable and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with no annotations and no output schema, the description is insufficient. It doesn't explain what happens after creation, error handling, or how this differs from similar tools. Given the complexity of task management and sibling tools, more context is needed for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 parameter-specific information beyond what's in the schema, meeting the baseline for high schema coverage but not enhancing understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a new subtask') and target resource ('for an existing task'), making the purpose immediately understandable. However, it doesn't distinguish this tool from its sibling 'asana_create_task' or explain the parent-child relationship beyond what's implied by 'subtask.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like 'asana_create_task' or 'asana_set_parent_for_task.' It mentions 'for an existing task' but doesn't clarify prerequisites or contextual constraints, leaving the agent to infer usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_create_taskB
Create a new task in a project
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project to create the task in | |
| name | Yes | Name of the task | |
| notes | No | Description of the task | |
| html_notes | No | HTML-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_on | No | Due date in YYYY-MM-DD format | |
| assignee | No | Assignee (can be 'me' or a user ID) | |
| followers | No | Array of user IDs to add as followers | |
| parent | No | The parent task ID to set this task under | |
| projects | No | Array of project IDs to add this task to | |
| resource_subtype | No | The type of the task. Can be one of 'default_task' or 'milestone' | |
| custom_fields | No | Object mapping custom field GID strings to their values. For enum fields use the enum option GID as the value. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavioral traits. However, it only states the basic action and omits any context such as whether authentication is required, what the response contains, or side effects (e.g., task appears in project timeline). It adds no value beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with zero wasted words. It is front-loaded and immediately states the action and object, making it optimally concise for quick parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 11 parameters, no output schema, and no annotations, yet the description is only one sentence. It fails to convey expected return values, error conditions, or important behavioral nuances (e.g., that project_id is required despite being listed among optional-looking properties). For a create operation with this complexity, the description is insufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 in detail, including the complex html_notes restrictions and custom_fields format. The description adds no parameter-level meaning, but the baseline of 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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' uses a specific verb ('Create') and resource ('task in a project'), clearly distinguishing it from sibling tools like asana_create_subtask and asana_update_task. It unambiguously states the tool's primary action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like asana_create_subtask or asana_update_task. It does not mention any exclusions, prerequisites, or contextual clues, leaving the agent to infer usage solely from the name and schema.
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
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The task ID to add the story to | |
| text | Yes | The text content of the story/comment | |
| opt_fields | No | Comma-separated list of optional fields to include |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but lacks behavioral details. It mentions creation but doesn't disclose if this requires specific permissions, whether it's idempotent, rate limits, or what happens on success/failure. 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.
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 redundancy. It's appropriately sized and front-loaded, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 mutation tool with 3 parameters, the description is incomplete. It doesn't cover behavioral aspects like permissions or side effects, nor does it explain return values. For this complexity, more context is needed to be fully helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented in the schema. The description adds no additional meaning beyond implying 'text' is for the story/comment content, which the schema already states. Baseline 3 is appropriate 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create') and target ('a comment or story on a task'), which is specific and distinguishes it from siblings like 'asana_create_task' (creates tasks) or 'asana_get_task_stories' (reads stories). However, it doesn't explicitly differentiate between 'comment' and 'story' or clarify if they're synonymous in Asana's context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. For example, it doesn't mention prerequisites (e.g., needing an existing task), compare to 'asana_update_task' for task modifications, or reference sibling 'asana_get_task_stories' for reading stories. The description only states what it does, not when to apply it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_delete_project_statusA
Delete a project status update
| Name | Required | Description | Default |
|---|---|---|---|
| project_status_gid | Yes | The project status GID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of indicating the destructive nature. It explicitly says 'Delete', which conveys the core behavior, but it does not disclose permanence, side effects, or required permissions. Minimal but acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, clear, and concise sentence. Every word earns its place with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation with one parameter and no output schema, the description is functionally adequate but lacks any context about irreversibility, errors, or expected behavior after deletion. It meets minimum viability but doesn't enrich the agent's understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the parameter 'project_status_gid' is clearly described as 'The project status GID to delete'. The description adds no extra semantic detail beyond the schema, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Delete a project status update' uses a specific verb and resource, clearly distinguishing it from sibling tools like get and create project status. It leaves no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. There is no mention of prerequisites, scenarios for deletion, or warnings about irreversible actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_download_attachmentC
Download an attachment locally
| Name | Required | Description | Default |
|---|---|---|---|
| attachment_gid | Yes | The attachment GID to download | |
| output_dir | No | Directory to save the file (defaults to ~/downloads) |
TDQS
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 action ('download locally') but doesn't mention critical traits like file format handling, error conditions (e.g., invalid GID), network usage, or whether it overwrites existing files. For a tool that interacts with external resources and local storage, 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.
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 action without unnecessary words. It's appropriately sized for a simple download operation and front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (simple download with 2 parameters), lack of annotations, and no output schema, the description is incomplete. It doesn't address behavioral aspects like error handling or file management, and while the schema covers parameters well, the overall context for safe and effective use is lacking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear parameter descriptions in the input schema. The description adds no additional meaning beyond implying local file saving, which is already covered by the schema's 'output_dir' description. This meets the baseline of 3 since the schema does the heavy lifting, but the description doesn't enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('download') and resource ('attachment'), making the purpose immediately understandable. It distinguishes from sibling tools like 'asana_upload_attachment_for_object' by focusing on retrieval rather than creation. However, it doesn't specify the source (Asana) beyond the tool name prefix, which keeps it from being fully specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like 'asana_get_attachments_for_object' (which lists attachments) or other download methods. It lacks context about prerequisites, such as needing an attachment GID from another operation, or exclusions for when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_get_attachments_for_objectC
List attachments for an object (task, project, etc)
| Name | Required | Description | Default |
|---|---|---|---|
| object_gid | Yes | The object GID to get attachments for | |
| limit | No | Results per page (1-100) | |
| offset | No | Pagination offset token | |
| opt_fields | No | Comma-separated list of optional fields to include |
TDQS
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 list operation, implying read-only behavior, but doesn't cover pagination details (beyond what the schema shows), rate limits, authentication needs, or what the output looks like. This is a significant gap for a tool with 4 parameters and no 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.
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 list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, no output schema, no annotations), the description is incomplete. It lacks behavioral context, usage guidelines, and output details, making it inadequate for an agent to fully understand how to invoke and interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 parameters thoroughly. The description adds no additional meaning beyond implying the object can be a task or project, which is minimal value over the schema's 'object GID' description. 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('attachments for an object'), specifying it works for tasks, projects, etc. However, it doesn't explicitly differentiate from the sibling 'asana_upload_attachment_for_object', which handles uploads rather than listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. The description doesn't mention prerequisites, context, or exclusions, leaving the agent to infer usage from the tool name alone.
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_gidA
Get detailed information about multiple tasks by their GIDs (maximum 25 tasks)
| Name | Required | Description | Default |
|---|---|---|---|
| task_ids | Yes | Array or comma-separated string of task GIDs to retrieve (max 25) | |
| opt_fields | No | Comma-separated list of optional fields to include |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure. It does disclose the 25-task maximum limit, which is a key constraint, but it omits any details about error behavior, permissions, or return format. This is a modest disclosure that avoids contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose and key limit. No filler or redundant content exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's relative simplicity (2 params, no output schema), the description adequately covers the essential use case. It notes the batch aspect and max limit, but lacks any detail about response shape or error cases, which would be expected in a fully complete context. Still, it is sufficient for a straightforward GET operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Because schema description coverage is 100%, the schema already fully documents both parameters (task_ids and opt_fields). The description adds little beyond the schema, only hinting at 'detailed information' which is not a strong supplement. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get'), the resource ('tasks'), and the specific qualifier ('by their GIDs', 'multiple', 'maximum 25 tasks'). This distinguishes it from single-task retrieval (asana_get_task) and search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving multiple tasks by GID, which is a clear context. However, it does not explicitly contrast with alternatives like asana_get_task or mention when not to use it, so there is slight room for improvement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_get_projectC
Get detailed information about a specific project
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project ID to retrieve | |
| opt_fields | No | Comma-separated list of optional fields to include |
TDQS
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 says 'Get detailed information' without explaining what 'detailed' includes, whether pagination or field selection is supported (though opt_fields exists), or what the response structure looks like. The tool is read-only in intent, but that is implied rather than explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is efficient and front-loaded, stating the core action and resource. It avoids redundancy and verbosity. However, its brevity borders on under-specification, which is a completeness issue rather than a conciseness one, so the structure itself is fine.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there are no annotations, no output schema, and a relatively simple tool, the description should still provide more context about what information is returned and when to use it. The vague phrase 'detailed information' does not tell the agent what to expect, and there is no comparison to sibling tools. The description is minimally viable but lacks completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers both parameters (project_id and opt_fields) with descriptions, so schematically the meaning is clear. The description adds no additional semantics beyond the schema; it merely restates that a specific project is retrieved, which maps to project_id. Since schema coverage is 100%, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to retrieve detailed information about a specific project. The verb 'Get' and resource 'project' are specific, and the mention of 'a specific project' aligns with the required project_id parameter. However, it does not explicitly distinguish itself from sibling tools like asana_search_projects or asana_get_project_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 that it is for retrieving a project by ID, nor does it suggest when to use search_projects or other get/list tools. There is no mention of exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_get_project_hierarchyA
Get the complete hierarchical structure of an Asana project, including its sections, tasks, and subtasks. Supports both manual and automatic pagination.
PAGINATION GUIDE:
Get all data at once: Use auto_paginate=true
Manual pagination: First request with limit=N, then use the returned 'next_offset' tokens in subsequent requests
Tips for large projects: Specify only needed fields, set include_subtasks=false if subtasks aren't needed
EXAMPLES:
For all data: {project_id:"123", auto_paginate:true}
For first page: {project_id:"123", limit:10}
For next page: {project_id:"123", limit:10, offset:"eyJ0a..."}
For deep subtasks: {project_id:"123", include_subtasks:true, max_subtask_depth:3} Note: offset must be a token from previous response (section.pagination_info.next_offset)
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ID of the project to get hierarchy for | |
| include_completed_tasks | No | Include completed tasks (default: false) | |
| include_subtasks | No | Include subtasks for each task (default: true) | |
| include_completed_subtasks | No | Include completed subtasks (default: follows include_completed_tasks) | |
| max_subtask_depth | No | Maximum depth of subtasks to retrieve (default: 1, meaning only direct subtasks) | |
| opt_fields_tasks | No | Optional fields for tasks (e.g. 'name,notes,assignee,due_on,completed') | |
| opt_fields_subtasks | No | Optional fields for subtasks (if not specified, uses same as tasks) | |
| opt_fields_sections | No | Optional fields for sections (e.g. 'name,created_at') | |
| opt_fields_project | No | Optional fields for project (e.g. 'name,created_at,owner') | |
| limit | No | Max results per page (1-100). For pagination, set this and don't use auto_paginate | |
| offset | No | Pagination token from previous response. MUST be valid token from section.pagination_info.next_offset | |
| auto_paginate | No | If true, automatically gets all pages and combines results (limited by max_pages) | |
| max_pages | No | Maximum pages to fetch when auto_paginate is true (protects against infinite loops) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by explaining pagination behavior (auto vs. manual, token usage), performance considerations for large projects, and response structure hints (e.g., 'next_offset' tokens). It doesn't cover error cases or rate limits, but provides substantial operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections (PAGINATION GUIDE, EXAMPLES), but slightly verbose. Every sentence earns its place by providing actionable guidance. Could be more front-loaded, but the information density is high and organized for usability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 13 parameters, no annotations, and no output schema, the description does well by covering usage patterns, pagination, and examples. It doesn't describe the return structure in detail, but given the hierarchical nature implied and lack of output schema, it provides sufficient context for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds value by explaining pagination strategies (linking auto_paginate, limit, offset), giving tips for parameter combinations (e.g., include_subtasks=false for performance), and providing concrete examples that illustrate parameter interactions beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 'complete hierarchical structure of an Asana project', specifying it includes 'sections, tasks, and subtasks'. It distinguishes from siblings like 'asana_get_project' (basic project info) or 'asana_get_tasks_for_project' (flat task list) by emphasizing hierarchical retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use auto_paginate vs. manual pagination, with specific scenarios ('Tips for large projects'), and distinguishes from siblings by focusing on hierarchical data rather than flat lists or other operations. It includes practical examples for different use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_get_project_sectionsB
Get sections in a project
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project ID to get sections for | |
| opt_fields | No | Comma-separated list of optional fields to include |
TDQS
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 says 'Get sections in a project' and does not state whether the operation is read-only, how results are returned, or any pagination or limitations. This adds little beyond the tool's name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, front-loaded with the key information. There is no filler or unnecessary detail, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation with complete parameter schema, the description is minimally adequate. However, without an output schema or annotations, it would benefit from stating the return type (e.g., 'list of sections') or any relevant caveats. It is not incomplete but leaves some ambiguities.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with both parameters already described in the input schema. The description does not add any additional meaning about parameters, so 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the action ('Get') and the resource ('sections in a project'), which is specific and distinguishes it from sibling tools like asana_get_project and asana_get_project_status. However, it is a minimal restatement and does not explicitly elaborate on scope or differentiate further.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 any context, prerequisites, or exclusions, and there is no reference to sibling tools or alternative approaches.
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
| Name | Required | Description | Default |
|---|---|---|---|
| project_status_gid | Yes | The project status GID to retrieve | |
| opt_fields | No | Comma-separated list of optional fields to include |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosure. It only states the read action itself and provides no information about authentication, required permissions, return format, or any side effects. This is minimal and leaves the agent to infer the behavior from the tool name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, short sentence that is front-loaded and free of filler. However, it is so brief that it omits necessary context, though this is more a completeness issue than a conciseness issue.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get tool with two well-documented parameters, the description still lacks important context: it does not explain what is returned, that it requires a project status GID, or how it differs from the plural listing tool. With no output schema and no annotations, the description is insufficient to fully guide an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters (opt_fields and project_status_gid), so the schema already documents their meaning. The description adds no additional parameter context, earning the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get a project status update' states the action and resource clearly enough, but it is vague and does not specify that it fetches a single status by GID. It could easily apply to the sibling tool asana_get_project_statuses, so it fails to distinguish between them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. The description does not mention that this tool retrieves a specific project status by GID, nor does it contrast with listing or creating statuses.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_get_project_statusesB
Get all status updates for a project
| Name | Required | Description | Default |
|---|---|---|---|
| project_gid | Yes | The project GID to get statuses for | |
| limit | No | Results per page (1-100) | |
| offset | No | Pagination offset token | |
| opt_fields | No | Comma-separated list of optional fields to include |
TDQS
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 only states the action without mentioning pagination behavior, return format, ordering, or potential errors, which is a meaningful gap for a tool with offset/limit parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no filler. It clearly conveys the core action and resource without any unnecessary words, making it easy for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description must provide more context but does not. It fails to explain the response shape, pagination semantics despite having limit/offset parameters, or what constitutes a 'status update,' leaving the agent under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for all four parameters, so the schema fully documents them. The description adds no additional semantic value beyond what the schema already provides, thus 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves all status updates for a project, with a specific verb and resource. The word 'all' distinguishes it from the sibling tool asana_get_project_status (singular), making it clear this is for the full list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as asana_get_project_status or asana_get_task_stories. There is no mention of prerequisites, exclusions, or context where this endpoint is preferred.
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_countsB
Get the number of tasks in a project
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project ID to get task counts for | |
| opt_fields | No | Comma-separated list of optional fields to include |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. The 'Get' verb implies a read-only operation, but the description does not add details such as whether the count includes subtasks, whether it reflects a snapshot, or any response structure. It is minimally transparent beyond the name itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that immediately communicates the core function. It is front-loaded with the verb and resource, and there is no wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema and annotations, the description should clarify the return value format (e.g., a bare integer vs. an object with a count field). It also does not mention how opt_fields might affect the response. The description is too terse to fully prepare an agent to consume the tool's output reliably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add any parameter semantics beyond what the schema already provides. It neither clarifies project_id nor opt_fields, so it adds no extra value over the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get the number of tasks in a project' uses a specific verb+resource and clearly identifies the operation. It distinguishes this tool from siblings like asana_get_project (which fetches project details) and asana_get_multiple_tasks_by_gid (which lists tasks). The scope is well-defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. There are no exclusions or mentions of related sibling tools. The description only states what it does, not the context or use cases, leaving the agent without explicit decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_get_subtasks_for_taskC
Get the list of subtasks for a specific task
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ID of the task to get subtasks for | |
| opt_fields | No | Optional fields for subtasks (e.g. 'name,notes,assignee,due_on,completed') | |
| limit | No | Maximum number of results per page (1-100) | |
| offset | No | Pagination token from previous response | |
| auto_paginate | No | If true, automatically gets all pages and combines results |
TDQS
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 it 'gets' data, implying a read-only operation, but doesn't mention pagination behavior (handled by 'limit', 'offset', and 'auto_paginate' parameters), rate limits, authentication needs, or error conditions. This leaves significant gaps for an agent to understand how the tool behaves in practice.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
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 ('Get the list of subtasks'), making it easy to parse. Every part of the sentence contributes directly to understanding the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters, no annotations, and no output schema, the description is incomplete. It doesn't address behavioral aspects like pagination, error handling, or return format, which are critical for an agent to use the tool effectively. The high parameter count and lack of structured metadata mean the description should do more to compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so parameters like 'task_id', 'opt_fields', 'limit', 'offset', and 'auto_paginate' are well-documented in the schema. The description adds no additional meaning beyond the schema, such as explaining the format of 'opt_fields' or how pagination works. This meets the baseline score when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('list of subtasks for a specific task'), making the purpose unambiguous. However, it doesn't differentiate from sibling tools like 'asana_get_task' or 'asana_get_tasks_for_project', which also retrieve task-related data but with different scopes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. For example, it doesn't mention when to prefer this over 'asana_get_task' (which might include subtasks) or 'asana_create_subtask' for adding subtasks. There's no context about 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
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_gid | No | Globally unique identifier for the workspace or organization (optional if DEFAULT_WORKSPACE_ID is set) | |
| limit | No | Results per page. The number of objects to return per page. The value must be between 1 and 100. | |
| offset | No | Offset token. An offset to the next page returned by the API. | |
| opt_fields | No | Comma-separated list of optional fields to include |
TDQS
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 a basic action without disclosing behavioral traits. It doesn't mention whether this is a read-only operation, pagination behavior (implied by parameters but not explained), rate limits, authentication needs, or error handling, leaving significant gaps for agent understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's appropriately sized for a simple retrieval tool and front-loaded with the core action, though it could benefit from more detail given the lack of annotations and output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 4 parameters, the description is incomplete. It doesn't explain return values, error cases, or behavioral context, making it inadequate for an agent to fully understand tool usage beyond basic purpose. More detail is needed to compensate for missing structured data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 meaning beyond the schema—it doesn't explain parameter interactions, defaults, or usage examples. Baseline 3 is appropriate as the schema handles parameter documentation adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get tags in a workspace' clearly states the verb ('Get') and resource ('tags'), but it's vague about scope and doesn't differentiate from sibling tools like 'asana_get_tasks_for_tag' or 'asana_get_attachments_for_object'. It lacks specificity about what 'Get' entails (e.g., list, retrieve, fetch).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. The description doesn't mention prerequisites, context (e.g., workspace management vs. task operations), or exclusions, despite having siblings like 'asana_list_workspaces' that might relate to workspace data retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_get_taskB
Get detailed information about a specific task
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The task ID to retrieve | |
| opt_fields | No | Comma-separated list of optional fields to include |
TDQS
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 the tool retrieves information, implying read-only behavior, but does not disclose permissions, response format, potential errors, or side effects. The description is too minimal to provide meaningful transparency beyond what the tool name already implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly worded sentence that directly states the tool's purpose without any filler. It is front-loaded and efficient, earning its place in the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with a well-covered schema, the description is minimally adequate. However, since there is no output schema to clarify return values, the vague 'detailed information' leaves some ambiguity. The lack of usage guidance and behavioral context (no annotations) slightly reduces completeness, but the low complexity of the tool makes this a borderline 3.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with descriptions for both task_id and opt_fields. The description adds no additional meaning beyond the schema, so the baseline score of 3 applies. The parameter meanings are clear solely from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get detailed information about a specific task' clearly identifies the action (get) and the resource (specific task), distinguishing it from siblings like asana_search_tasks (searching) and asana_get_multiple_tasks_by_gid (multiple tasks). The phrase 'specific task' aligns with the singular task_id parameter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention that this should be used when you have a known task ID, nor does it suggest alternatives like search for finding tasks. Usage context is only implied by the word 'specific'.
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_projectB
Get all tasks from a specific project with pagination support
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project ID to get tasks for | |
| completed | No | Filter for completed or incomplete tasks | |
| limit | No | Maximum number of results to return (1-100) | |
| offset | No | Pagination token from previous response | |
| auto_paginate | No | Automatically fetch all pages of results (up to max_pages) | |
| max_pages | No | Maximum number of pages to fetch when auto_paginate is true | |
| opt_fields | No | Comma-separated list of optional fields to include |
TDQS
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 'pagination support' which is helpful, but doesn't describe authentication requirements, rate limits, error conditions, or what the response format looks like (especially important since there's no output schema). For a read operation with 7 parameters, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose. Every word earns its place - 'Get all tasks' (action), 'from a specific project' (scope), 'with pagination support' (key capability). However, it could be slightly more structured by separating core functionality from behavioral notes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, no output schema, no annotations), the description is insufficiently complete. It doesn't explain what the tool returns (task objects? just IDs?), doesn't mention authentication or permissions needed, and doesn't provide error handling context. For a data retrieval tool with multiple filtering and pagination options, users need more guidance about expected behavior and results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 minimal value beyond the schema - it mentions 'pagination support' which relates to 'offset' and 'auto_paginate' parameters, but doesn't provide additional context about parameter interactions or usage patterns. 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.
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 'all tasks from a specific project', making the purpose unambiguous. It distinguishes from sibling tools like 'asana_get_task' (single task) and 'asana_search_tasks' (search across projects), though it doesn't explicitly name these alternatives. The mention of 'pagination support' adds useful scope information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by specifying 'from a specific project', suggesting this tool is for project-scoped task retrieval rather than workspace-wide searches. However, it doesn't provide explicit guidance on when to use this versus alternatives like 'asana_get_tasks_for_section', 'asana_get_tasks_for_tag', or 'asana_search_tasks', nor does it mention 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_tasks_for_sectionC
Get all tasks from a specific section in a project
| Name | Required | Description | Default |
|---|---|---|---|
| section_id | Yes | The section ID to get tasks from | |
| opt_fields | No | Comma-separated list of optional fields to include (e.g., 'name,gid,completed,assignee,notes,subtasks') | |
| completed_since | No | Only return tasks that are either incomplete or that have been completed since this time (ISO 8601 format) | |
| limit | No | Number of results to return per page (1-100) | |
| offset | No | Pagination token from previous response. Required for paginated requests | |
| auto_paginate | No | If true, automatically gets all pages of results (limited by max_pages) | |
| max_pages | No | Maximum pages to fetch when auto_paginate is true |
TDQS
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 the tool retrieves tasks but omits critical details: whether it's paginated (implied by parameters but not explicitly stated), rate limits, authentication requirements, error handling, or the format of returned data. This leaves significant gaps for an agent to understand operational behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. It avoids redundancy and wastes no space, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters, no annotations, and no output schema, the description is insufficient. It lacks information on behavioral traits (e.g., pagination, auth), output format, error conditions, and usage context relative to siblings. The high parameter count and absence of structured metadata require more descriptive support than provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, providing detailed documentation for all 7 parameters. The description adds no additional parameter semantics beyond implying retrieval from a section, which is already covered by the schema's 'section_id' description. 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.
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 ('all tasks from a specific section in a project'), making the purpose unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'asana_get_tasks_for_project' or 'asana_get_tasks_for_tag', which have similar retrieval patterns but target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 sibling tools like 'asana_get_tasks_for_project' (for project-level tasks) or 'asana_search_tasks' (for broader searches), nor does it specify prerequisites such as needing a valid section ID or appropriate permissions.
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
| Name | Required | Description | Default |
|---|---|---|---|
| tag_gid | Yes | The tag GID to retrieve tasks for | |
| opt_fields | No | Comma-separated list of optional fields to include | |
| opt_pretty | No | Provides the response in a 'pretty' format | |
| limit | No | Results per page. The number of objects to return per page. The value must be between 1 and 100. | |
| offset | No | Offset token. An offset to the next page returned by the API. |
TDQS
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 'Get[s] tasks' but doesn't describe key behaviors: whether this is a read-only operation, if it requires authentication, how it handles pagination (implied by 'limit' and 'offset' parameters but not explained), rate limits, or error conditions. The description adds minimal value beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste: 'Get tasks for a specific tag'. It is front-loaded and appropriately sized for a simple retrieval tool, avoiding unnecessary elaboration while clearly stating the core function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 parameters, no output schema, and no annotations), the description is incomplete. It lacks information on behavioral traits (e.g., pagination, authentication), output format, error handling, or usage context. While the schema covers parameters well, the description doesn't compensate for missing annotations or output details, making it inadequate for full agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all parameters well-documented in the input schema (e.g., 'tag_gid' for filtering, 'limit' for pagination). The description adds no additional meaning beyond implying tag-based filtering, which is already clear from the parameter names and schema. This meets the baseline score of 3 when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get tasks for a specific tag' clearly states the verb ('Get') and resource ('tasks'), specifying the filtering criterion ('for a specific tag'). It distinguishes this tool from siblings like 'asana_get_tasks_for_project' or 'asana_get_tasks_for_section' by indicating tag-based filtering, though it doesn't explicitly contrast with 'asana_search_tasks' which might also filter by tag.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 tag GID), exclusions, or comparisons to sibling tools like 'asana_get_tasks_for_project' or 'asana_search_tasks', leaving the agent to infer usage context solely from the tool name and parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_get_task_storiesB
Get comments and stories for a specific task
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The task ID to get stories for | |
| opt_fields | No | Comma-separated list of optional fields to include |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description is the only source of behavioral info. It implies a read-only operation ('Get') but does not disclose details like permissions required, pagination, ordering, or the structure of returned stories. This falls short of the burden placed on descriptions when annotations are absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence of nine words, directly stating the tool's purpose without any filler. It earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description is clear, it is minimal. It lacks any usage guidance, exclusions, or behavioral context beyond the basic action, and there is no output schema to clarify return values. For a tool with no annotations, this is inadequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no semantic information about parameters beyond the schema. The schema already fully documents task_id and opt_fields with clear descriptions, so with 100% schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Get' with clear objects 'comments and stories' and scope 'for a specific task'. This distinguishes it from sibling tools like asana_get_task (which retrieves the task itself) and asana_create_task_story (which creates a story).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives. It merely states its function without mentioning exclusions or alternative tools for related operations, such as asana_get_task for task details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_get_teams_for_userC
Get teams to which the user has access
| Name | Required | Description | Default |
|---|---|---|---|
| user_gid | Yes | The user GID to get teams for. Use 'me' to get teams for the current user. | |
| opt_fields | No | Comma-separated list of optional fields to include |
TDQS
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 basic action without behavioral details. It doesn't disclose whether this is a read-only operation, pagination behavior, rate limits, authentication needs, or error handling, which are critical for a tool accessing user data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
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, making it easy for an agent to parse quickly without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description is insufficient. It lacks details on return format, error conditions, or behavioral traits needed for safe invocation, especially given the complexity of accessing user-specific team data in Asana.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are fully documented in the schema. The description adds no additional meaning beyond implying user context, meeting the baseline of 3 where the schema handles parameter documentation adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('teams'), specifying the scope ('to which the user has access'). It distinguishes from siblings like 'asana_get_teams_for_workspace' by focusing on user-specific access, but doesn't explicitly contrast with other team-related tools, keeping it at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. The description doesn't mention prerequisites, exclusions, or compare with sibling tools like 'asana_get_teams_for_workspace', leaving the agent to infer usage context independently.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_get_teams_for_workspaceC
Get teams in a workspace
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_gid | No | The workspace GID to get teams for (optional if DEFAULT_WORKSPACE_ID is set) | |
| opt_fields | No | Comma-separated list of optional fields to include |
TDQS
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 but only states the basic action. It lacks details on permissions required, rate limits, pagination, error handling, or what the output looks like (e.g., list format, fields included). This is inadequate for a tool with potential complexity in API interactions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
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 action and resource, making it easy to parse quickly without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 potential behavioral nuances (e.g., authentication, data scope), the description is incomplete. It doesn't address return values, error cases, or usage constraints, leaving significant gaps for an AI agent to operate effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are documented in the schema. The description adds no additional meaning beyond implying workspace filtering, which is already covered. Baseline 3 is appropriate as the schema handles parameter documentation adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('teams in a workspace'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'asana_get_teams_for_user' or 'asana_list_workspaces', which also retrieve workspace-related data, leaving some ambiguity about when to choose 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.
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., workspace access), exclusions, or compare to siblings like 'asana_get_teams_for_user' or 'asana_list_workspaces', leaving the agent to infer usage context without explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_list_workspacesA
List all available workspaces in Asana. If DEFAULT_WORKSPACE_ID is set, only returns that workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| opt_fields | No | Comma-separated list of optional fields to include |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the filtering behavior with DEFAULT_WORKSPACE_ID, which is useful context. However, it doesn't mention rate limits, authentication needs, pagination, or return format, leaving gaps for a read operation with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero waste, front-loading the core purpose and efficiently adding the conditional behavior. Every word earns its place, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with 1 parameter and no output schema, the description is adequate but not complete. It covers the purpose and a key behavioral nuance (DEFAULT_WORKSPACE_ID), but lacks details on return values, error handling, or authentication, which would be helpful given no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 the single parameter 'opt_fields'. The description doesn't add any parameter-specific information beyond what's in the schema, such as examples of optional fields. Baseline 3 is appropriate when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('all available workspaces in Asana'), making the purpose specific. It distinguishes from siblings by focusing on workspaces rather than projects, tasks, or other entities, and includes the unique DEFAULT_WORKSPACE_ID filtering behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use it (to list workspaces) and includes the DEFAULT_WORKSPACE_ID condition, which implicitly guides usage. However, it doesn't explicitly mention when not to use it or name alternatives among siblings, though the tool's unique focus on workspaces makes this less critical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_list_workspace_usersC
Get users in a workspace
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_id | No | The workspace ID to get users for (optional if DEFAULT_WORKSPACE_ID is set) | |
| opt_fields | No | Comma-separated list of optional fields to include (e.g., 'photo,resource_type'). Fields 'name' and 'email' are included by default. | |
| limit | No | Maximum number of results to return per page (1-100). Helps prevent timeouts and ensures more reliable responses. | |
| offset | No | Pagination token from previous response. Must be the exact token returned in a previous response's next_page.offset field. | |
| auto_paginate | No | If true, automatically fetches all pages and combines results (limited by max_pages) | |
| max_pages | No | Maximum number of pages to fetch when auto_paginate is true |
TDQS
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 users' implies a read operation, but the description doesn't cover critical behaviors like pagination handling (though the schema hints at it), rate limits, authentication requirements, or error conditions. It mentions nothing about the return format or what 'users' entails (e.g., basic vs. detailed info).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's appropriately sized for a simple tool, though it could be more front-loaded with key details (e.g., 'List all users in a workspace with pagination support'). No fluff or redundancy is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, no annotations, no output schema), the description is incomplete. It lacks information on return values (e.g., user object structure), error handling, authentication needs, and usage context. While the schema covers parameters well, the description fails to compensate for missing behavioral and output details, making it inadequate for reliable agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 6 parameters (workspace_id, opt_fields, limit, offset, auto_paginate, max_pages). The description adds no additional meaning beyond what's in the schema—it doesn't explain parameter interactions (e.g., how auto_paginate affects limit) or provide examples. Baseline 3 is appropriate when the schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get users in a workspace' clearly states the verb ('Get') and resource ('users in a workspace'), but it's vague about scope and doesn't distinguish from potential siblings. It doesn't specify if this retrieves all users, active users, or a filtered subset, nor does it differentiate from other user-related tools that might exist (though none are listed in siblings).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. The description doesn't mention prerequisites (e.g., workspace access), compare it to other user-fetching methods, or indicate scenarios where it's preferred. With no annotations and no output schema, this lack of context leaves the agent guessing about appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_reorder_sectionsC
Reorder a section within a project by specifying its position relative to another section
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project ID containing the sections to reorder | |
| section_id | Yes | The section GID to reorder | |
| before_section_id | No | Insert the section before this section GID. Use null for first position. | |
| after_section_id | No | Insert the section after this section GID. Use null for last position. |
TDQS
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 basic action without behavioral details. It doesn't disclose permissions required, rate limits, whether the operation is idempotent, what happens on error, or the response format. For a mutation tool with zero annotation coverage, this is inadequate, scoring a 2 for limited transparency beyond the core action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the key action ('reorder a section within a project') and adds necessary detail ('by specifying its position relative to another section'). There's zero waste or redundancy, making it highly concise and well-structured for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (a mutation with 4 parameters), lack of annotations, and no output schema, the description is incomplete. It doesn't cover behavioral aspects like error handling, permissions, or return values, leaving gaps for an AI agent to invoke it correctly. For a tool with this context, it should do more, scoring a 2 for insufficient completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 with clear descriptions (e.g., 'Use null for first position'). The description adds no additional parameter semantics beyond what's in the schema, such as explaining interactions between 'before_section_id' and 'after_section_id'. Baseline is 3 when schema does the heavy lifting, and the description doesn't compensate further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('reorder') and resource ('a section within a project'), specifying it involves positioning relative to another section. It distinguishes from siblings like 'asana_create_section_for_project' or 'asana_get_project_sections' by focusing on reordering rather than creation or retrieval. However, it doesn't explicitly differentiate from all siblings (e.g., 'asana_set_parent_for_task' also involves ordering), so it's not a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 existing sections), exclusions (e.g., not for reordering tasks), or compare to siblings like 'asana_update_task' for task ordering. Usage is implied from the action but lacks explicit context, scoring a 2 for minimal guidance.
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
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | The workspace to search in (optional if DEFAULT_WORKSPACE_ID is set) | |
| team | No | The team to filter projects on | |
| name_pattern | Yes | Regular expression pattern to match project names | |
| archived | No | Only return archived projects | |
| limit | No | Results per page (1-100) | |
| offset | No | Pagination offset token | |
| opt_fields | No | Comma-separated list of optional fields to include |
TDQS
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 basic operation. It doesn't disclose whether this is a read-only operation, what permissions are required, whether it's paginated (though schema hints at offset), rate limits, or what the return format looks like. The description adds minimal behavioral context beyond the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
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 uses precise terminology. Every word earns its place in conveying the essential function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with 7 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what results look like, how pagination works (despite offset parameter), authentication requirements, or error conditions. The description leaves too many behavioral questions unanswered given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 the 'name pattern matching' concept which is already covered in the schema's 'name_pattern' description. No additional parameter semantics are provided beyond what's in the structured schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('projects in Asana') with the specific mechanism ('using name pattern matching'). It distinguishes from siblings like 'asana_get_project' (single project) and 'asana_get_tasks_for_project' (different resource), but doesn't explicitly contrast with 'asana_search_tasks' (similar operation on different resource).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 prefer this over 'asana_get_project' for single projects, 'asana_get_tasks_for_project' for project contents, or 'asana_search_tasks' for task-level searches. No context about prerequisites or exclusions is provided.
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
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | The workspace to search in (optional if DEFAULT_WORKSPACE_ID is set) | |
| text | No | Text to search for in task names and descriptions | |
| resource_subtype | No | Filter by task subtype (e.g. milestone) | |
| portfolios_any | No | Comma-separated list of portfolio IDs | |
| assignee_any | No | Comma-separated list of user IDs | |
| assignee_not | No | Comma-separated list of user IDs to exclude | |
| projects_any | No | Comma-separated list of project IDs | |
| projects_not | No | Comma-separated list of project IDs to exclude | |
| projects_all | No | Comma-separated list of project IDs that must all match | |
| sections_any | No | Comma-separated list of section IDs | |
| sections_not | No | Comma-separated list of section IDs to exclude | |
| sections_all | No | Comma-separated list of section IDs that must all match | |
| tags_any | No | Comma-separated list of tag IDs | |
| tags_not | No | Comma-separated list of tag IDs to exclude | |
| tags_all | No | Comma-separated list of tag IDs that must all match | |
| teams_any | No | Comma-separated list of team IDs | |
| followers_not | No | Comma-separated list of user IDs to exclude | |
| created_by_any | No | Comma-separated list of user IDs | |
| created_by_not | No | Comma-separated list of user IDs to exclude | |
| assigned_by_any | No | Comma-separated list of user IDs | |
| assigned_by_not | No | Comma-separated list of user IDs to exclude | |
| liked_by_not | No | Comma-separated list of user IDs to exclude | |
| commented_on_by_not | No | Comma-separated list of user IDs to exclude | |
| due_on | No | ISO 8601 date string or null | |
| due_on_before | No | ISO 8601 date string | |
| due_on_after | No | ISO 8601 date string | |
| due_at_before | No | ISO 8601 datetime string | |
| due_at_after | No | ISO 8601 datetime string | |
| start_on | No | ISO 8601 date string or null | |
| start_on_before | No | ISO 8601 date string | |
| start_on_after | No | ISO 8601 date string | |
| created_on | No | ISO 8601 date string or null | |
| created_on_before | No | ISO 8601 date string | |
| created_on_after | No | ISO 8601 date string | |
| created_at_before | No | ISO 8601 datetime string | |
| created_at_after | No | ISO 8601 datetime string | |
| completed_on | No | ISO 8601 date string or null | |
| completed_on_before | No | ISO 8601 date string | |
| completed_on_after | No | ISO 8601 date string | |
| completed_at_before | No | ISO 8601 datetime string | |
| completed_at_after | No | ISO 8601 datetime string | |
| modified_on | No | ISO 8601 date string or null | |
| modified_on_before | No | ISO 8601 date string | |
| modified_on_after | No | ISO 8601 date string | |
| modified_at_before | No | ISO 8601 datetime string | |
| modified_at_after | No | ISO 8601 datetime string | |
| completed | No | Filter for completed tasks | |
| is_subtask | No | Filter for subtasks | |
| has_attachment | No | Filter for tasks with attachments | |
| is_blocked | No | Filter for tasks with incomplete dependencies | |
| is_blocking | No | Filter for incomplete tasks with dependents | |
| sort_by | No | Sort by: due_date, created_at, completed_at, likes, modified_at | modified_at |
| sort_ascending | No | Sort in ascending order | |
| opt_fields | No | Comma-separated list of optional fields to include | |
| custom_fields | No | Object 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
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 mentions 'advanced filtering options' but doesn't describe key behaviors like pagination, rate limits, authentication requirements, error handling, or what the output looks like. For a search tool with 55 parameters and no annotations, this leaves significant gaps in understanding how the tool operates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
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 appropriately sized and front-loaded, making it easy to understand at a glance while leaving detailed parameter info to the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (55 parameters, no annotations, no output schema), the description is inadequate. It doesn't address behavioral aspects like result format, pagination, or error conditions, nor does it provide usage context relative to sibling tools. For a search tool with extensive filtering options, more guidance on how to effectively use the parameters would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with detailed descriptions for all 55 parameters in the input schema. The description adds minimal value beyond this, only implying filtering capabilities without explaining parameter interactions or usage patterns. With high schema coverage, the baseline is 3, as the schema does the heavy lifting for parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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'), specifying the action and target. It also mentions 'advanced filtering options' which adds context about functionality. However, it doesn't explicitly differentiate from sibling tools like 'asana_get_tasks_for_project' or 'asana_search_projects' beyond the general search nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 many sibling tools for retrieving tasks (e.g., 'asana_get_tasks_for_project', 'asana_get_task', 'asana_search_projects'), there's no indication of when this search tool is preferred over those, nor any prerequisites or exclusions mentioned.
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_taskA
Set the parent of a task and position the subtask within the other subtasks of that parent
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | ||
| task_id | Yes | The task ID to operate on | |
| opts | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does mention the positioning behavior, which is beyond the name, but it omits side effects (e.g., removal from old parent), prerequisites, or auth requirements. For a mutation tool, this is only a partial disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It efficiently conveys the core action and the additional positioning behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is too brief for a mutation tool with no annotations and no output schema. It does not state what the tool returns, potential errors, or prerequisites. The positioning detail is helpful but does not make the description complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (33%) and the description does not compensate. It mentions 'position' and 'parent' but does not explain how to use insert_after/insert_before or null values. The schema provides some details, but the description adds no parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Set') and clearly identifies the resource ('parent of a task') plus the additional behavior of positioning the subtask among siblings. This distinguishes it from related tools like create_subtask or update_task, which handle different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for re-parenting tasks and controlling their order, but it does not explicitly state when to use this versus alternatives or provide exclusions. The usage context is inferred rather than explicitly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asana_update_projectC
Update details of an existing project
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project ID to update | |
| name | No | Updated name of the project | |
| public | No | Whether the project is public to the organization | |
| archived | No | Whether the project is archived | |
| color | No | Color of the project (light-green, light-orange, light-blue, etc.) | |
| members | No | Array of user GIDs that are members of this project | |
| followers | No | Array of user GIDs that are followers of this project | |
| project_brief | No | HTML-formatted string containing the description for the project brief | |
| layout | No | The layout of the project (board, list, timeline, or calendar) | |
| default_view | No | The default view of the project (list, board, calendar, timeline, or gantt) | |
| due_on | No | The date on which this project is due (YYYY-MM-DD format) | |
| start_on | No | The day on which work for this project begins (YYYY-MM-DD format) | |
| notes | No | Free-form textual information associated with the project | |
| html_notes | No | HTML-formatted notes for the project | |
| opt_fields | No | Comma-separated list of optional fields to include in the response |
TDQS
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. 'Update' implies a mutation operation, but the description doesn't specify permission requirements, whether changes are reversible, rate limits, or what happens to unspecified fields (partial vs. full updates). For a 15-parameter mutation tool, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that gets straight to the point with zero wasted words. It's appropriately sized for a tool with comprehensive schema documentation and follows the principle of front-loading the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 15 parameters, no annotations, and no output schema, the description is insufficiently complete. It doesn't address behavioral aspects like error conditions, response format, or side effects. The agent must rely entirely on the input schema and trial-and-error, which is inadequate for a complex update operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 15 parameters thoroughly with descriptions and formats. The description adds no additional parameter semantics beyond implying 'details' covers the schema's fields. This meets the baseline of 3 when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('update') and resource ('details of an existing project'), making the purpose immediately understandable. However, it doesn't differentiate this tool from its sibling 'asana_update_task' or other update operations, missing an opportunity to specify it's for project metadata rather than task updates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like 'asana_create_project' for new projects or 'asana_get_project' for reading. It doesn't mention prerequisites (e.g., needing an existing project ID) or contextual constraints, leaving the agent to infer usage from the tool name alone.
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
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The task ID to update | |
| name | No | New name for the task | |
| notes | No | New description for the task | |
| due_on | No | New due date in YYYY-MM-DD format | |
| assignee | No | New assignee (can be 'me' or a user ID) | |
| completed | No | Mark task as completed or not | |
| resource_subtype | No | The type of the task. Can be one of 'default_task' or 'milestone' | |
| custom_fields | No | Object mapping custom field GID strings to their values. For enum fields use the enum option GID as the value. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It only says 'update details' and fails to mention side effects, required permissions, reversibility, or behavior when fields are omitted. For a mutation tool, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence that is front-loaded with the main action, containing no unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 8 parameters and no output schema, the description is too short to convey return values, error behavior, or special considerations like custom field handling. The schema helps but the description alone is insufficient for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with descriptions for all 8 parameters, so the baseline is 3. The description adds no extra meaning beyond what the schema already offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb 'update' and identifies the resource as 'an existing task's details', distinguishing it from create_task. However, it doesn't explicitly differentiate from other update-type siblings like set_parent_for_task or add_task_dependencies, so it doesn't get full marks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 only states the action without mentioning prerequisites, exclusions, or situations where a different tool would 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_upload_attachment_for_objectC
Upload a local file as attachment to an object
| Name | Required | Description | Default |
|---|---|---|---|
| object_gid | Yes | The object GID to attach the file to | |
| file_path | Yes | Path to the local file | |
| file_name | No | Optional custom file name | |
| file_type | No | Optional MIME type for the uploaded file |
TDQS
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 uploading a file but lacks details on permissions required, rate limits, error handling, or what happens on success (e.g., returns an attachment ID). This leaves significant gaps in understanding the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
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, making it easy to grasp quickly with zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a file upload operation with no annotations and no output schema, the description is incomplete. It fails to address key aspects like authentication needs, response format, or error conditions, making it inadequate for a tool that modifies data without structured support.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 parameters clearly. The description adds no additional meaning beyond what's in the schema, such as examples or constraints, resulting in a baseline score of 3 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Upload') and target ('a local file as attachment to an object'), making the purpose understandable. It distinguishes from sibling tools like 'asana_download_attachment' and 'asana_get_attachments_for_object' by focusing on upload rather than retrieval, though it doesn't explicitly contrast with other attachment-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. While the description implies it's for uploading attachments, it doesn't specify scenarios, prerequisites, or exclusions, such as file size limits or supported object types, 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
41 tool updates
- First observed
asana_add_followers_for_project - First observed
asana_add_followers_to_task - First observed
asana_add_members_for_project - First observed
asana_add_tags_to_task - First observed
asana_add_task_dependencies - First observed
asana_add_task_dependents - First observed
asana_add_task_to_section - First observed
asana_create_project - First observed
asana_create_project_status - First observed
asana_create_section_for_project - First observed
asana_create_subtask - First observed
asana_create_task - First observed
asana_create_task_story - First observed
asana_delete_project_status - First observed
asana_download_attachment - First observed
asana_get_attachments_for_object - First observed
asana_get_multiple_tasks_by_gid - First observed
asana_get_project - First observed
asana_get_project_hierarchy - First observed
asana_get_project_sections - First observed
asana_get_project_status - First observed
asana_get_project_statuses - First observed
asana_get_project_task_counts - First observed
asana_get_subtasks_for_task - First observed
asana_get_tags_for_workspace - First observed
asana_get_task - First observed
asana_get_task_stories - First observed
asana_get_tasks_for_project - First observed
asana_get_tasks_for_section - First observed
asana_get_tasks_for_tag - First observed
asana_get_teams_for_user - First observed
asana_get_teams_for_workspace - First observed
asana_list_workspace_users - First observed
asana_list_workspaces - First observed
asana_reorder_sections - First observed
asana_search_projects - First observed
asana_search_tasks - First observed
asana_set_parent_for_task - First observed
asana_update_project - First observed
asana_update_task - First observed
asana_upload_attachment_for_object
TDQS
Scored across 41 tools
Most tools have distinct purposes targeting specific Asana resources and actions, such as 'asana_create_task' vs. 'asana_update_task' or 'asana_get_project' vs. 'asana_search_projects'. However, there is some potential overlap between 'asana_get_tasks_for_project' and 'asana_get_project_hierarchy' (which includes tasks), and between 'asana_get_project_status' and 'asana_get_project_statuses', which could cause minor confusion in selection.
All tools follow a consistent 'asana_verb_noun' pattern with snake_case throughout, such as 'asana_create_project', 'asana_get_task', and 'asana_update_task'. The naming is predictable and uniform, making it easy for agents to understand and use the toolset without ambiguity in formatting.
With 41 tools, the count is excessive for a typical MCP server, making it heavy and potentially overwhelming for agents to navigate. While Asana's API is feature-rich, this many tools suggests over-fragmentation of operations that could have been consolidated, such as separate tools for adding followers to projects vs. tasks, which might be better handled with parameters.
The toolset provides comprehensive coverage of Asana's core functionalities, including CRUD operations for tasks, projects, sections, and attachments, as well as advanced features like dependencies, stories, statuses, and searches. There are no obvious gaps; agents can perform full lifecycle management and complex workflows without dead ends.
Maintenance
Related MCP Connectors
- mcpOAuthnet.todoist
Official Todoist MCP server for AI assistants to manage tasks, projects, and workflows.
Task management for people and AI agents, with scoped OAuth access to issues, projects, and docs.
Task management for people and AI agents, with scoped OAuth access to issues, projects, and docs.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceMulti-Agent Conversation Protocol server that enables interaction with Asana's task management API, allowing users to manage projects, tasks, and team collaboration through natural language.-
- FlicenseNot gradedqualityDmaintenanceAn 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.-
- FlicenseNot gradedqualityDmaintenanceAn MCP (Multi-Agent Conversation Protocol) Server that enables interaction with the Asana API, auto-generated using AG2's MCP builder.-
- FlicenseNot gradedqualityDmaintenanceA Type 4 OAuth MCP server for the Asana API, enabling AI assistants to manage workspaces, projects, tasks, comments, users, and teams.-