Unhandled `TRPCError` in `market.getMcpList` & Schema validation error on `tokenUsage` sort when browsing MCP Marketplace

该报错通常出现在自托管 Docker 部署的 LobeChat 中,当用户以无 Cookie 的新会话浏览 MCP 市场或按 tokenUsage 等动态字段排序时触发。优先排查客户端是否已登录并获取市场访问令牌,以及排序字段是否被服务端校验规则拒绝。

快速结论:该报错通常出现在自托管 Docker 部署的 LobeChat 中,当用户以无 Cookie 的新会话浏览 MCP 市场或按 tokenUsage 等动态字段排序时触发。优先排查客户端是否已登录并获取市场访问令牌,以及排序字段是否被服务端校验规则拒绝。

适用环境:LobeChat v1.143.3,自托管 Docker 部署,Windows 系统,Firefox 浏览器(Web 桌面端)。未确认 Python、CUDA、显卡等依赖环境信息。

最快修复方案:暂无确认的一步修复方案。对于 Bearer Token 问题,可优先尝试通过「设置 → 凭据」(/settings/creds)登录市场以建立会话;若使用 http:// 非 HTTPS 访问,需配置 HTTPS 反向代理或设置 MARKET_TRUSTED_CLIENT_ID / MARKET_TRUSTED_CLIENT_SECRET 环境变量绕过。

注意事项:上述修复方案仅为临时绕过,官方代码中缺少服务器端 M2M Token 回退逻辑,问题在源码层面尚未被官方验证修复;tokenUsage 排序字段被服务端 Zod 校验拒绝,需要等待官方更新或自行修改枚举。

问题场景

在自托管 Docker 部署的 LobeChat 中,打开新的隐私窗口(无既有会话 Cookie),登录实例后点击侧边栏「探索 / 市场」,浏览、筛选或搜索 MCP 插件时,页面触发 HTTP 500 或 400 错误,市场数据无法加载。

报错原文

Uncaught TRPCError: Failed to fetch mcp list
Error [ZodError]: Invalid enum value. Expected 'createdAt' | 'installCount' | 'isFeatured' | 'isValidated' | 'ratingCount' | 'updatedAt', received 'tokenUsage'
{"error":"unauthorized","error_description":"Missing bearer token"}

原因分析

可能原因有两处:

第一,客户端在调用 market.getMcpList 前未注入市场访问令牌,导致向 market.lobehub.com 发起的请求缺少 Bearer Token,服务端无法校验身份而返回 401;同时服务器端缺少自动获取并缓存 M2M 令牌的回退逻辑,当客户端 Cookie 缺失时直接传递 undefined 给 SDK,进而触发未捕获的 TRPCError

第二,getMcpList 的 tRPC 参数校验器严格使用 z.nativeEnum(McpSorts) 枚举,但该枚举不包含前端实际发送的 tokenUsage 等排序字段,导致 Zod 校验失败。

环境排查

  • 确认 LobeChat 版本是否为 1.143.3 或相近版本;
  • 确认是否为自托管 Docker 部署,并检查 Docker 日志中的具体报错堆栈;
  • 确认浏览器是否为 Firefox,并检查隐私模式下是否清除了站点 Cookie 与 localStorage;
  • 确认访问协议:如果使用 http:// 而非 https://,PKCE 授权流程可能因缺少安全上下文而失效。

解决步骤

  1. 临时绕过 Bearer Token 问题(可优先尝试):打开「设置 → 凭据」(/settings/creds),手动登录 Marketplace 以建立会话 Cookie,然后返回市场页面确认能否正常加载。
  2. 检查访问协议:如果当前使用 http:// 访问实例,请配置 HTTPS 反向代理(如 Nginx、Caddy),确保 crypto.subtle 在安全上下文中可用。
  3. 配置环境变量绕过(可选):在 Docker 部署中设置 MARKET_TRUSTED_CLIENT_IDMARKET_TRUSTED_CLIENT_SECRET,绕过 PKCE 登录流程;配置后重启容器并重新加载页面。
  4. 等待官方修复或自行修改源码:监听 lobehub/lobe-chat 的 Issue 与 PR 动态,或自行修改 src/server/routers/lambda/market.ts 中的 Zod 校验,将 z.nativeEnum(McpSorts) 放宽为 z.string().optional(),并在客户端 src/services/discover.tsgetMcpList 方法中补上 await this.injectMPToken()

验证方法

清除站点 Cookie 与 localStorage 后,在隐私窗口中重新打开 LobeChat,进入「探索 / 市场」页面,确认 MCP 插件列表能正常加载;再按 tokenUsage 排序,确认不再出现 Zod 校验错误与 HTTP 500/400 响应。同时检查 Docker 日志,确认不再出现 Missing bearer tokenUnhandled TRPCError 相关堆栈。

参考来源

lobehub/lobe-chat #18443

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 18932

发表回复

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