Skip to main content
Glama
mvacaporale

Claude Usage MCP Server

by mvacaporale
README.md
# Claude Usage MCP Server

An MCP (Model Context Protocol) server that fetches your Claude usage data from the claude.ai dashboard, with automated daily tracking.

## Features

- Authenticate with Claude via browser login
- Fetch session and weekly usage limits from the settings page
- Persistent session with Cloudflare bypass
- Automated daily usage tracking via launchd
- Deduplication - one record per day, always up to date
- Integrates directly with Claude Code

## Installation

```bash
# Clone the repo
git clone https://github.com/mvacaporale/claude-usage-mcp.git
cd claude-usage-mcp

# Install dependencies
uv sync

# Install Playwright browsers
uv run playwright install chromium
```

## Configuration

Add to your Claude Code MCP settings (`~/.claude/settings.json`):

```json
{
  "mcpServers": {
    "claude-usage": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/claude-usage-mcp", "python", "server.py"]
    }
  }
}
```

## Usage

### First Time Setup

1. In Claude Code, run the `claude_login` tool
2. A browser window will open - complete Cloudflare verification and log in to Claude
3. After login, the session is saved automatically

### Fetching Usage

There are multiple ways to fetch your usage:

#### 1. Via MCP Tool (in Claude Code)
Simply ask Claude to check your usage, or use the `get_claude_usage` tool directly.

#### 2. Via launchctl (manual trigger)
```bash
launchctl start com.claude.usage-fetcher
```

#### 3. Via script directly
```bash
cd /path/to/claude-usage-mcp
.venv/bin/python fetch_usage.py
```

### Automated Daily Tracking

A launchd job automatically fetches usage:
- **Daily at 11:00 PM**
- **On login/wake** (catches up if Mac was asleep)

Multiple runs in a day update the same record - you'll always have exactly one entry per day.

#### Setup Automation

```bash
# Copy the plist to LaunchAgents (if not already there)
cp com.claude.usage-fetcher.plist ~/Library/LaunchAgents/

# Load the job
launchctl load ~/Library/LaunchAgents/com.claude.usage-fetcher.plist
```

#### Manage Automation

```bash
# Check if job is loaded
launchctl list | grep claude

# Trigger manually
launchctl start com.claude.usage-fetcher

# Disable
launchctl unload ~/Library/LaunchAgents/com.claude.usage-fetcher.plist

# Re-enable
launchctl load ~/Library/LaunchAgents/com.claude.usage-fetcher.plist

# View logs
tail -f usage-fetcher.log
```

## Tools

| Tool | Description |
|------|-------------|
| `get_claude_usage` | Fetch usage data from the Claude dashboard |
| `claude_login` | Open browser window for authentication |
| `check_claude_auth` | Check if current session is authenticated |

## Data Format

Usage history is stored in `usage-history.json`:

```json
[
  {
    "success": true,
    "timestamp": "2026-01-25T23:00:00.000000",
    "session_percent": 19,
    "session_resets_in": "2 hr 15 min",
    "weekly_all_models_percent": 10,
    "weekly_resets": "Thu 10:00 AM",
    "weekly_sonnet_percent": 0
  }
]
```

## How It Works

1. Uses Playwright with a persistent Chrome profile
2. Bypasses Cloudflare by running in headed mode (positioned offscreen)
3. Stores browser data in `browser-data/` directory
4. Scrapes the usage page and returns structured data

## Security

- Browser data stored locally (never committed to git)
- No credentials stored - uses browser session cookies
- Login happens in your own browser window
- All sensitive files are gitignored

## Troubleshooting

**Cloudflare blocking**: Run `claude_login` to re-authenticate manually.

**Browser data locked**: If you see lock errors, restart Claude Code (`/mcp` to reconnect).

**Stale session**: Delete `browser-data/` and `browser-data-scheduled/` directories, then run `claude_login` again.

TDQS

A3.8/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap: authentication checking, authentication initiation, and usage data retrieval. The descriptions make it easy to differentiate when to use each tool, avoiding misselection.

Naming Consistency5/5

All tools follow a consistent snake_case pattern with clear verb_noun structure (check_claude_auth, claude_login, get_claude_usage). The naming is predictable and readable throughout the set.

Tool Count3/5

Three tools is borderline thin for a usage monitoring server, as it covers only authentication and data fetching. While functional, additional tools for configuration, historical data, or notifications would make the scope more complete.

Completeness4/5

The tools cover the core workflow of authentication and usage retrieval well, with no dead ends. A minor gap exists in lacking tools for managing authentication sessions (e.g., logout) or advanced usage analytics, but agents can work around this.

Maintenance

ActivityInactive
ResponsivenessNo issues