Skip to main content

环境变量

MCPHub 使用环境变量进行配置。本指南涵盖了所有可用的变量及其用法。

核心应用设置

服务器配置

认证与安全

JWT 配置

Better Auth(可选:GitHub / Google / 本地 OIDC 登录)

Better Auth 会在 src/betterAuth.ts 中于启动时初始化一次,因此无论是改环境变量还是改 systemConfig.auth.betterAuth / systemConfig.install.baseUrl,都需要重启后才会生效。 对于非敏感的 Better Auth 配置,MCPHub 现在按以下优先级解析:
  1. BETTER_AUTH_* 环境变量
  2. systemConfig.auth.betterAuth(来自 mcp_settings.json 或数据库系统配置)
  3. 内置默认值
Provider 的客户端凭据仍然只支持通过环境变量提供。 MCPHub 里的 Better Auth 目前依赖 PostgreSQL 会话存储,因此需要配置 DB_URL;纯文件模式不支持 Better Auth 登录。 非敏感的 Better Auth 配置仍然可以放在 systemConfig.auth.betterAuth 中,但现在推荐优先使用 BETTER_AUTH_* 环境变量。一个纯环境变量驱动的本地 OIDC 配置示例如下:

转发认证

转发认证信任上游网关签发给用户的 JWT,并使用身份提供方的 JWKS 进行验证。行为说明参见认证 → 转发认证。取值优先级:FORWARD_AUTH_* 环境变量,其次为 systemConfig.auth.forwardAuth,最后为内置默认值。配置在每次请求时读取,无需重启。

智能路由与嵌入

智能路由使用 PostgreSQL + pgvector 和嵌入服务,对上游工具执行向量搜索。启用智能路由至少需要配置 DB_URL、OpenAI 兼容嵌入服务和开关变量。

OpenAI 或兼容服务

Azure OpenAI

环境变量优先于面板配置。 上表中的每个变量都会覆盖 Dashboard 中保存的同名字段。解析顺序为 环境变量 → 面板配置 → 内置默认值。因此 .env 里遗留的旧值会静默覆盖你刚在面板里填入的密钥:嵌入请求会以鉴权失败告终,而界面上仍然显示着新密钥(issue #642)。面板现在会提示这一点:受影响字段下方会显示警告,并指出实际生效的环境变量名。若要让面板配置生效,请从环境中移除该变量并重启。「智能路由 → 启用」与「数据库 URL」同样遵循该顺序,但面板会直接反映环境变量的结果,而不是显示警告:开关会跟随环境变量,URL 字段会显示 ${DB_URL} 占位符。

配置示例

开发环境

生产环境

Docker 环境

环境变量加载

MCPHub 启动时只读取工作目录下的 .env 一个文件,不会读取 .env.local 或 .env.{NODE_ENV}(例如 .env.production)。 进程环境中已经存在的变量(shell、Docker 的 -e / env_file、Kubernetes 清单等)优先,.env 不会覆盖它们。 .env 中的值按原样使用,其中的 ${VAR} 引用不会被展开。mcp_settings.json 支持 ${VAR} 展开,参见 MCP 设置。

安全最佳实践

  1. 永远不要将密钥提交到版本控制
  2. 为生产环境使用强大、独特的密钥
  3. 定期轮换密钥
  4. 使用特定于环境的文件
  5. 在启动时验证所有环境变量
  6. 为容器部署使用 Docker 密钥

自定义智能路由地址

例如配置 PORT=6001、BASE_PATH=/mcp_manage 和 SMART_ROUTING_PATH=my_smart 后,Streamable HTTP 连接地址为 http://localhost:6001/mcp_manage/mcp/my_smart。追加 /<group> 可限定到分组;在 /mcp 前加 /<user> 可使用用户范围路由。旧版客户端使用的 /sse 同样支持该别名。 配置的路径段将保留给智能路由。启动时若存在同名服务器、分组或分组 ID,将明确报错;后续配置写入也拒绝新增冲突。请先修改路径段或重命名冲突目标。修改路径段后需要重启,并更新使用旧自定义地址的客户端;$smart 始终保留兼容,CLI 也继续使用该入口。此配置不改变鉴权和权限范围。