An agent-first CLI for RevenueCat. Bind a repo to one RevenueCat project, then let Codex, Claude Code, Cursor, CI, and shell scripts operate it through exact commands, JSON output, dry-runs, and replayable logs.
brew install akshitkrnagpal/tap/revcat
# or, from source (Go 1.26+)
go install github.com/akshitkrnagpal/revcat/cmd/revcat@latestPre-built binaries for every platform are on the Releases page.
revcat auth login
cd ~/your-repo && revcat init # bind this repo to one project + selected apps
revcat doctor # verify auth + project context
revcat offerings list # table in a terminal, JSON when pipedRevenueCat ships a dashboard, a REST API, and an official MCP server. Those are useful surfaces, but agents working inside code repos need something more durable than a conversational tool call.
They need project context that travels with the repo, commands that can be replayed, output that can be parsed, and health checks that can fail CI.
One browser OAuth login writes a global profile to ~/.revcat/config.json. Running revcat init inside a repo writes:
revcat.toml(committed): project id + optional app ids.revcat/config.json(gitignored, mode 0600): local credential + project id
After that, every revcat command run inside the directory inherits the right RevenueCat project. Agents and sandboxes can work from the repo without guessing which project or app they are touching.
revcat auth login
revcat projects create --name Acme
revcat apps create --type app_store --bundle com.acme.app
cd ~/your-repo && revcat initrevcat gives agents and humans a deterministic ops surface for RevenueCat:
- create projects and add, update, or remove apps from the terminal
- bind a repo to one project plus selected apps with
revcat init - debug "paid but no premium" support tickets from a store transaction id
- inspect offerings, packages, products, entitlements, paywalls, SDK keys, and StoreKit config
- ship paywall config changes and set the current offering in one command
- grant, revoke, refund, transfer, and inspect customer state
- check webhooks, audit logs, charts, metrics, and project configuration
- give CI, scripts, and agents JSON output, dry-runs, and exit codes they can trust
Output is a colored table when you're at a terminal and JSON when you're piping into a script - no --json ceremony.
The official RevenueCat MCP is a natural-language setup surface. revcat is the repo-pinned operations surface for agents that need exact commands, logs, JSON, and CI gates.
revcat authenticates against RevenueCat via OAuth (PKCE). One browser login writes a global profile to ~/.revcat/config.json (mode 0600); running revcat init inside a repo writes a per-directory .revcat/config.json (gitignored, mode 0600) so agents and sandboxes operating in that directory inherit the credential without touching the global file.
revcat auth login # browser OAuth
cd ~/your-repo && revcat init # binds this repo to a project
revcat auth status --validate # confirm
revcat auth doctor # diagnose| Tier | Path | Used when |
|---|---|---|
| global file | ~/.revcat/config.json (mode 0600) |
written by revcat auth login |
| local file | ./.revcat/config.json (walked up) |
written by revcat init |
Resolution: REVCAT_REFRESH_TOKEN env > walked-up local file > global active profile.
revcat auth login --name work
revcat auth login --name personal
revcat auth use personal # default for global commands
revcat --profile work auth status # one-shot overrideexport REVCAT_REFRESH_TOKEN=rtk_...
export REVCAT_PROJECT_ID=proj_...
revcat offerings listrevcat synthesizes a virtual profile, refreshes tokens in-memory, no login flow. Pull the refresh token from your CI secret manager.
revcat projects list | view | create
revcat apps list | view | public-keys | storekit-config | create | update | delete
revcat entitlements list | view | create | update | delete | archive | unarchive
products | attach | detach
revcat offerings list | view | preview | create | update | delete | archive | unarchive
set-current
revcat packages list | view | create | update | delete | products | attach | detach
revcat products list | view | create | update | delete | archive | unarchive
push-to-store
revcat paywalls list | view | create | delete
revcat subscribers info | list | create | delete
grant | revoke | transfer
attributes | invoices
refund (delegates to subscriptions)
revcat subscriptions view | transactions | entitlements
cancel | refund | management-url | search
revcat purchases view | entitlements | refund | search
revcat invoices view
revcat publish offering <id> [--paywall ./paywall.json] [--current] [-y] [--dry-run]
revcat metrics overview
revcat charts get <name> | options <name>
revcat audit-logs list
revcat collaborators list
revcat webhooks list | view | create | update | delete
revcat virtual-currencies list | view | create | update | delete | archive | unarchive
revcat init (run inside a repo to bind project context)
revcat doctor
revcat auth login | status | doctor | use | list | logout
revcat completion bash | zsh | fish
revcat version
revcat ships four Agent Skills (open standard) so Claude Code, Cursor, and Codex can compose revcat commands accurately:
revcat-getting-started- install, auth, top-level command maprevcat-commands- real syntax + examples for every subcommandrevcat-troubleshooting- common errors and fixesrevcat-storefront-debug- 7-step diagnostic for "the SDK sees 0 packages from my offering"
Install via skills.sh (auto-detects your agent):
npx skills add akshitkrnagpal/revcatOr manually - see skills/README.md for the Claude Code / Cursor / Codex paths.
By default, output is TTY-aware:
- Interactive terminal: tables (lipgloss) with color
- Piped or in CI: JSON, one object per row
Override with --output table|json|csv|markdown or env REVCAT_DEFAULT_OUTPUT. Use --pretty for indented JSON.
Debug a customer report from support:
revcat subscribers info app_user_123Find a subscription from a store id (App Store transaction id, Play purchase token, Stripe sub_):
revcat subscriptions search ABC123XYZPromote a new paywall to current:
revcat publish offering pro --paywall ./paywalls/pro.jsonGrant a complimentary entitlement:
revcat subscribers grant app_user_123 premium -d 7dWire entitlement <-> product:
revcat entitlements attach premium prod_app_monthly prod_app_annualShow the dashboard headline numbers:
revcat metrics overviewAudit who changed what:
revcat audit-logs listREVCAT_DEBUG=api revcat metrics overview # logs full request/response (token redacted)
revcat doctor # top-level health check
revcat auth doctor # auth-specificFull docs at https://revcat.vercel.app - install, quickstart, every command, configuration, and guides. Source lives in docs/.
All demo GIFs are hermetic recordings backed by local fixtures in demo/mock-bin. They show real command syntax without touching a live RevenueCat project.
| Flow | Demo |
|---|---|
| Agent-first repo ops | agent-first.gif |
| Ship a paywall update | demo.gif |
| Bootstrap project context | init.gif |
| Debug and fix customer access | customer-debug.gif |
| Inspect catalog wiring | catalog.gif |
| Monitor launch operations | ops.gif |
See demo/README.md to regenerate them with VHS.
MIT


