# 1rgs/claude-code-proxy architecture

> Architecture diagram of the GitHub repository 1rgs/claude-code-proxy, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/1rgs/claude-code-proxy
- Repository: https://github.com/1rgs/claude-code-proxy

## Overview

This is a FastAPI proxy that accepts Anthropic Messages API requests and routes them to OpenAI, Gemini, or Anthropic through LiteLLM, translating request and response formats. Its principal workflow supports both streaming and non-streaming messages, including tool use; a separate endpoint handles token-count requests. The README documents provider selection, model mapping, and Vertex AI authentication. The excerpts show only parts of server.py, so internal helper wiring beyond the documented workflow is not detailed.

Main entry points: [`server.py`](https://github.com/1rgs/claude-code-proxy/blob/main/server.py) (Messages endpoint)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Anthropic API"]
  node_messages["Messages endpoint<br/>[server.py]"]
  node_token_count["Token-count endpoint<br/>[server.py]"]
  node_request_schema["Request schemas<br/>[server.py]"]
end

subgraph group_translation["Format Translation"]
  node_request_translation["Request conversion<br/>[server.py]"]
  node_tool_conversion["Tool conversion<br/>[server.py]"]
  node_response_conversion["Response conversion<br/>[server.py]"]
  node_stream_events["Streaming events<br/>[server.py]"]
end

subgraph group_routing["Model Routing"]
  node_model_mapping["Model mapping<br/>[server.py]"]
  node_provider_config["Provider configuration<br/>[server.py]"]
  node_litellm["LiteLLM<br/>[server.py]"]
end

node_client(("Anthropic client"))
node_openai["OpenAI API"]
node_gemini["Gemini / Vertex AI"]
node_anthropic["Anthropic API"]

node_client -->|"sends messages"| node_messages
node_client -->|"counts tokens"| node_token_count
node_messages -->|"validates"| node_request_schema
node_messages -->|"selects model"| node_model_mapping
node_messages -->|"converts request"| node_request_translation
node_request_translation -->|"converts tools"| node_tool_conversion
node_messages -->|"dispatches request"| node_litellm
node_provider_config -->|"configures"| node_model_mapping
node_litellm -->|"calls"| node_openai
node_litellm -.->|"calls"| node_gemini
node_litellm -.->|"calls"| node_anthropic
node_messages -->|"converts response"| node_response_conversion
node_messages -->|"formats stream"| node_stream_events
node_token_count -->|"checks model"| node_model_mapping

click node_messages "https://github.com/1rgs/claude-code-proxy/blob/main/server.py"
click node_token_count "https://github.com/1rgs/claude-code-proxy/blob/main/server.py"
click node_request_schema "https://github.com/1rgs/claude-code-proxy/blob/main/server.py"
click node_request_translation "https://github.com/1rgs/claude-code-proxy/blob/main/server.py"
click node_tool_conversion "https://github.com/1rgs/claude-code-proxy/blob/main/server.py"
click node_model_mapping "https://github.com/1rgs/claude-code-proxy/blob/main/server.py"
click node_provider_config "https://github.com/1rgs/claude-code-proxy/blob/main/server.py"
click node_litellm "https://github.com/1rgs/claude-code-proxy/blob/main/server.py"
click node_response_conversion "https://github.com/1rgs/claude-code-proxy/blob/main/server.py"
click node_stream_events "https://github.com/1rgs/claude-code-proxy/blob/main/server.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_messages,node_token_count,node_request_schema,node_client toneBlue
class node_request_translation,node_tool_conversion,node_response_conversion,node_stream_events toneAmber
class node_model_mapping,node_provider_config,node_litellm,node_openai,node_anthropic toneMint
class node_gemini toneIndigo
```

## Components

### Anthropic API

- [Messages endpoint](https://github.com/1rgs/claude-code-proxy/blob/main/server.py): `server.py`
- [Token-count endpoint](https://github.com/1rgs/claude-code-proxy/blob/main/server.py): `server.py`
- [Request schemas](https://github.com/1rgs/claude-code-proxy/blob/main/server.py): `server.py`

### Format Translation

- [Request conversion](https://github.com/1rgs/claude-code-proxy/blob/main/server.py): `server.py`
- [Tool conversion](https://github.com/1rgs/claude-code-proxy/blob/main/server.py): `server.py`
- [Response conversion](https://github.com/1rgs/claude-code-proxy/blob/main/server.py): `server.py`
- [Streaming events](https://github.com/1rgs/claude-code-proxy/blob/main/server.py): `server.py`

### Model Routing

- [Model mapping](https://github.com/1rgs/claude-code-proxy/blob/main/server.py): `server.py`
- [Provider configuration](https://github.com/1rgs/claude-code-proxy/blob/main/server.py): `server.py`
- [LiteLLM](https://github.com/1rgs/claude-code-proxy/blob/main/server.py): `server.py`

### Other components

- **Anthropic client**
- **OpenAI API**
- **Gemini / Vertex AI**
- **Anthropic API**

## Connections

- Anthropic client → Messages endpoint: sends messages
- Anthropic client → Token-count endpoint: counts tokens
- Messages endpoint → Request schemas: validates
- Messages endpoint → Model mapping: selects model
- Messages endpoint → Request conversion: converts request
- Request conversion → Tool conversion: converts tools
- Messages endpoint → LiteLLM: dispatches request
- Provider configuration → Model mapping: configures
- LiteLLM → OpenAI API: calls
- LiteLLM → Gemini / Vertex AI: calls
- LiteLLM → Anthropic API: calls
- Messages endpoint → Response conversion: converts response
- Messages endpoint → Streaming events: formats stream
- Token-count endpoint → Model mapping: checks model
