MCP 连不上先分层定位配置令牌与代理
分层排查顺序
- 配置层:注册项是否还在(如
~/.codex/config.toml里的 MCP 注册)。 - 令牌层:授权是否有效、凭据是否加载。
- 代理层:请求是否经本机代理、TLS 是否握手成功。
判定技巧:直连能拿到标准响应、经代理失败,就能把锅锁死在代理层。实测:直连 mcp.linear.app 稳定返回标准 OAuth 401(说明端点与令牌链路正常),而经过本机 HTTP/SOCKS 代理时 TLS 握手直接失败 → 根因是 MCP 初始化继承了全局代理,连接在发送有效令牌前就被代理关闭。
- 验证手段:用一次性
NO_PROXY绕过代理复现,不改永久配置。 - 修复方向:把该域名加入绕过代理的名单,而不是重新授权。
「登录失效」可能是两个不同问题
同一个「每次都要重新登录」的体感,背后其实是两件事,要分开归因:
- 配置项消失:注册项被覆盖/删除,但插件文件与 Keychain 授权仍在(谁覆盖的若无审计证据,不能断言)。
- 代理阻断:令牌已加载,但请求经代理时 TLS 被关闭 —— 看起来像登录失效,实际是网络问题。
把两者混为一谈,就会误判成「OAuth 每次失效」,然后反复重登(治标不治本)。一次性做法:注册持久化在全局配置、凭据放系统 Keychain、故障域名绕过代理、MCP 名称固定不生成新凭据槽位。
「授权过」不等于「这次连着」
排查前先分清两样东西:
- 授权缓存(如
~/.claude/mcp-needs-auth-cache.json)只记录「某个会话里你同意过这个服务器的 OAuth」,作用是避免重复弹确认框。 - 当前会话连哪些 MCP,由这个会话加载的 MCP 配置文件决定。
所以「我之前明明授权过 Linear,为什么现在没连上」的答案通常是:授权记录还在,但当前会话的配置里根本没有 Linear 这一项(它在另一个客户端的配置里),于是服务器压根没被启动。
授权是「允许连」,配置才是「去连接」。 两者分属不同层,别用一层的证据去证明另一层。
相关
- 中转源不更新先分清是哪一层 —— 同为「同一症状、多层链路」的分层定位
- 零延迟零尝试说明请求没发出去 —— 从响应特征反推断点在哪一层
- 先分清平台错误还是应用错误
- 一次性凭证拿到就落盘
- 先定位归属层再动手 —— 本条是该骨架的一处实例:配置/令牌/代理三层定位
- 无头环境连MCP要用APIKey而非OAuth —— 同一问题的另一面:运行形态决定凭证方式