The Asana MCP server (https://mcp.asana.com/v2/mcp) treats an empty string (“”) as an invalid value for optional fields, rather than treating it as “not provided.” LLM clients across providers commonly emit “” for an optional parameter instead of omitting the key entirely — this is a well-known pattern, not specific to our integration. Because the server doesn’t normalize this, tool calls fail even though the caller’s intent was clearly “no value.”
Example — CREATE_TASKS:
Request (task batch, one task with no parent):
{“tasks”: [{“name”: “test”, “parent”: “”}]}
Response:
{
“data”: ,
“failed”: [{
“task”: “test”,
“errors”: [{
“error”: “bad_request”,
“message”: "parent: Not a recognized ID: ",
“suggestion”: “Verify required fields are provided and values are valid.”
}]
}],
“summary”: “Created 0 of 1 tasks.”
}
We saw the same pattern on other optional string params (offset, completed_since, various date filters).
Requested fixes:
- Normalize empty strings for optional fields. For optional ID/string/date parameters (e.g. parent, offset, completed_since, due_on_before/after, etc.), treat “” the same as the key being omitted, rather than validating it as if it were a real value.
- Improve error messages. "parent: Not a recognized ID: " doesn’t show what was actually received — the message just echoes an empty string with no context. Including the actual invalid value in quotes (e.g. “parent: Not a recognized ID: ‘’”) or explicitly stating “empty string is not a valid value; omit the field instead” would make this far easier to diagnose from client-side logs alone.
We’ve worked around it on our end by stripping empty strings from requests before they reach your server, but it would be better handled server-side since it affects any MCP client, not just ours.