fleets
v0.2.1
Published
Fleets — Bloomberg-style multi-site GA4 + Cloudflare + GSC terminal CLI + MCP server
Maintainers
Readme
fleets
Terminal CLI for Fleets. Per-site commands mirror the app UI tabs at https://fleets.run/app/<slug>/<tab>.
Install
npm install -g fleetsAuthenticate
fleets loginPicks between two methods:
- browser (default) — device flow: CLI prints a URL + 8-character code, auto-opens your browser, you click authorize, CLI finishes automatically.
- paste a token — mint one in app → account → cli, paste it in.
Skip the prompt with a flag:
fleets login --browser # force device flow
fleets login --paste # force token paste
fleets login --token fl_xxxxxxxxxxxxxxxx # paste in one shot (CI)
export FLEETS_TOKEN=fl_xxxxxxxxxxxxxxxx # skip login entirelySlug-first dispatch
The most intuitive way to run commands is to put the site slug first, like you're "inside" that site:
fleets fightbets # GA4 summary (defaults to stats)
fleets fightbets sources # top traffic sources
fleets fightbets funnel session_start view # conversion funnel
fleets fightbets seo --range 30d # GSC summary, last 30 days
fleets fightbets open settings # print app URLThe legacy form fleets <command> <slug> (e.g. fleets sources fightbets) still works.
Commands
Setup
| Command | Description |
|---|---|
| fleets login | Browser device-flow auth (no paste) |
| fleets add <domain> [--detect] | Create a site; --detect auto-links GA4 + GSC |
| fleets connect <slug> | Auto-detect GA4 + GSC via service account |
| fleets connect <slug> --property <id> | Set GA4 property explicitly |
| fleets connect <slug> --gsc <site-url> | Set GSC site explicitly |
Analytics (per-site)
All accept --range (default 7d) and --json. Commands with top-N tables also accept --limit.
| Command | Tab | Data source |
|---|---|---|
| fleets list | — | All your sites with sparkline + Δ7d |
| fleets <slug> / fleets stats <slug> | day | GA4 summary |
| fleets <slug> sources | sources | GA4 traffic sources |
| fleets <slug> campaigns | campaigns | GA4 UTM campaigns |
| fleets <slug> referrals | referrals | GA4 referrals |
| fleets <slug> landers | landers | GA4 landing pages |
| fleets <slug> events | events | GA4 events |
| fleets <slug> users | users | GA4 country + device breakdown |
| fleets <slug> funnel <step1> <step2>… | funnel | GA4 funnel |
| fleets <slug> seo | seo | Google Search Console |
| fleets <slug> edge | edge | Cloudflare Analytics |
| fleets <slug> speed | speed | PageSpeed Insights |
Utility
| Command | Description |
|---|---|
| fleets <slug> export | Daily GA4 CSV/JSON export |
| fleets <slug> query "<text>" | Natural-language analytics query |
| fleets <slug> open [tab] | Print the app URL for a site |
MCP server
The same package ships an MCP server, fleets-mcp,
so agents (Claude Code, Claude Desktop, Cursor, …) can pull your live Fleets
analytics as tools. It reuses the CLI's auth — run fleets login once (or set
FLEETS_TOKEN) and the MCP server picks up the same token from ~/.fleets/config.json.
Add it to a client
Claude Code:
claude mcp add fleets -- fleets-mcpClaude Desktop / Cursor (claude_desktop_config.json or .cursor/mcp.json):
{
"mcpServers": {
"fleets": {
"command": "fleets-mcp"
}
}
}No global install? Use npx:
{
"mcpServers": {
"fleets": {
"command": "npx",
"args": ["-y", "-p", "fleets", "fleets-mcp"]
}
}
}If you authenticate via env instead of fleets login, add
"env": { "FLEETS_TOKEN": "fl_xxx" } to the server entry.
Tools
All read-only except log_change (writes a change-log entry). Every analytics
tool takes a slug (from list_sites) and an optional range (7d, 30d, 24h).
| Tool | What it returns |
|---|---|
| list_sites | All sites + connected sources (GA4 / Cloudflare / GSC) — start here |
| stats | GA4 summary: sessions, users, pageviews, events, engagement, bounce |
| sources · campaigns · referrals · landers · events | GA4 breakdowns (accept limit) |
| users · devices · demographics | GA4 audience breakdowns |
| funnel | GA4 conversion funnel across steps (2+) |
| seo | Google Search Console summary |
| edge | Cloudflare edge analytics (bots, humans, cache) |
| speed | PageSpeed Insights + Core Web Vitals |
| insights | AI-ready signals worth investigating (optionally per site) |
| ask | Natural-language question answered server-side with citations |
| log_change · recall | Write / read the per-site change log |
Environment variables
| Variable | Description |
|---|---|
| FLEETS_TOKEN | Personal access token. Skip fleets login entirely — useful for CI. Overrides ~/.fleets/config.json. |
Range format
All --range flags accept:
7d— last 7 days30d— last 30 days90d— last 90 days24h— last 24 hours (rounds to 1 day)
Requirements
- Node.js >= 22 (LTS)
- Works on macOS, Linux, Windows
