我要提问
ARTICLE DETAIL

资讯详情

前沿编程新知与开发实战干货的深度解读。

Windows 本地配置记录:把 Codex 的 config.toml 改到 TaoToken,重启后识别 Affinity MCP

Windows 本地配置记录:把 Codex 的 config.toml 改到 TaoToken,重启后识别 Affinity MCP 1. Windows 下 Codex 重启后识别不到 Affinity MCP 的真实场景如果你在 Windows 上折腾过 Codex 的 MCP 扩展大概率遇到过这个画面config.toml里明明写好了[mcp_servers.affinity]命令行codex mcp list也能看到 affinity 条目但打开 Codex 桌面端插件/MCP 管理页里就是没有 Affinity 的影子。重启一次、两次、三次还是老样子。这不是你配置写错了而是 Codex 的 MCP 加载分成了两个阶段CLI 阶段读config.toml桌面端阶段在进程启动时加载 MCP server 列表。两个阶段用的是不同的加载时机CLI 能看到不代表界面能看到。我试过在没重启的情况下反复改 TOML结果越改越乱最后发现只要老老实实重启一次 Codex 桌面进程Affinity 就出现了。这篇记录聚焦 Windows 本地环境把 Codex 与 Affinity MCP 的配置链路拆开讲从config.toml的 endpoint 与鉴权字段入手说明重启后 MCP 识别失败的常见表现与排查顺序。同时给出可复制的config.toml片段、TaoToken 统一 Key/API 通道的填写位置以及重启 Codex 后验证 Affinity MCP 是否被正确加载的具体命令与检查项。适合已经在用 Codex、想接入 Affinity MCP 做本地自动化、但卡在“配置写了界面不认”这一步的 Windows 开发者。核心检索词先摆出来Windows 下 Codex 配置 Affinity MCP、config.toml 修改后重启识别失败、Codex MCP 加载排查。这三个词基本覆盖了本文要解决的全部问题。先说清楚链路。Affinity 桌面应用内置了一个 MCP server通过http://localhost:6767/sse这个 SSE endpoint 对外暴露工具。Claude Desktop 的 Affinity Connector 本质上是一个 Node 启动器跑server/index.js由它去连本地的 6767 端口。Codex 要复用这套东西就得在config.toml里声明一个mcp_servers.affinitycommand 指向 nodeargs 指向那个index.jsenv 里给上SSE_URL。链路是Codex - node server/index.js - http://localhost:6767/sse - Affinity 桌面应用任何一环断了界面里都不会出现 Affinity。而“重启后才识别”这个现象卡在 Codex 桌面进程的 MCP 加载时机上不是链路本身的问题。2. TaoToken 前置统一 Key 与 API 通道的填写位置在动config.toml之前先把 TaoToken 这一层理清楚。TaoToken 在这里的角色是统一 API 通道你不需要为每个模型或每个工具单独配一套 Key而是用同一个 Key 走同一个 Base URLCodex 侧只认这一组凭证。官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 根地址是 https://taotoken.net/api 。具体到 Codex凭证不是写在config.toml的[mcp_servers.affinity]段里而是写在 Codex 自己的模型 provider 配置段。MCP server 段只负责“怎么启动 Affinity 的 node 进程”模型请求走的是另一条通道。很多人把这两件事混在一起结果 Key 填到了 MCP 的 env 里模型请求那边还是空的表现就是 MCP 能列出来但一调用就报鉴权错。正确的分工是这样配置项写在哪作用Base URL模型 provider 段指向 https://taotoken.net/apiAPI Key模型 provider 段TaoToken 控制台生成的 KeyModel ID模型 provider 段你要用的模型标识SSE_URL[mcp_servers.affinity.env]指向 http://localhost:6767/ssecommand/args[mcp_servers.affinity]启动 Affinity Connector 的 node 进程Key 的获取在 TaoToken 控制台的 API Keys 页面https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。生成后复制出来注意只显示一次。模型对话调试可以用 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 先确认模型 ID 拼写接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。这里有个容易踩的坑TaoToken 的 Base URL 结尾不要多加/v1或/chat/completionsCodex 侧会自己拼路径。我见过有人写成https://taotoken.net/api/v1结果 404排查半天以为是 Key 失效。统一写https://taotoken.net/api就行。如果你后面要长期跑编码类 Agent 任务可以考虑 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 它和单次 API 调用是两条不同的计费路径按自己的使用频率选。3. 可复制配置config.toml 完整片段与路径对照Codex 的全局配置文件在C:\Users\你的用户名\.codex\config.toml动手前先备份PowerShell 里执行Copy-Item -LiteralPath $env:USERPROFILE\.codex\config.toml -Destination $env:USERPROFILE\.codex\config.toml.bak-affinity -Force备份完再改。下面是可以直接复制的片段分两块模型 provider 段和 MCP server 段。模型 provider 段TaoToken 统一通道[model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY [profiles.default] model_provider taotoken model claude-sonnet-4-20250514MCP server 段Affinity[mcp_servers.affinity] command node args [C:/Users/你的用户名/AppData/Roaming/Claude/Claude Extensions/ant.dir.gh.canva.affinity/server/index.js] startup_timeout_sec 30 tool_timeout_sec 120 [mcp_servers.affinity.env] SSE_URL http://localhost:6767/sse几个必须注意的点第一你的用户名要替换成你自己的 Windows 用户名别原样留着。路径里用正斜杠/是安全的TOML 里反斜杠要转义容易出错统一用/。第二env_key TAOTOKEN_API_KEY表示 Codex 会去读环境变量TAOTOKEN_API_KEY。你需要先在系统里设好这个环境变量[System.Environment]::SetEnvironmentVariable(TAOTOKEN_API_KEY, 你的Key, User)设完要重开终端才生效。也可以直接在config.toml里写api_key ...但环境变量方式更干净不会把 Key 提交到任何地方。第三SSE_URL先用http://localhost:6767/sse。如果 Affinity 改过端口这里要跟着改。判断端口对不对不是看浏览器能不能打开页面而是看 MCP client 能不能列出工具。第四startup_timeout_sec给 30 秒是留余量。Windows 上 node 冷启动加 Affinity 连接偶尔会慢给太短会误判成启动失败。第五如果你用的是 Codex 的 auth.json 方式管理凭证路径在C:\Users\你的用户名\.codex\auth.json里面存的是 provider 的鉴权信息。三件套要一致Base URL 指向https://taotoken.net/apiKey 用 TaoToken 控制台生成的Model ID 用你在模型列表里确认过的。任何一件对不上都会在请求阶段报错而不是在 MCP 加载阶段报错这点要分清。配置写完后config.toml里应该同时存在[model_providers.taotoken]、[profiles.default]、[mcp_servers.affinity]三段。缺任何一段后面的验证都会出问题。4. 验证请求重启 Codex 后确认 Affinity MCP 被加载配置写完先别急着开界面。第一步用 CLI 验证配置有没有被读到。如果codex命令在当前终端可用直接跑codex mcp list有些 Windows 环境里系统会优先调用 WindowsApps 里的codex.exe出现权限或路径问题。这时用 Codex 安装目录下的真实 CLI 路径 C:\Users\你的用户名\AppData\Local\OpenAI\Codex\bin\版本目录\codex.exe mcp list成功时输出里应该能看到类似内容Name Command Args Status affinity node ...ant.dir.gh.canva.affinity/server/index.js enabled看到affinity且 Status 是enabled说明 Codex CLI 已经读到了配置。但这一步只证明 CLI 阶段通过不代表桌面界面加载了。接下来是关键动作完全关闭 Codex 桌面进程再重新打开。注意是彻底退出不是最小化到托盘。任务管理器里确认Codex.exe相关进程都没了再启动。重启后进入插件 / MCP 管理页查看 MCP 分组。正常情况下应该能看到Affinity Node Repl PycharmAffinity 出现在列表里且开关处于启用状态才算完成从配置到界面的闭环。再进一步验证工具是否真的可用。在 Codex 里发起一次只读调用比如列出 Affinity SDK 文档list_sdk_documentation或者读取某个主题read_sdk_documentation_topic如果这些只读工具能返回内容说明整条链路通了Codex - node - 6767 SSE - Affinity。如果列表里有 Affinity 但调用报错问题在链路后半段不在配置加载。第一次看到 Affinity MCP 后别马上跑会改文档的脚本。execute_script能在桌面应用里执行 JavaScript能力很强先做只读测试确认当前文档、文件路径和操作范围再考虑写操作。这是我自己踩过坑之后的习惯。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth配置链路出问题时报错信息往往指向不同阶段。按报错定位比盲目改配置快得多。401 Unauthorized这是模型请求阶段的鉴权错不是 MCP 加载错。说明[model_providers.taotoken]里的 Key 或 Base URL 有问题。检查三件套Base URL 是不是https://taotoken.net/api结尾别加/v1环境变量TAOTOKEN_API_KEY是不是设了且重开过终端Model ID 是不是在模型列表里确认过的。如果用的是 auth.json检查里面的 provider 字段和config.toml是否一致。local proxy failed / connection refused这是 MCP 链路阶段的错指向http://localhost:6767/sse连不上。排查顺序Affinity 桌面应用是否在运行Affinity 设置里 MCP 开关是否开启Edit - Settings - Model Context Protocol确认 Enable Affinity MCP、Access desktop files、Access network 等开关端口 6767 是否被占用或被防火墙拦。浏览器打开localhost:6767/sse没有正常页面是正常的它是 SSE endpoint不是网页别用这个判断成败。reading choices / 解析响应失败通常是 Base URL 拼错导致返回了非预期格式。比如写成了https://taotoken.net/api/v1/chat/completionsCodex 又自己拼了一次路径返回的就不是标准响应。统一用https://taotoken.net/api。OAuth 相关报错如果你在 Codex 里配了需要 OAuth 的 provider但实际走的是 TaoToken 的 Key 通道两者会冲突。确认[profiles.default]里model_provider指向的是taotoken而不是某个 OAuth provider。凭证方式要统一别混用。配置写了界面还是没有 Affinity先跑codex mcp list。命令行能看到但界面没有优先重启 Codex 桌面进程。命令行也看不到检查config.toml位置对不对、表名是不是[mcp_servers.affinity]、server/index.js路径是否真实存在、Node.js 是否可用。不要用 npx 装未验证的包网上有些教程让你npx affinity/mcp-server这个包名没经过验证。本文记录的是复用 Claude Desktop 已安装的 Affinity Connector先确认本机实际安装目录和manifest.json里声明的启动方式别照抄包名。不要改 Claude Desktop 的 connector 文件更稳的做法是读取 connector 的启动方式在 Codex 里复用同一个server/index.js不动 connector 安装文件。这样后续排错清晰也不容易受更新影响。最小排查清单按顺序走Affinity 是否已启动Affinity 设置中 MCP 是否开启Claude Desktop 是否已安装 Affinity Connectorserver/index.js路径是否存在Codexconfig.toml是否写入 affinitycodex mcp list是否能看到 affinity是否已彻底重启 Codex 桌面进程插件 / MCP 管理页是否出现 Affinity第 6 步成功、第 8 步失败基本就是没重启或没刷新。第 6 步就失败回到第 4、5 步查路径和表名。6. 语义一致 CTA按场景选入口排障和接入类问题优先看 API Keys 和接入文档。Key 在 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。文档里有 Base URL、鉴权方式、模型 ID 的完整说明配config.toml时对着看最省事。验证模型是否可用用模型对话页https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。先确认模型 ID 拼写再写进config.toml的model字段能避免一大类 401 和解析错误。长期跑编码类 Agent 任务看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。它和单次 API 调用是两条路径按使用频率选。如果你用的是 Claude Code 那套 Anthropic 兼容通道入口在 https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaude_code_anthropicutm_campaignrewrite 配置方式和 Codex 类似Base URL 和 Key 是同一套。最后说个实操细节改完config.toml后养成先codex mcp list再重启界面的习惯。CLI 通过、界面通过两步都过了才算闭环。我见过太多人卡在“配置明明对但界面不认”其实就差一次彻底重启。把这两步分开验证排错范围立刻缩小一半。
返回列表