Go https://build.nvidia.com/explore/discover, register an account, and generate an API key. NVIDIA provides several models, like moonshotai/kimi-k2.5、z-ai/glm4.7、z-ai/glm5 and minimaxai/minimax-m2.1 Then, configure the config.json file and run the program, ensuring it listens on port 3001.
Expose POST /v1/messages (Anthropic/Claude style), convert to OpenAI Chat Completions, and proxy to NVIDIA (configured via config.json).
Edit config.json:
nvidia_urldefaulthttps://integrate.api.nvidia.com/v1/chat/completionsnvidia_keyrequired: used for upstream auth, sent asAuthorization: Bearer ...
Do not commit your real nvidia_key.
CONFIG_PATHdefaultconfig.json(relative togo/)PROVIDER_API_KEYoptional: overridesnvidia_keyfrom configUPSTREAM_URLoptional: overridesnvidia_urlfrom configSERVER_API_KEYoptional: enable inbound auth; acceptsAuthorization: Bearer ...orx-api-key: ...ADDRdefault:3001UPSTREAM_TIMEOUT_SECONDSdefault300LOG_BODY_MAX_CHARSdefault4096(0disables body logging)LOG_STREAM_TEXT_PREVIEW_CHARSdefault256(0disables stream preview logging)
go run .use zai/glm5 model
export ANTHROPIC_BASE_URL=http://localhost:3001
export ANTHROPIC_AUTH_TOKEN=nvapi-api-key
export ANTHROPIC_DEFAULT_HAIKU_MODEL=z-ai/glm5
export ANTHROPIC_DEFAULT_SONNET_MODEL=z-ai/glm5
export ANTHROPIC_DEFAULT_OPUS_MODEL=z-ai/glm5
claudeuse moonshotai/kimi-k2.5 model
export ANTHROPIC_BASE_URL=http://localhost:3001
export ANTHROPIC_AUTH_TOKEN=nvapi-api-key
export ANTHROPIC_DEFAULT_HAIKU_MODEL=moonshotai/kimi-k2.5
export ANTHROPIC_DEFAULT_SONNET_MODEL=moonshotai/kimi-k2.5
export ANTHROPIC_DEFAULT_OPUS_MODEL=moonshotai/kimi-k2.5
use zai/glm4.7 model
export ANTHROPIC_BASE_URL=http://localhost:3001
export ANTHROPIC_AUTH_TOKEN=nvapi-api-key
export ANTHROPIC_DEFAULT_HAIKU_MODEL=z-ai/glm4.7
export ANTHROPIC_DEFAULT_SONNET_MODEL=z-ai/glm4.7
export ANTHROPIC_DEFAULT_OPUS_MODEL=z-ai/glm4.7
claudeuse zai/glm4.7 model
export ANTHROPIC_BASE_URL=http://localhost:3001
export ANTHROPIC_AUTH_TOKEN=nvapi-api-key
export ANTHROPIC_DEFAULT_HAIKU_MODEL=minimaxai/minimax-m2.1
export ANTHROPIC_DEFAULT_SONNET_MODEL=minimaxai/minimax-m2.1
export ANTHROPIC_DEFAULT_OPUS_MODEL=minimaxai/minimax-m2.1
claude- Inbound auth:
- If
SERVER_API_KEYis set, you must sendAuthorization: Bearer <SERVER_API_KEY>(orx-api-key: <SERVER_API_KEY>).
- If
- Upstream auth:
- Always sends
Authorization: Bearer <nvidia_key>to NVIDIA.
- Always sends
Example (non-stream):
curl -sS http://127.0.0.1:3001/v1/messages \
-H 'Content-Type: application/json' \
-d '{
"model":"z-ai/glm4.7",
"max_tokens":256,
"messages":[{"role":"user","content":"hello"}]
}'Example (stream):
curl -N http://127.0.0.1:3001/v1/messages \
-H 'Content-Type: application/json' \
-d '{
"model":"z-ai/glm4.7",
"max_tokens":256,
"stream":true,
"messages":[{"role":"user","content":"hello"}]
}'This project uses only Go stdlib (no external deps). If your environment blocks the default Go build cache path, set:
export GOCACHE=/tmp/go-build-cache
export GOMODCACHE=/tmp/gomodcacheLinux (amd64):
mkdir -p dist
GOOS=linux GOARCH=amd64 go build -trimpath -ldflags "-s -w" -o dist/claude-nvidia-proxy_linux_amd64 .Windows (amd64):
mkdir -p dist
GOOS=windows GOARCH=amd64 go build -trimpath -ldflags "-s -w" -o dist/claude-nvidia-proxy_windows_amd64.exe .- Inbound auth:
- If
SERVER_API_KEYis set, you must sendAuthorization: Bearer <SERVER_API_KEY>(orx-api-key: <SERVER_API_KEY>).
- If
- Upstream auth:
- Always sends
Authorization: Bearer <nvidia_key>to NVIDIA.
- Always sends
Example (non-stream):
curl -sS http://127.0.0.1:3001/v1/messages \
-H 'Content-Type: application/json' \
-d '{
"model":"z-ai/glm4.7",
"max_tokens":256,
"messages":[{"role":"user","content":"hello"}]
}'Example (stream):
curl -N http://127.0.0.1:3001/v1/messages \
-H 'Content-Type: application/json' \
-d '{
"model":"z-ai/glm4.7",
"max_tokens":256,
"stream":true,
"messages":[{"role":"user","content":"hello"}]
}'- Streaming conversion supports
delta.contenttext anddelta.tool_callstool-use blocks; other Anthropic blocks are not fully implemented. - Logs show forwarded request bodies; keep
LOG_BODY_MAX_CHARSsmall and avoid secrets in prompts.