Asana MCP server
Endpoint: https://mcp.asana.com/v2/mcp · Authentication: Sign in with OAuth
Asana's hosted MCP server connects assistants to tasks, projects, teams, comments, and work-management context.
How do I authenticate?
Add the endpoint in your client, start Connect or Sign in, approve the requested scopes, and return to the client. OAuth discovery finds the authorization server; client registration requirements vary by provider. Follow the provider guidance and client setup below.
Authentication and connection guideConnection specification
- Remote endpoint
https://mcp.asana.com/v2/mcp- Browser access
- Not yet measured
- Declared MCP transport
- Streamable HTTP
- Live-validated MCP transport
- Not yet verified — Latest validation did not verify a transport
- Declared authentication
- OAuth 2.1
- Detected authentication
- OAuth 2.1 detected or retained from publisher evidence
- Protocol lifecycle
- Not yet negotiated
- Authorization server
https://app.asana.com- Category
- Project Management
Product documentation · Official listing documentation
Provider guidance
- OAuth clients must be pre-registered with Asana client credentials; the server does not advertise Dynamic Client Registration.
More Project Management MCP servers · Browse all MCP servers · Test this endpoint in the MCP Playground
Connect it
Live-validated endpoint: https://mcp.asana.com/v2/mcp · Streamable HTTP. Hosted mcptest operator setup required: A user-created Asana app and secret work with documented supported clients that can protect the secret. Hosted mcptest cannot accept the secret in the browser or use that app automatically; Retry remains unavailable until the mcptest operator configures a confidential binding server-side.
Agent prompt for Claude Code or Codex
Add the Asana MCP server to my MCP client configuration and verify that it works.
What it is: Asana's hosted MCP server connects assistants to tasks, projects, teams, comments, and work-management context.
Server URL: https://mcp.asana.com/v2/mcp
Transport: Streamable HTTP (remote MCP server, no local install).
Authentication: OAuth 2.1. Hosted mcptest operator setup required: A user-created Asana app and secret work with documented supported clients that can protect the secret. Hosted mcptest cannot accept the secret in the browser or use that app automatically; Retry remains unavailable until the mcptest operator configures a confidential binding server-side.
Tools: not yet observed by mcptest; tools/list will show them.
Reference: https://mcptest.io/servers/asana/
Steps:
1. Work out which MCP client I use (Claude Code, Codex, Cursor, VS Code or another) and add the server under the name "asana" in that client's MCP configuration, user scope unless I ask otherwise.
Claude Code: claude mcp add --transport http --scope user --client-id "${ASANA_CLIENT_ID}" --client-secret --callback-port 8080 'asana' 'https://mcp.asana.com/v2/mcp'
Other clients: use the setup for that client on the reference page.
2. Never write a credential value into a file that could be committed; reference an environment variable or the client's secret store, and ask me for any value you need.
3. Verify: connect to the server and call tools/list. Confirm the tools above are listed, and report any sign-in step I still have to complete.Claude Code setup
Run in a terminal. This user-scoped entry is available across projects.
claude mcp add --transport http --scope user --client-id "${ASANA_CLIENT_ID}" --client-secret --callback-port 8080 'asana' 'https://mcp.asana.com/v2/mcp'- Register this exact Claude Code redirect URL: http://localhost:8080/callback.
- The bare --client-secret option opens Claude Code's masked prompt; the secret is stored securely instead of appearing in the command or configuration file.
Codex CLI setup
Add to ~/.codex/config.toml. This publisher-documented bridge requires Node.js, which serializes the OAuth client information at execution time.
[mcp_servers.asana]
command = "node"
args = [
"-e",
"const { spawnSync } = require(\"node:child_process\"); const [endpoint, callbackPort, resource] = process.argv.slice(1); const clientInfo = JSON.stringify({ client_id: process.env[\"ASANA_CLIENT_ID\"], client_secret: process.env[\"ASANA_CLIENT_SECRET\"] }); const result = spawnSync(\"npx\", [\"-y\", \"mcp-remote@latest\", endpoint, callbackPort, \"--static-oauth-client-info\", clientInfo, \"--resource\", resource], { stdio: \"inherit\" }); if (result.error) throw result.error; process.exit(result.status === null ? 1 : result.status);",
"https://mcp.asana.com/v2/mcp",
"3334",
"https://mcp.asana.com/v2"
]
env_vars = ["ASANA_CLIENT_ID", "ASANA_CLIENT_SECRET"]- Register this exact Codex redirect URL: http://localhost:3334/oauth/callback.
- This is Asana's publisher-documented mcp-remote compatibility setup. The publisher warns that mcp-remote is experimental community software; review it before use.
- Store ASANA_CLIENT_ID and ASANA_CLIENT_SECRET in a protected environment or secret manager; never commit their values.
Cursor setup
Add to .cursor/mcp.json for this project, or ~/.cursor/mcp.json for all projects.
{
"mcpServers": {
"asana": {
"url": "https://mcp.asana.com/v2/mcp",
"auth": {
"CLIENT_ID": "${env:ASANA_CLIENT_ID}",
"CLIENT_SECRET": "${env:ASANA_CLIENT_SECRET}"
}
}
}
}- Register this exact Cursor redirect URL: cursor://anysphere.cursor-mcp/oauth/callback.
- Cursor Static OAuth reads the client ID and secret from the named environment variables; never commit either value.
VS Code setup
Run “MCP: Add Server”, choose HTTP, enter this URL and name, then choose Workspace or Global scope. VS Code will prompt for the registered credentials when the server starts.
{
"servers": {
"asana": {
"type": "http",
"url": "https://mcp.asana.com/v2/mcp"
}
}
}- Register these exact VS Code redirect URLs: http://127.0.0.1:33418/, https://vscode.dev/redirect.
- Start the server after adding it. VS Code detects that Dynamic Client Registration is unavailable and natively prompts first for the client ID and then for the client secret; it stores the credentials securely and manages token refresh.
Claude setup
Add the endpoint above in Claude:
- Customize > Connectors > Add custom connector
- Team/Enterprise: Organization settings > Connectors > Add > Custom > Web
Claude Desktop setup
Add the endpoint above in Claude Desktop:
- Remote: Customize > Connectors (same as claude.ai)
- Local: Settings > Developer > Edit Config, or Settings > Extensions for .mcpb files
~/Library/Application Support/Claude/claude_desktop_config.json(macOS) or%APPDATA%\Claude\claude_desktop_config.json(Windows), local servers only
ChatGPT setup
Add the endpoint above in ChatGPT:
- ChatGPT web: Plugins > Add custom MCP server, then configure authentication and accept the risk warning
Windsurf setup
Add the endpoint above in Windsurf:
~/.config/devin/mcp_config.json(%APPDATA%\devin\mcp_config.jsonon Windows),serverUrlorurl- Cascade panel > ... > MCPs > Open MCP config file
Gemini CLI setup
Add the endpoint above in Gemini CLI:
gemini mcp add --transport http <name> <url>~/.gemini/settings.json(user) or.gemini/settings.json(project),mcpServers
MCP SDK setup
Add the endpoint above in MCP SDK:
- Programmatic:
new Client(...).connect(new StreamableHTTPClientTransport(url))
Notes for every client
- Provider setup: Create a new application in the Asana developer console and select MCP app as the app type.
- Provider setup: Give the app a recognizable name and retain its client ID in protected configuration.
- Provider setup: Register the exact callback URI for the client that will perform authorization.
- Provider setup: Under Manage distribution, select specific workspaces and add each test workspace, or select any workspace.
- Provider setup: Use the app and secret with a documented supported client that can protect the secret; creating the app alone does not enable hosted mcptest.
- Provider setup: For hosted mcptest, its operator must configure the client ID and secret as a confidential server-side binding before Retry becomes available; never paste the secret into mcptest in a browser.
- Publisher evidence (reviewed 2026-08-24): https://developers.asana.com/docs/connecting-mcp-clients-to-asanas-v2-server
- Provider guidance: OAuth clients must be pre-registered with Asana client credentials; the server does not advertise Dynamic Client Registration.
Client compatibility
| Client | Status | Why |
|---|---|---|
| Claude Code | Supported | Claude Code supports Streamable HTTP servers and OAuth sign-in. |
| Codex | Supported | Codex supports Streamable HTTP servers and OAuth sign-in. |
| Cursor | Supported | Cursor supports Streamable HTTP servers and OAuth sign-in. |
| VS Code | Supported | VS Code supports Streamable HTTP servers and OAuth sign-in. |
| Claude | Supported | Claude supports Streamable HTTP servers and OAuth sign-in. |
| Claude Desktop | Supported | Claude Desktop supports Streamable HTTP servers and OAuth sign-in. |
| ChatGPT | Supported | ChatGPT supports Streamable HTTP servers and OAuth sign-in. |
| Windsurf | Partial | Windsurf's documentation does not state support for OAuth with your own client ID. |
| Gemini CLI | Supported | Gemini CLI supports Streamable HTTP servers and OAuth sign-in. |
| MCP SDK | Supported | MCP SDK supports Streamable HTTP servers and OAuth sign-in. |
Computed from this server's validated transport, protocol and authentication against documented client support. Checks the catalog has not observed are not counted.
Latest validation evidence
- Validation status
- Online when last tested
- Validation checked at
- Oct 26, 2026 at 2:08 PM
- Validation detail
- Authentication challenge at https://mcp.asana.com/v2/mcp returned HTTP 401; endpoint was reachable but did not complete an MCP probe; authentication oauth
Tool inventory
The catalog validator lists tools only on servers that answer without credentials. Asana asks for OAuth 2.1 sign-in first, so its tools, resources and prompts were not observed. Connect in the Playground with your own credentials to list them.