modelcontextprotocol / modelcontextprotocol/servers

[Asana] V2 MCP Server crashes (500 Error) on get_task / update_tasks due to hardcoded V1 schema (task_id)

Open
#4,258 6 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
TypeScript
Stars
90.5k
Forks
11.7k
Avg merge
2d 2h
Merged PRs (30d)
5

Description

Describe the bug
The Asana MCP Connector (currently utilized in Claude.ai) is broken for single-task operations like get_task and update_tasks. The connector appears to still rely on the deprecated V1 tool schema, specifically sending the task_id parameter instead of the required V2 task_gid parameter.

When this legacy payload is sent to the new Asana V2 MCP server (https://mcp.asana.com/v2/mcp), the Asana server fails to handle the missing V2 schema parameters, crashes, and returns a 500 Internal Server Error. List operations like get_tasks continue to work normally as their schema requirements are less strict.

To Reproduce
Steps to reproduce the behavior:

Enable the Asana MCP connector in Claude.ai.

Prompt Claude to read or update a specific single task (e.g., "Read task 1213431798432341").

Claude executes the tool call using the hardcoded V1 schema parameter: {"task_id": "1213431798432341"}.

The connector forwards this payload to the Asana V2 MCP server.

The request fails with a 500 Internal Server Error because the V2 server strictly expects task_gid.

Expected behavior
The MCP connector should fetch and respect the current tool parameters from the Asana V2 tools/list command. Specifically, it needs to use task_gid instead of task_id for single-task operations to ensure compatibility with the V2 endpoint.

Logs
Instead of a 400 Bad Request, the Asana V2 server crashes and returns the following 500 error trace back to Claude:

JSON
{
"error": "server_error",
"message": "Oops! An unexpected error occurred...",
"phrase": "2 bright starfish dig awfully often"
}

Example of the V1 payload Claude attempts to generate based on the current connector schema:

JSON
{
"name": "get_task",
"input": {
"task_id": "1213431798432341",
"opt_fields": "name,completed"
}
}

Additional context
The issue started appearing around May 27, 2026. I reached out to Asana's API Support regarding the 500 crash, and they confirmed the root cause lies in the outdated connector schema:

Asana Support Response:

"You’re right: a legacy payload (like task_id instead of task_gid) should be rejected as invalid (400), not crash as a 500. The V2 MCP server expects the current parameter names and constraints, and the only authoritative source for those is the tools/list command (not any static schema). To unblock the connector, the fix is to update the tool call to use the V2 parameter names shown in tools/list (for example, task_gid for single-task operations)."

Since the tool schema is hardcoded within the connector, users cannot bypass this by prompting Claude to use task_gid (the call fails pre-validation on Anthropic's side). The schema must be updated in the repository.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by tracing the connector's hardcoded schemas for the get_task and update_tasks entry points, then compare them with the parameters returned by the Asana V2 tools/list command. Done means single-task calls use the current task_gid parameter and no longer reproduce the reported 500 error.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
api, backend-api-design
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
58/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.