claude-max-api-proxy
v1.0.0
Published
Use your Claude Max subscription with any OpenAI-compatible client. Wraps Claude Code CLI as an OpenAI-compatible API server.
Maintainers
Readme
Claude Code CLI Provider
Use your Claude Max subscription ($200/month) with any OpenAI-compatible client — no separate API costs!
This provider wraps the Claude Code CLI as a subprocess and exposes an OpenAI-compatible HTTP API, allowing tools like Clawdbot, Continue.dev, or any OpenAI-compatible client to use your Claude Max subscription instead of paying per-API-call.
Why This Exists
| Approach | Cost | Limitation | |----------|------|------------| | Claude API | ~$15/M input, ~$75/M output tokens | Pay per use | | Claude Max | $200/month flat | OAuth blocked for third-party API use | | This Provider | $0 extra (uses Max subscription) | Routes through CLI |
Anthropic blocks OAuth tokens from being used directly with third-party API clients. However, the Claude Code CLI can use OAuth tokens. This provider bridges that gap by wrapping the CLI and exposing a standard API.
How It Works
Your App (Clawdbot, etc.)
↓
HTTP Request (OpenAI format)
↓
Claude Code CLI Provider (this project)
↓
Claude Code CLI (subprocess)
↓
OAuth Token (from Max subscription)
↓
Anthropic API
↓
Response → OpenAI format → Your AppFeatures
- OpenAI-compatible API — Works with any client that supports OpenAI's API format
- Streaming support — Real-time token streaming via Server-Sent Events
- Multiple models — Claude Opus, Sonnet, and Haiku
- Session management — Maintains conversation context
- Auto-start service — Optional LaunchAgent for macOS
- Zero configuration — Uses existing Claude CLI authentication
- Secure by design — Uses spawn() to prevent shell injection
Prerequisites
- Claude Max subscription ($200/month) — Subscribe here
- Claude Code CLI installed and authenticated:
npm install -g @anthropic-ai/claude-code claude auth login
Installation
# Clone the repository
git clone https://github.com/anthropics/claude-code-cli-provider.git
cd claude-code-cli-provider
# Install dependencies
npm install
# Build
npm run buildUsage
Start the server
node dist/server/standalone.jsThe server runs at http://localhost:3456 by default.
Test it
# Health check
curl http://localhost:3456/health
# List models
curl http://localhost:3456/v1/models
# Chat completion (non-streaming)
curl -X POST http://localhost:3456/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "claude-opus-4",
"messages": [{"role": "user", "content": "Hello!"}]
}'
# Chat completion (streaming)
curl -N -X POST http://localhost:3456/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "claude-opus-4",
"messages": [{"role": "user", "content": "Hello!"}],
"stream": true
}'API Endpoints
| Endpoint | Method | Description |
|----------|--------|-------------|
| /health | GET | Health check |
| /v1/models | GET | List available models |
| /v1/chat/completions | POST | Chat completions (streaming & non-streaming) |
Available Models
| Model ID | Maps To |
|----------|---------|
| claude-opus-4 | Claude Opus 4.5 |
| claude-sonnet-4 | Claude Sonnet 4 |
| claude-haiku-4 | Claude Haiku 4 |
Configuration with Popular Tools
Clawdbot
Clawdbot has built-in support for Claude CLI OAuth! Check your config:
clawdbot models statusIf you see anthropic:claude-cli=OAuth, you're already using your Max subscription.
Continue.dev
Add to your Continue config:
{
"models": [{
"title": "Claude (Max)",
"provider": "openai",
"model": "claude-opus-4",
"apiBase": "http://localhost:3456/v1",
"apiKey": "not-needed"
}]
}Generic OpenAI Client (Python)
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:3456/v1",
api_key="not-needed" # Any value works
)
response = client.chat.completions.create(
model="claude-opus-4",
messages=[{"role": "user", "content": "Hello!"}]
)Auto-Start on macOS
Create a LaunchAgent to start the provider automatically on login. See docs/macos-setup.md for detailed instructions.
Architecture
src/
├── types/
│ ├── claude-cli.ts # Claude CLI JSON output types
│ └── openai.ts # OpenAI API types
├── adapter/
│ ├── openai-to-cli.ts # Convert OpenAI requests → CLI format
│ └── cli-to-openai.ts # Convert CLI responses → OpenAI format
├── subprocess/
│ └── manager.ts # Claude CLI subprocess management
├── session/
│ └── manager.ts # Session ID mapping
├── server/
│ ├── index.ts # Express server setup
│ ├── routes.ts # API route handlers
│ └── standalone.ts # Entry point
└── index.ts # Package exportsSecurity
- Uses Node.js
spawn()instead of shell execution to prevent injection attacks - No API keys stored or transmitted by this provider
- All authentication handled by Claude CLI's secure keychain storage
- Prompts passed as CLI arguments, not through shell interpretation
Cost Savings Example
| Usage | API Cost | With This Provider | |-------|----------|-------------------| | 1M input tokens/month | ~$15 | $0 (included in Max) | | 500K output tokens/month | ~$37.50 | $0 (included in Max) | | Monthly Total | ~$52.50 | $0 extra |
If you're already paying for Claude Max, this provider lets you use that subscription for API-style access at no additional cost.
Troubleshooting
"Claude CLI not found"
Install and authenticate the CLI:
npm install -g @anthropic-ai/claude-code
claude auth loginStreaming returns immediately with no content
Ensure you're using -N flag with curl (disables buffering):
curl -N -X POST http://localhost:3456/v1/chat/completions ...Server won't start
Check that the Claude CLI is in your PATH:
which claudeContributing
Contributions welcome! Please submit PRs with tests.
License
MIT
Acknowledgments
- Built for use with Clawdbot
- Powered by Claude Code CLI
