准备
你需要一个支持 Streamable HTTP MCP 的智能体客户端,以及管理员交付的 mcp_live_… Key。Key 可能同时拥有 dmapi:read 与 news:read,也可能只有其中一个 scope。
最省事:交给智能体
复制下面整句话给你的智能体。Key 请通过本机环境变量、客户端密钥设置或安全凭据存储提供,不要粘贴到公开会话。
请阅读 https://aitouyan.work/agent-setup.md,安装 aitouyan-public-mcp Skill,并用管理员单独交付给我的 Bearer Key 完成 dmapi 与 news 两个 Streamable HTTP MCP 连接,重启后执行 tools/list 和文档中的只读冒烟测试;不要申请、生成、回显或提交 Key。智能体可直接读取机器版教程;你也可以先打开 agent-setup.md审阅。
Codex 手动配置
1. 安装 Skill
mkdir -p "$HOME/.agents/skills"
curl -fsSLo /tmp/aitouyan-public-mcp.tar.gz https://aitouyan.work/downloads/aitouyan-public-mcp.tar.gz
tar -xzf /tmp/aitouyan-public-mcp.tar.gz -C "$HOME/.agents/skills"2. 配置 ~/.codex/config.toml
[mcp_servers.aitouyan_dmapi]
url = "https://dmapi.aitouyan.work/mcp"
bearer_token_env_var = "AITOUYAN_MCP_KEY"
required = true
[mcp_servers.aitouyan_news]
url = "https://news.aitouyan.work/mcp"
bearer_token_env_var = "AITOUYAN_MCP_KEY"
required = true配置文件只保存环境变量名,不保存真实 Key。完成下一节的安全注入后,从同一环境启动或重启 Codex。CLI、IDE 扩展与 ChatGPT 桌面端在同一 Codex 主机上共享 MCP 配置;个人 Skill 目录为 $HOME/.agents/skills。
安全保管与注入 Key
推荐顺序
- 客户端受保护的 Secret/Credential 字段:如果客户端明确说明该字段会进入系统凭据库且不会导出到配置文件,优先使用。
- 操作系统凭据库:把 Key 存入 Keychain、Secret Service 或 Windows 凭据库,启动客户端时再注入
AITOUYAN_MCP_KEY。 - 仅当前终端会话:使用隐藏输入,不把真实值写在命令行中;关闭终端后失效。
macOS:存入 Keychain
下面第一条命令会安全提示输入 Key;不要把 Key 追加到命令末尾。第二条只在当前 shell 中注入,然后从同一终端启动 Codex。
security add-generic-password -U -a "$USER" -s "aitouyan-mcp" -w
export AITOUYAN_MCP_KEY="$(security find-generic-password -a "$USER" -s "aitouyan-mcp" -w)"
codex如果使用桌面或 IDE 客户端,请使用其受保护凭据设置;不要为了让 GUI 继承变量而把 Key 明文写进 ~/.zshrc、LaunchAgent plist 或启动脚本。
macOS / Linux:仅当前 shell
没有凭据库时,用隐藏输入。真实 Key 不会显示,也不会成为命令历史的一部分:
# zsh(macOS 默认)
read -s "AITOUYAN_MCP_KEY?粘贴 Key(输入不可见): "; export AITOUYAN_MCP_KEY; echo
# bash
read -rsp "粘贴 Key(输入不可见): " AITOUYAN_MCP_KEY; export AITOUYAN_MCP_KEY; echo结束使用后运行 unset AITOUYAN_MCP_KEY 并关闭相关客户端进程。
Linux 桌面:Secret Service
系统安装了 secret-tool 时,可将 Key 存入登录用户的 Secret Service。存储命令会等待隐藏输入:
secret-tool store --label="爱投研 MCP Key" service aitouyan-mcp account "$USER"
export AITOUYAN_MCP_KEY="$(secret-tool lookup service aitouyan-mcp account "$USER")"
codexWindows PowerShell:仅当前进程树
使用隐藏输入转换为当前 PowerShell 的环境变量;不要使用 setx,它会把 Key 持久化为普通用户环境变量。
$secureKey = Read-Host "粘贴 Key(输入不可见)" -AsSecureString
$ptr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureKey)
try {
$env:AITOUYAN_MCP_KEY = [Runtime.InteropServices.Marshal]::PtrToStringBSTR($ptr)
} finally {
[Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ptr)
Remove-Variable secureKey, ptr
}
codex关闭该 PowerShell 和从中启动的客户端后,变量随进程树消失。需要持久保存时,使用客户端受保护凭据字段或组织批准的 Windows 凭据方案。
绝对不要这样做
- 不要输入
export AITOUYAN_MCP_KEY='真实 Key'、setx AITOUYAN_MCP_KEY ...或其他会留下命令历史/持久明文的命令。 - 不要把 Key 写入
.env、config.toml、Skill、shell rc、plist、脚本、笔记或代码仓库,即使文件暂未提交。 - 不要把 Key 交给不相关的智能体、网页、浏览器扩展或调试代理;不要通过截图、日志或报错内容传递。
其他 MCP 客户端
新增两个 Streamable HTTP 连接;每个请求都发送同一形式的 HTTP 头。具体配置字段名称以客户端文档为准。
dmapi:
URL: https://dmapi.aitouyan.work/mcp
Authorization: Bearer <YOUR_KEY>
news:
URL: https://news.aitouyan.work/mcp
Authorization: Bearer <YOUR_KEY>如果客户端支持“从环境变量读取 Header”,优先让 Authorization 从 AITOUYAN_MCP_KEY 组合,而不是把真实 Key 明文写入配置。
验收
- 重启客户端或重新载入 MCP 配置。
- 查看
tools/list:DMAPI 应恰好为 25 个工具,NewsSystem 应恰好为 12 个。 - DMAPI 冒烟测试:调用
listoff_status,确认返回只读台账状态。 - NewsSystem 冒烟测试:调用
list_stat_datasets,参数使用默认 compact 格式。 - 用一个窄问题触发 Skill,例如:“查最近一天央行公开市场消息,并说明需要哪些行情证据才能判断长债影响。”
轮换、撤销与疑似泄露
- 一客户端一 Key:不要在人或设备之间共享;只申请实际需要的
dmapi:read、news:readscope。 - 正常轮换:向管理员取得新 Key,更新本机凭据库,重启客户端并完成两个冒烟测试;确认新 Key 可用后,再让管理员撤销旧 Key。
- 疑似泄露:立即停止使用并联系管理员撤销。只提供 Key ID、客户端名称和事件时间,不要在工单或聊天中再次粘贴原 Key。
- 清理:从凭据库删除旧 Key,关闭仍继承旧环境变量的客户端和终端。macOS 可运行
security delete-generic-password -a "$USER" -s "aitouyan-mcp"。 - 不要自助补救:不要自行生成相似字符串、反复重试 401,或把 Key 发给智能体分析。
Skill 包与公开教程从不包含真实 Key;下载成功只代表安装资料可用,不代表已获得访问权限。
故障排查
401Key 缺失、错误、已禁用、已过期或已撤销。先确认客户端进程确实读取了环境变量。
403Key 没有所需 scope。DMAPI 需要 dmapi:read,NewsSystem 需要 news:read。
503 auth_unavailable服务端鉴权存储暂不可用。停止密集重试并联系管理员。
tools/list 不匹配检查是否连到了正确 URL,并重启客户端清除旧工具缓存。