Claude Code Custom Model Proxy
/install claude-code-custom-model-proxy
Claude Code Custom Model Proxy
This skill helps configure Claude Code to work with custom model providers that use OpenAI API format (like MiniMax) by setting up a proxy server that converts between Anthropic Messages API and OpenAI Chat Completions API.
When to Use This Skill
- User wants to use Claude Code with a custom model provider (not Anthropic)
- User's model provider uses OpenAI Chat Completions API format
- User sees errors like "There's an issue with the selected model" in Claude Code
- User needs to convert between Anthropic API format and OpenAI API format
Overview
Claude Code uses Anthropic Messages API format (/v1/messages), but many custom model providers (like MiniMax) use OpenAI Chat Completions API format (/v1/chat/completions). This skill provides a Python proxy server that:
- Listens on
http://127.0.0.1:4002 - Accepts Anthropic API format requests from Claude Code
- Converts to OpenAI API format
- Forwards to the upstream provider
- Converts responses back to Anthropic SSE format
- Handles model validation, URL query strings, and UTF-8 encoding
Quick Start
1. Configure Claude Code
Create or edit ~/.claude/settings.json:
{
"env": {
"ANTHROPIC_BASE_URL": "http://127.0.0.1:4002",
"ANTHROPIC_API_KEY": "fake-key-not-needed"
}
}
Or use environment variables:
export ANTHROPIC_BASE_URL="http://127.0.0.1:4002"
export ANTHROPIC_API_KEY="fake-key"
2. Start the Proxy Server
python3 ~/.workbuddy/skills/claude-code-custom-model-proxy/scripts/claude_code_proxy.py
Or run in background:
nohup python3 ~/.workbuddy/skills/claude-code-custom-model-proxy/scripts/claude_code_proxy.py > /tmp/claude_proxy.log 2>&1 &
3. Start Claude Code
claude --model sonnet
Proxy Server Configuration
Edit scripts/claude_code_proxy.py to configure:
UPSTREAM_HOST: Your provider's API host (e.g., "api.53hk.cn")UPSTREAM_PATH: API path (e.g., "/v1/chat/completions")API_KEY: Your provider's API keyLISTEN_PORT: Proxy listen port (default: 4002)- Forced model name (line 44): Change
"MiniMax-M2.7-highspeed"to your model
Common Issues and Solutions
Issue 1: "There's an issue with the selected model"
Cause: Claude Code validates model names locally before connecting to the API.
Solution: The proxy's GET /v1/models endpoint must return the model name Claude Code expects.
For --model sonnet, Claude Code expects claude-sonnet-4-6 in the models list.
The proxy already includes common model names in its response. Add more if needed:
models = {
"data": [
{"type": "model", "id": "claude-sonnet-4-6", "display_name": "Claude Sonnet 4.6"},
{"type": "model", "id": "claude-opus-4-5", "display_name": "Claude Opus 4.5"},
# Add more models as needed
]
}
Issue 2: 404 errors in proxy logs
Cause: Claude Code sends requests with query strings (e.g., POST /v1/messages?beta=true), but the proxy only checks self.path == "/v1/messages".
Solution: The proxy now uses urlparse() to extract the path without query string:
from urllib.parse import urlparse
parsed_path = urlparse(self.path)
path = parsed_path.path # This removes ?beta=true
Issue 3: Chinese characters appear as garbled text (乱码)
Cause: Incorrect handling of UTF-8 encoding in SSE streaming.
Solution: Use byte buffer instead of string buffer:
buffer = b"" # Byte buffer
for chunk in r.iter_content(chunk_size=None, decode_unicode=False):
if chunk:
buffer += chunk
while b"\
" in buffer:
line_bytes, buffer = buffer.split(b"\
", 1)
line = line_bytes.strip().decode("utf-8", errors="replace")
Issue 4: Connection refused
Cause: Proxy server is not running.
Solution: Start the proxy server before starting Claude Code. Check with:
lsof -i :4002
API Format Conversion
Anthropic Messages API (Claude Code) → OpenAI Chat Completions (Provider)
Request conversion (anthropic_to_openai()):
messagesarray: Extract text fromcontentblocksmax_tokens→max_tokenstemperature→temperaturestream: true(always enabled)
Response conversion (openai_to_anthropic()):
- OpenAI SSE chunks → Anthropic SSE events:
message_startcontent_block_startcontent_block_deltacontent_block_stopmessage_deltamessage_stop
Troubleshooting
Check proxy logs
tail -f /tmp/claude_proxy.log
Test proxy endpoints
# Test models endpoint
curl -s http://127.0.0.1:4002/v1/models | python3 -m json.tool
# Test messages endpoint
curl -X POST http://127.0.0.1:4002/v1/messages \
-H "Content-Type: application/json" \
-d '{"model":"claude-sonnet-4-6","messages":[{"role":"user","content":"Hello"}],"max_tokens":100}'
Check Claude Code debug logs
ls -lt ~/.claude/debug/*.txt | head -1
tail -50 ~/.claude/debug/\x3Clatest>.txt
File Structure
~/.workbuddy/skills/claude-code-custom-model-proxy/
├── SKILL.md # This file
└── scripts/
└── claude_code_proxy.py # Proxy server
Advanced Configuration
Change forced model
In claude_code_proxy.py, line 44:
"model": "MiniMax-M2.7-highspeed", # Change this to your model
Change listen port
In claude_code_proxy.py:
LISTEN_PORT = 4002 # Change to your preferred port
Then update ANTHROPIC_BASE_URL accordingly.
Add retry logic for 429 errors
The proxy already includes retry logic (call_upstream_with_retry()). Configure:
MAX_RETRIES: Maximum retry attempts (default: 3)BASE_WAIT_SECONDS: Base wait time between retries (default: 10)
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install claude-code-custom-model-proxy - 安装完成后,直接呼叫该 Skill 的名称或使用
/claude-code-custom-model-proxy触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
Claude Code Custom Model Proxy 是什么?
Configure Claude Code to work with custom model providers (like MiniMax, OpenAI-compatible APIs). This skill should be used when users want to: use Claude Co... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 79 次。
如何安装 Claude Code Custom Model Proxy?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install claude-code-custom-model-proxy」即可一键安装,无需额外配置。
Claude Code Custom Model Proxy 是免费的吗?
是的,Claude Code Custom Model Proxy 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
Claude Code Custom Model Proxy 支持哪些平台?
Claude Code Custom Model Proxy 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 Claude Code Custom Model Proxy?
由 mark-HeartFlow(@mark-heartflow)开发并维护,当前版本 v1.0.0。