
Security News
RubyGems Adds Cooldown Feature to Bundler for Newly Published Gems
RubyGems and Bundler 4.0.13 introduced an opt-in cooldown feature that delays newly published gems during dependency resolution.
claude-api-hub
Advanced tools
Multi-provider API gateway for Claude Code — route requests to any LLM provider with zero config switching
一个本地 API 网关,通过模型别名(haiku / sonnet / opus)让 Claude Code 将请求路由到任意 LLM 供应商。通过 Web 仪表盘管理一切 —— 无需配置文件。
查看 CHANGELOG.md 了解最新更新。
http 模块构建,安装体积约 50KB# 1. 安装(或直接用 npx 运行)
npm install -g claude-api-hub
# 2. 启动网关
claude-api-hub
# ✓ api-hub listening on http://0.0.0.0:9800
# 3. 配置 Claude Code
claude config set ANTHROPIC_BASE_URL http://127.0.0.1:9800
# 备选:手动写入 settings.json
# echo '{"env":{"ANTHROPIC_BASE_URL":"http://127.0.0.1:9800"}}' > ~/.claude/settings.json
# 4. 验证安装
curl http://localhost:9800/health
# 或在浏览器打开 http://localhost:9800 查看仪表盘
# 5. 完成!Claude Code 现在通过网关路由请求
安全提示: 默认绑定
127.0.0.1:9800(仅本地访问)。生产环境或局域网使用请设置password或--host 0.0.0.0。
┌─────────────────────────────────────────────────────────────────────┐
│ Claude API Hub │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │
│ │ Dashboard │ │ API Router │ │ Protocol Bridge │ │
│ │ (Web UI) │ │ │ │ │ │
│ │ :9800 │ │ /v1/messages│ │ Anthropic ↔ OpenAI │ │
│ │ │ │ │ │ │ │
│ └──────────────┘ └──────┬───────┘ └──────────┬───────────┘ │
│ │ │ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────────┐ ┌────────────┐ │
│ │ Alias Resolver │ │ Provider │ │
│ │ haiku → model │ │ Pool │ │
│ │ sonnet → model │ │ │ │
│ │ opus → model │ │ Key Health │ │
│ └─────────────────┘ │ Fallbacks │ │
│ └──────┬─────┘ │
└────────────────────────────────────────────────────────┼────────────┘
│
┌─────────────────────────────────────────────────────┼──────────┐
│ Providers │ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────────┐ │
│ │ Kimi │ │ GLM │ │ MiniMax │ │ Kiro │ │
│ │ OpenAI │ │ OpenAI │ │ OpenAI │ │ OAuth │ │
│ │ Compatible│ │ Compatible│ │ Compatible│ │ (AWS Q) │ │
│ └──────────┘ └──────────┘ └──────────┘ └────────────┘ │
│ │ │ │ │ │
└─────────┴───────────┴───────────┴──────────────┴────────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌─────────────────────────────────────────────┐
│ External LLM Providers │
│ │
│ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ │
│ │ Moonshot│ │ Zhipu │ │ MiniMax│ │ AWS │ │
│ │ AI │ │ AI │ │ AI │ │ Q │ │
│ └───────┘ └───────┘ └───────┘ └───────┘ │
└─────────────────────────────────────────────┘
访问 http://localhost:9800 —— 一个受 Traefik 启发的仪表盘,带侧边栏导航,使用 Preact 组件构建:
左侧面板:
右侧面板:
claudeModel → resolvedModel → provider 及耗时。点击展开详情(请求 ID、目标 URL、错误信息、日志文件路径)配置页面(双模式):
仪表盘总览 — 侧边栏导航、供应商卡片、别名映射与实时请求日志
供应商管理 — 健康状态、模型列表、密钥池状态与操作按钮
别名映射 — 将 haiku/sonnet/opus 映射到任意供应商模型,按层级配置超时
请求日志 — 实时 SSE 更新,支持筛选与展开详情
配置编辑器 — 双模式:结构化表单 UI 与原始 JSON 编辑
运行
npx claude-api-hub并访问 http://localhost:9800 探索仪表盘。
| 供应商 | 协议 | 状态 |
|---|---|---|
| Claude (Anthropic) | Anthropic 透传 | 已验证 |
| Kiro (AWS Q / CodeWhisperer) | Kiro OAuth → AWS Q API | 已验证 |
| Kimi (Moonshot AI) | Anthropic 透传 | 已验证 |
| MiniMax | Anthropic 透传 | 已验证 |
| GLM (Zhipu AI) | Anthropic 透传 | 已验证 |
| DeepSeek | Anthropic 透传 | 已验证 |
| 任意兼容 OpenAI 的 API | 自动转换(Anthropic ↔ OpenAI) | 支持 |
前提条件: Node.js >= 22。使用 node -v 检查。从 nodejs.org 安装或使用 nvm install 22。
npx claude-api-hub
# ✓ api-hub listening on http://0.0.0.0:9800
# ✓ Open http://localhost:9800 for the web dashboard
⚠️ 安全提示: 默认情况下,网关绑定到
0.0.0.0:9800且无密码。生产环境请在providers.json中设置password并考虑绑定到127.0.0.1。
npm install -g claude-api-hub
claude-api-hub
# ✓ api-hub listening on http://0.0.0.0:9800
# ✓ Open http://localhost:9800 for the web dashboard
git clone https://github.com/LeenixP/claude-api-hub.git
cd claude-api-hub
# 编辑 docker-compose.yml 添加你的 API 密钥
docker compose up -d
打开 http://localhost:9800 访问 Web 仪表盘。
在 ~/.claude/settings.json 中将 Claude Code 指向网关:
{
"env": {
"ANTHROPIC_BASE_URL": "http://127.0.0.1:9800"
}
}
重启 Claude Code,所有请求将通过网关路由。
curl http://localhost:9800/health
# {"status":"ok","timestamp":"..."}
curl -X POST http://localhost:9800/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: your-key" \
-d '{"model":"claude-sonnet-4-6","max_tokens":100,"messages":[{"role":"user","content":"Hello"}]}'
如果 sonnet 被别名为 kimi-k2.6,请求将自动路由到 Kimi 并进行协议转换。
如果你暴露到局域网或公网,建议开启认证。
设置环境变量 ANTHROPIC_AUTH_TOKEN,Claude Code 会自动通过 x-api-key 头发送此 token 进行认证:
# 在 Claude Code 的 settings.json 中设置
{
"env": {
"ANTHROPIC_AUTH_TOKEN": "your-secret-token",
"ANTHROPIC_BASE_URL": "http://127.0.0.1:9800"
}
}
Hub 启动时设置相同的环境变量:
ANTHROPIC_AUTH_TOKEN=your-secret-token claude-api-hub
设置 ADMIN_TOKEN 环境变量:
export ADMIN_TOKEN="your-secret-token"
然后客户端请求时加上 x-hub-token header:
curl -X POST http://localhost:9800/v1/messages \
-H "x-hub-token: your-secret-token" \
-H "Content-Type: application/json" \
-H "x-api-key: sk-ant-xxx" \
-d '{"model":"claude-sonnet-4-6","max_tokens":100,"messages":[{"role":"user","content":"Hello"}]}'
Claude Code 客户端配置(在 settings.json 中):
{
"env": {
"CLAUDE_CODE_EXTRA_HEADERS": "x-hub-token: your-secret-token"
}
}
未配置 ADMIN_TOKEN 时不需鉴权,和以前一样。
将 Claude Code 的三个模型层级映射到任意供应商的模型:
{
"aliases": {
"haiku": "glm-4-flash",
"sonnet": "kimi-k2.6",
"opus": "claude-opus-4-6"
}
}
当请求模型包含 haiku、sonnet 或 opus 时,将被替换为别名目标。日志会显示层级名称(Haiku/Sonnet/Opus)以及解析后的模型,便于调试。
通过 Web 仪表盘(推荐)或配置文件 ~/.claude-api-hub/providers.json:
"deepseek": {
"name": "DeepSeek",
"baseUrl": "https://api.deepseek.com/anthropic",
"apiKey": "${DEEPSEEK_API_KEY}",
"models": ["deepseek-chat", "deepseek-reasoner"],
"defaultModel": "deepseek-chat",
"enabled": true,
"prefix": "deepseek-",
"passthrough": true
}
| 字段 | 说明 |
|---|---|
name | 显示名称 |
baseUrl | API 端点基础 URL |
apiKey | API 密钥(支持 ${ENV_VAR} 语法)。Kiro OAuth 供应商不需要 |
models | 可用模型 ID 列表 |
defaultModel | 该供应商的默认模型 |
prefix | 路由前缀(字符串或数组),如 "kimi-" |
passthrough | true = Anthropic Messages API(直接转发),false = OpenAI Chat Completions API(自动转换) |
enabled | true / false 启用/禁用 |
providerType | "standard"(默认)或 "kiro" 用于 Kiro OAuth 供应商 |
authMode | "apikey"(默认)或 "oauth" 用于基于 OAuth 的认证 |
kiroRegion | Kiro 供应商的 AWS 区域(默认:us-east-1) |
kiroCredsPath | Kiro OAuth 凭证文件路径 |
kiroStartUrl | Builder ID 认证的自定义 AWS SSO 起始 URL |
每个供应商可以使用三种协议之一 —— 在供应商模态表单中选择:
x-api-key 原样转发。用于 Anthropic 官方 API 或兼容代理(如 MiniMax Anthropic 端点)Bearer token 认证。用于 Kimi、GLM、DeepSeek 和任何兼容 OpenAI 的 APIgenerateAssistantResponse 端点调用 Claude 模型。直接从 Web UI 授权Kiro 供应商通过 AWS Q(CodeWhisperer)路由请求,允许你使用 Kiro OAuth 凭证而非 Anthropic API 密钥来使用 Claude 模型。
凭证保存到 ~/.kiro/oauth_creds.json 并在后台自动刷新(可配置间隔,默认 30 分钟)。
或者,直接在配置文件中添加供应商:
"kiro": {
"name": "Kiro",
"baseUrl": "https://q.us-east-1.amazonaws.com",
"apiKey": "",
"models": ["claude-sonnet-4-6", "claude-haiku-4-5"],
"defaultModel": "claude-sonnet-4-6",
"enabled": true,
"providerType": "kiro",
"authMode": "oauth",
"kiroRegion": "us-east-1",
"kiroCredsPath": "~/.kiro/oauth_creds.json"
}
OAuth token 在过期前由后台服务自动刷新。在配置页面或配置文件中配置间隔:
{
"tokenRefreshMinutes": 30
}
| 端点 | 方法 | 说明 |
|---|---|---|
/ | GET | Web 仪表盘 |
/v1/messages | POST | Anthropic Messages API 代理(主端点) |
/v1/models | GET | 列出所有可用模型 |
/health | GET | 网关健康检查 |
/api/events | GET | SSE 实时事件流 |
/api/stats | GET | 速率追踪统计(QPS、RPM、TPS) |
/api/auth/login | POST | 密码登录(返回认证 token) |
/api/config | GET | 当前配置(API 密钥已脱敏) |
/api/config/providers | POST | 添加供应商(热重载路由) |
/api/config/providers/:name | PUT/DELETE | 更新或删除供应商(热重载路由) |
/api/config/import | POST | 导入完整配置(替换并重载) |
/api/config/reload | POST | 从磁盘重载配置 |
/api/tier-timeouts | GET/PUT | 获取或更新按层级超时配置 |
/api/aliases | GET/PUT | 获取或更新别名映射 |
/api/fetch-models | GET | 从供应商 API 获取真实模型列表 |
/api/health/providers | GET | 测试所有供应商的连通性 |
/api/test-provider/:key | POST | 用完整请求流测试供应商(绕过别名) |
/api/oauth/kiro/* | Various | Kiro OAuth 流程端点 |
/api/logs | GET | 请求日志(最近 200 条,轻量) |
/api/logs/clear | POST | 清空日志缓冲区 |
/api/logs/file-status | GET | 文件日志状态和文件数量 |
/api/logs/file-toggle | PUT | 开关文件日志 |
每个供应商通过 apiKey 字段支持多个 API 密钥。用逗号分隔密钥:
"deepseek": {
"apiKey": "${DEEPSEEK_KEY_1},${DEEPSEEK_KEY_2},${DEEPSEEK_KEY_3}",
...
}
网关通过 KeyPool 管理密钥:
密钥健康状态在仪表盘的供应商卡片中可见。
配置供应商之间的自动故障转移,当主供应商不健康时:
{
"fallbackChain": {
"kimi": "deepseek",
"deepseek": "glm"
}
}
当供应商不健康(所有密钥耗尽)时,路由跟随降级链寻找健康的替代方案。循环检测防止无限循环。
prefix 配置路由models 数组双层日志系统:
~/.claude-api-hub/logs/ 中的详细 JSON 文件,包含原始请求体、转换后的请求体、转发头、上游响应。通过仪表盘开关。4096 个文件时自动清理adminToken 时仪表盘显示登录页面。输入管理员密码认证 —— 凭证存储在 localStorage 中,后续请求以 x-admin-token 头发送adminToken 或 ADMIN_TOKEN 环境变量以保护管理 API 端点rateLimitRpm 限制每 IP 每分钟请求数corsOrigins 指定来源crypto.timingSafeEqual 防止定时攻击ANTHROPIC_*、MOONSHOT_*、MINIMAX_*、ZHIPUAI_*、OPENAI_*、DEEPSEEK_* 前缀会被插值查看 SECURITY.md 了解漏洞报告。
症状: Claude Code 无法连接到网关。
解决方案:
curl http://127.0.0.1:9800/health~/.claude/settings.json 配置正确:
{ "env": { "ANTHROPIC_BASE_URL": "http://127.0.0.1:9800" } }
-p 9800:9800症状: 请求返回 401 错误。
解决方案:
/api/health/providers 测试连通性症状: 错误信息指示模型未找到。
解决方案:
/api/aliases/api/health/providers/api/fetch-models症状: 请求挂起或超时。
解决方案:
streamTimeout 或 requestTimeout症状: 可疑的内部请求被阻止。
这是有意为之的安全行为。 网关阻止对以下地址的请求:
如果你需要访问内部资源,确保供应商 baseUrl 使用公共端点。
解决方案:
host: "0.0.0.0"(不是 127.0.0.1)-p 9800:9800docker compose up 以获得正确的网络解决方案:
lsof -i :9800API_HUB_PORT=9801kill <PID>计划的功能和增强(尚未实现):
npm run dev # 开发模式(热重载)
npm run dev:ui # 前端监视模式
npm run build # 编译 TypeScript
npm run build:ui # 生产前端构建
npm test # 运行测试(100+ 测试)
npm run test:coverage # 运行测试并生成覆盖率报告
npm run lint # 运行 ESLint
查看 CONTRIBUTING.md 了解开发设置和 PR 指南。
MIT 许可证 —— 详见 LICENSE。
FAQs
Multi-provider API gateway for Claude Code — route requests to any LLM provider with zero config switching
The npm package claude-api-hub receives a total of 217 weekly downloads. As such, claude-api-hub popularity was classified as not popular.
We found that claude-api-hub demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
RubyGems and Bundler 4.0.13 introduced an opt-in cooldown feature that delays newly published gems during dependency resolution.

Security News
pnpm 11.5 now recognizes npm staged publish approvals in release metadata, preventing those releases from being mistaken for lower-trust package publishes.

Security News
Federal audit finds NIST lacked a plan to clear the NVD backlog, wasted funds on duplicate work, and delayed use of CISA data.