Codex 的 MCP 有点不一样
如果你之前给 Claude Desktop 或 Cursor 加过 MCP 服务器,那都是在编辑 JSON。Codex CLI 不用 JSON。它的配置放在 ~/.codex/config.toml,MCP 服务器写在 [mcp_servers.<name>] 表里,一个服务器一个表。
还有第二个小坑。Codex 支持两种 MCP 服务器:本地 stdio 服务器(它作为子进程启动,需要你给 command 和 args),以及通过网络连接的远程 streamable-HTTP 服务器(需要你给 url)。BankBridge 属于远程那种,是一个托管服务器,你只要指向它即可。而远程服务器目前藏在一个功能开关后面。漏掉这个开关,Codex 会加载零个工具,连一句警告都不会给你。
OpenAI 的文档说了机制,但缺少完整可用的示例,这大概就是你到这里来的原因。整套配置一共四行 TOML 加一个环境变量。
获取 BankBridge API 密钥
BankBridge 是一个托管的 MCP 服务器,让 agent 只读访问你实时的银行数据。在 bankbridge.money 用邮箱注册(magic link,不需要密码),然后在仪表板里连接一家银行。
链接流程在银行提供的安全 UI 中运行。你选择自己的银行,在那边登录,并批准只读访问。BankBridge 保存的是加密后的 access token,而不是你的银行密码,你的财务数据也不会缓存在我们的服务器上。Codex 提的每个问题都会现场拉取数据来回答。
连接好银行之后,创建一个 API 密钥。它以 bbk_ 开头,只会显示一次,所以要马上复制。价格是每连接一家银行 $5/mo,可随时取消。
config.toml 配置项
打开 ~/.codex/config.toml。文件不存在就自己创建一个。加入以下内容:
experimental_use_rmcp_client = true
[mcp_servers.bankbridge]
url = "https://bankbridge.money/api/mcp"
bearer_token_env_var = "BANKBRIDGE_API_KEY"
有三点值得注意。第一,experimental_use_rmcp_client = true 是顶层设置。它必须出现在任何 [section] 标题之前。TOML 会把每个键分配给它所在的表,所以如果这个开关跑到 [mcp_servers.bankbridge] 里面,Codex 会把它当作某个奇怪的服务器选项,你的远程服务器就永远加载不进来。
第二,url 指向 BankBridge 托管的端点。没有东西要安装,不需要 npx 包装脚本,也不需要盯着一个本地进程。
第三,bearer_token_env_var 指定的是一个环境变量名,而不是直接放密钥。Codex 会从你的 shell 中读取真正的密钥,这样这个经常被人推到公开 dotfiles 仓库里的文件就不会带上密钥。
在 shell 中导出密钥
一行搞定:
export BANKBRIDGE_API_KEY="bbk_your_key_here"
在你打算启动 Codex 的终端里运行它,并把它加到 ~/.zshrc 或 ~/.bashrc,这样新开的 shell 也能拿到。把密钥放在环境变量里也让轮换密钥变得毫不费力:换掉 export 那一行,TOML 完全不用动。如果需要的话,我们有一篇关于轮换密钥的短指南。
确认 11 个工具已加载
用 codex 开启一个新会话。在 TUI 里输入 /mcp。Codex 会列出每个已配置的服务器以及它暴露的工具。较新的版本还带了一个 codex mcp list 子命令,不用进会话就能在 shell 里跑。
你要找的是 bankbridge,带 11 个工具:list_accounts、get_account、list_transactions、search_transactions、get_spending_summary、get_recurring_charges、get_monthly_cashflow、get_merchant_history、list_categories、list_holdings 和 list_investment_transactions。
接下来问它一个真实问题:
我这周花了多少钱?
Codex 应该会调用 get_spending_summary 或 list_transactions,并用你真实账户里的数字回答。没有同步步骤,也没有快照;每个答案都是在你提问那一刻实时拉取的。
如果 Codex 加载了零个工具
失败方式是无声的,比崩溃还烦人。按顺序排查以下几点。
开关缺失或位置错了。这就是十次里有九次的原因。experimental_use_rmcp_client = true 应放在 config.toml 的最顶部,位于所有 [section] 之前。在服务器块里面它什么也不做。
密钥不在 Codex 的环境里。Codex 在启动时解析 bearer_token_env_var,所以你在另一个终端标签页里 export 的、或者只加到 .zshrc 但从未 source 过的密钥,它都看不到。启动前在同一个 shell 里跑一下 echo $BANKBRIDGE_API_KEY 确认。
你贴的是 JSON。从 Claude Desktop 或 Cursor 文档里复制的片段是解析不了的 TOML。如果 Codex 抱怨配置文件,或者干脆无声忽略,就找找有没有多余的花括号和冒号。
Codex 版本太旧。Streamable-HTTP MCP 支持比较新。用 npm install -g @openai/codex 升级(如果用 Homebrew 装的就 brew upgrade codex),然后再试一次。
接通之后该问什么
一些能干净地映射到工具上的起点:
我有哪些循环扣款,按月费用排序?
上个月我在哪些商家花得最多?
对比一下我 6 月的收入和支出。
一切在设计上都是只读的。没有工具用于转账、缴账单或下单交易,所以一个好奇 agent 的破坏半径正好是零美元。而且这把密钥不是 Codex 专用的:同一个 bbk_ 密钥可以用在 Claude Code、Gemini CLI、Cursor 以及我们文档里的其他 MCP 宿主中,连接第二个 agent 大约需要三十秒。