快速结论:当 Claude Code 或 Codex 对 LiteLLM 的 MCP toolset URL(/toolset/<name>/mcp)发起 OAuth 登录时,会在打开登录页之前就校验失败;原因是 toolset URL 返回的 401 所指向的 protected resource metadata,把资源声明成了 /mcp,而不是实际的 toolset URL。优先排查该 metadata 中声明的 resource 是否与客户端请求的 URL 一致。
适用环境:LiteLLM v1.105.0;启用了 OAuth 的 MCP gateway;客户端为 Claude Code 与 Codex;MCP 入口为 toolset URL(/toolset/<name>/mcp)。Issue 未说明操作系统、Python、CUDA 或显卡信息,不做推断。
最快修复方案:升级到 LiteLLM 1.109 及以上版本。该问题由 PR #48474 修复,Issue 中已确认“Confirmed fixed in 1.109+”。
注意事项:Issue 提到,在 Claude Code 里退出登录再重新登录,可以临时绕过这个问题;但目前没有 Codex 可用的临时规避方法。另外,按服务器划分的 URL(/<server>/mcp)不受此问题影响。升级后建议确认部署的环境变量或配置没有覆盖 protected resource metadata 中的 resource 字段。
问题场景
在 LiteLLM 中创建 MCP toolset,并在 gateway 上启用 OAuth 后,把 https://<proxy>/toolset/<name>/mcp 以不带认证头的方式添加到 Claude Code 或 Codex,然后尝试登录。两个客户端都在打开 OAuth 登录页之前就失败;但同一个 toolset URL 在 ChatGPT 中可以正常完成 OAuth 登录。所有 toolset 都能复现,而按服务器划分的 URL(/<server>/mcp)正常。
报错原文
Claude Code:
SDK auth failed: Protected resource https://litellm.example.com/mcp does not match expected https://litellm.example.com (or origin)
Codex:
Error: Metadata error: Protected resource metadata resource mismatch: reference 'https://litellm.example.com/toolset/<name>/mcp', permitted 'https://litellm.example.com/mcp'
原因分析
对 toolset URL 发起请求时,401 响应会让客户端去读取 /.well-known/oauth-protected-resource/mcp。该 metadata 把 protected resource 声明为 /mcp,而客户端期望的是它实际请求的 toolset URL。Codex 的报错直接体现了这个不匹配:reference 是 /toolset/<name>/mcp,permitted 却是 /mcp;Claude Code 的报错则是期望值被解析成了站点根地址或其 origin。问题出在 OAuth protected resource metadata 与 toolset URL 的对应关系上,与客户端凭证无关。按照 Issue 的修复 PR(#48474)以及“1.109+ 已修复”的确认,这属于 LiteLLM 侧的实现缺陷,已在后续版本中修正。
环境排查
- 确认 LiteLLM 版本:v1.105.0 存在此问题,可复现。
- 确认 MCP gateway 是否已启用 OAuth。
- 确认客户端使用的是 toolset URL(
/toolset/<name>/mcp),而不是按服务器划分的 URL(/<server>/mcp)。 - 检查工具端 URL 返回的 401 响应对应的 protected resource metadata 路径与内容,重点看 resource 声明是否为
/mcp。 - Issue 未提供操作系统、Python、CUDA、显卡或依赖版本信息,这些项目不作为排查依据。
解决步骤
- 将 LiteLLM 升级到 1.109 或更高版本,该版本包含 PR #48474 的修复。
- 升级后重新在 Claude Code 或 Codex 中添加 toolset URL(不带认证头),重新发起 OAuth 登录。
- 如果升级前需要临时继续使用:在 Claude Code 中退出登录后重新登录,可临时绕过;Codex 没有已知可用的规避方式,只能等待升级或临时改用按服务器划分的 URL。
验证方法
在升级后的版本上,用同样的 toolset URL 在不带认证头的情况下重新登录,Claude Code 与 Codex 应当都能正常打开登录页并完成 OAuth,不再出现 protected resource 不匹配的报错;同时可以确认 metadata 中声明的 resource 与 toolset URL 一致。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Bug]: Claude on Bedrock behind the OpenAI Agents SDK: deferred tool not found after tool search, search record lost on later turns, compact](https://www.chat-gpts.plus/wp-content/uploads/2026/11/50104-7dbb1257-768x403.jpg)
![[speculative/mtp] Flash-Attention crash in gemma4-assistant: Query head dimension mismatch (neq0 != HSK / D=2048/4096)](https://www.chat-gpts.plus/wp-content/uploads/2026/11/29419-eee099a4-768x403.jpg)
