File size: 7,188 Bytes
33bbf31
bc5c41c
33bbf31
bc5c41c
 
 
 
33bbf31
 
 
bc5c41c
33bbf31
bc5c41c
 
33bbf31
 
 
 
 
 
 
 
 
 
bc5c41c
 
33bbf31
 
bc5c41c
 
33bbf31
bc5c41c
33bbf31
bc5c41c
33bbf31
bc5c41c
33bbf31
bc5c41c
 
33bbf31
bc5c41c
33bbf31
 
bc5c41c
33bbf31
 
 
 
 
 
bc5c41c
33bbf31
bc5c41c
 
33bbf31
bc5c41c
33bbf31
bc5c41c
33bbf31
 
 
 
 
 
 
bc5c41c
 
 
33bbf31
bc5c41c
33bbf31
bc5c41c
33bbf31
bc5c41c
 
33bbf31
bc5c41c
33bbf31
 
 
bc5c41c
33bbf31
 
 
bc5c41c
 
33bbf31
bc5c41c
33bbf31
bc5c41c
33bbf31
bc5c41c
33bbf31
 
bc5c41c
33bbf31
 
 
 
 
 
 
bc5c41c
 
33bbf31
 
 
bc5c41c
33bbf31
bc5c41c
 
33bbf31
 
 
 
 
 
 
 
 
 
 
bc5c41c
33bbf31
bc5c41c
 
33bbf31
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bc5c41c
33bbf31
 
 
bc5c41c
33bbf31
 
 
 
bc5c41c
 
33bbf31
bc5c41c
33bbf31
 
bc5c41c
 
33bbf31
 
 
 
 
 
 
 
 
bc5c41c
33bbf31
bc5c41c
 
33bbf31
 
bc5c41c
33bbf31
 
 
 
bc5c41c
 
33bbf31
 
 
 
 
 
 
 
 
 
 
bc5c41c
 
 
 
 
 
 
 
33bbf31
bc5c41c
 
33bbf31
bc5c41c
 
 
 
33bbf31
 
 
bc5c41c
33bbf31
bc5c41c
33bbf31
bc5c41c
33bbf31
bc5c41c
33bbf31
bc5c41c
33bbf31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
# MCP Server β€” Context Engineering Toolkit

Headroom's MCP server exposes **compression, retrieval, and observability** as tools that any MCP-compatible AI coding tool can use β€” Claude Code, Cursor, Codex, and more.

## Quick Start

```bash
# Install (MCP is included with proxy, or standalone)
pip install "headroom-ai[proxy]"    # Proxy + MCP tools
pip install "headroom-ai[mcp]"      # MCP tools only (lightweight)

# Register with Claude Code (one-time)
headroom mcp install

# Start Claude Code β€” it now has headroom tools!
claude
```

That's it. Claude Code can now compress content on demand, retrieve originals, and check session stats β€” **no proxy required**.

For automatic compression of ALL traffic, also run the proxy:

```bash
# Terminal 1
headroom proxy

# Terminal 2
ANTHROPIC_BASE_URL=http://127.0.0.1:8787 claude
```

## Tools

The MCP server provides three tools:

### headroom_compress

Compress content on demand. The LLM calls this when it wants to shrink large content before reasoning over it.

```
Tool: headroom_compress

Parameters:
  - content (required): Text to compress (files, JSON, logs, search results, etc.)

Returns:
  - compressed: Compressed text
  - hash: Key for retrieving the original later
  - original_tokens / compressed_tokens / savings_percent
  - transforms: Which compression algorithms were applied
```

Example β€” Claude reads a large file, then compresses it:

```
Claude: Let me compress this large output to save context space.

β†’ headroom_compress(content="[5000 lines of grep results...]")

← {
    "compressed": "[key matches with context...]",
    "hash": "a1b2c3d4e5f6...",
    "original_tokens": 12000,
    "compressed_tokens": 3200,
    "savings_percent": 73.3,
    "transforms": ["router:search:0.27"]
  }
```

The original is stored locally for the session (1-hour TTL). If Claude needs the full content later, it calls `headroom_retrieve`.

### headroom_retrieve

Retrieve original uncompressed content by hash.

