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目录(铁路来源) |
客户入职流程
- 客户来访
/register,填写公司名称、电子邮件、用例
- 立即创建OAuth客户端——无需管理员批准
- 通过重新发送发送的凭据电子邮件:客户端ID、客户端密码、网关URL、Claude.ai/Claude Desktop/Cursor/ChatGPT的设置说明
- 客户端通过一次性门户链接设置密码
- 客户登陆
/portal/mcps 配置他们的工具箱
- 客户通过以下方式添加积分
/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服务器 |