通过凭据文件连接 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 开发者控制台 建 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:
mkdir -p ~/.asana
chmod 700 ~/.asana
{
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET"
}
chmod 600 ~/.asana/mcp_oauth_client.json
然后手写用户层 ~/.codex/config.toml。文档里的 codex mcp 初始化命令含糊,不要当主路径。~ 不会展开,@ 后面必须是绝对路径:
[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。