[Bug]: Can’t log in to MCP toolset URLs from Claude Code or Codex

当 Claude Code 或 Codex 对 LiteLLM 的 MCP toolset URL( /toolset//mcp )发起 OAuth 登录时,会在打开登录页之前就校验失败;原因是 toolset URL 返回的 401 所指向的 protected resource me

快速结论:当 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、显卡或依赖版本信息,这些项目不作为排查依据。

解决步骤

  1. 将 LiteLLM 升级到 1.109 或更高版本,该版本包含 PR #48474 的修复。
  2. 升级后重新在 Claude Code 或 Codex 中添加 toolset URL(不带认证头),重新发起 OAuth 登录。
  3. 如果升级前需要临时继续使用:在 Claude Code 中退出登录后重新登录,可临时绕过;Codex 没有已知可用的规避方式,只能等待升级或临时改用按服务器划分的 URL。

验证方法

在升级后的版本上,用同样的 toolset URL 在不带认证头的情况下重新登录,Claude Code 与 Codex 应当都能正常打开登录页并完成 OAuth,不再出现 protected resource 不匹配的报错;同时可以确认 metadata 中声明的 resource 与 toolset URL 一致。

参考来源

BerriAI/litellm #46295

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 34601

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注