在 macOS 上把云效安全接入 Codex
摘要
使用云效官方 MCP Server,把代码管理和项目协作能力接入 Codex;令牌保存在 macOS 钥匙串中,不写入 Codex 配置或公开文档。
本文介绍如何把阿里云云效的代码管理和项目协作能力接入 Codex。配置完成后,可以让 Codex 查询仓库、分支、合并请求、项目和工作项。
这里接入的是云效 DevOps 工具,不是替换 Codex 使用的 AI 模型。
方案概览
本文使用云效官方的 alibabacloud-devops-mcp-server:
- 云效个人访问令牌存入 macOS 钥匙串。
- 私有启动脚本从钥匙串读取令牌。
- Codex 只保存启动脚本路径,不保存令牌明文。
- MCP 只启用
code-management和project-management,降低权限和上下文占用。
数据流如下:
Codex -> 私有启动脚本 -> macOS 钥匙串
-> 云效官方 MCP -> 云效中心站 API准备工作
需要:
- macOS
- Node.js 20 或更高版本
- npm/npx
- Codex CLI 或 Codex 桌面版
- 云效中心站账号
检查环境:
node --version
npx --version
codex --version
command -v npx记录 command -v npx 返回的绝对路径,后面需要写入启动脚本。
1. 创建云效个人访问令牌
打开云效官方文档中的获取个人访问令牌页面。
按实际用途授予最小权限。本文只需要:
- 代码管理(Codeup)
- 项目协作(Projex)
不要把令牌提交到 Git、写入共享文档或粘贴到公开聊天中。如果令牌曾经出现在聊天记录、截图或日志里,应在配置验证完成后立即轮换。
2. 把令牌存入 macOS 钥匙串
运行:
/usr/bin/security add-generic-password \
-U \
-a "$USER" \
-s codex-yunxiao-mcp \
-l "Codex Yunxiao MCP token" \
-w终端会要求输入并再次确认密码数据。在提示符中粘贴云效令牌;输入不会显示在屏幕上。
这里故意没有把令牌写成命令行参数,因为命令行参数可能进入 Shell 历史或进程列表。
验证钥匙串项目存在,但不要打印令牌:
if /usr/bin/security find-generic-password \
-a "$USER" \
-s codex-yunxiao-mcp >/dev/null 2>&1; then
echo "Yunxiao credential is available"
else
echo "Yunxiao credential is missing"
fi3. 创建私有 MCP 启动脚本
创建目录:
mkdir -p "$HOME/.local/bin"创建 $HOME/.local/bin/codex-yunxiao-mcp,内容如下:
#!/bin/sh
set -eu
KEYCHAIN_SERVICE="codex-yunxiao-mcp"
KEYCHAIN_ACCOUNT="${USER:?USER is not set}"
NPX_BIN="<ABSOLUTE_PATH_TO_NPX>"
if ! TOKEN=$(/usr/bin/security find-generic-password \
-a "$KEYCHAIN_ACCOUNT" \
-s "$KEYCHAIN_SERVICE" \
-w 2>/dev/null); then
echo "Yunxiao token is missing from macOS Keychain." >&2
exit 1
fi
if [ -z "$TOKEN" ]; then
echo "Yunxiao token in macOS Keychain is empty." >&2
exit 1
fi
if [ ! -x "$NPX_BIN" ]; then
echo "npx was not found at $NPX_BIN." >&2
exit 1
fi
PATH="${NPX_BIN%/*}:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
export PATH
export YUNXIAO_ACCESS_TOKEN="$TOKEN"
unset TOKEN
exec "$NPX_BIN" -y alibabacloud-devops-mcp-server \
--toolsets=code-management,project-management把 <ABSOLUTE_PATH_TO_NPX> 替换为之前 command -v npx 的输出。例如:
NPX_BIN="/opt/homebrew/bin/npx"限制脚本权限并检查语法:
chmod 700 "$HOME/.local/bin/codex-yunxiao-mcp"
sh -n "$HOME/.local/bin/codex-yunxiao-mcp"
stat -f 'launcher mode: %Lp' "$HOME/.local/bin/codex-yunxiao-mcp"权限应显示为 700。
4. 注册到 Codex
运行:
codex mcp add yunxiao -- "$HOME/.local/bin/codex-yunxiao-mcp"检查配置:
codex mcp get yunxiao
codex mcp list预期结果:
enabled: truetransport: stdiocommand指向私有启动脚本env: -,没有令牌或内联环境变量
Codex 会把等价配置写入 ~/.codex/config.toml:
[mcp_servers.yunxiao]
command = "/Users/your-name/.local/bin/codex-yunxiao-mcp"重启 Codex 桌面版或 IDE 扩展,使新 MCP 配置生效。在 Codex 中输入 /mcp 可以查看连接状态。
5. 验证云效鉴权
可以直接调用云效官方托管端点验证令牌。下面的命令从钥匙串读取令牌,不会把令牌放进 Shell 历史:
YX_TOKEN=$(/usr/bin/security find-generic-password \
-a "$USER" \
-s codex-yunxiao-mcp \
-w)
curl -sS \
'https://openapi-rdc.aliyuncs.com/ai/mcp?toolsets=code-management,project-management' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H "Authorization: Bearer $YX_TOKEN" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_current_user","arguments":{}}}'
unset YX_TOKEN成功时返回 JSON-RPC result。返回内容包含账号信息,不要直接贴到公开文档或工单中。
6. 在 Codex 中使用
重启 Codex 后,可以尝试:
使用云效工具列出我有权访问的代码仓库。查询指定项目中尚未完成的工作项,按负责人分组。查看指定仓库最近的合并请求,只汇总标题、状态和审查人。创建分支、评论或工作项等写操作会修改云效数据。执行前应让 Codex 明确列出目标组织、项目、仓库和具体变更。
工具范围
本文只启用了:
code-management:仓库、分支、文件、提交和合并请求project-management:项目、迭代、工作项、评论和工时
没有启用流水线、制品仓库、应用交付、测试管理和组织管理。需要增加能力时,修改启动脚本中的 --toolsets:
--toolsets=code-management,project-management,pipeline-management修改后重启 Codex。云效支持的工具集以官方 MCP Server 仓库为准。
常见问题
Codex 显示 MCP 启动失败
直接运行启动脚本查看错误:
"$HOME/.local/bin/codex-yunxiao-mcp"首次运行时,npx 可能需要下载官方 npm 包。确认网络可访问 npm,并检查 NPX_BIN 是否为有效的绝对路径。
提示钥匙串中没有令牌
重新执行第 2 节的 security add-generic-password 命令。macOS 首次读取钥匙串时可能弹出授权对话框,应确认请求来自本机 /usr/bin/security。
返回 401 Invalid token
令牌可能已过期、被吊销或缺少对应 API 权限。重新创建令牌并更新钥匙串。
工具数量太多
不要省略 --toolsets。只启用实际需要的工具集,可以降低 Codex 上下文占用并减少误操作范围。
Region 专属站点
本文针对访问地址为 https://devops.aliyun.com/ 的云效中心站。Region 专属站点通常使用 https://<your-org>.devops.aliyuncs.com,需要在官方 MCP Server 文档中按 Region 站方式配置 YUNXIAO_API_BASE_URL。
轮换令牌
先在云效创建新令牌,然后重新运行钥匙串写入命令:
/usr/bin/security add-generic-password \
-U \
-a "$USER" \
-s codex-yunxiao-mcp \
-l "Codex Yunxiao MCP token" \
-w更新后重启 Codex,不需要修改启动脚本或 config.toml。验证新令牌可用后,在云效控制台吊销旧令牌。
卸载
确认不再需要接入后,依次运行:
codex mcp remove yunxiao
rm "$HOME/.local/bin/codex-yunxiao-mcp"
/usr/bin/security delete-generic-password \
-a "$USER" \
-s codex-yunxiao-mcp这些操作会移除 Codex 注册、启动脚本和钥匙串令牌。删除钥匙串项目后无法恢复,只能重新创建云效令牌。
本次验证记录
本文方案于 2026-08-06 在 macOS 上完成实际验证:
- Node.js:24.x
- 云效站点:中心站
- MCP 包:
alibabacloud-devops-mcp-server - 启用范围:
code-management,project-management - 云效官方端点鉴权:通过
- MCP
initialize:通过 - MCP
tools/list:返回 66 个工具 - 代码管理和项目协作代表工具:存在
- 流水线和应用交付代表工具:不存在
- Codex MCP 状态:已启用
- 启动脚本权限:
700 - Codex 配置和公开文件中的令牌明文:未发现