﻿---
title: "通过凭据文件连接 Asana V2 MCP"
summary: "先注册 MCP app，再使用 mcp-remote 桥接。客户端凭据保存在权限为 600 的 JSON 文件中，通过 @ 加绝对路径读取。"
category: mcp
level: intermediate
surfaces: [cli, app, ide]
tags: ["MCP", "Asana", "OAuth", "mcp-remote"]
canonical: /tips/mcp-asana-v2-remote/
---

# 通过凭据文件连接 Asana V2 MCP

先注册 MCP app，再使用 mcp-remote 桥接。客户端凭据保存在权限为 600 的 JSON 文件中，通过 @ 加绝对路径读取。

Asana V2 的 Codex 配置采用 mcp-remote 桥接，并通过文件提供客户端凭据。远程入口是 `https://mcp.asana.com/v2/mcp`，本身是 Streamable HTTP，但 V2 **不支持** Dynamic Client Registration。必须先在 [Asana 开发者控制台](https://app.asana.com/0/my-apps) 建 **MCP app**，拿到 client ID / secret。Codex 没有 Claude Code 那种 `--client-id` / `--client-secret` 旗标，所以官方 Codex 节才用 `npx mcp-remote@latest` 当本机 stdio 桥。该桥接用于满足 Asana V2 的客户端认证要求。

先登记 MCP app，OAuth Redirect URL 必须写成：

`http://localhost:3334/oauth/callback`

控制台和客户端必须**逐字**一致。工作区在 Manage distribution 里至少勾一个，否则授权会报 This app is not available to your Asana workspace。

凭证不要写进 `args`、不要 export 进进程命令行。官方让你建一份只有自己能读的 json：

```bash
mkdir -p ~/.asana
chmod 700 ~/.asana
```

```json
{
  "client_id": "YOUR_CLIENT_ID",
  "client_secret": "YOUR_CLIENT_SECRET"
}
```

```bash
chmod 600 ~/.asana/mcp_oauth_client.json
```

然后手写用户层 `~/.codex/config.toml`。文档里的 `codex mcp` 初始化命令含糊，不要当主路径。`~` **不会**展开，`@` 后面必须是绝对路径：

```toml
[mcp_servers.asana]
command = "npx"
args = [
  "-y",
  "mcp-remote@latest",
  "https://mcp.asana.com/v2/mcp",
  "3334",
  "--static-oauth-client-info",
  "@/Users/YOUR_USERNAME/.asana/mcp_oauth_client.json",
  "--resource",
  "https://mcp.asana.com/v2"
]
startup_timeout_sec = 60
```

Linux 把路径换成 `/home/YOU/.asana/mcp_oauth_client.json`。`@` 前缀让 mcp-remote **运行时**读文件，避免 `client_secret` 出现在进程列表。`3334` 是回调端口，对应上面那条 Redirect URL。`--resource` 是 `https://mcp.asana.com/v2`，**不要**再加 `/mcp`。冷启动 npx 把 `startup_timeout_sec` 提到 60。现行文档直接 `command = "npx"`，不要再包一层 `sh -c`。

这是 stdio 桥，**不要** `codex mcp add asana --url https://mcp.asana.com/v2/mcp`，也**不要** `codex mcp login asana`。博客里那套把 Asana 当成支持 DCR 的远程 HTTP，会在客户端注册处失败。配好后打开 Codex 设置的 MCP servers，点 Asana 触发浏览器授权；票进 `~/.mcp-auth/`。CLI 会话里 `/mcp` 只是核对工具，不是登录入口。

`mcp-remote` 是社区实验包，Asana **不提供**支持。官方更推荐 Claude Code 的原生预注册 OAuth；Codex 没有等价旗标，才走桥。用之前自己看清风险。本机要有 Node.js / npm。

V1 `https://mcp.asana.com/sse` 已弃用，关闭日期后来延到 2026-08-05。不要抄 `/sse`，也不要给 Codex 选旧 SSE 传输。MCP app 签出来的 token **只能**打 MCP 服务器，不能拿去调普通 Asana REST。

网页 Cloud 不读取 `~/.codex/config.toml`。配置后重新打开会话。用 `codex mcp get asana` 看传输是 stdio，command 是 npx。

## 来源

- [Asana · Connecting Coding Clients to the V2 server](https://developers.asana.com/docs/connecting-mcp-clients-to-asanas-v2-server)
- [Asana · Integrating with Asana's MCP Server](https://developers.asana.com/docs/integrating-with-asanas-mcp-server)