```
Tool: headroom_retrieve

Parameters:
  - hash (required): Hash key from compression
  - query (optional): Search within the original to return only matching items

Returns:
  - original_content (full retrieval) or results (search)
  - source: "local" or "proxy"
```

Retrieval checks the local store first (content compressed via `headroom_compress`), then falls back to the proxy's store (content compressed automatically by the proxy). Hashes from either source work transparently.

### headroom_stats

Session compression statistics β€” including sub-agent stats and proxy cache info.

```
Tool: headroom_stats

Returns:
  - compressions, retrievals, tokens_saved, savings_percent
  - estimated_cost_saved_usd
  - recent_events (last 10 compression/retrieval events)
  - sub_agents (stats from sub-agent MCP instances, if any)
  - combined (main + sub-agent totals)
  - proxy (request count, cache hits, cost saved β€” if proxy is running)
```

Sub-agent stats are aggregated via a shared stats file (`~/.headroom/session_stats.jsonl`). Each MCP server instance (main session and sub-agents) writes events there, and `headroom_stats` reads across all of them.

## Architecture

### MCP Only (no proxy)

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Claude Code / Cursor / Codex               β”‚
β”‚                                              β”‚
β”‚  LLM calls headroom_compress on demand       β”‚
β”‚  ↓                                           β”‚
β”‚  Compression happens locally in MCP process  β”‚
β”‚  Original stored in local CompressionStore   β”‚
β”‚  ↓                                           β”‚
β”‚  LLM calls headroom_retrieve when needed     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

### MCP + Proxy (full setup)

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Claude Code                                 β”‚
β”‚                                              β”‚
β”‚  1. Sends request ──→ Proxy (auto-compress)  β”‚
β”‚  2. Gets response with compressed outputs    β”‚
β”‚  3. Can call headroom_compress for more      β”‚
β”‚  4. headroom_retrieve checks:                β”‚
β”‚     local store β†’ proxy store                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β”‚ MCP (stdio)
                   β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Headroom MCP Server                         β”‚
β”‚  β”œβ”€β”€ headroom_compress  (local compression)  β”‚
β”‚  β”œβ”€β”€ headroom_retrieve  (local + proxy)      β”‚
β”‚  └── headroom_stats     (aggregated stats)   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

No double-compression: the proxy compresses at the HTTP level (before the LLM sees content). MCP tools operate after the LLM receives content. They don't touch the same data.

## CLI Commands

### Install

```bash
headroom mcp install                              # Default setup
headroom mcp install --proxy-url http://host:9000  # Custom proxy URL
headroom mcp install --force                       # Overwrite existing
```

### Status

```bash
headroom mcp status
```

```
Headroom MCP Status
========================================
MCP SDK:        βœ“ Installed
Claude Config:  βœ“ Configured
                /Users/you/.claude/mcp.json
Proxy URL:      http://127.0.0.1:8787
Proxy Status:   βœ“ Running at http://127.0.0.1:8787
```

### Uninstall

```bash
headroom mcp uninstall
```

### Debug

```bash
headroom mcp serve --debug
```

## Cross-Tool Compatibility

The MCP server works with any MCP-compatible host:

| Tool | MCP Support | Setup |
|------|-------------|-------|
| Claude Code | Native | `headroom mcp install` |
| Cursor | Supported | Add to Cursor MCP settings |
| Codex | If supported | Configure MCP server |
| Any MCP host | Yes | Point to `headroom mcp serve` |

## Troubleshooting

### "MCP SDK not installed"

```bash
pip install "headroom-ai[mcp]"
```

### "Proxy not running" (when using proxy features)

```bash
headroom proxy  # In another terminal
```

### "Entry not found or expired"

- Content compressed via `headroom_compress`: stored for 1 hour (session TTL)
- Content compressed by the proxy: stored for 5 minutes (proxy TTL)
- The proxy must be running for proxy-compressed content

### Claude doesn't see headroom tools

1. Check: `headroom mcp status`
2. Restart Claude Code after installing MCP
3. Verify with `/mcp` in Claude Code β€” should show 3 headroom tools

### Sub-agent stats not showing

Sub-agent stats appear in `headroom_stats` only after sub-agents have run compressions. The shared stats file is at `~/.headroom/session_stats.jsonl`.