代理服务器

Rohlik MCP Proxy是一个代理服务器,连接Claude(iOS、Android、Web、Desktop)到Rohlik的MCP服务器,通过OAuth 2.1认证和加密存储Rohlik凭证,实现安全的请求转发。

  • by VelkyVenik
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 VelkyVenik/rohlik-oauth-proxy

使用说明

Rohlik MCP代理

将Claude(iOS、Android、Web、桌面)连接到的代理服务器 Rohlik的MCP服务器.

Rohlik的MCP服务器需要定制 rhl-email/rhl-pass Claude无法直接设置的标题。这个代理弥合了这一差距——用户通过OAuth 2.1登录一次,剩下的由Claude处理。

Claude  →  POST /mcp (Bearer token)  →  Proxy  →  POST mcp.rohlik.cz/mcp (rhl-email/rhl-pass)  →  Rohlik

需求

设置

# Clone and install
git clone <repo-url>
cd rohlik-mcp-proxy
bun install

# Configure
cp .env.example .env
# Edit .env with your values

环境变量

变量 必填 描述
PROXY_SECRET 是 存储凭据的加密密钥(最少32个字符)
PORT 无 服务器端口(默认值: 3000)
PUBLIC_URL 否 面向公众的URL(默认值: http://localhost:3000)
ROHLIK_MCP_URL 否 Rohlik MCP端点(默认值: https://mcp.rohlik.cz/mcp)
OPERATOR_NAME 否 在登录页面上显示为服务器操作员
OPERATOR_EMAIL 否 登录页面上显示的联系人电子邮件

跑步

# Production
bun run start

# Development (auto-reload)
bun run dev

# Manage accounts
bun run cli list              # List all registered users
bun run cli delete <id>       # Delete a user by ID

运作原理

  1. 用户添加 <PUBLIC_URL>/mcp 作为Claude中的远程MCP服务器。
  2. Claude启动OAuth 2.1(授权码+PKCE):
    • 通过注册客户端 /oauth/register
    • 打开授权页面,用户在其中输入Rohlik凭据
    • 通过以下方式将身份验证码交换为Bearer令牌 /oauth/token
  3. Claude向发送MCP请求 /mcp 使用Bearer代币。
  4. 代理解密存储的Rohlik凭据,并将请求与所需的标头一起转发到Rohlik的MCP服务器。

安全

  • 静态加密凭据 --AES-256-GCM使用 PROXY_SECRET
  • 哈希令牌 --SHA-256,从不以明文形式存储
  • OAuth 2.1与PKCE --S256代码挑战,一次性身份验证代码(10分钟到期)
  • CSRF保护 --授权表单上的一次性令牌
  • 速率限制 --OAuth端点上的每个IP(20/min),MCP上的每个令牌(60/min),未经身份验证的请求上的每IP(30/min)
  • 请求大小限制 --最大1MB机身
  • 安全标头 --CSP、HSTS、X帧选项、X内容类型选项
  • SQLite数据库 --文件权限仅限于所有者(600)

警告: Rohlik凭据(电子邮件+密码)加密存储在服务器上。它们必须被存储,因为Rohlik的MCP服务器在每次请求时都需要它们。仅在您控制和信任的基础架构上部署此功能。

项目结构

src/
├── index.ts          # HTTP server, routing
├── oauth.ts          # OAuth 2.1 flow (metadata, registration, authorize, token)
├── proxy.ts          # MCP message forwarding to Rohlik
├── auth.ts           # Bearer token resolution
├── store.ts          # SQLite DB, encryption, user/client/code storage
├── security.ts       # Rate limiting, input validation, security headers
├── log.ts            # Structured console logging
├── cli.ts            # CLI tool for account management
├── landing.html      # Public landing page
└── authorize.html    # OAuth sign-in form

API端点

方法 路径 身份验证 描述
得到 / -- 登录页面
得到 /.well-known/oauth-authorization-server -- OAuth元数据
职位 /oauth/register -- 动态客户端注册
得到 /oauth/authorize -- 授权页面(登录表单)
职位 /oauth/authorize -- 提交凭据,获取身份验证码
职位 /oauth/token 客户端 访问令牌的Exchange身份验证码
职位 /mcp 承载者 将MCP请求转发给Rohlik
得到 /mcp 熊 Rohlik的SSE流
删除 /mcp 承载者 关闭MCP会话

作者

瓦茨拉夫 · 斯莱斯 vaclav@slajs.eu

许可证

麻省理工学院