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需求
- 包子 v1.0+
设置
# Clone and install
git clone
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 # Delete a user by ID运作原理
- 用户添加 `
/mcp` 作为Claude中的远程MCP服务器。
- Claude启动OAuth 2.1(授权码+PKCE):
- 通过注册客户端 /oauth/register - 打开授权页面,用户在其中输入Rohlik凭据 - 通过以下方式将身份验证码交换为Bearer令牌 /oauth/token
- Claude向发送MCP请求
/mcp使用Bearer代币。 - 代理解密存储的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 formAPI端点
| 方法 | 路径 | 身份验证 | 描述 |
|---|---|---|---|
| 得到 | / | -- | 登录页面 |
| 得到 | /.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
许可证
麻省理工学院
