Asana MCP has well-structured tool definitions with clear naming (verb_noun pattern) and reasonable descriptions (avg 150 chars). All 6 tools have input schemas with type declarations and required fields. However, parameter descriptions are sparse or missing context (e.g., 'Workspace GID (auto-resolved if omitted)' lacks explanation of what auto-resolution means). Output schemas are not documented, callers cannot predict response structure. Error handling is minimal (generic 'Asana API error' messages). No pagination guidance despite list tools accepting limits. Missing tool annotations (readOnlyHint, destructiveHint). The server lacks idempotency guarantees and does not document which tools are safe to retry.
Create a new task in Asana. Returns the created task GID, name, and permalink URL.
Get a single Asana task by its GID. Returns full task details including name, notes, assignee, projects, tags, and subtasks.
List projects in an Asana workspace. Returns project GID, name, and archived status.
List tasks in an Asana project. Returns task GID, name, completed status, assignee, and due date.
List Asana workspaces accessible to the authenticated user. Use this to discover workspace GIDs.
Search for tasks in an Asana workspace by text. Returns matching tasks with GID, name, completed status, and assignee.
Output schemas not documented. Callers cannot predict response structure (e.g., does listTasks return {tasks: [...]} or {data: [...]}?). LLMs cannot plan downstream tool calls without knowing what fields to extract.
Parameter descriptions lack actionable constraints. 'Workspace GID (auto-resolved if omitted)' does not explain what auto-resolution means or when it applies. 'Assignee GID or email address' does not clarify format or validation rules.
Error handling is generic. 'Asana API error 400: ...' provides no recovery guidance. LLMs cannot determine if the error is retryable, user-fixable, or fatal.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot determine which tools are safe to retry or which modify state. asana_create_task is destructive but unmarked.
Pagination not documented. asana_list_tasks, asana_list_projects, asana_search_tasks accept 'limit' but do not explain how to fetch subsequent pages (offset, cursor, etc.) or total count.