Use your Claude Max subscription with any OpenAI-compatible client. Wraps Claude Code CLI as an OpenAI-compatible API server.
npm install claude-max-api-proxyUse 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.
| 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.
```
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 App
- 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
1. Claude Max subscription ($200/month) — Subscribe here
2. Claude Code CLI installed and authenticated:
`bash`
npm install -g @anthropic-ai/claude-code
claude auth login
`bashClone the repository
git clone https://github.com/anthropics/claude-code-cli-provider.git
cd claude-code-cli-provider
Usage
$3
`bash
node dist/server/standalone.js
`The server runs at
http://localhost:3456 by default.$3
`bash
Health check
curl http://localhost:3456/healthList models
curl http://localhost:3456/v1/modelsChat 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
$3
Clawdbot has built-in support for Claude CLI OAuth! Check your config:
`bash
clawdbot models status
`If you see
anthropic:claude-cli=OAuth, you're already using your Max subscription.$3
Add to your Continue config:
`json
{
"models": [{
"title": "Claude (Max)",
"provider": "openai",
"model": "claude-opus-4",
"apiBase": "http://localhost:3456/v1",
"apiKey": "not-needed"
}]
}
`$3
`python
from openai import OpenAIclient = 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 exports
`Security
- 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 interpretationCost 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
$3
Install and authenticate the CLI:
`bash
npm install -g @anthropic-ai/claude-code
claude auth login
`$3
Ensure you're using
-N flag with curl (disables buffering):
`bash
curl -N -X POST http://localhost:3456/v1/chat/completions ...
`$3
Check that the Claude CLI is in your PATH:
`bash
which claude
``Contributions welcome! Please submit PRs with tests.
MIT
- Built for use with Clawdbot
- Powered by Claude Code CLI