OAuth授权服务器与AI网关

DS-MOZ Connect是一个OAuth 2.0授权服务器和AI网关,为Claude Desktop、Claude.ai和Cursor提供授权码和PKCE流程处理,支持自服务客户端注册和客户端门户,并通过单一网关端点代理多个上游MCP服务器。

  • by dsmoz
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 dsmoz/mcp-oauth-server

使用说明

DS-MOZ连接——MCP OAuth服务器

用于Claude Desktop、Claude.AI和Cursor的OAuth 2.0授权服务器和AI网关。处理完整的授权码+PKC流、自助客户端注册、客户端门户和单个网关端点,每个客户端代理多个上游MCP服务器。

直播: https://mcp.dsmozconsultancy.com


建筑

flowchart TD
    Client["MCP Client\nClaude Desktop · Claude.ai · Cursor"] -->|OAuth PKCE| OAuth["OAuth Server\n/authorize · /token · /revoke"]
    Client -->|Bearer token| Gateway["Gateway\n/gateway/{client_id}"]

    OAuth --> Supabase[("Supabase\noauth_clients\nauth_codes · tokens\nregistrations\nportal_tokens\nusage_logs\nmcp_catalogue")]

    Gateway -->|meta-tools| Meta["Meta-tools\nlist_mcps · browse_mcps\nadd_mcp · remove_mcp\nsearch_tools · list_tools\ncall_tool"]
    Gateway -->|proxy| Upstream1["Upstream MCP 1\nSSE /sse"]
    Gateway -->|proxy| Upstream2["Upstream MCP 2\nStreamable HTTP /mcp"]

    Admin["Admin Panel\n/admin/"] --> Supabase
    Admin -->|catalogue discovery| Railway(("Railway\nGraphQL API"))

    Portal["Client Portal\n/portal/"] --> Supabase
    Portal -->|credits| Credits["Buy Credits\n/portal/credits"]

    Register["Self-service\n/register"] -->|instant account\n+ RFC 7591 DCR| Supabase
    Register -->|credentials email| Resend(("Resend\nAPI"))

    Telegram(("Telegram Bot")) -->|consent webhook| OAuth

端点

OAuth/发现

端点 方法 描述
/.well-known/openid-configuration GET OIDC发现文档
/.well-known/oauth-authorization-server GET OAuth AS元数据(别名)
/.well-known/oauth-protected-resource GET RFC 9728受保护的资源元数据
/authorize GET 启动授权流
/authorize/consent GET 电报审批门/密码回退
/consent/status GET 轮询同意状态(待定/批准/拒绝)
/consent/complete GET 审批后确认页面
/token POST 授权码/刷新令牌交换
/revoke POST 令牌撤销(RFC 7009)
/introspect POST 令牌自检(内部-用于上游MCP)
/register POST RFC 7591动态客户端注册
/telegram/webhook POST 电报机器人回调

自助注册

端点 方法 描述
/register GET 注册表
/register/submit POST 提交-立即创建客户端,发送凭据电子邮件
/register/success GET 确认页面

网关

端点 方法 描述
/gateway/{client_id} GET/POST/DELETE 可流式传输HTTP MCP端点
/gateway/{client_id}/mcp GET/POST/DELETE 别名--相同的处理程序

学者优先REST(v1)

以下所有端点均采用Supabase JWT Authorization: Bearer <jwt> 并解析网关 user_id 通过 current_jwt_user (参见 src/gateway/jwt_auth.py).规格:学者回购 docs/superpowers/specs/2026-06-21-scholar-first-identity-billing-design.md.

端点 方法 描述
/api/v1/wallet/balance GET 信用余额+等值美元
/api/v1/wallet/packages GET 已发布的美元充值包(Stripe Checkout的真实来源)
/api/v1/wallet/debit POST 比尔学者BFF电话通过 compute_cost;幂等论 request_id
/api/v1/wallet/checkout POST 为包裹创建条纹结账会话
/api/v1/tokens/mint POST 制造不透明 scl_* 学者MCP发动机的承载者
/api/v1/tokens GET 列出用户的活动(未撤销)令牌
/api/v1/tokens/{token_id} DELETE 撤销令牌
/webhook/stripe POST 条纹webhook(无JWT;由以下人员签名 STRIPE_WEBHOOK_SECRET)

客户端门户

端点 方法 描述
/portal/login GET/POST 门户登录
/portal/setup-password GET/POST 首次登录密码设置(一次性令牌)
/portal/ GET 概述——使用统计数据、信用余额、网关URL
/portal/mcps GET/POST 工具箱--启用/禁用MCP
/portal/setup GET 设置指南--Claude桌面/光标配置
/portal/credits 获取 购买积分页面
/portal/credits/buy POST 购买计划(虚拟-立即授予积分)

管理面板

