OAuth 支持
核心亮点
- 覆盖上游 MCP 服务器的 OAuth 2.0 授权码(PKCE)全流程。
- 支持从
WWW-Authenticate响应和 RFC 8414 元数据自动发现。 - 实现动态客户端注册(RFC 7591)以及资源指示(RFC 8707)。
- 会将客户端凭据与令牌持久化到
mcp_settings.json,重启后直接复用。
MCPHub 何时启用 OAuth
- MCPHub 调用需要授权的 MCP 服务器并收到
401 Unauthorized。 - 响应通过
WWW-Authenticateheader 暴露受保护资源的元数据(authorization_server或as_uri)。 - MCPHub 自动发现授权服务器、按需注册客户端,并引导用户完成一次授权。
- 回调处理完成后,MCPHub 使用新令牌重新连接并继续请求。
MCPHub 会在服务器详情视图和后端日志中记录发现、注册、授权链接、换取令牌等关键步骤。
按服务器类型快速上手
支持动态注册的服务器
部分服务器会公开完整的 OAuth 元数据,并允许客户端动态注册。例如 Vercel 与 Linear 的 MCP 服务器只需配置 SSE 地址即可:- MCPHub 会自动发现授权服务器、完成注册,并处理整个 PKCE 流程。
- 所有凭据与令牌会写入
mcp_settings.json,无须在控制台额外配置。
需要手动配置客户端的服务器
另有一些服务端并不支持动态注册。GitHub 的 MCP 端点(https://api.githubcopilot.com/mcp/)就是典型例子,接入步骤如下:
- 在服务提供商控制台创建 OAuth 应用(GitHub 路径为 Settings → Developer settings → OAuth Apps)。
- 将回调/重定向地址设置为
http://localhost:3000/oauth/callback(或你的部署域名)。同时请确保 设置 → 安装 → 基础地址 与该域名一致,用于 MCP 请求与 OAuth 回调。 - 复制生成的 Client ID 与 Client Secret。
- 通过 MCPHub 控制台或直接编辑
mcp_settings.json写入如下配置。
- MCPHub 会跳过动态注册,直接使用你提供的凭据完成授权流程。
- 凭据轮换时需要同步更新控制台或配置文件。
- 将
scopes替换为服务端要求的具体 Scope。
配置方式
大多数场景可依赖自动检测,也可以在mcp_settings.json 中显式声明 OAuth 配置。只填写确实需要的字段。
自动检测(最小配置)
- MCPHub 会根据挑战头自动发现授权服务器,并引导用户完成授权。
- 令牌(包含刷新令牌)会写入磁盘,重启后自动复用。
静态客户端凭据(自带 Client)
- 适用于需要手动注册客户端的授权服务器。
redirectUri默认是http://localhost:3000/oauth/callback,如在自定义域部署请同步更新。- 同时确保 设置 → 安装 → 基础地址 与部署域名一致,以保证默认回调地址正确。
动态客户端注册(RFC 7591)
- MCPHub 会通过
issuer发现端点、完成注册,并持久化下发的client_id/client_secret。 - 只有当注册端点受保护时才需要提供
initialAccessToken。
授权流程
- 初始化:启动时遍历服务器配置,发现元数据并在启用
dynamicRegistration时注册客户端。 - 用户授权:建立连接时自动打开系统浏览器,携带 PKCE 参数访问授权页。
- 回调处理:内置路径
/oauth/callback校验state、完成换取令牌,并通过 MCP SDK 保存结果。 - 令牌生命周期:访问令牌与刷新令牌会缓存于内存,自动刷新,并写回
mcp_settings.json。
提示与排障
- 确保授权过程中使用的回调地址与已注册的
redirect_uris完全一致。 - 若部署在 HTTPS 域名下,请对外暴露
/oauth/callback或通过反向代理转发。 - 如无法完成自动发现,可显式提供
authorizationEndpoint与tokenEndpoint。 - 授权服务器吊销令牌后,可手动清理
mcp_settings.json中的旧令牌,MCPHub 会在下一次请求时重新触发授权。