MCP Directory

Asana MCP V2 Setup: OAuth Registration and Workspace Access

Use Asana's V2 MCP endpoint with OAuth, verify that your client has the required app registration, and check one known project before permitting task changes. Most setup failures become easier to diagnose once you separate registration, workspace distribution, and user permissions.

MCPtrove·October 4, 2026·6 min read
Group of professionals in an office setting analyzing project plans together.
Photo by Gustavo Fring on Pexels

Use Asana's V2 MCP endpoint with OAuth, verify that your client has the required app registration, and check one known project before permitting task changes. Most setup failures become easier to diagnose once you separate registration, workspace distribution, and user permissions.

Table of contents

Which Asana endpoint should you use?

Use https://mcp.asana.com/v2/mcp with a client that supports Streamable HTTP and OAuth. Asana's documentation identifies this as the V2 server. Older instructions using the beta /sse address should not be your starting point for a new connection. Source: Asana MCP overview.

Decide which client you are configuring before following a tutorial. A managed Asana connector can handle registration details that a coding client asks you to supply. That difference explains why a coworker may connect through a button while your editor requests a client ID.

Use the Asana server listing to identify the official service, then follow the current vendor guide for your client. This article uses VS Code as a concrete path because its registration and callback requirements can be checked explicitly.

Our recommendation is to resolve authorization before experimenting with task automation. Start with one workspace and one known project. A connection that can read the wrong workspace is not a successful setup, even if it returns plausible tasks and no error.

When do you need an OAuth app?

You need a pre-registered MCP application when your client does not supply a managed integration. Asana V2 does not support dynamic client registration. Its developer integration flow provides a client ID and secret, callback configuration, and workspace distribution settings. Source: integration guide.

Prepare the registration as a separate step:

  1. Open the Asana developer console and create the appropriate MCP app.
  2. Configure the callback addresses required by your chosen client.
  3. Select the workspaces allowed to use the app.
  4. Store its client secret in the client's supported secure credential flow.
  5. Keep a record of the app owner and intended use, without copying secrets into shared notes.

Do not confuse a client secret with a user's access token. The application identifies the integration; the browser authorization flow establishes which user's access it receives. Asana's OAuth documentation explains the authorization and token exchange involved.

Use an individually attributable registration where your team's policy requires it. Sharing a secret through chat makes later revocation and debugging harder: nobody can tell which machine still has the old value. Keep credentials out of source control and avoid embedding them in commands that will be copied into tickets.

Close-up of a whiteboard with colorful sticky notes for task organization and planning.
Photo by cottonbro studio on Pexels

How do you connect VS Code?

Register both documented VS Code callback URLs, add the V2 server using HTTP transport, and enter client credentials through the OAuth setup prompts. The callback addresses documented by Asana are:

http://127.0.0.1:33418/
https://vscode.dev/redirect

The trailing slash on the loopback URL matters. Copy both values exactly into your app registration. Then open VS Code's Command Palette, choose MCP: Add Server, select HTTP, enter https://mcp.asana.com/v2/mcp, and name the connection asana. Supply the registered client ID and secret when prompted, then complete the browser authorization. Source: coding-client instructions.

When you return to VS Code, confirm the server is enabled in the workspace where you intend to use it. A global entry and a workspace entry can coexist, so inspect which one the active conversation is using before adding another duplicate.

For a different editor, use its own instructions rather than transplanting this callback pair. The Cursor guide can help locate Cursor's configuration, but Asana's client-specific OAuth directions determine the authentication fields. Config Validator checks JSON structure; it cannot validate registered callbacks or authorize a workspace.

How do you verify workspace and task access?

Ask for one known project and one known task, then compare the identifiers with Asana itself. Begin with reads and require the assistant to name the workspace it searched. This is more useful than a broad “show my work” prompt that can combine unrelated teams.

Use a request such as: “Find the project named MCP Connection Check in the workspace I specify. Show its identifier and one existing task's title, identifier, and completion state. Do not create, assign, update, or complete tasks.” Prepare that project yourself so the expected answer is known.

Asana recommends retrieving the current tools and parameters through tools/list, rather than relying on an old hardcoded inventory. Source: MCP overview.

CheckEvidence you wantWhat failure suggests
Correct workspaceExpected name and identifierAccount or distribution mismatch
Known projectExact project identifierUser access or query scope
Known taskMatching title and statusFilters, permissions, or wrong target
No mutationsNo proposed write executedApproval controls need attention

A missing task is not automatically an authorization error. Ask which filters were applied before widening access or replacing credentials.

How do you fix authorization failures?

Start with the exact failure: callback mismatch, unavailable workspace, invalid scope, or expired authentication. Each points to a different configuration boundary. Recreating the entire app should be a last step after you have identified which boundary failed.

For callback errors, compare the actual redirect with the registered value character for character. For an unavailable workspace, inspect app distribution and whether the intended workspace was selected. For a stale session, reconnect through the client rather than pasting an access token into a permanent file.

Asana documents access tokens with a one-hour lifetime and a refresh flow; it also states that MCP app tokens are not ordinary Asana API tokens. Source: integration guide. A tool working initially and failing later therefore calls for checking refresh behavior, not assuming the user's project was deleted.

The OAuth reference is the place to check authorization flow details. Preserve a sanitized error message, client version, callback URL, and timestamp when escalating a problem. Never include the secret or token in that record.

If the client rejects the configuration before opening a browser, use Config Doctor to check the client-side structure first. Authentication cannot repair malformed JSON.

How do you control the first write?

Create one temporary task in the verified project only after reviewing the proposed fields. Name the project identifier, title, assignee, and due-date behavior explicitly. Avoid starting with bulk reassignment or schedule changes, because a wrong workspace can turn a simple test into a team-wide interruption.

Ask the assistant to show its planned operation, then approve that single action. Open the created task in Asana and compare the fields. Clean up only that test item after verification; do not ask for a broad “remove all test tasks” action when you have one known identifier.

Asana's permission model follows the authorizing user's access, and client app management can block an integration. Source: access management. A prompt saying “read only” should therefore be treated as a workflow instruction, not a guarantee that the token has lost write authority.

For everyday use, separate reporting from execution. Generate a proposed task list first, check ownership and dates, and then approve a small batch. This keeps the connection useful while preserving the distinction between the assistant understanding your request and your team accepting the consequences.

FAQ

Can I use the old SSE endpoint?

Use the V2 endpoint for a new setup. Asana's documentation identifies the old beta path as deprecated. If an old client still depends on it, update the client or follow its current migration instructions instead of treating the beta URL as a durable fix.

Can the token access the normal API?

Asana documents MCP app tokens as specific to its MCP service. Do not assume one will authenticate ordinary Asana API requests. Use the authorization mechanism appropriate to the API you are actually calling.

Is there a read-only MCP scope?

Do not infer one from a prompt or a successful OAuth login. Review the current Asana permission model and your client's tool controls. Keep writes behind approval and test in a temporary project with narrow user access.

Why does authentication expire?

Access tokens have a limited lifetime; the client should handle refresh. If a connection stops after initially working, check refresh support, revoked access, and the saved account before changing workspace permissions or creating another app.

Put this into practice

Browse MCP servers by capability, or check your own setup's tool budget and security.

More in Integrations

Browse all integrations articles.