端点 方法 描述
/admin/ GET 仪表板--统计网格,最近的客户端
/admin/clients/ GET 客户端列表(带批量删除)
/admin/clients/{id} GET 客户端详细信息——使用情况、信用、门户凭据
/admin/clients/{id}/edit GET/POST 编辑名称和重定向URI
/admin/clients/{id}/rekey POST 旋转客户端密码
/admin/clients/{id}/revoke POST 撤销所有令牌
/admin/clients/{id}/delete POST 硬删除客户端
/admin/clients/{id}/tokens GET 令牌检查器
/admin/clients/{id}/set-portal-credentials POST 设置门户用户名/密码
/admin/clients/{id}/add-credits POST 将信用添加到客户余额
/admin/registrations/ GET 注册请求日志
/admin/registrations/{id} GET 注册详细信息
/admin/catalogue GET MCP目录(铁路来源)

客户入职流程

  1. 客户来访 /register,填写公司名称、电子邮件、用例
  2. 立即创建OAuth客户端——无需管理员批准
  3. 通过重新发送发送的凭据电子邮件:客户端ID、客户端密码、网关URL、Claude.ai/Claude Desktop/Cursor/ChatGPT的设置说明
  4. 客户端通过一次性门户链接设置密码
  5. 客户登陆 /portal/mcps 配置他们的工具箱
  6. 客户通过以下方式添加积分 /portal/credits 启用工具调用

信用体系

  • 每个客户都有一个 credit_balance 上 oauth_clients
  • 目录中的每个MCP都有一个 credit_cost_per_call (默认值0)
  • 元工具(browse_mcps, add_mcp等等)总是免费的
  • call_tool 在代理之前检查余额;对成功的推断
  • 管理员可以通过客户端详细信息页面手动添加积分
  • 客户可以通过门户计划卡“购买”信用额度(入门10克朗/10美元·专业50克朗/40美元·企业200克朗/150美元)

网关元工具

网关在每个连接上将这些工具暴露给LLM:

工具 说明
list_mcps 列出工具箱中当前启用的MCP(每次通话的信用成本)
browse_mcps 浏览所有已发布的MCP enabled 标志+每次通话的信用成本
add_mcp 将MCP添加到工具箱(保留到DB)
remove_mcp 从工具箱中删除MCP
search_tools 在所有启用的MCP的工具中搜索关键字
list_mcp_tools 列出特定已启用MCP的工具(替换 list_tools)
invoke_mcp_tool 将工具调用代理给上游MCP——信用门控(替换 call_tool)

网关还公开了服务器级别 instructions 字符串发送到客户端 上 initialize,穿过 browse → add → search → invoke 生命周期和信用语义。

弃用的名称: list_tools 和 call_tool 保持接受一个 以别名发布(记录到stderr)。客户端应迁移到 list_mcp_tools 和 invoke_mcp_tool.


环境变量

变量 必填 描述
SUPABASE_URL 是 请提供项目URL
SUPABASE_SERVICE_KEY 是 支持服务角色键
OAUTH_ISSUER_URL 是 公共基础URL(https://mcp.dsmozconsultancy.com)
ADMIN_USERNAME 是 HTTP基本身份验证用户名 /admin/
ADMIN_PASSWORD 是 HTTP基本身份验证密码 /admin/
SECRET_KEY 是 门户会话Cookie的签名密钥
INTROSPECT_SECRET 是 共享密钥 /introspect 端点
TELEGRAM_BOT_TOKEN 推荐 启用Telegram同意批准门
TELEGRAM_OWNER_CHAT_ID 推荐 所有者的Telegram聊天ID
RESEND_API_KEY 推荐 重新发送API密钥-启用凭据电子邮件
RESEND_SENDER_EMAIL 推荐 发件人电子邮件地址(必须在经过验证的域上)
RESEND_SENDER_NAME 可选 发件人显示名称(默认:DSMOZ Connect)
RAILWAY_API_TOKEN 推荐 铁路API令牌-启用目录自动查找
RAILWAY_PROJECT_ID 推荐 铁路项目UUID

本地开发

uv venv && source .venv/bin/activate
uv pip install -e .
cp .env.example .env   # fill in values
python main.py

部署

通过铁路部署 Dockerfile.推到 main → 自动部署。


版本历史

版本 日期 摘要
1.10.0 2026-04-22 网关元工具代理就绪:服务器级指令、丰富的工具描述和示例, outputSchema 在所有工具上, credit_cost_per_call 出现在列表中,重命名 list_tools→list_mcp_tools 和 call_tool→invoke_mcp_tool (保留一个版本的旧名称)
1.9.0 2026-04-04 RFC 7591动态客户端注册、ASGI网关中间件、Claude Desktop连接器支持
1.8.0 2026-04-04 即时注册、信用系统、购买信用门户页面、工具箱重命名
1.7.0 2026-04-04 具有铁路自动发现功能的管理MCP目录
1.6.0 2026-04-04 DS-MOZ连接网关——每个客户端有多个MCP代理
1.5.0 2026-04-04 客户端门户(登录、概述、MCP选择、设置指南)
1.4.0 2026-04-04 RFC 7591动态注册,RFC 9728,游标支持
1.3.0 2026-04-04 视觉识别——DS-MOZ品牌,荧光粉图标
1.2.0 2026-04-04 管理增强、自助注册、门户凭据
1.1.0 2026-04-04 电报审批门
1.0.0 2026-01-17 核心OAuth 2.0服务器